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 | |
parent | 14c7cb54a913be5a505148068582d9c56e3d1681 (diff) |
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.
-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, |