28 #ifndef Inc_Helper_Host_h_
29 #define Inc_Helper_Host_h_ 1
32 #if YCL_MULTITHREAD == 1
47 yconstexpr wchar_t WindowClassName[]{
L"YFramework Window"};
54 class RenderWindow :
public Window
57 std::reference_wrapper<HostRenderer> renderer;
60 RenderWindow(NativeWindowHandle
h, HostRenderer& r)
79 unique_ptr<Window> p_wnd;
83 template<
typename... _tParams>
84 WindowThread(_tParams&&... args)
85 : p_wnd(), thrd(std::mem_fn(&WindowThread::ThreadFunc<typename
86 ystdex::qualified_decay<_tParams>::type...>), this,
96 template<typename _fCallable, typename... _tParams>
98 ThreadFunc(_fCallable&& f, _tParams&&... args)
105 ThreadLoop(NativeWindowHandle);
107 ThreadLoop(unique_ptr<Window>);
119 class HostRenderer :
public UI::BufferedRenderer
122 std::reference_wrapper<UI::IWidget> widget;
124 ScreenRegionBuffer rbuf;
129 template<
typename... _tParams>
130 HostRenderer(UI::IWidget& wgt, _tParams&&... args)
131 : BufferedRenderer(),
133 thrd(std::mem_fn(&HostRenderer::MakeRenderWindow<typename
134 ystdex::qualified_decay<_tParams>::type...>), this,
143 SetSize(const Drawing::Size&) override;
146 Clone()
const override
148 throw LoggedEvent(
"HostRenderer::Clone: Not implemented.");
153 template<
typename _fCallable,
typename... _tParams>
155 MakeRenderWindow(_fCallable&& f, _tParams&&... args)
157 return unique_ptr<Window>(
new
165 template<
typename _type>
167 UpdateToSurface(_type& sf)
188 map<NativeWindowHandle, Window*> wnd_map;
193 mutable std::mutex wmap_mtx;
194 # if YCL_MULTITHREAD == 1
197 ::HINSTANCE h_instance;
204 std::atomic<size_t> wnd_thrd_count;
212 std::atomic<bool> ExitOnAllWindowThreadCompleted;
225 GetForegroundWindow() const
ynothrow;
233 AddMappedItem(NativeWindowHandle,
Window*);
235 # if YCL_MULTITHREAD == 1
254 FindWindow(NativeWindowHandle) const
ynothrow;
263 # if YCL_MULTITHREAD == 1
280 RemoveMappedItem(NativeWindowHandle) ynothrow;
284 UpdateRenderWindows();