cairo-boilerplate-drm.c [plain text]
#include "cairo-boilerplate-private.h"
#include <cairo-drm.h>
static cairo_surface_t *
_cairo_boilerplate_drm_create_surface (const char *name,
cairo_content_t content,
double width,
double height,
double max_width,
double max_height,
cairo_boilerplate_mode_t mode,
int id,
void **closure)
{
cairo_device_t *device;
cairo_format_t format;
device = cairo_drm_device_default ();
if (device == NULL)
return NULL;
switch (content) {
case CAIRO_CONTENT_ALPHA: format = CAIRO_FORMAT_A8; break;
case CAIRO_CONTENT_COLOR: format = CAIRO_FORMAT_RGB24; break;
default:
case CAIRO_CONTENT_COLOR_ALPHA: format = CAIRO_FORMAT_ARGB32; break;
}
return *closure = cairo_drm_surface_create (device, format, width, height);
}
static void
_cairo_boilerplate_drm_synchronize (void *closure)
{
cairo_surface_t *image;
image = cairo_drm_surface_map_to_image (closure);
if (cairo_surface_status (image) == CAIRO_STATUS_SUCCESS)
cairo_drm_surface_unmap (closure, image);
}
static const cairo_boilerplate_target_t targets[] = {
{
"drm", "drm", NULL, NULL,
CAIRO_SURFACE_TYPE_DRM, CAIRO_CONTENT_COLOR_ALPHA, 1,
"cairo_drm_surface_create",
_cairo_boilerplate_drm_create_surface,
NULL, NULL,
_cairo_boilerplate_get_image_surface,
cairo_surface_write_to_png,
NULL,
_cairo_boilerplate_drm_synchronize,
NULL,
TRUE, FALSE, FALSE
},
{
"drm", "drm", NULL, NULL,
CAIRO_SURFACE_TYPE_DRM, CAIRO_CONTENT_COLOR, 1,
"cairo_drm_surface_create",
_cairo_boilerplate_drm_create_surface,
NULL, NULL,
_cairo_boilerplate_get_image_surface,
cairo_surface_write_to_png,
NULL,
_cairo_boilerplate_drm_synchronize,
NULL,
FALSE, FALSE, FALSE
},
};
CAIRO_BOILERPLATE (drm, targets)