25#include <gdk-pixbuf/gdk-pixbuf.h>
35static void gdk_set_mimedata_from_file (cairo_surface_t *
image,
const char *
mime_type,
const char *file)
40 const char *id_prefix =
"gvloadimage_gdk-";
42 fp = fopen (file,
"rb");
45 fseek (fp, 0, SEEK_END);
51 if (fread(
data, (
size_t)
len, 1, fp) != 1) {
63 cairo_surface_set_mime_data(
image, CAIRO_MIME_TYPE_UNIQUE_ID,
64 (
unsigned char*)unique_id,
65 strlen(unique_id),
free, unique_id);
73 gdk_set_mimedata_from_file (
image, CAIRO_MIME_TYPE_PNG, us->
name);
76 gdk_set_mimedata_from_file (
image, CAIRO_MIME_TYPE_JPEG, us->
name);
85 cairo_surface_t *surface;
93 const bool is_last = cairo_surface_get_reference_count(
data->surface) == 1;
94 cairo_surface_destroy(
data->surface);
105 cairo_surface_t *cairo_image =
NULL;
106 cairo_pattern_t *pattern;
113 if (us->
datafree == gdk_freeimage) {
116 cairo_image = cairo_surface_reference(
data->surface);
140 gdk_cairo_set_source_pixbuf (cr,
image, 0, 0);
141 pattern = cairo_get_source (cr);
142 assert(cairo_pattern_get_type (pattern) == CAIRO_PATTERN_TYPE_SURFACE);
143 cairo_pattern_get_surface (pattern, &cairo_image);
144 cairo_image = cairo_surface_reference (cairo_image);
146 gdk_set_mimedata (cairo_image, us);
148 *
data = (data_t){.surface = cairo_surface_reference(cairo_image),
163 cairo_surface_t *
image;
165 image = gdk_loadimage(job, us);
168 cairo_translate(cr, b.
LL.
x, -b.
UR.
y);
169 cairo_scale(cr, (b.
UR.
x - b.
LL.
x) / us->
w, (b.
UR.
y - b.
LL.
y) / us->
h);
170 cairo_set_source_surface (cr,
image, 0, 0);
173 cairo_surface_destroy (
image);
184#ifdef HAVE_PANGOCAIRO
185 {FORMAT_BMP_CAIRO,
"bmp:cairo", 1, &engine_gdk,
NULL},
186 {FORMAT_JPEG_CAIRO,
"jpe:cairo", 2, &engine_gdk,
NULL},
187 {FORMAT_JPEG_CAIRO,
"jpg:cairo", 2, &engine_gdk,
NULL},
188 {FORMAT_JPEG_CAIRO,
"jpeg:cairo", 2, &engine_gdk,
NULL},
190 {FORMAT_ICO_CAIRO,
"ico:cairo", 1, &engine_gdk,
NULL},
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 const char * mime_type(imagetype_t file_type)
gvplugin_installed_t gvloadimage_gdk_types[]
void(* datafree)(usershape_t *us)