diff options
author | sanine <sanine.not@pm.me> | 2023-02-12 23:53:22 -0600 |
---|---|---|
committer | sanine <sanine.not@pm.me> | 2023-02-12 23:53:22 -0600 |
commit | f1fe73d1909a2448a004a88362a1a532d0d4f7c3 (patch) | |
tree | ab37ae3837e2f858de2932bcee9f26e69fab3db1 /libs/cairo-1.16.0/boilerplate/cairo-boilerplate-xlib.c | |
parent | f567ea1e2798fd3156a416e61f083ea3e6b95719 (diff) |
switch to tinyobj and nanovg from assimp and cairo
Diffstat (limited to 'libs/cairo-1.16.0/boilerplate/cairo-boilerplate-xlib.c')
-rw-r--r-- | libs/cairo-1.16.0/boilerplate/cairo-boilerplate-xlib.c | 638 |
1 files changed, 0 insertions, 638 deletions
diff --git a/libs/cairo-1.16.0/boilerplate/cairo-boilerplate-xlib.c b/libs/cairo-1.16.0/boilerplate/cairo-boilerplate-xlib.c deleted file mode 100644 index f3d5598..0000000 --- a/libs/cairo-1.16.0/boilerplate/cairo-boilerplate-xlib.c +++ /dev/null @@ -1,638 +0,0 @@ -/* -*- Mode: c; c-basic-offset: 4; indent-tabs-mode: t; tab-width: 8; -*- */ -/* - * Copyright © 2004,2006 Red Hat, Inc. - * - * Permission to use, copy, modify, distribute, and sell this software - * and its documentation for any purpose is hereby granted without - * fee, provided that the above copyright notice appear in all copies - * and that both that copyright notice and this permission notice - * appear in supporting documentation, and that the name of - * Red Hat, Inc. not be used in advertising or publicity pertaining to - * distribution of the software without specific, written prior - * permission. Red Hat, Inc. makes no representations about the - * suitability of this software for any purpose. It is provided "as - * is" without express or implied warranty. - * - * RED HAT, INC. DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS - * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND - * FITNESS, IN NO EVENT SHALL RED HAT, INC. BE LIABLE FOR ANY SPECIAL, - * 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. - * - * Author: Carl D. Worth <cworth@cworth.org> - */ - -#include "cairo-boilerplate-private.h" -#include "cairo-boilerplate-xlib.h" - -#include <cairo-xlib.h> -#if CAIRO_HAS_XLIB_XRENDER_SURFACE -#include <cairo-xlib-xrender.h> -#endif - -#include <X11/Xutil.h> /* for XDestroyImage */ - -#if !CAIRO_HAS_XLIB_XRENDER_SURFACE -#define PolyModePrecise 0 -#endif - -static const cairo_user_data_key_t key; - -typedef struct _xlib_target_closure { - Display *dpy; - Drawable drawable; - cairo_bool_t drawable_is_pixmap; -} xlib_target_closure_t; - -static void -_cairo_boilerplate_xlib_cleanup (void *closure) -{ - xlib_target_closure_t *xtc = closure; - - if (xtc->drawable) { - if (xtc->drawable_is_pixmap) - XFreePixmap (xtc->dpy, xtc->drawable); - else - XDestroyWindow (xtc->dpy, xtc->drawable); - } - XCloseDisplay (xtc->dpy); - free (xtc); -} - -static void -_cairo_boilerplate_xlib_synchronize (void *closure) -{ - xlib_target_closure_t *xtc = closure; - XImage *ximage; - - ximage = XGetImage (xtc->dpy, xtc->drawable, - 0, 0, 1, 1, AllPlanes, ZPixmap); - if (ximage != NULL) - XDestroyImage (ximage); -} - -static cairo_bool_t -_cairo_boilerplate_xlib_check_screen_size (Display *dpy, - int screen, - int width, - int height) -{ - Screen *scr = XScreenOfDisplay (dpy, screen); - return width <= WidthOfScreen (scr) && height <= HeightOfScreen (scr); -} - -static void -_cairo_boilerplate_xlib_setup_test_surface (cairo_surface_t *surface) -{ - - /* For testing purposes, tell the X server to strictly adhere to the - * Render specification. - */ - cairo_xlib_device_debug_set_precision(cairo_surface_get_device(surface), - PolyModePrecise); -} - - -#if CAIRO_HAS_XLIB_XRENDER_SURFACE -/* For the xlib backend we distinguish between TEST and PERF mode in a - * couple of ways. - * - * For TEST, we always test against pixmaps of depth 32 (for - * COLOR_ALPHA) or 24 (for COLOR) and we use XSynchronize to make it - * easier to debug problems. - * - * For PERF, we test against 32-bit pixmaps for COLOR_ALPHA, but for - * COLOR we test against _windows_ at the depth of the default visual. - * For obvious reasons, we don't use XSynchronize. - */ -static cairo_surface_t * -_cairo_boilerplate_xlib_test_create_surface (Display *dpy, - cairo_content_t content, - int width, - int height, - xlib_target_closure_t *xtc) -{ - XRenderPictFormat *xrender_format; - cairo_surface_t *surface; - - /* This kills performance, but it makes debugging much - * easier. That's why we have it here when in TEST mode, but not - * over in PERF mode. */ - XSynchronize (xtc->dpy, 1); - - /* XXX: Currently we don't do any xlib testing when the X server - * doesn't have the Render extension. We could do better here, - * (perhaps by converting the tests from ARGB32 to RGB24). One - * step better would be to always test the non-Render fallbacks - * for each test even if the server does have the Render - * extension. That would probably be through another - * cairo_boilerplate_target which would use an extended version of - * cairo_test_xlib_disable_render. */ - switch (content) { - case CAIRO_CONTENT_COLOR_ALPHA: - xrender_format = XRenderFindStandardFormat (dpy, PictStandardARGB32); - break; - case CAIRO_CONTENT_COLOR: - xrender_format = XRenderFindStandardFormat (dpy, PictStandardRGB24); - break; - case CAIRO_CONTENT_ALPHA: - default: - CAIRO_BOILERPLATE_DEBUG (("Invalid content for xlib test: %d\n", content)); - return NULL; - } - if (xrender_format == NULL) { - CAIRO_BOILERPLATE_DEBUG (("X server does not have the Render extension.\n")); - return NULL; - } - - xtc->drawable = XCreatePixmap (dpy, DefaultRootWindow (dpy), - width, height, xrender_format->depth); - xtc->drawable_is_pixmap = TRUE; - - surface = cairo_xlib_surface_create_with_xrender_format (dpy, xtc->drawable, - DefaultScreenOfDisplay (dpy), - xrender_format, - width, height); - - _cairo_boilerplate_xlib_setup_test_surface(surface); - - return surface; -} - -static cairo_surface_t * -_cairo_boilerplate_xlib_perf_create_surface (Display *dpy, - cairo_content_t content, - int width, - int height, - xlib_target_closure_t *xtc) -{ - XSetWindowAttributes attr; - XRenderPictFormat *xrender_format; - Visual *visual; - - switch (content) { - case CAIRO_CONTENT_COLOR_ALPHA: - xrender_format = XRenderFindStandardFormat (dpy, PictStandardARGB32); - if (xrender_format == NULL) { - CAIRO_BOILERPLATE_DEBUG (("X server does not have the Render extension.\n")); - return NULL; - } - - xtc->drawable = XCreatePixmap (dpy, DefaultRootWindow (dpy), - width, height, xrender_format->depth); - xtc->drawable_is_pixmap = TRUE; - break; - - case CAIRO_CONTENT_COLOR: - if (! _cairo_boilerplate_xlib_check_screen_size (dpy, - DefaultScreen (dpy), - width, height)) { - CAIRO_BOILERPLATE_DEBUG (("Surface is larger than the Screen.\n")); - return NULL; - } - - visual = DefaultVisual (dpy, DefaultScreen (dpy)); - xrender_format = XRenderFindVisualFormat (dpy, visual); - if (xrender_format == NULL) { - CAIRO_BOILERPLATE_DEBUG (("X server does not have the Render extension.\n")); - return NULL; - } - - attr.override_redirect = True; - xtc->drawable = XCreateWindow (dpy, DefaultRootWindow (dpy), 0, 0, - width, height, 0, xrender_format->depth, - InputOutput, visual, CWOverrideRedirect, &attr); - XMapWindow (dpy, xtc->drawable); - xtc->drawable_is_pixmap = FALSE; - break; - - case CAIRO_CONTENT_ALPHA: - default: - CAIRO_BOILERPLATE_DEBUG (("Invalid content for xlib test: %d\n", content)); - return NULL; - } - - return cairo_xlib_surface_create_with_xrender_format (dpy, xtc->drawable, - DefaultScreenOfDisplay (dpy), - xrender_format, - width, height); -} - -struct similar { - Display *dpy; - Pixmap pixmap; -}; - -static void _destroy_similar (void *closure) -{ - struct similar *similar = closure; - - XFreePixmap (similar->dpy, similar->pixmap); - free (similar); -} - -static cairo_surface_t * -_cairo_boilerplate_xlib_create_similar (cairo_surface_t *other, - cairo_content_t content, - int width, - int height) -{ - XRenderPictFormat *xrender_format; - uint32_t format; - struct similar *similar; - cairo_surface_t *surface; - - similar = malloc (sizeof (*similar)); - similar->dpy = cairo_xlib_surface_get_display (other); - - switch (content) { - case CAIRO_CONTENT_COLOR: - format = PictStandardRGB24; - break; - case CAIRO_CONTENT_ALPHA: - format = PictStandardA8; - break; - case CAIRO_CONTENT_COLOR_ALPHA: - default: - format = PictStandardARGB32; - break; - } - - xrender_format = XRenderFindStandardFormat (similar->dpy, format); - similar->pixmap = XCreatePixmap (similar->dpy, - DefaultRootWindow (similar->dpy), - width, height, - xrender_format->depth); - - surface = - cairo_xlib_surface_create_with_xrender_format (similar->dpy, - similar->pixmap, - DefaultScreenOfDisplay (similar->dpy), - xrender_format, - width, height); - - cairo_surface_set_user_data (surface, &key, similar, _destroy_similar); - - return surface; -} - -static cairo_surface_t * -_cairo_boilerplate_xlib_create_surface (const char *name, - cairo_content_t content, - double width, - double height, - double max_width, - double max_height, - cairo_boilerplate_mode_t mode, - void **closure) -{ - xlib_target_closure_t *xtc; - Display *dpy; - cairo_surface_t *surface; - - *closure = xtc = xcalloc (1, sizeof (xlib_target_closure_t)); - - width = ceil (width); - if (width < 1) - width = 1; - - height = ceil (height); - if (height < 1) - height = 1; - - xtc->dpy = dpy = XOpenDisplay (NULL); - if (xtc->dpy == NULL) { - free (xtc); - CAIRO_BOILERPLATE_DEBUG (("Failed to open display: %s\n", XDisplayName(0))); - return NULL; - } - - if (mode == CAIRO_BOILERPLATE_MODE_TEST) - surface = _cairo_boilerplate_xlib_test_create_surface (dpy, content, width, height, xtc); - else /* mode == CAIRO_BOILERPLATE_MODE_PERF */ - surface = _cairo_boilerplate_xlib_perf_create_surface (dpy, content, width, height, xtc); - - if (surface == NULL || cairo_surface_status (surface)) - _cairo_boilerplate_xlib_cleanup (xtc); - - return surface; -} - -static cairo_surface_t * -_cairo_boilerplate_xlib_render_0_0_create_surface (const char *name, - cairo_content_t content, - double width, - double height, - double max_width, - double max_height, - cairo_boilerplate_mode_t mode, - void **closure) -{ - xlib_target_closure_t *xtc; - Display *dpy; - int screen; - Pixmap pixmap; - cairo_surface_t *surface, *dummy; - - *closure = xtc = xcalloc (1, sizeof (xlib_target_closure_t)); - - width = ceil (width); - if (width < 1) - width = 1; - - height = ceil (height); - if (height < 1) - height = 1; - - xtc->dpy = dpy = XOpenDisplay (NULL); - if (xtc->dpy == NULL) { - free (xtc); - CAIRO_BOILERPLATE_DEBUG (("Failed to open display: %s\n", XDisplayName(0))); - return NULL; - } - - - screen = DefaultScreen (dpy); - pixmap = XCreatePixmap (dpy, DefaultRootWindow (dpy), 1, 1, - DefaultDepth (dpy, screen)); - dummy = cairo_xlib_surface_create (dpy, pixmap, - DefaultVisual (dpy, screen), - 1, 1); - cairo_xlib_device_debug_cap_xrender_version (cairo_surface_get_device (dummy), - 0, 0); - - if (mode == CAIRO_BOILERPLATE_MODE_TEST) - surface = _cairo_boilerplate_xlib_test_create_surface (dpy, content, width, height, xtc); - else /* mode == CAIRO_BOILERPLATE_MODE_PERF */ - surface = _cairo_boilerplate_xlib_perf_create_surface (dpy, content, width, height, xtc); - - cairo_surface_destroy (dummy); - XFreePixmap (dpy, pixmap); - - if (surface == NULL || cairo_surface_status (surface)) - _cairo_boilerplate_xlib_cleanup (xtc); - - return surface; -} - -static cairo_surface_t * -_cairo_boilerplate_xlib_window_create_surface (const char *name, - cairo_content_t content, - double width, - double height, - double max_width, - double max_height, - cairo_boilerplate_mode_t mode, - void **closure) -{ - xlib_target_closure_t *xtc; - Display *dpy; - int screen; - XSetWindowAttributes attr; - cairo_surface_t *surface; - - /* We're not yet bothering to support perf mode for the - * xlib-fallback surface. */ - if (mode == CAIRO_BOILERPLATE_MODE_PERF) - return NULL; - - /* We also don't support drawing with destination-alpha in the - * xlib-fallback surface. */ - if (content == CAIRO_CONTENT_COLOR_ALPHA) - return NULL; - - *closure = xtc = xmalloc (sizeof (xlib_target_closure_t)); - - width = ceil (width); - if (width < 1) - width = 1; - - height = ceil (height); - if (height < 1) - height = 1; - - xtc->dpy = dpy = XOpenDisplay (NULL); - if (xtc->dpy == NULL) { - CAIRO_BOILERPLATE_DEBUG (("Failed to open display: %s\n", XDisplayName(0))); - free (xtc); - return NULL; - } - - /* This kills performance, but it makes debugging much - * easier. That's why we have it here only after explicitly not - * supporting PERF mode.*/ - XSynchronize (dpy, 1); - - screen = DefaultScreen (dpy); - if (! _cairo_boilerplate_xlib_check_screen_size (dpy, screen, - width, height)) { - CAIRO_BOILERPLATE_DEBUG (("Surface is larger than the Screen.\n")); - XCloseDisplay (dpy); - free (xtc); - return NULL; - } - - attr.override_redirect = True; - xtc->drawable = XCreateWindow (dpy, DefaultRootWindow (dpy), - 0, 0, - width, height, 0, - DefaultDepth (dpy, screen), - InputOutput, - DefaultVisual (dpy, screen), - CWOverrideRedirect, &attr); - XMapWindow (dpy, xtc->drawable); - xtc->drawable_is_pixmap = FALSE; - - surface = cairo_xlib_surface_create (dpy, xtc->drawable, - DefaultVisual (dpy, screen), - width, height); - if (cairo_surface_status (surface)) - _cairo_boilerplate_xlib_cleanup (xtc); - - _cairo_boilerplate_xlib_setup_test_surface(surface); - - return surface; -} -#endif - - -#if CAIRO_HAS_XLIB_SURFACE -/* The xlib-fallback target differs from the xlib target in two ways: - * - * 1. It creates its surfaces without relying on the Render extension - * - * 2. It disables use of the Render extension for its surfaces - * - * This provides testing of the non-Render fallback paths we have in - * cairo-xlib-surface.c - */ -static cairo_surface_t * -_cairo_boilerplate_xlib_fallback_create_surface (const char *name, - cairo_content_t content, - double width, - double height, - double max_width, - double max_height, - cairo_boilerplate_mode_t mode, - void **closure) -{ - xlib_target_closure_t *xtc; - Display *dpy; - int screen; - XSetWindowAttributes attr; - cairo_surface_t *surface, *dummy; - - /* We're not yet bothering to support perf mode for the - * xlib-fallback surface. */ - if (mode == CAIRO_BOILERPLATE_MODE_PERF) - return NULL; - - /* We also don't support drawing with destination-alpha in the - * xlib-fallback surface. */ - if (content == CAIRO_CONTENT_COLOR_ALPHA) - return NULL; - - *closure = xtc = xmalloc (sizeof (xlib_target_closure_t)); - - width = ceil (width); - if (width < 1) - width = 1; - - height = ceil (height); - if (height < 1) - height = 1; - - xtc->dpy = dpy = XOpenDisplay (NULL); - if (xtc->dpy == NULL) { - CAIRO_BOILERPLATE_DEBUG (("Failed to open display: %s\n", XDisplayName(0))); - free (xtc); - return NULL; - } - - /* This kills performance, but it makes debugging much - * easier. That's why we have it here only after explicitly not - * supporting PERF mode.*/ - XSynchronize (dpy, 1); - - screen = DefaultScreen (dpy); - if (! _cairo_boilerplate_xlib_check_screen_size (dpy, screen, - width, height)) { - CAIRO_BOILERPLATE_DEBUG (("Surface is larger than the Screen.\n")); - XCloseDisplay (dpy); - free (xtc); - return NULL; - } - - attr.override_redirect = True; - xtc->drawable = XCreateWindow (dpy, DefaultRootWindow (dpy), - 0, 0, - width, height, 0, - DefaultDepth (dpy, screen), - InputOutput, - DefaultVisual (dpy, screen), - CWOverrideRedirect, &attr); - XMapWindow (dpy, xtc->drawable); - xtc->drawable_is_pixmap = FALSE; - - dummy = cairo_xlib_surface_create (dpy, xtc->drawable, - DefaultVisual (dpy, screen), - width, height); - cairo_xlib_device_debug_cap_xrender_version (cairo_surface_get_device (dummy), - -1, -1); - - surface = cairo_xlib_surface_create (dpy, xtc->drawable, - DefaultVisual (dpy, screen), - width, height); - cairo_surface_destroy (dummy); - if (cairo_surface_status (surface)) - _cairo_boilerplate_xlib_cleanup (xtc); - - _cairo_boilerplate_xlib_setup_test_surface(surface); - - return surface; -} -#endif - -static const cairo_boilerplate_target_t targets[] = { -#if CAIRO_HAS_XLIB_XRENDER_SURFACE - /* Acceleration architectures may make the results differ by a - * bit, so we set the error tolerance to 1. */ - { - "xlib", "traps", NULL, "xlib-fallback", - CAIRO_SURFACE_TYPE_XLIB, CAIRO_CONTENT_COLOR_ALPHA, 1, - "cairo_xlib_surface_create_with_xrender_format", - _cairo_boilerplate_xlib_create_surface, - _cairo_boilerplate_xlib_create_similar, - NULL, NULL, - _cairo_boilerplate_get_image_surface, - cairo_surface_write_to_png, - _cairo_boilerplate_xlib_cleanup, - _cairo_boilerplate_xlib_synchronize, - NULL, - TRUE, FALSE, FALSE - }, - { - "xlib", "traps", NULL, "xlib-fallback", - CAIRO_SURFACE_TYPE_XLIB, CAIRO_CONTENT_COLOR, 1, - "cairo_xlib_surface_create_with_xrender_format", - _cairo_boilerplate_xlib_create_surface, - _cairo_boilerplate_xlib_create_similar, - NULL, NULL, - _cairo_boilerplate_get_image_surface, - cairo_surface_write_to_png, - _cairo_boilerplate_xlib_cleanup, - _cairo_boilerplate_xlib_synchronize, - NULL, - FALSE, FALSE, FALSE - }, - { - "xlib-window", "traps", NULL, NULL, - CAIRO_SURFACE_TYPE_XLIB, CAIRO_CONTENT_COLOR, 1, - "cairo_xlib_surface_create", - _cairo_boilerplate_xlib_window_create_surface, - cairo_surface_create_similar, - NULL, NULL, - _cairo_boilerplate_get_image_surface, - cairo_surface_write_to_png, - _cairo_boilerplate_xlib_cleanup, - _cairo_boilerplate_xlib_synchronize, - NULL, - FALSE, FALSE, FALSE - }, - { - "xlib-render-0_0", "mask", NULL, NULL, - CAIRO_SURFACE_TYPE_XLIB, CAIRO_CONTENT_COLOR, 1, - "cairo_xlib_surface_create", - _cairo_boilerplate_xlib_render_0_0_create_surface, - cairo_surface_create_similar, - NULL, NULL, - _cairo_boilerplate_get_image_surface, - cairo_surface_write_to_png, - _cairo_boilerplate_xlib_cleanup, - _cairo_boilerplate_xlib_synchronize, - NULL, - FALSE, FALSE, FALSE - }, -#endif -#if CAIRO_HAS_XLIB_SURFACE - /* This is a fallback surface which uses xlib fallbacks instead of - * the Render extension. */ - { - "xlib-fallback", "image", NULL, NULL, - CAIRO_SURFACE_TYPE_XLIB, CAIRO_CONTENT_COLOR, 1, - "cairo_xlib_surface_create", - _cairo_boilerplate_xlib_fallback_create_surface, - cairo_surface_create_similar, - NULL, NULL, - _cairo_boilerplate_get_image_surface, - cairo_surface_write_to_png, - _cairo_boilerplate_xlib_cleanup, - _cairo_boilerplate_xlib_synchronize, - NULL, - FALSE, FALSE, FALSE - }, -#endif -}; -CAIRO_BOILERPLATE (xlib, targets) |