YSTest: ywidget.h 源文件

YSTest PreAlpha_b500_20140530 The YSLib Test Project

- 首页
- 相关页面
- 模块
- 命名空间
- 类
- 文件

- 文件列表
- 文件成员

全部 类 命名空间 文件 函数 变量 类型定义 枚举 枚举值 友元 宏定义 组 页
ywidget.h
浏览该文件的文档.
1 /*
2 © 2009-2014 FrankHB.
3
4 This file is part of the YSLib project, and may only be used,
5 modified, and distributed under the terms of the YSLib project
6 license, LICENSE.TXT. By continuing to use, modify, or distribute
7 this file you indicate that you have read the license and
8 understand and accept it fully.
9 */
10
28 #ifndef YSL_INC_UI_ywidget_h_
29 #define YSL_INC_UI_ywidget_h_ 1
30
31 #include "YModules.h"
32 #include YFM_YSLib_UI_YFocus
33 #include <ystdex/any_iterator.hpp> // for ystdex::any_input_iterator;
34 #include YFM_YSLib_UI_YWidgetView
35 #include YFM_YSLib_UI_YRenderer
36
37 namespace YSLib
38 {
39
40 namespace UI
41 {
42
52 using WidgetIterator = ystdex::any_input_iterator<IWidget>;
57 using WidgetRange = pair<WidgetIterator, WidgetIterator>;
58
59
65 DeclI(YF_API, IWidget)
71 DeclIEntry(WidgetRange GetChildren())
76 DeclIEntry(AController& GetController() const)
81 DeclIEntry(Renderer& GetRenderer() const)
87 DeclIEntry(View& GetView() const)
88 EndDecl
89
91
92
96 inline PDefH(bool, IsVisible, const IWidget& wgt)
97 ImplRet(wgt.GetView().IsVisible())
98
103 bool
104 YF_API Contains(const IWidget&, SPos, SPos);
109 inline PDefH(bool, Contains, const IWidget& wgt, const Point& pt)
110 ImplRet(Contains(wgt, pt.X, pt.Y))
111
116 bool
117 YF_API ContainsVisible(const IWidget& wgt, SPos x, SPos y);
122 inline PDefH(bool, ContainsVisible, const IWidget& wgt, const Point& pt)
123 ImplRet(ContainsVisible(wgt, pt.X, pt.Y))
124
131 inline PDefH(IWidget*, FetchContainerPtr, const IWidget& wgt)
132 ImplRet(wgt.GetView().ContainerPtr)
133
140 inline PDefH(IWidget*, FetchFocusingPtr, const IWidget& wgt)
141 ImplRet(wgt.GetView().FocusingPtr)
142
148 inline PDefH(const Point&, GetLocationOf, const IWidget& wgt)
149 ImplRet(wgt.GetView().GetLocation())
150
156 inline PDefH(const Size&, GetSizeOf, const IWidget& wgt)
157 ImplRet(wgt.GetView().GetSize())
158
163 inline PDefH(Rect, GetBoundsOf, const IWidget& wgt)
164 ImplRet({GetLocationOf(wgt), GetSizeOf(wgt)})
165
171 YF_API void
172 SetBoundsOf(IWidget&, const Rect&);
173
178 inline PDefH(void, SetContainerPtrOf, IWidget& wgt, IWidget* pCon = {})
179 ImplExpr(wgt.GetView().ContainerPtr = pCon)
180
185 YF_API void
186 SetInvalidationOf(IWidget&);
187
193 YF_API void
194 SetInvalidationToParent(IWidget&);
195
201 YF_API void
202 SetLocationOf(IWidget&, const Point&);
203
209 YF_API void
210 SetSizeOf(IWidget&, const Size&);
211
216 inline PDefH(void, SetVisibleOf, IWidget& wgt, bool b)
217 ImplExpr(wgt.GetView().SetVisible(b))
218
219
226 YF_API void
227 Close(IWidget&);
228
234 YF_API void
235 Hide(IWidget&);
236
241 YF_API void
242 Invalidate(IWidget&, const Rect&);
247 inline PDefH(void, Invalidate, IWidget& wgt)
248 ImplExpr(Invalidate(wgt, GetSizeOf(wgt)))
249
250
252 YF_API void
254 InvalidateAll(IWidget&, const Rect&);
256 inline PDefH(void, InvalidateAll, IWidget& wgt)
257 ImplExpr(InvalidateAll(wgt, GetSizeOf(wgt)))
258
260 YF_API void
261 InvalidateChildren(IWidget&, const Rect&);
263 inline PDefH(void, InvalidateChildren, IWidget& wgt)
264 ImplExpr(InvalidateChildren(wgt, GetSizeOf(wgt)))
266
273 YF_API void
274 InvalidateParent(IWidget&);
275
277
278
282 YF_API void
283 InvalidateVisible(IWidget&, const Rect&);
288 inline PDefH(void, InvalidateVisible, IWidget& wgt)
289 ImplExpr(InvalidateVisible(wgt, GetSizeOf(wgt)))
290
297 YF_API void
298 InvalidateVisibleParent(IWidget&);
300
311 YF_API void
312 PaintChild(IWidget& wgt, PaintEventArgs&& e);
322 YF_API Rect
323 PaintChild(IWidget& wgt, const PaintContext& pc);
324
329 YF_API void
330 PaintVisibleChild(IWidget&, PaintEventArgs&);
331
338 YF_API void
339 RequestToFront(IWidget&);
340
347 YF_API void
348 Show(IWidget&);
350
351
356 class YF_API Widget : implements IWidget
357 {
358 private:
364 unique_ptr<View> view_ptr;
365 unique_ptr<Renderer> renderer_ptr;
366 unique_ptr<AController> controller_ptr;
367
368
369 public:
374 mutable HBrush Background;
375 Color ForeColor = Drawing::ColorSpace::Black;
376
378 explicit
379 Widget(const Rect& = {});
381 explicit
382 Widget(const Rect&, HBrush, Color = Drawing::ColorSpace::Black);
390 template<typename _tView, typename _tRenderer, typename _tController>
391 explicit inline
392 Widget(_tView&& pView_ = make_unique<View>(),
393 _tRenderer&& pRenderer_ = make_unique<Renderer>(),
394 _tController&& pController_ = {})
395 : view_ptr(yforward(pView_)), renderer_ptr(yforward(pRenderer_)),
396 controller_ptr(yforward(pController_)), Background()
397 {
398 YAssertNonnull(view_ptr), YAssertNonnull(renderer_ptr);
399 InitializeEvents();
400 }
404 Widget(const Widget&);
406 DefDelMoveCtor(Widget)
413 virtual
414 ~Widget();
415
416 private:
421 void
422 InitializeEvents();
423
424 public:
426 ImplI(IWidget) DefGetter(override, WidgetRange, Children, WidgetRange())
434 static HBrush
435 MakeBlankBrush();
436 ImplI(IWidget)
437 DefGetter(const override, AController&, Controller, *controller_ptr)
438 DefGetterMem(const ynothrow, SDst, Height, GetView())
439 ImplI(IWidget) DefGetter(const override, Renderer&, Renderer, *renderer_ptr)
440 ImplI(IWidget) DefGetter(const override, View&, View, *view_ptr)
441 DefGetterMem(const ynothrow, SDst, Width, GetView())
442 DefGetterMem(const ynothrow, SPos, X, GetView())
443 DefGetterMem(const ynothrow, SPos, Y, GetView())
444
445 DefSetterMem(SDst, Height, GetView())
446 DefSetterMem(SDst, Width, GetView())
447 DefSetterMem(SDst, X, GetView())
448 DefSetterMem(SDst, Y, GetView())
455 void
456 SetRenderer(unique_ptr<Renderer>);
462 void
463 SetView(unique_ptr<View>&&);
464
476 virtual void
477 Refresh(PaintEventArgs&&);
478 };
479
480 } // namespace UI;
481
482 } // namespace YSLib;
483
484 #endif
485
YSLib::UI::InvalidateParent
void InvalidateParent(IWidget &wgt)
Definition: ywidget.cpp:144
YSLib::UI::GetSizeOf
pt pt Y const IWidget &wgt const IWidget &wgt GetSizeOf
无效化：使相对于部件的子部件的指定区域在直接和间接的窗口缓冲区中无效。
Definition: ywidget.h:156
YSLib::UI::Refresh
void Refresh(PaintEventArgs &&) override
刷新：按指定参数绘制界面并更新状态。
YSLib::UI::GetLocationOf
pt pt Y const IWidget &wgt GetLocationOf
Definition: ywidget.h:148
YModules.h
YSLib::UI::SetLocationOf
YF_API void SetLocationOf(IWidget &, const Point &)
设置部件左上角所在位置（相对于容器的偏移坐标）。
Definition: ywidget.cpp:73
YSLib::UI::AController
控制器抽象类。
Definition: ywgtevt.h:468
implements
#define implements
Definition: YBaseMacro.h:272
YSLib::UI::SetBoundsOf
void SetBoundsOf(IWidget &wgt, const Rect &r)
Definition: ywidget.cpp:53
YSLib::UI::Invalidate
YF_API void Invalidate(IWidget &, const Rect &)
无效化：使相对于部件的指定区域在直接和间接的窗口缓冲区中无效。
Definition: ywidget.cpp:111
YSLib::UI::InvalidateAll
void InvalidateAll(IWidget &wgt, const Rect &bounds)
Definition: ywidget.cpp:124
YSLib::UI::Renderer
部件渲染器。
Definition: yrender.h:46
YSLib::UI::IsVisible
IsVisible
Definition: ywidget.h:96
YF_API
#define YF_API
Definition: Platform.h:64
YSLib::UI::PaintChild
YF_API void PaintChild(IWidget &wgt, PaintEventArgs &&e)
调用指定子部件的 Paint 事件绘制参数指定的事件发送者。
Definition: ywidget.cpp:174
YSLib::UI::Widget::view_ptr
unique_ptr< View > view_ptr
部件视图指针。
Definition: ywidget.h:364
YSLib::UI::SetInvalidationOf
void SetInvalidationOf(IWidget &wgt)
Definition: ywidget.cpp:60
YSLib::UI::SetSizeOf
YF_API void SetSizeOf(IWidget &, const Size &)
设置部件大小。
Definition: ywidget.cpp:83
YSLib::UI::InvalidateVisibleParent
void InvalidateVisibleParent(IWidget &wgt)
Definition: ywidget.cpp:166
YSLib::UI::Hide
YF_API void Hide(IWidget &)
隐藏部件。
Definition: ywidget.cpp:103
platform::SDst
std::uint16_t SDst
屏幕坐标距离。
Definition: Video.h:39
platform::Consoles::Black
Definition: Video.h:460
yforward
#define yforward(_expr)
根据参数类型使用 std::forward 传递对应参数。
Definition: ydef.h:722
DefGetter
#define DefGetter(_q, _t, _n,...)
Definition: YBaseMacro.h:180
YSLib::UI::Show
YF_API void Show(IWidget &)
显示部件。
Definition: ywidget.cpp:206
ImplI
#define ImplI(...)
Definition: YBaseMacro.h:308
YSLib::UI::X
pt X
Definition: ywidget.h:110
DefSetterMem
#define DefSetterMem(_t, _n, _m)
Definition: YBaseMacro.h:200
YSLib::UI::WidgetRange
pair< WidgetIterator, WidgetIterator > WidgetRange
两个部件迭代器组成的左闭右开区间确定的迭代器范围。
Definition: ywidget.h:57
YSLib::UI::PDefH
PDefH(void, Activate, Console &console, Drawing::Color fc=Drawing::ColorSpace::White) ImplExpr(Activate(console
激活：使用指定屏幕、有效性、前景色和默认背景色。
YSLib::UI::PaintVisibleChild
YF_API void PaintVisibleChild(IWidget &, PaintEventArgs &)
调用 PaintChild 指定子部件并合并参数的重绘区域。
Definition: ywidget.cpp:192
YSLib::UI::InvalidateVisible
YF_API void InvalidateVisible(IWidget &, const Rect &)
无效化：使相对于可见的部件的指定区域在直接和间接的窗口缓冲区中无效。
Definition: ywidget.cpp:151
YSLib::UI::Widget::Background
HBrush Background
背景。
Definition: ywidget.h:374
YSLib::Drawing::Point
GBinaryGroup< SPos > Point
屏幕二维点（直角坐标表示）。
Definition: ygdibase.h:235
ImplExpr
#define ImplExpr(...)
Definition: YBaseMacro.h:93
YSLib::UI::ContainsVisible
pt pt Y bool YF_API ContainsVisible(const IWidget &wgt, SPos x, SPos y)
判断点是否在可见部件的可视区域内。
Definition: ywidget.cpp:46
YSLib::UI::GetBoundsOf
pt pt Y const IWidget &wgt const IWidget &wgt const IWidget &wgt GetBoundsOf
Definition: ywidget.h:163
YSLib::UI::wgt
_tWidget & wgt
Definition: ywgtevt.h:596
ynothrow
#define ynothrow
YSLib 无异常抛出保证：若支持 noexcept 关键字， 指定特定的 noexcept 异常规范。
Definition: ydef.h:514
YSLib::UI::Controller
部件控制器。
Definition: ycontrol.h:53
YSLib::Drawing::Rect
屏幕标准矩形：表示屏幕矩形区域。
Definition: ygdibase.h:416
EndDecl
#define EndDecl
Definition: YBaseMacro.h:316
YSLib::Drawing::GBinaryGroup
屏幕二元组。
Definition: ygdibase.h:54
YSLib::UI::SPos
const IWidget &wgt SPos
Definition: ywidget.h:104
YAssertNonnull
#define YAssertNonnull(_expr)
Definition: cassert.h:81
YSLib::UI::HBrush
std::function< void(PaintEventArgs &&)> HBrush
画刷回调函数。
Definition: YComponent.h:104
YSLib::UI::Widget::Widget
Widget(_tView &&pView_=make_unique< View >(), _tRenderer &&pRenderer_=make_unique< Renderer >(), _tController &&pController_={})
构造：使用视图指针、渲染器指针和控制器指针，无背景。
Definition: ywidget.h:392
ystdex::any_input_iterator
动态泛型输入迭代器。
Definition: any_iterator.hpp:236
YSLib::Drawing::Y
p1 p1 Y
Definition: ydraw.h:188
YSLib::UI::View
部件视图。
Definition: ywgtview.h:137
YSLib::UI::Contains
Selected const shared_ptr< ListType > const pair< Color, Color > viewer Contains
Definition: textlist.h:124
platform::Consoles::Color
Color
控制台颜色枚举。
Definition: Video.h:458
YSLib::DeclI
DeclI(YF_API, IResource) EndDeclnamespace Drawing
资源接口。
Definition: yres.h:42
YSLib::UI::ImplRet
const IWidget &wgt ImplRet(wgt.GetView().IsVisible()) bool YF_API Contains(const IWidget &
判断点是否在部件的可视区域内。
YSLib::UI::DefGetterMem
DefGetterMem(const ynothrow, ListType::size_type, SelectedIndex, viewer) SDst GetFullViewHeight() const
取完整视图高。
YSLib::UI::SetInvalidationToParent
YF_API void SetInvalidationToParent(IWidget &)
在容器设置部件的无效区域。
Definition: ywidget.cpp:66
YSLib::UI::RequestToFront
YF_API void RequestToFront(IWidget &)
请求提升至容器前端。
Definition: ywidget.cpp:199
YSLib::Drawing::Width
if(YB_UNLIKELY(r >=sGraphics.Height)) throw std return pBuffer r *sGraphics Width
Definition: ygdibase.cpp:155
DeclIEntry
#define DeclIEntry(_sig)
Definition: YBaseMacro.h:314
YSLib::UI::InvalidateChildren
void InvalidateChildren(IWidget &wgt, const Rect &bounds)
Definition: ywidget.cpp:131
any_iterator.hpp
动态泛型迭代器。
platform::Color
颜色。
Definition: Video.h:339
YSLib::Drawing::Size
屏幕区域大小。
Definition: ygdibase.h:249
YSLib::UI::Widget
部件。
Definition: ywidget.h:356
YSLib::UI::FetchFocusingPtr
pt pt Y FetchFocusingPtr
Definition: ywidget.h:140
YSLib::UI::Close
void Close(IWidget &wgt)
Definition: ywidget.cpp:95
YSLib::UI::Widget::renderer_ptr
unique_ptr< Renderer > renderer_ptr
渲染器指针。
Definition: ywidget.h:365
YSLib::UI::Widget::controller_ptr
unique_ptr< AController > controller_ptr
控制器指针。
Definition: ywidget.h:366
DefDelMoveCtor
#define DefDelMoveCtor(_t)
Definition: YBaseMacro.h:143