diff --git a/dgl/src/Window.cpp b/dgl/src/Window.cpp index f827a184..bf20a84a 100644 --- a/dgl/src/Window.cpp +++ b/dgl/src/Window.cpp @@ -15,13 +15,12 @@ */ // we need this for now -#define XKEYFOCUSGRAB 1 +#define PUGL_GRAB_FOCUS 1 #include "AppPrivateData.hpp" #include "../Widget.hpp" #include "../Window.hpp" -#include #include #include @@ -30,12 +29,9 @@ #if defined(DISTRHO_OS_WINDOWS) # include "pugl/pugl_win.cpp" #elif defined(DISTRHO_OS_MAC) -# include "pugl/pugl_osx_extended.h" extern "C" { -struct PuglViewImpl { - int width; - int height; -};} +# include "pugl/pugl_osx.m" +} #elif defined(DISTRHO_OS_LINUX) # include # include @@ -69,12 +65,11 @@ Window* dgl_lastUiParent = nullptr; // ----------------------------------------------------------------------- // Window Private -struct Window::PrivateData -{ +struct Window::PrivateData { PrivateData(App& app, Window* const self) : fApp(app), fSelf(self), - fView(puglCreate(0, "Window", 100, 100, true, false)), + fView(puglInit(nullptr, nullptr)), fFirstInit(true), fVisible(false), fResizable(true), @@ -97,7 +92,7 @@ struct Window::PrivateData PrivateData(App& app, Window* const self, Window& parent) : fApp(app), fSelf(self), - fView(puglCreate(0, "Window", 100, 100, true, false)), + fView(puglInit(nullptr, nullptr)), fFirstInit(true), fVisible(false), fResizable(true), @@ -127,7 +122,7 @@ struct Window::PrivateData PrivateData(App& app, Window* const self, const intptr_t parentId) : fApp(app), fSelf(self), - fView(puglCreate(parentId, "Window", 100, 100, (parentId == 0), (parentId != 0))), + fView(puglInit(nullptr, nullptr)), fFirstInit(true), fVisible(parentId != 0), fResizable(parentId == 0), @@ -143,9 +138,13 @@ struct Window::PrivateData _dummy('\0') #endif { - if (parentId != 0) { + if (parentId != 0) + { DBG("Creating embedded window..."); DBGF; - } else { + puglInitWindowParent(fView, parentId); + } + else + { DBG("Creating window without parent..."); DBGF; } @@ -154,6 +153,7 @@ struct Window::PrivateData if (parentId != 0) { DBG("NOTE: Embed window is always visible and non-resizable\n"); + puglShowWindow(fView); fApp.pData->oneShown(); fFirstInit = false; } @@ -170,6 +170,8 @@ struct Window::PrivateData dgl_lastUiParent = fSelf; + puglInitResizable(fView, fResizable); + puglSetHandle(fView, this); puglSetDisplayFunc(fView, onDisplayCallback); puglSetKeyboardFunc(fView, onKeyboardCallback); @@ -180,15 +182,17 @@ struct Window::PrivateData puglSetReshapeFunc(fView, onReshapeCallback); puglSetCloseFunc(fView, onCloseCallback); + puglCreateWindow(fView, nullptr); + #if defined(DISTRHO_OS_WINDOWS) PuglInternals* impl = fView->impl; hwnd = impl->hwnd; - assert(hwnd != 0); + DISTRHO_SAFE_ASSERT(hwnd != 0); #elif defined(DISTRHO_OS_LINUX) PuglInternals* impl = fView->impl; xDisplay = impl->display; xWindow = impl->win; - assert(xWindow != 0); + DISTRHO_SAFE_ASSERT(xWindow != 0); if (! fUsingEmbed) { @@ -530,13 +534,7 @@ struct Window::PrivateData void exec_init() { DBG("Window modal loop starting..."); DBGF; - assert(fModal.parent != nullptr); - - if (fModal.parent == nullptr) - { - DBG("Failed, there's no modal parent!\n"); - return setVisible(true); - } + DISTRHO_SAFE_ASSERT_RETURN(fModal.parent != nullptr, setVisible(true)); fModal.enabled = true; fModal.parent->fModal.childFocus = this; @@ -731,8 +729,8 @@ struct Window::PrivateData ~Modal() { - assert(! enabled); - assert(childFocus == nullptr); + DISTRHO_SAFE_ASSERT(! enabled); + DISTRHO_SAFE_ASSERT(childFocus == nullptr); } } fModal; diff --git a/dgl/src/pugl/pugl_internal.h b/dgl/src/pugl/pugl_internal.h index 7088a3c1..1f758307 100644 --- a/dgl/src/pugl/pugl_internal.h +++ b/dgl/src/pugl/pugl_internal.h @@ -42,9 +42,6 @@ typedef struct PuglInternalsImpl PuglInternals; struct PuglViewImpl { - int width; - int height; - PuglHandle handle; PuglCloseFunc closeFunc; PuglDisplayFunc displayFunc; @@ -59,6 +56,8 @@ struct PuglViewImpl { PuglNativeWindow parent; + int width; + int height; int mods; bool mouse_in_view; bool ignoreKeyRepeat; @@ -89,6 +88,9 @@ puglInit(int* pargc, char** argv) view->height = 480; return view; + + // unused + (void)pargc; (void)argv; } void @@ -107,7 +109,7 @@ puglInitWindowParent(PuglView* view, PuglNativeWindow parent) void puglInitResizable(PuglView* view, bool resizable) { - view->resizable = true; + view->resizable = resizable; } void diff --git a/dgl/src/pugl/pugl_win.cpp b/dgl/src/pugl/pugl_win.cpp index 5a203309..ca4afe99 100644 --- a/dgl/src/pugl/pugl_win.cpp +++ b/dgl/src/pugl/pugl_win.cpp @@ -37,7 +37,7 @@ # define WHEEL_DELTA 120 #endif -const int LOCAL_CLOSE_MSG = WM_USER + 50; +#define PUGL_LOCAL_CLOSE_MSG (WM_USER + 50) HINSTANCE hInstance = NULL; @@ -60,22 +60,6 @@ DllMain(HINSTANCE hInst, DWORD, LPVOID) } } // extern "C" -PuglView* -puglInit() -{ - PuglView* view = (PuglView*)calloc(1, sizeof(PuglView)); - PuglInternals* impl = (PuglInternals*)calloc(1, sizeof(PuglInternals)); - if (!view || !impl) { - return NULL; - } - - view->impl = impl; - view->width = 640; - view->height = 480; - - return view; -} - PuglView* puglCreateInternals(PuglNativeWindow parent, const char* title, @@ -343,7 +327,7 @@ handleMessage(PuglView* view, UINT message, WPARAM wParam, LPARAM lParam) } break; case WM_QUIT: - case LOCAL_CLOSE_MSG: + case PUGL_LOCAL_CLOSE_MSG: if (view->closeFunc) { view->closeFunc(view); } @@ -386,7 +370,7 @@ wndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) PostMessage(hwnd, WM_SHOWWINDOW, TRUE, 0); return 0; case WM_CLOSE: - PostMessage(hwnd, LOCAL_CLOSE_MSG, wParam, lParam); + PostMessage(hwnd, PUGL_LOCAL_CLOSE_MSG, wParam, lParam); return 0; case WM_DESTROY: return 0;