28 #ifndef INC_Helper_HostRenderer_h_
29 #define INC_Helper_HostRenderer_h_ 1
32 #include YFM_Helper_HostWindow // for Host::Window;
33 #if YF_Multithread == 1
37 #include YFM_YSLib_UI_YRenderer
38 #include YFM_YSLib_UI_YWidget // for UI::GetSizeOf;
39 #include YFM_Helper_ScreenBuffer // for ScreenRegionBuffer;
55 std::reference_wrapper<HostRenderer> renderer;
80 std::atomic<Window*> p_wnd;
84 template<
typename... _tParams>
85 WindowThread(_tParams&&...
args)
86 : p_wnd(), thrd(std::mem_fn(&WindowThread::ThreadFunc<ystdex::
decay_t<
97 template<typename _fCallable, typename... _tParams>
99 ThreadFunc(_fCallable&&
f, _tParams&&...
args)
108 ThreadLoop(unique_ptr<Window>);
121 class YF_API HostRenderer :
public UI::BufferedRenderer
124 std::reference_wrapper<UI::IWidget> widget;
131 template<
typename... _tParams>
132 HostRenderer(UI::IWidget&
wgt, _tParams&&... args)
133 : HostRenderer(ystdex::identity<RenderWindow>(), wgt,
yforward(args)...)
137 template<
class _tWindow,
typename... _tParams>
140 : BufferedRenderer(),
142 thrd(std::mem_fn(&HostRenderer::MakeRenderWindow<_tWindow,
145 template<
typename... _tParams>
146 HostRenderer(
int, UI::IWidget&
wgt, _tParams&&... args)
147 : HostRenderer(0, ystdex::identity<RenderWindow>(), wgt,
150 template<
class _tWindow,
typename... _tParams>
153 : BufferedRenderer(),
155 thrd(std::mem_fn(&HostRenderer::MakeRenderWindowEx<_tWindow,
165 SetSize(const Drawing::Size&) override;
170 throw ystdex::unimplemented("HostRenderer::clone unimplemented."));
175 template<class _tWindow, typename _fCallable, typename... _tParams>
177 MakeRenderWindow(_fCallable&& f, _tParams&&... args)
182 template<
class _tWindow,
typename _fCallable,
typename... _tParams>
184 MakeRenderWindowEx(_fCallable&& f, _tParams&&... args)
202 template<
typename _type>
204 UpdateToSurface(_type& sf)
pt pt Y const IWidget &wgt const IWidget &wgt GetSizeOf
无效化:使相对于部件的子部件的指定区域在直接和间接的窗口缓冲区中无效。
void Refresh(PaintEventArgs &&) override
刷新:按指定参数绘制界面并更新状态。
yconstfn const string _tParams && args
typename decay< _type >::type decay_t
#define yforward(_expr)
根据参数类型使用 std::forward 传递对应参数。
#define DefGetter(_q, _t, _n,...)
sizeof(AlphaType)*GetAreaOf(GetSize())) using CompactPixmap void SetSize(const Size &) override
重新设置缓冲区大小。
#define DefDeMoveCtor(_t)
#define ynothrow
YSLib 无异常抛出保证:若支持 noexcept 关键字, 指定特定的 noexcept 异常规范。
::ANativeWindow * NativeWindowHandle
#define YB_NORETURN
指定无返回值函数。
#define DefGetterMem(_q, _t, _n, _m)
ScreenRegionBuffer(const YSLib::Drawing::Size &, YSLib::SDst)
构造:使用指定的缓冲区大小和像素跨距。 像素跨距小于缓冲区大小。
#define DefDelMoveCtor(_t)
decay_t< _type > decay_copy(_type &&arg)
退化复制。