Browse Source

Always set default size; Continue resize cleanup

Signed-off-by: falkTX <falktx@falktx.com>
pull/281/head
falkTX 4 years ago
parent
commit
68c55e0dfd
Signed by: falkTX <falktx@falktx.com> GPG Key ID: CDBAA37ABC74FBA0
6 changed files with 53 additions and 40 deletions
  1. +2
    -4
      dgl/src/Window.cpp
  2. +5
    -18
      dgl/src/WindowPrivateData.cpp
  3. +37
    -3
      dgl/src/pugl.cpp
  4. +5
    -1
      dgl/src/pugl.hpp
  5. +1
    -1
      distrho/src/DistrhoPluginVST.cpp
  6. +3
    -13
      distrho/src/DistrhoUIInternal.hpp

+ 2
- 4
dgl/src/Window.cpp View File

@@ -145,8 +145,10 @@ void Window::setSize(uint width, uint height)
// handle geometry constraints here
if (width < pData->minWidth)
width = pData->minWidth;

if (height < pData->minHeight)
height = pData->minHeight;

if (pData->keepAspectRatio)
{
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);
}



+ 5
- 18
dgl/src/WindowPrivateData.cpp View File

@@ -145,10 +145,7 @@ Window::PrivateData::PrivateData(Application& a, Window* const s,
modal()
{
if (isEmbed)
{
// puglSetDefaultSize(DEFAULT_WIDTH, DEFAULT_HEIGHT, height);
puglSetParentWindow(view, parentWindowHandle);
}

initPre(DEFAULT_WIDTH, DEFAULT_HEIGHT, resizable);
}
@@ -177,10 +174,7 @@ Window::PrivateData::PrivateData(Application& a, Window* const s,
modal()
{
if (isEmbed)
{
puglSetDefaultSize(view, static_cast<int>(width), static_cast<int>(height));
puglSetParentWindow(view, parentWindowHandle);
}

initPre(width, height, resizable);
}
@@ -226,6 +220,9 @@ void Window::PrivateData::initPre(const uint width, const uint height, const boo

puglSetMatchingBackendForCurrentBuild(view);

puglClearMinSize(view);
puglSetWindowSize(view, width, height);

puglSetHandle(view, this);
puglSetViewHint(view, PUGL_RESIZABLE, resizable ? PUGL_TRUE : 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);
// PUGL_SAMPLES ??
puglSetEventFunc(view, puglEventCallback);

PuglRect rect = puglGetFrame(view);
rect.width = width;
rect.height = height;
puglSetFrame(view, rect);
}

void Window::PrivateData::initPost()
@@ -303,7 +295,6 @@ void Window::PrivateData::show()

// FIXME
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));

#ifdef DISTRHO_OS_WINDOWS
@@ -562,10 +553,6 @@ void Window::PrivateData::startModal()
// make parent give focus to us
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
modal.parent->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.
* 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..
*
* 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.
* 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()
{
DGL_DBGp("PUGL: onPuglExpose : %p\n", topLevelWidget);
DGL_DBGp("PUGL: onPuglExpose\n");

puglOnDisplayPrepare(view);



+ 37
- 3
dgl/src/pugl.cpp View File

@@ -152,11 +152,20 @@ START_NAMESPACE_DGL
// --------------------------------------------------------------------------------------------------------------------
// expose backend enter

void puglBackendEnter(PuglView* view)
void puglBackendEnter(PuglView* const view)
{
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

@@ -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)
{
view->defaultWidth = width;
view->defaultHeight = height;

#if defined(DISTRHO_OS_HAIKU) || defined(DISTRHO_OS_MAC)
// keep upstream behaviour
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
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;

#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



+ 5
- 1
dgl/src/pugl.hpp View File

@@ -46,6 +46,10 @@ PUGL_BEGIN_DECLS
PUGL_API void
puglBackendEnter(PuglView* view);

// clear minimum size to 0
PUGL_API void
puglClearMinSize(PuglView* view);

// missing in pugl, directly returns title char* pointer
PUGL_API const char*
puglGetWindowTitle(const PuglView* view);
@@ -62,7 +66,7 @@ puglSetMatchingBackendForCurrentBuild(PuglView* view);
PUGL_API PuglStatus
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
puglSetWindowSize(PuglView* view, unsigned int width, unsigned int height);



+ 1
- 1
distrho/src/DistrhoPluginVST.cpp View File

@@ -668,7 +668,7 @@ public:
}
else
{
UIExporter tmpUI(nullptr, 0,fPlugin.getSampleRate(),
UIExporter tmpUI(nullptr, 0, fPlugin.getSampleRate(),
nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
fPlugin.getInstancePointer(), fLastScaleFactor);
fVstRect.right = tmpUI.getWidth();


+ 3
- 13
distrho/src/DistrhoUIInternal.hpp View File

@@ -301,16 +301,7 @@ public:
#else
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*/)
@@ -322,10 +313,9 @@ public:

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


Loading…
Cancel
Save