From b0cf022ea75b763531e6ae63abccadf2bfa7a84b Mon Sep 17 00:00:00 2001 From: Bent Bisballe Nyeng Date: Sun, 26 Mar 2017 11:21:43 +0200 Subject: Make plugingui test app nest the UI in a native window. --- plugingui/nativewindow.h | 3 +++ plugingui/nativewindow_win32.cc | 5 +++++ plugingui/nativewindow_win32.h | 1 + plugingui/nativewindow_x11.cc | 5 +++++ plugingui/nativewindow_x11.h | 1 + plugingui/testmain.cc | 19 ++++++++++++++++--- plugingui/window.cc | 5 +++++ plugingui/window.h | 3 +++ 8 files changed, 39 insertions(+), 3 deletions(-) diff --git a/plugingui/nativewindow.h b/plugingui/nativewindow.h index c6ca7c8..b4429af 100644 --- a/plugingui/nativewindow.h +++ b/plugingui/nativewindow.h @@ -80,6 +80,9 @@ public: //! Reads all currently enqueued events from the native window system. //! \return A queue of shared pointers to events. virtual EventQueue getEvents() = 0; + + // \returns the native window handle, it HWND on Win32 or Window id on X11 + virtual void* getNativeWindowHandle() const = 0; }; } // GUI:: diff --git a/plugingui/nativewindow_win32.cc b/plugingui/nativewindow_win32.cc index 75d523d..6297b23 100644 --- a/plugingui/nativewindow_win32.cc +++ b/plugingui/nativewindow_win32.cc @@ -445,4 +445,9 @@ EventQueue NativeWindowWin32::getEvents() return events; } +void* NativeWindowWin32::getNativeWindowHandle() const +{ + return (void*)m_hwnd; +} + } // GUI:: diff --git a/plugingui/nativewindow_win32.h b/plugingui/nativewindow_win32.h index 630d853..2299189 100644 --- a/plugingui/nativewindow_win32.h +++ b/plugingui/nativewindow_win32.h @@ -55,6 +55,7 @@ public: void redraw(const Rect& dirty_rect) override; void grabMouse(bool grab) override; EventQueue getEvents() override; + void* getNativeWindowHandle() const override; private: static LRESULT CALLBACK dialogProc(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp); diff --git a/plugingui/nativewindow_x11.cc b/plugingui/nativewindow_x11.cc index de2f1d1..989da4e 100644 --- a/plugingui/nativewindow_x11.cc +++ b/plugingui/nativewindow_x11.cc @@ -275,6 +275,11 @@ EventQueue NativeWindowX11::getEvents() return events; } +void* NativeWindowX11::getNativeWindowHandle() const +{ + return (void*)xwindow; +} + void NativeWindowX11::translateXMessage(XEvent& xevent) { switch(xevent.type) diff --git a/plugingui/nativewindow_x11.h b/plugingui/nativewindow_x11.h index dd2010e..c850318 100644 --- a/plugingui/nativewindow_x11.h +++ b/plugingui/nativewindow_x11.h @@ -57,6 +57,7 @@ public: void redraw(const Rect& dirty_rect) override; void grabMouse(bool grab) override; EventQueue getEvents() override; + void* getNativeWindowHandle() const override; private: void translateXMessage(XEvent& xevent); diff --git a/plugingui/testmain.cc b/plugingui/testmain.cc index b1697eb..0bbd21f 100644 --- a/plugingui/testmain.cc +++ b/plugingui/testmain.cc @@ -35,19 +35,32 @@ #include #include +#include "window.h" #include "mainwindow.h" int main() { INFO(example, "We are up and running"); + GUI::Window parent{nullptr}; + parent.setCaption("PluginGui Test Application"); + Settings settings; - GUI::MainWindow main_window(settings, nullptr); + GUI::MainWindow main_window(settings, parent.getNativeWindowHandle()); + + parent.show(); main_window.show(); - main_window.resize(370, 330); - while(main_window.processEvents()) + parent.resize(370, 330); + + while(true) { + parent.eventHandler()->processEvents(); + if(!main_window.processEvents()) + { + break; + } + #if DG_PLATFORM == DG_PLATFORM_WINDOWS SleepEx(50, FALSE); #else diff --git a/plugingui/window.cc b/plugingui/window.cc index 8bc5c62..66b7337 100644 --- a/plugingui/window.cc +++ b/plugingui/window.cc @@ -181,6 +181,11 @@ void Window::needsRedraw() needs_redraw = true; } +void* Window::getNativeWindowHandle() const +{ + return native->getNativeWindowHandle(); +} + std::size_t Window::translateToWindowX() { return 0; diff --git a/plugingui/window.h b/plugingui/window.h index cfb004d..218beec 100644 --- a/plugingui/window.h +++ b/plugingui/window.h @@ -70,6 +70,9 @@ public: //! Tag the window buffer dirty to be rendered. void needsRedraw(); + // \returns the native window handle, it HWND on Win32 or Window id on X11 + void* getNativeWindowHandle() const; + protected: // For the EventHandler friend class EventHandler; -- cgit v1.2.3