YSTest: YWidget.h 源文件

YSTest PreAlpha_b700_20160611 The YSLib Test Project

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

- 文件列表
- 文件成员

YWidget.h
浏览该文件的文档.
1 /*
2 © 2009-2016 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)
73 DeclIEntry(WidgetRange GetChildren())
79 DeclIEntry(AController& GetController() const)
85 DeclIEntry(Renderer& GetRenderer() const)
92 DeclIEntry(AView& GetView() const)
93 EndDecl
94
96
97
101 inline PDefH(bool, IsVisible, const IWidget& wgt)
102 ImplRet(wgt.GetView().IsVisible())
103
108 bool
109 YF_API Contains(const IWidget&, SPos, SPos);
114 inline PDefH(bool, Contains, const IWidget& wgt, const Point& pt)
115 ImplRet(Contains(wgt, pt.X, pt.Y))
116
121 bool
122 YF_API ContainsVisible(const IWidget& wgt, SPos x, SPos y);
127 inline PDefH(bool, ContainsVisible, const IWidget& wgt, const Point& pt)
128 ImplRet(ContainsVisible(wgt, pt.X, pt.Y))
129
136 inline PDefH(observer_ptr<IWidget>, FetchContainerPtr, const IWidget& wgt)
137 ImplRet(wgt.GetView().ContainerPtr)
138
145 inline PDefH(observer_ptr<IWidget>, FetchFocusingPtr, const IWidget& wgt)
146 ImplRet(wgt.GetView().FocusingPtr)
147
153 inline PDefH(Point, GetLocationOf, const IWidget& wgt)
154 ImplRet(wgt.GetView().GetLocation())
155
161 inline PDefH(Size, GetSizeOf, const IWidget& wgt)
162 ImplRet(wgt.GetView().GetSize())
163
168 inline PDefH(Rect, GetBoundsOf, const IWidget& wgt)
169 ImplRet(wgt.GetView().GetBounds())
170
176 YF_API void
177 SetBoundsOf(IWidget&, const Rect&);
178
183 inline PDefH(void, SetContainerPtrOf, IWidget& wgt,
184 observer_ptr<IWidget> p_con = {})
185 ImplExpr(wgt.GetView().ContainerPtr = p_con)
186
191 YF_API void
192 SetInvalidationOf(IWidget&);
193
199 YF_API void
200 SetInvalidationToParent(IWidget&);
201
207 YF_API void
208 SetLocationOf(IWidget&, const Point&);
209
215 YF_API void
216 SetSizeOf(IWidget&, const Size&);
217
222 inline PDefH(void, SetVisibleOf, IWidget& wgt, bool b)
223 ImplExpr(wgt.GetView().SetVisible(b))
224
231 YF_API void
232 Close(IWidget&);
233
239 YF_API void
240 Hide(IWidget&);
241
246 YF_API void
247 Invalidate(IWidget&, const Rect&);
252 inline PDefH(void, Invalidate, IWidget& wgt)
253 ImplExpr(Invalidate(wgt, GetSizeOf(wgt)))
254
255
257 YF_API void
259 InvalidateAll(IWidget&, const Rect&);
261 inline PDefH(void, InvalidateAll, IWidget& wgt)
262 ImplExpr(InvalidateAll(wgt, GetSizeOf(wgt)))
263
265 YF_API void
266 InvalidateChildren(IWidget&, const Rect&);
268 inline PDefH(void, InvalidateChildren, IWidget& wgt)
269 ImplExpr(InvalidateChildren(wgt, GetSizeOf(wgt)))
271
278 YF_API void
279 InvalidateParent(IWidget&);
280
282
283
287 YF_API void
288 InvalidateVisible(IWidget&, const Rect&);
293 inline PDefH(void, InvalidateVisible, IWidget& wgt)
294 ImplExpr(InvalidateVisible(wgt, GetSizeOf(wgt)))
295
302 YF_API void
303 InvalidateVisibleParent(IWidget&);
305
316 YF_API void
317 PaintChild(IWidget& wgt, PaintEventArgs&& e);
327 YF_API Rect
328 PaintChild(IWidget& wgt, const PaintContext& pc);
329
334 YF_API void
335 PaintChildAndCommit(IWidget&, PaintEventArgs&);
336
341 inline void
342 PaintVisibleChildAndCommit(IWidget& wgt, PaintEventArgs& e)
343 ImplExpr(IsVisible(wgt) ? PaintChildAndCommit(wgt, e) : void())
344
351 YF_API void
352 RequestToFront(IWidget&);
353
360 YF_API void
361 Show(IWidget&);
363
364
369 class YF_API Widget : implements IWidget
370 {
371 private:
381 unique_ptr<AView> view_ptr;
382 unique_ptr<Renderer> renderer_ptr;
383 unique_ptr<AController> controller_ptr;
384
385
386 public:
391 mutable HBrush Background;
392
394 explicit
395 Widget(const Rect& = {});
397 explicit
398 Widget(const Rect&, HBrush);
406 template<typename _tView, typename _tRenderer, typename _tController>
407 explicit inline
408 Widget(_tView&& pView_ = make_unique<View>(),
409 _tRenderer&& pRenderer_ = make_unique<Renderer>(),
410 _tController&& pController_ = {})
411 : view_ptr(yforward(pView_)), renderer_ptr(yforward(pRenderer_)),
412 controller_ptr(yforward(pController_)), Background()
413 {
414 YAssertNonnull(view_ptr), YAssertNonnull(renderer_ptr);
415 InitializeEvents();
416 }
420 Widget(const Widget&);
422 DefDelMoveCtor(Widget)
429 virtual
430 ~Widget();
431
432 private:
437 void
438 InitializeEvents();
439
440 public:
442 DefGetter(ImplI(IWidget), WidgetRange, Children, WidgetRange())
450 static HBrush
451 MakeBlankBrush();
452 DefGetter(const ImplI(IWidget), AController&, Controller,
453 Deref(controller_ptr))
454 DefGetterMem(const ynothrow, SDst, Height, GetView())
455 DefGetter(const ImplI(IWidget), Renderer&, Renderer, Deref(renderer_ptr))
457 DefGetter(const ImplI(IWidget), AView&, View, Deref(view_ptr))
458 DefGetterMem(const ynothrow, SDst, Width, GetView())
459 DefGetterMem(const ynothrow, SPos, X, GetView())
460 DefGetterMem(const ynothrow, SPos, Y, GetView())
461
462 DefSetterMem(, SDst, Height, GetView())
463 DefSetterMem(, SDst, Width, GetView())
465 DefSetterMem(, SPos, X, GetView())
467 DefSetterMem(, SPos, Y, GetView())
473 void
474 SetRenderer(unique_ptr<Renderer>);
481 void
482 SetView(unique_ptr<AView>);
483
495 virtual void
496 Refresh(PaintEventArgs&&);
497 };
498
506 template<class _tRenderer>
507 inline _tRenderer&
508 WrapRenderer(Widget& wgt, unique_ptr<_tRenderer> p_renderer)
509 {
510 auto& res(Deref(p_renderer));
511
512 wgt.SetRenderer(std::move(p_renderer));
513 return res;
514 }
515 template<class _tRenderer, typename... _tParams>
516 inline _tRenderer&
517 WrapRenderer(Widget& wgt, _tParams&&... args)
518 {
519 return UI::WrapRenderer(wgt, make_unique<_tRenderer>(yforward(args)...));
520 }
522
523
528 template<class... _tWidgets>
529 inline void
530 InvalidateWidgets(_tWidgets&... wgts)
531 {
532 unseq_apply(static_cast<void(*)(IWidget&)>(Invalidate), wgts...);
533 }
534
535 } // namespace UI;
536
537 } // namespace YSLib;
538
539 #endif
540
YSLib::UI::AView
抽象部件视图。
Definition: YWidgetView.h:111
YSLib::UI::InvalidateParent
void InvalidateParent(IWidget &wgt)
Definition: YWidget.cpp:141
YSLib::UI::GetBoundsOf
pt pt Y const IWidget &wgt const IWidget &wgt const IWidget &wgt GetBoundsOf
Definition: YWidget.h:168
YSLib::UI::ImplExpr
IWidget bool b ImplExpr(wgt.GetController().SetEnabled(b)) YF_API bool Enable(IWidget &
设置部件可用性，且当可用性改变时无效化部件区域。
any_iterator.hpp
动态泛型迭代器。
YSLib::UI::Widget::controller_ptr
unique_ptr< AController > controller_ptr
控制器指针。
Definition: YWidget.h:383
YSLib::UI::SetBoundsOf
void SetBoundsOf(IWidget &wgt, const Rect &r)
Definition: YWidget.cpp:56
YSLib::UI::Hide
YF_API void Hide(IWidget &)
隐藏部件。
Definition: YWidget.cpp:100
ystdex::unseq_apply
void unseq_apply(_func &&f, _tParams &&...args)
无序调用。
Definition: functional.hpp:241
YSLib::UI::Widget::InvalidateWidgets
void InvalidateWidgets(_tWidgets &...wgts)
向无效化部件。
Definition: YWidget.h:530
YSLib::UI::Close
void Close(IWidget &wgt)
Definition: YWidget.cpp:92
YSLib
YSLib 命名空间。
Definition: AndroidHost.h:45
ImplI
#define ImplI(...)
Definition: YBaseMacro.h:386
YSLib::UI::SPos
const IWidget &wgt SPos
Definition: YWidget.h:109
YSLib::UI::Renderer
部件渲染器。
Definition: YRenderer.h:46
YSLib::UI::PaintChildAndCommit
YF_API void PaintChildAndCommit(IWidget &, PaintEventArgs &)
调用 PaintChild 指定子部件并提交参数的重绘区域。
Definition: YWidget.cpp:189
YSLib::UI::Controller
部件控制器。
Definition: YControl.h:53
YSLib::UI::ImplRet
const IWidget &wgt ImplRet(wgt.GetView().IsVisible()) bool YF_API Contains(const IWidget &
判断点是否在部件的可视区域内。
YSLib::UI::args
yconstfn const string _tParams && args
Definition: Loader.h:131
YSLib::UI::InvalidateAll
void InvalidateAll(IWidget &wgt, const Rect &bounds)
Definition: YWidget.cpp:121
YSLib::UI::Widget::renderer_ptr
unique_ptr< Renderer > renderer_ptr
渲染器指针。
Definition: YWidget.h:382
DefGetterMem
#define DefGetterMem(_q, _t, _n, _m)
Definition: YBaseMacro.h:246
YSLib::UI::InvalidateVisibleParent
void InvalidateVisibleParent(IWidget &wgt)
Definition: YWidget.cpp:163
YSLib::UI::IsVisible
IsVisible
Definition: YWidget.h:101
DefGetter
#define DefGetter(_q, _t, _n,...)
Definition: YBaseMacro.h:240
YSLib::UI::View
部件视图。
Definition: YWidgetView.h:207
platform::KeyCodes::DS::Y
Definition: Keys.h:229
YSLib::UI::Invalidate
YF_API void Invalidate(IWidget &, const Rect &)
无效化：使相对部件的指定区域在直接和间接的窗口缓冲区中无效。
Definition: YWidget.cpp:108
YSLib::UI::X
pt X
Definition: YWidget.h:115
YSLib::ynothrow
YB_PURE const _type size_t n ynothrow
Definition: YCoreUtilities.h:168
DefSetterMem
#define DefSetterMem(_q, _t, _n, _m)
Definition: YBaseMacro.h:267
YSLib::UI::SetSizeOf
YF_API void SetSizeOf(IWidget &, const Size &)
设置部件大小。
Definition: YWidget.cpp:83
YSLib::UI::HBrush
std::function< void(PaintEventArgs &&)> HBrush
画刷回调函数。
Definition: YComponent.h:81
YSLib::UI::SetInvalidationToParent
YF_API void SetInvalidationToParent(IWidget &)
在容器设置部件的无效区域。
Definition: YWidget.cpp:69
YSLib::UI::Widget::Widget
Widget(_tView &&pView_=make_unique< View >(), _tRenderer &&pRenderer_=make_unique< Renderer >(), _tController &&pController_={})
构造：使用视图指针、渲染器指针和控制器指针，无背景。
Definition: YWidget.h:408
platform::Deref
yconstfn auto Deref(_type &&p) -> decltype(*p)
断言并解引用非空指针。
Definition: Debug.h:440
YAssertNonnull
#define YAssertNonnull(_expr)
Definition: cassert.h:114
EndDecl
#define EndDecl
Definition: YBaseMacro.h:396
platform::SPos
std::int16_t SPos
屏幕坐标度量。
Definition: Video.h:42
YSLib::UI::x
SPos x
Definition: YWidget.cpp:43
YSLib::UI::AController
抽象控制器。
Definition: YWidgetEvent.h:539
DeclIEntry
#define DeclIEntry(_sig)
Definition: YBaseMacro.h:394
YSLib::UI::Widget::Background
HBrush Background
背景。
Definition: YWidget.h:391
YSLib::UI::SetInvalidationOf
void SetInvalidationOf(IWidget &wgt)
Definition: YWidget.cpp:63
YSLib::UI::wgt
IWidget & wgt
Definition: YControl.h:112
YSLib::UI::InvalidateVisible
YF_API void InvalidateVisible(IWidget &, const Rect &)
无效化：使相对可见的部件的指定区域在直接和间接的窗口缓冲区中无效。
Definition: YWidget.cpp:148
YSLib::UI::FetchFocusingPtr
pt pt Y FetchFocusingPtr
Definition: YWidget.h:145
YSLib::Drawing::Rect
屏幕标准矩形：表示屏幕矩形区域。
Definition: YGDIBase.h:540
YSLib::Drawing::Size
屏幕区域大小。
Definition: YGDIBase.h:293
YSLib::UI::SetLocationOf
YF_API void SetLocationOf(IWidget &, const Point &)
设置部件左上角所在位置（相对容器的偏移坐标）。
Definition: YWidget.cpp:76
YSLib::UI::Show
YF_API void Show(IWidget &)
显示部件。
Definition: YWidget.cpp:202
UI
YSLib::UI::y
SPos SPos y
Definition: YWidget.cpp:44
YSLib::UI::ContainsVisible
pt pt Y bool YF_API ContainsVisible(const IWidget &wgt, SPos x, SPos y)
判断点是否在可见部件的可视区域内。
Definition: YWidget.cpp:49
YSLib::UI::RequestToFront
void RequestToFront(IWidget &wgt)
Definition: YWidget.cpp:195
YSLib::UI::e
void e
Definition: YWidget.h:352
YSLib::p_con
name const ValueNode::Container * p_con
Definition: ValueNode.h:627
YModules.h
implements
#define implements
Definition: YBaseMacro.h:351
YSLib::UI::PaintChild
YF_API void PaintChild(IWidget &wgt, PaintEventArgs &&e)
调用指定子部件的 Paint 事件绘制参数指定的事件发送者。
Definition: YWidget.cpp:171
YSLib::UI::PaintVisibleChildAndCommit
void PaintVisibleChildAndCommit(IWidget &wgt, PaintEventArgs &e) ImplExpr(IsVisible(wgt)?PaintChildAndCommit(wgt
调用可见的 PaintChild 指定子部件并提交参数的重绘区域。
YSLib::UI::WidgetRange
pair< WidgetIterator, WidgetIterator > WidgetRange
两个部件迭代器组成的左闭右开区间确定的迭代器范围。
Definition: YWidget.h:57
YSLib::UI::Widget
部件。
Definition: YWidget.h:369
YSLib::UI::GetSizeOf
pt pt Y const IWidget &wgt const IWidget &wgt GetSizeOf
无效化：使相对部件的子部件的指定区域在直接和间接的窗口缓冲区中无效。
Definition: YWidget.h:161
yforward
#define yforward(_expr)
根据参数类型使用 std::forward 传递对应参数。
Definition: ydef.h:969
YSLib::UI::PaintEventArgs
部件绘制参数。
Definition: YWidgetEvent.h:323
YF_API
#define YF_API
Definition: Platform.h:56
YSLib::UI::GetLocationOf
pt pt Y const IWidget &wgt GetLocationOf
Definition: YWidget.h:153
YSLib::UI::PDefH
PDefH(void, DisplayFor, IWidget &wgt, Timers::TimeSpan delay) ImplExpr(Show(wgt)
在一定时间内显示部件。
YSLib::UI::InvalidateChildren
void InvalidateChildren(IWidget &wgt, const Rect &bounds)
Definition: YWidget.cpp:128
YSLib::DeclI
DeclI(YF_API, IResource) EndDecl namespace Drawing
资源接口。
Definition: YResource.h:42
ystdex::any_input_iterator
动态泛型输入迭代器。
Definition: any_iterator.hpp:209
DefDelMoveCtor
#define DefDelMoveCtor(_t)
Definition: YBaseMacro.h:168
YSLib::UI::Widget::view_ptr
unique_ptr< AView > view_ptr
部件视图指针。
Definition: YWidget.h:381
platform::SDst
std::uint16_t SDst
屏幕坐标距离。
Definition: Video.h:43
YSLib::Drawing::GBinaryGroup< SPos >