Skip to content

Commit d4c2ce6

Browse files
committed
Leave aspect-ratio storage on pugl side
Signed-off-by: falkTX <[email protected]>
1 parent 793f50b commit d4c2ce6

File tree

5 files changed

+44
-43
lines changed

5 files changed

+44
-43
lines changed

dgl/src/Window.cpp

Lines changed: 27 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -274,28 +274,27 @@ void Window::setSize(uint width, uint height)
274274

275275
if (pData->isEmbed)
276276
{
277-
uint minWidth = pData->minWidth;
278-
uint minHeight = pData->minHeight;
277+
PuglArea area = puglGetSizeHint(pData->view, PUGL_FIXED_ASPECT);
279278

280279
if (pData->autoScaling && d_isNotEqual(scaleFactor, 1.0))
281280
{
282-
minWidth = d_roundToUnsignedInt(minWidth * scaleFactor);
283-
minHeight = d_roundToUnsignedInt(minHeight * scaleFactor);
281+
area.width = d_roundToUnsignedInt(area.width * scaleFactor);
282+
area.height = d_roundToUnsignedInt(area.height * scaleFactor);
284283
width = d_roundToUnsignedInt(width * scaleFactor);
285284
height = d_roundToUnsignedInt(height * scaleFactor);
286285
}
287286

288287
// handle geometry constraints here
289-
if (width < minWidth)
290-
width = minWidth;
288+
if (width < area.width)
289+
width = area.width;
291290

292-
if (height < minHeight)
293-
height = minHeight;
291+
if (height < area.height)
292+
height = area.height;
294293

295-
if (pData->keepAspectRatio)
294+
if (area.width != 0 && area.height != 0)
296295
{
297-
const double ratio = static_cast<double>(pData->minWidth)
298-
/ static_cast<double>(pData->minHeight);
296+
const double ratio = static_cast<double>(area.width)
297+
/ static_cast<double>(area.height);
299298
const double reqRatio = static_cast<double>(width)
300299
/ static_cast<double>(height);
301300

@@ -432,11 +431,10 @@ void Window::enableInternalScalingWithSize(uint baseWidth, uint baseHeight, cons
432431
const double scaleHorizontal = size.getWidth() / static_cast<double>(baseWidth);
433432
const double scaleVertical = size.getHeight() / static_cast<double>(baseHeight);
434433

435-
pData->minWidth = baseWidth;
436-
pData->minHeight = baseHeight;
434+
pData->baseWidth = baseWidth;
435+
pData->baseHeight = baseHeight;
437436
pData->autoScaling = true;
438437
pData->autoScaleFactor = scaleHorizontal < scaleVertical ? scaleHorizontal : scaleVertical;
439-
pData->keepAspectRatio = keepAspectRatio;
440438

441439
if (pData->view == nullptr)
442440
return;
@@ -527,19 +525,16 @@ void Window::runAsModal(bool blockWait)
527525

528526
Size<uint> Window::getGeometryConstraints(bool& keepAspectRatio)
529527
{
530-
keepAspectRatio = pData->keepAspectRatio;
531-
return Size<uint>(pData->minWidth, pData->minHeight);
528+
const PuglArea area = puglGetSizeHint(pData->view, PUGL_FIXED_ASPECT);
529+
keepAspectRatio = area.width != 0 && area.height != 0;
530+
return Size<uint>(area.width, area.height);
532531
}
533532

534533
void Window::setGeometryConstraints(const uint minimumWidth, const uint minimumHeight, const bool keepAspectRatio)
535534
{
536535
DISTRHO_SAFE_ASSERT_RETURN(minimumWidth > 0,);
537536
DISTRHO_SAFE_ASSERT_RETURN(minimumHeight > 0,);
538537

539-
pData->minWidth = minimumWidth;
540-
pData->minHeight = minimumHeight;
541-
pData->keepAspectRatio = keepAspectRatio;
542-
543538
if (pData->view != nullptr)
544539
puglSetGeometryConstraints(pData->view, minimumWidth, minimumHeight, keepAspectRatio);
545540
}
@@ -558,10 +553,18 @@ void Window::setGeometryConstraints(uint minimumWidth,
558553
if (resizeNowIfAutoScaling && automaticallyScale && pData->autoScaling == automaticallyScale)
559554
resizeNowIfAutoScaling = false;
560555

561-
pData->minWidth = minimumWidth;
562-
pData->minHeight = minimumHeight;
563-
pData->autoScaling = automaticallyScale;
564-
pData->keepAspectRatio = keepAspectRatio;
556+
if (automaticallyScale)
557+
{
558+
pData->autoScaling = true;
559+
pData->baseWidth = minimumWidth;
560+
pData->baseHeight = minimumHeight;
561+
}
562+
else
563+
{
564+
pData->autoScaling = false;
565+
pData->baseWidth = 0;
566+
pData->baseHeight = 0;
567+
}
565568

566569
if (pData->view == nullptr)
567570
return;

dgl/src/WindowPrivateData.cpp

Lines changed: 10 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -118,9 +118,8 @@ Window::PrivateData::PrivateData(Application& a, Window* const s)
118118
scaleFactor(DGL_NAMESPACE::getScaleFactor(view)),
119119
autoScaling(false),
120120
autoScaleFactor(1.0),
121-
minWidth(0),
122-
minHeight(0),
123-
keepAspectRatio(false),
121+
baseWidth(0),
122+
baseHeight(0),
124123
ignoreIdleCallbacks(false),
125124
waitingForClipboardData(false),
126125
waitingForClipboardEvents(false),
@@ -151,9 +150,8 @@ Window::PrivateData::PrivateData(Application& a, Window* const s, PrivateData* c
151150
scaleFactor(ppData->scaleFactor),
152151
autoScaling(false),
153152
autoScaleFactor(1.0),
154-
minWidth(0),
155-
minHeight(0),
156-
keepAspectRatio(false),
153+
baseWidth(0),
154+
baseHeight(0),
157155
ignoreIdleCallbacks(false),
158156
waitingForClipboardData(false),
159157
waitingForClipboardEvents(false),
@@ -186,9 +184,8 @@ Window::PrivateData::PrivateData(Application& a, Window* const s,
186184
scaleFactor(scale != 0.0 ? scale : DGL_NAMESPACE::getScaleFactor(view)),
187185
autoScaling(false),
188186
autoScaleFactor(1.0),
189-
minWidth(0),
190-
minHeight(0),
191-
keepAspectRatio(false),
187+
baseWidth(0),
188+
baseHeight(0),
192189
ignoreIdleCallbacks(false),
193190
waitingForClipboardData(false),
194191
waitingForClipboardEvents(false),
@@ -224,9 +221,8 @@ Window::PrivateData::PrivateData(Application& a, Window* const s,
224221
scaleFactor(scale != 0.0 ? scale : DGL_NAMESPACE::getScaleFactor(view)),
225222
autoScaling(false),
226223
autoScaleFactor(1.0),
227-
minWidth(0),
228-
minHeight(0),
229-
keepAspectRatio(false),
224+
baseWidth(0),
225+
baseHeight(0),
230226
ignoreIdleCallbacks(false),
231227
waitingForClipboardData(false),
232228
waitingForClipboardEvents(false),
@@ -654,8 +650,8 @@ void Window::PrivateData::onPuglConfigure(const uint width, const uint height)
654650

655651
if (autoScaling)
656652
{
657-
const double scaleHorizontal = width / static_cast<double>(minWidth);
658-
const double scaleVertical = height / static_cast<double>(minHeight);
653+
const double scaleHorizontal = width / static_cast<double>(baseWidth);
654+
const double scaleVertical = height / static_cast<double>(baseHeight);
659655
autoScaleFactor = scaleHorizontal < scaleVertical ? scaleHorizontal : scaleVertical;
660656
}
661657
else

dgl/src/WindowPrivateData.hpp

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -76,10 +76,7 @@ struct Window::PrivateData : IdleCallback {
7676
/** Automatic scaling to apply on widgets, implemented internally. */
7777
bool autoScaling;
7878
double autoScaleFactor;
79-
80-
/** Pugl geometry constraints access. */
81-
uint minWidth, minHeight;
82-
bool keepAspectRatio;
79+
uint baseWidth, baseHeight;
8380

8481
/** Whether to ignore idle callback requests, useful for temporary windows. */
8582
bool ignoreIdleCallbacks;

dgl/src/pugl.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -308,6 +308,11 @@ PuglStatus puglSetGeometryConstraints(PuglView* const view, const uint width, co
308308
view->sizeHints[PUGL_FIXED_ASPECT].width = static_cast<PuglSpan>(width);
309309
view->sizeHints[PUGL_FIXED_ASPECT].height = static_cast<PuglSpan>(height);
310310
}
311+
else
312+
{
313+
view->sizeHints[PUGL_FIXED_ASPECT].width = 0;
314+
view->sizeHints[PUGL_FIXED_ASPECT].height = 0;
315+
}
311316

312317
#if defined(DISTRHO_OS_HAIKU)
313318
#elif defined(DISTRHO_OS_MAC)

distrho/src/DistrhoUI.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -382,7 +382,7 @@ UI::UI(const uint width, const uint height, const bool automaticallyScaleAndSetA
382382
#pragma GCC diagnostic push
383383
#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
384384
#endif
385-
setGeometryConstraints(width, height, true, true, true);
385+
setGeometryConstraints(width, height, true, true, false);
386386
#if defined(_MSC_VER)
387387
#pragma warning(pop)
388388
#elif defined(__clang__)

0 commit comments

Comments
 (0)