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 
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:
376 
378  explicit
379  Widget(const Rect& = {});
381  explicit
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&);
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 
void InvalidateParent(IWidget &wgt)
Definition: ywidget.cpp:144
pt pt Y const IWidget &wgt const IWidget &wgt GetSizeOf
无效化:使相对于部件的子部件的指定区域在直接和间接的窗口缓冲区中无效。
Definition: ywidget.h:156
void Refresh(PaintEventArgs &&) override
刷新:按指定参数绘制界面并更新状态。
pt pt Y const IWidget &wgt GetLocationOf
Definition: ywidget.h:148
YF_API void SetLocationOf(IWidget &, const Point &)
设置部件左上角所在位置(相对于容器的偏移坐标)。
Definition: ywidget.cpp:73
控制器抽象类。
Definition: ywgtevt.h:468
#define implements
Definition: YBaseMacro.h:272
void SetBoundsOf(IWidget &wgt, const Rect &r)
Definition: ywidget.cpp:53
YF_API void Invalidate(IWidget &, const Rect &)
无效化:使相对于部件的指定区域在直接和间接的窗口缓冲区中无效。
Definition: ywidget.cpp:111
void InvalidateAll(IWidget &wgt, const Rect &bounds)
Definition: ywidget.cpp:124
部件渲染器。
Definition: yrender.h:46
#define YF_API
Definition: Platform.h:64
YF_API void PaintChild(IWidget &wgt, PaintEventArgs &&e)
调用指定子部件的 Paint 事件绘制参数指定的事件发送者。
Definition: ywidget.cpp:174
unique_ptr< View > view_ptr
部件视图指针。
Definition: ywidget.h:364
void SetInvalidationOf(IWidget &wgt)
Definition: ywidget.cpp:60
YF_API void SetSizeOf(IWidget &, const Size &)
设置部件大小。
Definition: ywidget.cpp:83
void InvalidateVisibleParent(IWidget &wgt)
Definition: ywidget.cpp:166
YF_API void Hide(IWidget &)
隐藏部件。
Definition: ywidget.cpp:103
std::uint16_t SDst
屏幕坐标距离。
Definition: Video.h:39
#define yforward(_expr)
根据参数类型使用 std::forward 传递对应参数。
Definition: ydef.h:722
#define DefGetter(_q, _t, _n,...)
Definition: YBaseMacro.h:180
YF_API void Show(IWidget &)
显示部件。
Definition: ywidget.cpp:206
#define ImplI(...)
Definition: YBaseMacro.h:308
#define DefSetterMem(_t, _n, _m)
Definition: YBaseMacro.h:200
pair< WidgetIterator, WidgetIterator > WidgetRange
两个部件迭代器组成的左闭右开区间确定的迭代器范围。
Definition: ywidget.h:57
PDefH(void, Activate, Console &console, Drawing::Color fc=Drawing::ColorSpace::White) ImplExpr(Activate(console
激活:使用指定屏幕、有效性、前景色和默认背景色。
YF_API void PaintVisibleChild(IWidget &, PaintEventArgs &)
调用 PaintChild 指定子部件并合并参数的重绘区域。
Definition: ywidget.cpp:192
YF_API void InvalidateVisible(IWidget &, const Rect &)
无效化:使相对于可见的部件的指定区域在直接和间接的窗口缓冲区中无效。
Definition: ywidget.cpp:151
HBrush Background
背景。
Definition: ywidget.h:374
GBinaryGroup< SPos > Point
屏幕二维点(直角坐标表示)。
Definition: ygdibase.h:235
#define ImplExpr(...)
Definition: YBaseMacro.h:93
pt pt Y bool YF_API ContainsVisible(const IWidget &wgt, SPos x, SPos y)
判断点是否在可见部件的可视区域内。
Definition: ywidget.cpp:46
pt pt Y const IWidget &wgt const IWidget &wgt const IWidget &wgt GetBoundsOf
Definition: ywidget.h:163
_tWidget & wgt
Definition: ywgtevt.h:596
#define ynothrow
YSLib 无异常抛出保证:若支持 noexcept 关键字, 指定特定的 noexcept 异常规范。
Definition: ydef.h:514
部件控制器。
Definition: ycontrol.h:53
屏幕标准矩形:表示屏幕矩形区域。
Definition: ygdibase.h:416
#define EndDecl
Definition: YBaseMacro.h:316
屏幕二元组。
Definition: ygdibase.h:54
const IWidget &wgt SPos
Definition: ywidget.h:104
#define YAssertNonnull(_expr)
Definition: cassert.h:81
std::function< void(PaintEventArgs &&)> HBrush
画刷回调函数。
Definition: YComponent.h:104
Widget(_tView &&pView_=make_unique< View >(), _tRenderer &&pRenderer_=make_unique< Renderer >(), _tController &&pController_={})
构造:使用视图指针、渲染器指针和控制器指针,无背景。
Definition: ywidget.h:392
动态泛型输入迭代器。
p1 p1 Y
Definition: ydraw.h:188
部件视图。
Definition: ywgtview.h:137
Selected const shared_ptr< ListType > const pair< Color, Color > viewer Contains
Definition: textlist.h:124
Color
控制台颜色枚举。
Definition: Video.h:458
DeclI(YF_API, IResource) EndDeclnamespace Drawing
资源接口。
Definition: yres.h:42
const IWidget &wgt ImplRet(wgt.GetView().IsVisible()) bool YF_API Contains(const IWidget &
判断点是否在部件的可视区域内。
DefGetterMem(const ynothrow, ListType::size_type, SelectedIndex, viewer) SDst GetFullViewHeight() const
取完整视图高。
YF_API void SetInvalidationToParent(IWidget &)
在容器设置部件的无效区域。
Definition: ywidget.cpp:66
YF_API void RequestToFront(IWidget &)
请求提升至容器前端。
Definition: ywidget.cpp:199
if(YB_UNLIKELY(r >=sGraphics.Height)) throw std return pBuffer r *sGraphics Width
Definition: ygdibase.cpp:155
#define DeclIEntry(_sig)
Definition: YBaseMacro.h:314
void InvalidateChildren(IWidget &wgt, const Rect &bounds)
Definition: ywidget.cpp:131
动态泛型迭代器。
颜色。
Definition: Video.h:339
屏幕区域大小。
Definition: ygdibase.h:249
部件。
Definition: ywidget.h:356
pt pt Y FetchFocusingPtr
Definition: ywidget.h:140
void Close(IWidget &wgt)
Definition: ywidget.cpp:95
unique_ptr< Renderer > renderer_ptr
渲染器指针。
Definition: ywidget.h:365
unique_ptr< AController > controller_ptr
控制器指针。
Definition: ywidget.h:366
#define DefDelMoveCtor(_t)
Definition: YBaseMacro.h:143