aboutsummaryrefslogtreecommitdiffstats
path: root/pugl/detail/win_cairo.c
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2020-10-21 12:14:26 +0200
committerDavid Robillard <d@drobilla.net>2020-10-21 15:43:29 +0200
commit380edd6da07fb1fd6c89c046190dad3b7fd95386 (patch)
tree889969700d44e36ffbaafa053c293eec2a453bca /pugl/detail/win_cairo.c
parente78e00a46f84ec6e528a7435575e6434813ba67c (diff)
downloadpugl-380edd6da07fb1fd6c89c046190dad3b7fd95386.tar.gz
pugl-380edd6da07fb1fd6c89c046190dad3b7fd95386.tar.bz2
pugl-380edd6da07fb1fd6c89c046190dad3b7fd95386.zip
Move includes to a separate directory
This is more conventional and directories named "include" are specially understood by some tooling like clang-tidy.
Diffstat (limited to 'pugl/detail/win_cairo.c')
-rw-r--r--pugl/detail/win_cairo.c178
1 files changed, 0 insertions, 178 deletions
diff --git a/pugl/detail/win_cairo.c b/pugl/detail/win_cairo.c
deleted file mode 100644
index 1b9afb9..0000000
--- a/pugl/detail/win_cairo.c
+++ /dev/null
@@ -1,178 +0,0 @@
-/*
- Copyright 2012-2020 David Robillard <d@drobilla.net>
-
- Permission to use, copy, modify, and/or distribute this software for any
- purpose with or without fee is hereby granted, provided that the above
- copyright notice and this permission notice appear in all copies.
-
- THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
- ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
- OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-*/
-
-/**
- @file win_cairo.c
- @brief Cairo graphics backend for Windows.
-*/
-
-#include "pugl/detail/stub.h"
-#include "pugl/detail/types.h"
-#include "pugl/detail/win.h"
-#include "pugl/pugl_cairo.h"
-
-#include <cairo-win32.h>
-#include <cairo.h>
-
-#include <stdlib.h>
-
-typedef struct {
- cairo_surface_t* surface;
- cairo_t* cr;
- HDC drawDc;
- HBITMAP drawBitmap;
-} PuglWinCairoSurface;
-
-static PuglStatus
-puglWinCairoCreateDrawContext(PuglView* view)
-{
- PuglInternals* const impl = view->impl;
- PuglWinCairoSurface* const surface = (PuglWinCairoSurface*)impl->surface;
-
- surface->drawDc = CreateCompatibleDC(impl->hdc);
- surface->drawBitmap = CreateCompatibleBitmap(
- impl->hdc, (int)view->frame.width, (int)view->frame.height);
-
- DeleteObject(SelectObject(surface->drawDc, surface->drawBitmap));
-
- return PUGL_SUCCESS;
-}
-
-static PuglStatus
-puglWinCairoDestroyDrawContext(PuglView* view)
-{
- PuglInternals* const impl = view->impl;
- PuglWinCairoSurface* const surface = (PuglWinCairoSurface*)impl->surface;
-
- DeleteDC(surface->drawDc);
- DeleteObject(surface->drawBitmap);
-
- surface->drawDc = NULL;
- surface->drawBitmap = NULL;
-
- return PUGL_SUCCESS;
-}
-
-static PuglStatus
-puglWinCairoConfigure(PuglView* view)
-{
- const PuglStatus st = puglWinStubConfigure(view);
-
- if (!st) {
- view->impl->surface = (PuglWinCairoSurface*)calloc(
- 1, sizeof(PuglWinCairoSurface));
- }
-
- return st;
-}
-
-static void
-puglWinCairoClose(PuglView* view)
-{
- PuglInternals* const impl = view->impl;
- PuglWinCairoSurface* const surface = (PuglWinCairoSurface*)impl->surface;
-
- cairo_surface_destroy(surface->surface);
-
- surface->surface = NULL;
-}
-
-static PuglStatus
-puglWinCairoOpen(PuglView* view)
-{
- PuglInternals* const impl = view->impl;
- PuglWinCairoSurface* const surface = (PuglWinCairoSurface*)impl->surface;
-
- cairo_status_t st = CAIRO_STATUS_SUCCESS;
- if (!(surface->surface = cairo_win32_surface_create(surface->drawDc)) ||
- (st = cairo_surface_status(surface->surface)) ||
- !(surface->cr = cairo_create(surface->surface)) ||
- (st = cairo_status(surface->cr))) {
- return PUGL_CREATE_CONTEXT_FAILED;
- }
-
- return PUGL_SUCCESS;
-}
-
-static PuglStatus
-puglWinCairoDestroy(PuglView* view)
-{
- PuglInternals* const impl = view->impl;
- PuglWinCairoSurface* const surface = (PuglWinCairoSurface*)impl->surface;
-
- puglWinCairoClose(view);
- puglWinCairoDestroyDrawContext(view);
- free(surface);
- impl->surface = NULL;
-
- return PUGL_SUCCESS;
-}
-
-static PuglStatus
-puglWinCairoEnter(PuglView* view, const PuglEventExpose* expose)
-{
- PuglStatus st = PUGL_SUCCESS;
-
- if (expose &&
- !(st = puglWinCairoCreateDrawContext(view)) &&
- !(st = puglWinCairoOpen(view))) {
- PAINTSTRUCT ps;
- BeginPaint(view->impl->hwnd, &ps);
- }
-
- return st;
-}
-
-static PuglStatus
-puglWinCairoLeave(PuglView* view, const PuglEventExpose* expose)
-{
- PuglInternals* const impl = view->impl;
- PuglWinCairoSurface* const surface = (PuglWinCairoSurface*)impl->surface;
-
- if (expose) {
- cairo_surface_flush(surface->surface);
- BitBlt(impl->hdc,
- 0, 0, (int)view->frame.width, (int)view->frame.height,
- surface->drawDc, 0, 0, SRCCOPY);
-
- puglWinCairoClose(view);
- puglWinCairoDestroyDrawContext(view);
-
- PAINTSTRUCT ps;
- EndPaint(view->impl->hwnd, &ps);
- }
-
- return PUGL_SUCCESS;
-}
-
-static void*
-puglWinCairoGetContext(PuglView* view)
-{
- return ((PuglWinCairoSurface*)view->impl->surface)->cr;
-}
-
-const PuglBackend*
-puglCairoBackend()
-{
- static const PuglBackend backend = {puglWinCairoConfigure,
- puglStubCreate,
- puglWinCairoDestroy,
- puglWinCairoEnter,
- puglWinCairoLeave,
- puglWinCairoGetContext};
-
- return &backend;
-}