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*/) | ||||