aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2025-02-08 16:48:43 -0500
committerDavid Robillard <d@drobilla.net>2025-02-08 18:02:30 -0500
commit23b0774862b79543b93a9b50b4f085c2c396698a (patch)
treed389c9950c0c55c29addab14702f796d97ade25b /src
parent494932c79800698bcd30a506c6abe7f43c59d2bd (diff)
downloadpugl-23b0774862b79543b93a9b50b4f085c2c396698a.tar.gz
pugl-23b0774862b79543b93a9b50b4f085c2c396698a.tar.bz2
pugl-23b0774862b79543b93a9b50b4f085c2c396698a.zip
Add PUGL_CURRENT_SIZE hint and make size hints dynamic
Diffstat (limited to 'src')
-rw-r--r--src/common.c55
-rw-r--r--src/mac.m5
-rw-r--r--src/win.c5
-rw-r--r--src/x11.c4
4 files changed, 40 insertions, 29 deletions
diff --git a/src/common.c b/src/common.c
index 3206a96..b28b4d6 100644
--- a/src/common.c
+++ b/src/common.c
@@ -105,27 +105,32 @@ puglGetWorldString(const PuglWorld* const world, const PuglStringHint key)
}
static void
-puglSetDefaultHints(PuglHints hints)
+puglSetDefaultHints(PuglView* const view)
{
- hints[PUGL_CONTEXT_API] = PUGL_OPENGL_API;
- hints[PUGL_CONTEXT_VERSION_MAJOR] = 2;
- hints[PUGL_CONTEXT_VERSION_MINOR] = 0;
- hints[PUGL_CONTEXT_PROFILE] = PUGL_OPENGL_CORE_PROFILE;
- hints[PUGL_CONTEXT_DEBUG] = PUGL_FALSE;
- hints[PUGL_RED_BITS] = 8;
- hints[PUGL_GREEN_BITS] = 8;
- hints[PUGL_BLUE_BITS] = 8;
- hints[PUGL_ALPHA_BITS] = 8;
- hints[PUGL_DEPTH_BITS] = 0;
- hints[PUGL_STENCIL_BITS] = 0;
- hints[PUGL_SAMPLE_BUFFERS] = PUGL_DONT_CARE;
- hints[PUGL_SAMPLES] = 0;
- hints[PUGL_DOUBLE_BUFFER] = PUGL_TRUE;
- hints[PUGL_SWAP_INTERVAL] = PUGL_DONT_CARE;
- hints[PUGL_RESIZABLE] = PUGL_FALSE;
- hints[PUGL_IGNORE_KEY_REPEAT] = PUGL_FALSE;
- hints[PUGL_REFRESH_RATE] = PUGL_DONT_CARE;
- hints[PUGL_VIEW_TYPE] = PUGL_DONT_CARE;
+ view->hints[PUGL_CONTEXT_API] = PUGL_OPENGL_API;
+ view->hints[PUGL_CONTEXT_VERSION_MAJOR] = 2;
+ view->hints[PUGL_CONTEXT_VERSION_MINOR] = 0;
+ view->hints[PUGL_CONTEXT_PROFILE] = PUGL_OPENGL_CORE_PROFILE;
+ view->hints[PUGL_CONTEXT_DEBUG] = PUGL_FALSE;
+ view->hints[PUGL_RED_BITS] = 8;
+ view->hints[PUGL_GREEN_BITS] = 8;
+ view->hints[PUGL_BLUE_BITS] = 8;
+ view->hints[PUGL_ALPHA_BITS] = 8;
+ view->hints[PUGL_DEPTH_BITS] = 0;
+ view->hints[PUGL_STENCIL_BITS] = 0;
+ view->hints[PUGL_SAMPLE_BUFFERS] = PUGL_DONT_CARE;
+ view->hints[PUGL_SAMPLES] = 0;
+ view->hints[PUGL_DOUBLE_BUFFER] = PUGL_TRUE;
+ view->hints[PUGL_SWAP_INTERVAL] = PUGL_DONT_CARE;
+ view->hints[PUGL_RESIZABLE] = PUGL_FALSE;
+ view->hints[PUGL_IGNORE_KEY_REPEAT] = PUGL_FALSE;
+ view->hints[PUGL_REFRESH_RATE] = PUGL_DONT_CARE;
+ view->hints[PUGL_VIEW_TYPE] = PUGL_DONT_CARE;
+
+ for (unsigned i = 0U; i < PUGL_NUM_SIZE_HINTS; ++i) {
+ view->sizeHints[i].width = 0U;
+ view->sizeHints[i].height = 0U;
+ }
}
PuglView*
@@ -137,13 +142,11 @@ puglNewView(PuglWorld* const world)
return NULL;
}
- view->world = world;
- view->sizeHints[PUGL_MIN_SIZE].width = 1;
- view->sizeHints[PUGL_MIN_SIZE].height = 1;
- view->defaultX = INT_MIN;
- view->defaultY = INT_MIN;
+ view->world = world;
+ view->defaultX = INT_MIN;
+ view->defaultY = INT_MIN;
- puglSetDefaultHints(view->hints);
+ puglSetDefaultHints(view);
// Enlarge world view list
const size_t newNumViews = world->numViews + 1U;
diff --git a/src/mac.m b/src/mac.m
index ee7bb27..b6867a4 100644
--- a/src/mac.m
+++ b/src/mac.m
@@ -1118,6 +1118,7 @@ updateSizeHint(PuglView* const view, const PuglSizeHint hint)
switch (hint) {
case PUGL_DEFAULT_SIZE:
+ case PUGL_CURRENT_SIZE:
break;
case PUGL_MIN_SIZE:
@@ -1789,7 +1790,9 @@ puglSetSizeHint(PuglView* const view,
{
const PuglStatus st = puglStoreSizeHint(view, hint, width, height);
- return (!st && view->impl->window) ? updateSizeHint(view, hint) : st;
+ return st ? st
+ : (hint == PUGL_CURRENT_SIZE) ? puglSetSize(view, width, height)
+ : updateSizeHint(view, hint);
}
PuglStatus
diff --git a/src/win.c b/src/win.c
index 3f37381..6c823fb 100644
--- a/src/win.c
+++ b/src/win.c
@@ -1306,7 +1306,10 @@ puglSetSizeHint(PuglView* const view,
const unsigned width,
const unsigned height)
{
- return puglStoreSizeHint(view, hint, width, height);
+ const PuglStatus st = puglStoreSizeHint(view, hint, width, height);
+
+ return (!st && hint == PUGL_CURRENT_SIZE) ? puglSetSize(view, width, height)
+ : st;
}
PuglStatus
diff --git a/src/x11.c b/src/x11.c
index 836152d..3d825a6 100644
--- a/src/x11.c
+++ b/src/x11.c
@@ -1994,7 +1994,9 @@ puglSetSizeHint(PuglView* const view,
{
const PuglStatus st = puglStoreSizeHint(view, hint, width, height);
- return st ? st : updateSizeHints(view);
+ return st ? st
+ : (hint == PUGL_CURRENT_SIZE) ? puglSetSize(view, width, height)
+ : updateSizeHints(view);
}
PuglStatus