Signed-off-by: falkTX <falktx@falktx.com>pull/281/head
| @@ -145,8 +145,10 @@ void Window::setSize(uint width, uint height) | |||||
| // handle geometry constraints here | // handle geometry constraints here | ||||
| if (width < pData->minWidth) | if (width < pData->minWidth) | ||||
| width = pData->minWidth; | width = pData->minWidth; | ||||
| if (height < pData->minHeight) | if (height < pData->minHeight) | ||||
| height = pData->minHeight; | height = pData->minHeight; | ||||
| if (pData->keepAspectRatio) | if (pData->keepAspectRatio) | ||||
| { | { | ||||
| const double ratio = static_cast<double>(pData->minWidth) | const double ratio = static_cast<double>(pData->minWidth) | ||||
| @@ -166,10 +168,6 @@ void Window::setSize(uint width, uint height) | |||||
| } | } | ||||
| } | } | ||||
| // FIXME add default and min props for this | |||||
| if (pData->minWidth == 0 && pData->minHeight == 0) | |||||
| puglSetDefaultSize(pData->view, static_cast<int>(width), static_cast<int>(height)); | |||||
| puglSetWindowSize(pData->view, width, height); | puglSetWindowSize(pData->view, width, height); | ||||
| } | } | ||||
| @@ -145,10 +145,7 @@ Window::PrivateData::PrivateData(Application& a, Window* const s, | |||||
| modal() | modal() | ||||
| { | { | ||||
| if (isEmbed) | if (isEmbed) | ||||
| { | |||||
| // puglSetDefaultSize(DEFAULT_WIDTH, DEFAULT_HEIGHT, height); | |||||
| puglSetParentWindow(view, parentWindowHandle); | puglSetParentWindow(view, parentWindowHandle); | ||||
| } | |||||
| initPre(DEFAULT_WIDTH, DEFAULT_HEIGHT, resizable); | initPre(DEFAULT_WIDTH, DEFAULT_HEIGHT, resizable); | ||||
| } | } | ||||
| @@ -177,10 +174,7 @@ Window::PrivateData::PrivateData(Application& a, Window* const s, | |||||
| modal() | modal() | ||||
| { | { | ||||
| if (isEmbed) | if (isEmbed) | ||||
| { | |||||
| puglSetDefaultSize(view, static_cast<int>(width), static_cast<int>(height)); | |||||
| puglSetParentWindow(view, parentWindowHandle); | puglSetParentWindow(view, parentWindowHandle); | ||||
| } | |||||
| initPre(width, height, resizable); | initPre(width, height, resizable); | ||||
| } | } | ||||
| @@ -226,6 +220,9 @@ void Window::PrivateData::initPre(const uint width, const uint height, const boo | |||||
| puglSetMatchingBackendForCurrentBuild(view); | puglSetMatchingBackendForCurrentBuild(view); | ||||
| puglClearMinSize(view); | |||||
| puglSetWindowSize(view, width, height); | |||||
| puglSetHandle(view, this); | puglSetHandle(view, this); | ||||
| puglSetViewHint(view, PUGL_RESIZABLE, resizable ? PUGL_TRUE : PUGL_FALSE); | puglSetViewHint(view, PUGL_RESIZABLE, resizable ? PUGL_TRUE : PUGL_FALSE); | ||||
| puglSetViewHint(view, PUGL_IGNORE_KEY_REPEAT, PUGL_FALSE); | puglSetViewHint(view, PUGL_IGNORE_KEY_REPEAT, PUGL_FALSE); | ||||
| @@ -233,11 +230,6 @@ void Window::PrivateData::initPre(const uint width, const uint height, const boo | |||||
| puglSetViewHint(view, PUGL_STENCIL_BITS, 8); | puglSetViewHint(view, PUGL_STENCIL_BITS, 8); | ||||
| // PUGL_SAMPLES ?? | // PUGL_SAMPLES ?? | ||||
| puglSetEventFunc(view, puglEventCallback); | puglSetEventFunc(view, puglEventCallback); | ||||
| PuglRect rect = puglGetFrame(view); | |||||
| rect.width = width; | |||||
| rect.height = height; | |||||
| puglSetFrame(view, rect); | |||||
| } | } | ||||
| void Window::PrivateData::initPost() | void Window::PrivateData::initPost() | ||||
| @@ -303,7 +295,6 @@ void Window::PrivateData::show() | |||||
| // FIXME | // FIXME | ||||
| PuglRect rect = puglGetFrame(view); | PuglRect rect = puglGetFrame(view); | ||||
| puglSetDefaultSize(view, static_cast<int>(rect.width), static_cast<int>(rect.height)); | |||||
| puglSetWindowSize(view, static_cast<uint>(rect.width), static_cast<uint>(rect.height)); | puglSetWindowSize(view, static_cast<uint>(rect.width), static_cast<uint>(rect.height)); | ||||
| #ifdef DISTRHO_OS_WINDOWS | #ifdef DISTRHO_OS_WINDOWS | ||||
| @@ -562,10 +553,6 @@ void Window::PrivateData::startModal() | |||||
| // make parent give focus to us | // make parent give focus to us | ||||
| modal.parent->modal.child = this; | modal.parent->modal.child = this; | ||||
| // FIXME? | |||||
| PuglRect rect = puglGetFrame(view); | |||||
| puglSetDefaultSize(view, static_cast<int>(rect.width), static_cast<int>(rect.height)); | |||||
| // make sure both parent and ourselves are visible | // make sure both parent and ourselves are visible | ||||
| modal.parent->show(); | modal.parent->show(); | ||||
| show(); | show(); | ||||
| @@ -659,8 +646,8 @@ void Window::PrivateData::onPuglConfigure(const double width, const double heigh | |||||
| /* Some special care here, we call Widget::setSize instead of the TopLevelWidget one. | /* Some special care here, we call Widget::setSize instead of the TopLevelWidget one. | ||||
| * This is because we want TopLevelWidget::setSize to handle both window and widget size, | * This is because we want TopLevelWidget::setSize to handle both window and widget size, | ||||
| * but we dont want to change window size here, because we are the window.. | * but we dont want to change window size here, because we are the window.. | ||||
| * | |||||
| * So we just call the Widget specific method manually. | * So we just call the Widget specific method manually. | ||||
| * | |||||
| * Alternatively, we could expose a resize function on the pData, like done with the display function. | * Alternatively, we could expose a resize function on the pData, like done with the display function. | ||||
| * But there is nothing extra we need to do in there, so this works fine. | * But there is nothing extra we need to do in there, so this works fine. | ||||
| */ | */ | ||||
| @@ -674,7 +661,7 @@ void Window::PrivateData::onPuglConfigure(const double width, const double heigh | |||||
| void Window::PrivateData::onPuglExpose() | void Window::PrivateData::onPuglExpose() | ||||
| { | { | ||||
| DGL_DBGp("PUGL: onPuglExpose : %p\n", topLevelWidget); | |||||
| DGL_DBGp("PUGL: onPuglExpose\n"); | |||||
| puglOnDisplayPrepare(view); | puglOnDisplayPrepare(view); | ||||
| @@ -152,11 +152,20 @@ START_NAMESPACE_DGL | |||||
| // -------------------------------------------------------------------------------------------------------------------- | // -------------------------------------------------------------------------------------------------------------------- | ||||
| // expose backend enter | // expose backend enter | ||||
| void puglBackendEnter(PuglView* view) | |||||
| void puglBackendEnter(PuglView* const view) | |||||
| { | { | ||||
| view->backend->enter(view, NULL); | view->backend->enter(view, NULL); | ||||
| } | } | ||||
| // -------------------------------------------------------------------------------------------------------------------- | |||||
| // clear minimum size to 0 | |||||
| void puglClearMinSize(PuglView* const view) | |||||
| { | |||||
| view->minWidth = 0; | |||||
| view->minHeight = 0; | |||||
| } | |||||
| // -------------------------------------------------------------------------------------------------------------------- | // -------------------------------------------------------------------------------------------------------------------- | ||||
| // missing in pugl, directly returns title char* pointer | // missing in pugl, directly returns title char* pointer | ||||
| @@ -237,10 +246,13 @@ PuglStatus puglSetGeometryConstraints(PuglView* const view, const uint width, co | |||||
| } | } | ||||
| // -------------------------------------------------------------------------------------------------------------------- | // -------------------------------------------------------------------------------------------------------------------- | ||||
| // set window size without changing frame x/y position | |||||
| // set window size with default size and without changing frame x/y position | |||||
| PuglStatus puglSetWindowSize(PuglView* const view, const uint width, const uint height) | PuglStatus puglSetWindowSize(PuglView* const view, const uint width, const uint height) | ||||
| { | { | ||||
| view->defaultWidth = width; | |||||
| view->defaultHeight = height; | |||||
| #if defined(DISTRHO_OS_HAIKU) || defined(DISTRHO_OS_MAC) | #if defined(DISTRHO_OS_HAIKU) || defined(DISTRHO_OS_MAC) | ||||
| // keep upstream behaviour | // keep upstream behaviour | ||||
| const PuglRect frame = { view->frame.x, view->frame.y, (double)width, (double)height }; | const PuglRect frame = { view->frame.x, view->frame.y, (double)width, (double)height }; | ||||
| @@ -271,8 +283,30 @@ PuglStatus puglSetWindowSize(PuglView* const view, const uint width, const uint | |||||
| // matches upstream pugl, except we use XResizeWindow instead of XMoveResizeWindow | // matches upstream pugl, except we use XResizeWindow instead of XMoveResizeWindow | ||||
| if (view->impl->win) | if (view->impl->win) | ||||
| { | { | ||||
| if (! XResizeWindow(view->world->impl->display, view->impl->win, width, height)) | |||||
| Display* const display = view->world->impl->display; | |||||
| if (! XResizeWindow(display, view->impl->win, width, height)) | |||||
| return PUGL_UNKNOWN_ERROR; | return PUGL_UNKNOWN_ERROR; | ||||
| #if 0 | |||||
| // custom handling for embed non-resizable windows | |||||
| if (view->parent != 0 && ! view->hints[PUGL_RESIZABLE]) | |||||
| { | |||||
| XSizeHints sizeHints = {}; | |||||
| sizeHints.flags = PSize | PBaseSize | PMinSize | PMaxSize; | |||||
| sizeHints.width = static_cast<int>(width); | |||||
| sizeHints.height = static_cast<int>(height); | |||||
| sizeHints.base_width = width; | |||||
| sizeHints.base_height = height; | |||||
| sizeHints.min_width = width; | |||||
| sizeHints.min_height = height; | |||||
| sizeHints.max_width = width; | |||||
| sizeHints.max_height = height; | |||||
| XSetNormalHints(display, view->impl->win, &sizeHints); | |||||
| } | |||||
| #endif | |||||
| updateSizeHints(view); | |||||
| } | } | ||||
| #endif | #endif | ||||
| @@ -46,6 +46,10 @@ PUGL_BEGIN_DECLS | |||||
| PUGL_API void | PUGL_API void | ||||
| puglBackendEnter(PuglView* view); | puglBackendEnter(PuglView* view); | ||||
| // clear minimum size to 0 | |||||
| PUGL_API void | |||||
| puglClearMinSize(PuglView* view); | |||||
| // missing in pugl, directly returns title char* pointer | // missing in pugl, directly returns title char* pointer | ||||
| PUGL_API const char* | PUGL_API const char* | ||||
| puglGetWindowTitle(const PuglView* view); | puglGetWindowTitle(const PuglView* view); | ||||
| @@ -62,7 +66,7 @@ puglSetMatchingBackendForCurrentBuild(PuglView* view); | |||||
| PUGL_API PuglStatus | PUGL_API PuglStatus | ||||
| puglSetGeometryConstraints(PuglView* view, unsigned int width, unsigned int height, bool aspect); | puglSetGeometryConstraints(PuglView* view, unsigned int width, unsigned int height, bool aspect); | ||||
| // set window size without changing frame x/y position | |||||
| // set window size with default size and without changing frame x/y position | |||||
| PUGL_API PuglStatus | PUGL_API PuglStatus | ||||
| puglSetWindowSize(PuglView* view, unsigned int width, unsigned int height); | puglSetWindowSize(PuglView* view, unsigned int width, unsigned int height); | ||||
| @@ -668,7 +668,7 @@ public: | |||||
| } | } | ||||
| else | else | ||||
| { | { | ||||
| UIExporter tmpUI(nullptr, 0,fPlugin.getSampleRate(), | |||||
| UIExporter tmpUI(nullptr, 0, fPlugin.getSampleRate(), | |||||
| nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, | nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, | ||||
| fPlugin.getInstancePointer(), fLastScaleFactor); | fPlugin.getInstancePointer(), fLastScaleFactor); | ||||
| fVstRect.right = tmpUI.getWidth(); | fVstRect.right = tmpUI.getWidth(); | ||||
| @@ -301,16 +301,7 @@ public: | |||||
| #else | #else | ||||
| void setWindowTitle(const char* const uiTitle) | void setWindowTitle(const char* const uiTitle) | ||||
| { | { | ||||
| // glWindow.setTitle(uiTitle); | |||||
| } | |||||
| void setWindowSize(const uint width, const uint height) | |||||
| { | |||||
| DISTRHO_SAFE_ASSERT_RETURN(! changingSizeRecursionCheck,); | |||||
| changingSizeRecursionCheck = true; | |||||
| // glWindow.setSize(width, height); | |||||
| changingSizeRecursionCheck = false; | |||||
| uiData->window->setTitle(uiTitle); | |||||
| } | } | ||||
| void setWindowTransientWinId(const uintptr_t /*winId*/) | void setWindowTransientWinId(const uintptr_t /*winId*/) | ||||
| @@ -322,10 +313,9 @@ public: | |||||
| bool setWindowVisible(const bool yesNo) | bool setWindowVisible(const bool yesNo) | ||||
| { | { | ||||
| // glWindow.setVisible(yesNo); | |||||
| uiData->window->setVisible(yesNo); | |||||
| // return ! glApp.isQuiting(); | |||||
| return true; | |||||
| return ! uiData->app.isQuiting(); | |||||
| } | } | ||||
| bool handlePluginKeyboard(const bool /*press*/, const uint /*key*/, const uint16_t /*mods*/) | bool handlePluginKeyboard(const bool /*press*/, const uint /*key*/, const uint16_t /*mods*/) | ||||