diff options
author | David Robillard <d@drobilla.net> | 2019-10-27 13:05:00 +0100 |
---|---|---|
committer | David Robillard <d@drobilla.net> | 2019-11-03 21:03:18 +0100 |
commit | 3c9a8a2ed86d08da842e11d32065da43b5bfdc77 (patch) | |
tree | d5ddb2c4e86a21129bc1b533613d2110a9ba2e09 /pugl/detail | |
parent | 14c7cb54a913be5a505148068582d9c56e3d1681 (diff) | |
download | pugl-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/detail')
-rw-r--r-- | pugl/detail/win.h | 24 | ||||
-rw-r--r-- | pugl/detail/win_cairo.c | 24 | ||||
-rw-r--r-- | pugl/detail/x11.h | 13 | ||||
-rw-r--r-- | pugl/detail/x11_cairo.c | 15 |
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, |