25#include <gdk-pixbuf/gdk-pixbuf.h>
37 unsigned char *data =
NULL;
39 FILE *
const fp = fopen(file,
"rb");
42 fseek (fp, 0, SEEK_END);
48 if (fread(data,
len, 1, fp) != 1) {
56 if (cairo_surface_set_mime_data(
image, mime_type, data,
57 (
unsigned long)
len,
free, data) !=
58 CAIRO_STATUS_SUCCESS) {
63 agxbprint(&
id,
"gvloadimage_gdk-%s", file);
65 if (cairo_surface_set_mime_data(
image, CAIRO_MIME_TYPE_UNIQUE_ID,
66 (
unsigned char *)unique_id,
67 strlen(unique_id),
free, unique_id) !=
68 CAIRO_STATUS_SUCCESS) {
98 const bool is_last = cairo_surface_get_reference_count(data->
surface) == 1;
99 cairo_surface_destroy(data->
surface);
110 cairo_surface_t *cairo_image =
NULL;
120 cairo_image = cairo_surface_reference(data->
surface);
144 gdk_cairo_set_source_pixbuf (cr,
image, 0, 0);
145 cairo_pattern_t *
const pattern = cairo_get_source(cr);
146 assert(cairo_pattern_get_type (pattern) == CAIRO_PATTERN_TYPE_SURFACE);
147 cairo_pattern_get_surface (pattern, &cairo_image);
148 cairo_image = cairo_surface_reference (cairo_image);
152 *data = (
data_t){.
surface = cairo_surface_reference(cairo_image),
170 cairo_translate(cr, b.
LL.
x, -b.
UR.
y);
171 cairo_scale(cr, (b.
UR.
x - b.
LL.
x) / us->
w, (b.
UR.
y - b.
LL.
y) / us->
h);
172 cairo_set_source_surface (cr,
image, 0, 0);
175 cairo_surface_destroy (
image);
Dynamically expanding string buffers.
static int agxbprint(agxbuf *xb, const char *fmt,...)
Printf-style output to an agxbuf.
static char * agxbdisown(agxbuf *xb)
Memory allocation wrappers that exit on failure.
static void * gv_alloc(size_t size)
static double len(glCompPoint p)
void gvusershape_file_release(usershape_t *us)
bool gvusershape_file_access(usershape_t *us)
static size_t gv_ftell(FILE *stream)
ftell, accounting for platform limitations
gvplugin_installed_t gvloadimage_gdk_types[]
static void gdk_loadimage_cairo(GVJ_t *job, usershape_t *us, boxf b, bool filled)
static void gdk_set_mimedata_from_file(cairo_surface_t *image, const char *mime_type, const char *file)
static gvloadimage_engine_t engine_gdk
static void gdk_freeimage(usershape_t *us)
static cairo_surface_t * gdk_loadimage(GVJ_t *job, usershape_t *us)
static void gdk_set_mimedata(cairo_surface_t *image, usershape_t *us)
resources allocated for loaded images
cairo_surface_t * surface
void(* datafree)(usershape_t *us)