aboutsummaryrefslogtreecommitdiffstats
path: root/pugl
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2019-10-27 13:05:00 +0100
committerDavid Robillard <d@drobilla.net>2019-11-03 21:03:18 +0100
commit3c9a8a2ed86d08da842e11d32065da43b5bfdc77 (patch)
treed5ddb2c4e86a21129bc1b533613d2110a9ba2e09 /pugl
parent14c7cb54a913be5a505148068582d9c56e3d1681 (diff)
downloadpugl-3c9a8a2ed86d08da842e11d32065da43b5bfdc77.tar.gz
pugl-3c9a8a2ed86d08da842e11d32065da43b5bfdc77.tar.bz2
pugl-3c9a8a2ed86d08da842e11d32065da43b5bfdc77.zip
Move platform stub configuration code to platform headers
This allows backends which use basic software rendering (like Cairo) to share the common basic window format setup code.
Diffstat (limited to 'pugl')
-rw-r--r--pugl/detail/win.h24
-rw-r--r--pugl/detail/win_cairo.c24
-rw-r--r--pugl/detail/x11.h13
-rw-r--r--pugl/detail/x11_cairo.c15
4 files changed, 43 insertions, 33 deletions
diff --git a/pugl/detail/win.h b/pugl/detail/win.h
index 6d89759..e9056b7 100644
--- a/pugl/detail/win.h
+++ b/pugl/detail/win.h
@@ -113,3 +113,27 @@ puglWinCreateWindow(const PuglView* const view,
return PUGL_SUCCESS;
}
+
+static inline PuglStatus
+puglWinStubConfigure(PuglView* view)
+{
+ PuglInternals* const impl = view->impl;
+ PuglStatus st = PUGL_SUCCESS;
+
+ if ((st = puglWinCreateWindow(view, "Pugl", &impl->hwnd, &impl->hdc))) {
+ return st;
+ }
+
+ impl->pfd = puglWinGetPixelFormatDescriptor(view->hints);
+ impl->pfId = ChoosePixelFormat(impl->hdc, &impl->pfd);
+
+ if (!SetPixelFormat(impl->hdc, impl->pfId, &impl->pfd)) {
+ ReleaseDC(impl->hwnd, impl->hdc);
+ DestroyWindow(impl->hwnd);
+ impl->hwnd = NULL;
+ impl->hdc = NULL;
+ return PUGL_SET_FORMAT_FAILED;
+ }
+
+ return PUGL_SUCCESS;
+}
diff --git a/pugl/detail/win_cairo.c b/pugl/detail/win_cairo.c
index 497711b..27765ec 100644
--- a/pugl/detail/win_cairo.c
+++ b/pugl/detail/win_cairo.c
@@ -80,28 +80,14 @@ puglWinCairoDestroyDrawContext(PuglView* view)
static PuglStatus
puglWinCairoConfigure(PuglView* view)
{
- PuglInternals* const impl = view->impl;
- PuglStatus st = PUGL_SUCCESS;
+ const PuglStatus st = puglWinStubConfigure(view);
- if ((st = puglWinCreateWindow(view, "Pugl", &impl->hwnd, &impl->hdc))) {
- return st;
- }
-
- impl->pfd = puglWinGetPixelFormatDescriptor(view->hints);
- impl->pfId = ChoosePixelFormat(impl->hdc, &impl->pfd);
-
- if (!SetPixelFormat(impl->hdc, impl->pfId, &impl->pfd)) {
- ReleaseDC(impl->hwnd, impl->hdc);
- DestroyWindow(impl->hwnd);
- impl->hwnd = NULL;
- impl->hdc = NULL;
- return PUGL_SET_FORMAT_FAILED;
+ if (!st) {
+ view->impl->surface = (PuglWinCairoSurface*)calloc(
+ 1, sizeof(PuglWinCairoSurface));
}
- impl->surface = (PuglWinCairoSurface*)calloc(
- 1, sizeof(PuglWinCairoSurface));
-
- return PUGL_SUCCESS;
+ return st;
}
static PuglStatus
diff --git a/pugl/detail/x11.h b/pugl/detail/x11.h
index bfdbf60..d7990ca 100644
--- a/pugl/detail/x11.h
+++ b/pugl/detail/x11.h
@@ -49,3 +49,16 @@ struct PuglInternalsImpl {
PuglEvent pendingConfigure;
PuglEvent pendingExpose;
};
+
+static inline PuglStatus
+puglX11StubConfigure(PuglView* view)
+{
+ PuglInternals* const impl = view->impl;
+ XVisualInfo pat = {0};
+ int n = 0;
+
+ pat.screen = impl->screen;
+ impl->vi = XGetVisualInfo(impl->display, VisualScreenMask, &pat, &n);
+
+ return PUGL_SUCCESS;
+}
diff --git a/pugl/detail/x11_cairo.c b/pugl/detail/x11_cairo.c
index 0753317..1c7df6e 100644
--- a/pugl/detail/x11_cairo.c
+++ b/pugl/detail/x11_cairo.c
@@ -39,19 +39,6 @@ typedef struct {
} PuglX11CairoSurface;
static PuglStatus
-puglX11CairoConfigure(PuglView* view)
-{
- PuglInternals* const impl = view->impl;
-
- XVisualInfo pat;
- int n;
- pat.screen = impl->screen;
- impl->vi = XGetVisualInfo(impl->display, VisualScreenMask, &pat, &n);
-
- return PUGL_SUCCESS;
-}
-
-static PuglStatus
puglX11CairoCreate(PuglView* view)
{
PuglInternals* const impl = view->impl;
@@ -163,7 +150,7 @@ const PuglBackend*
puglCairoBackend(void)
{
static const PuglBackend backend = {
- puglX11CairoConfigure,
+ puglX11StubConfigure,
puglX11CairoCreate,
puglX11CairoDestroy,
puglX11CairoEnter,