diff options
author | Ville Syrjälä <ville.syrjala@linux.intel.com> | 2017-09-21 15:39:23 +0300 |
---|---|---|
committer | Ville Syrjälä <ville.syrjala@linux.intel.com> | 2017-09-22 15:43:38 +0300 |
commit | 75f320c5bda480f4ea1501577247d6a807ed3bff (patch) | |
tree | cad6f3b5a758d45e3da5a0a07b7b7669c9f8be8b | |
parent | 3a01e58858e6068f75356e798fd90c80cccb37d6 (diff) |
lib/igt_fb: Add igt_cairo_image_surface_create_from_png()
Raw usage of cairo_image_surface_create_from_png() doesn't work
since it doesn't know about IGT_DATADIR and IGT_SRCDIR. Let's extract
the helper from igt_paint_image() that uses igt_fopen_data() +
cairo_image_surface_create_from_png_stream() and call it
igt_cairo_image_surface_create_from_png().
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Reviewed-by: Petri Latvala <petri.latvala@intel.com>
-rw-r--r-- | lib/igt_fb.c | 21 | ||||
-rw-r--r-- | lib/igt_fb.h | 1 |
2 files changed, 15 insertions, 7 deletions
diff --git a/lib/igt_fb.c b/lib/igt_fb.c index 95434a69..d4eaed71 100644 --- a/lib/igt_fb.c +++ b/lib/igt_fb.c @@ -583,6 +583,18 @@ stdio_read_func(void *closure, unsigned char* data, unsigned int size) return CAIRO_STATUS_SUCCESS; } +cairo_surface_t *igt_cairo_image_surface_create_from_png(const char *filename) +{ + cairo_surface_t *image; + FILE *f; + + f = igt_fopen_data(filename); + image = cairo_image_surface_create_from_png_stream(&stdio_read_func, f); + fclose(f); + + return image; +} + /** * igt_paint_image: * @cr: cairo drawing context @@ -601,11 +613,8 @@ void igt_paint_image(cairo_t *cr, const char *filename, cairo_surface_t *image; int img_width, img_height; double scale_x, scale_y; - FILE* f; - - f = igt_fopen_data(filename); - image = cairo_image_surface_create_from_png_stream(&stdio_read_func, f); + image = igt_cairo_image_surface_create_from_png(filename); igt_assert(cairo_surface_status(image) == CAIRO_STATUS_SUCCESS); img_width = cairo_image_surface_get_width(image); @@ -624,8 +633,6 @@ void igt_paint_image(cairo_t *cr, const char *filename, cairo_surface_destroy(image); cairo_restore(cr); - - fclose(f); } /** @@ -877,7 +884,7 @@ unsigned int igt_create_image_fb(int fd, int width, int height, uint32_t fb_id; cairo_t *cr; - image = cairo_image_surface_create_from_png(filename); + image = igt_cairo_image_surface_create_from_png(filename); igt_assert(cairo_surface_status(image) == CAIRO_STATUS_SUCCESS); if (width == 0) width = cairo_image_surface_get_width(image); diff --git a/lib/igt_fb.h b/lib/igt_fb.h index a193a1e7..3f549036 100644 --- a/lib/igt_fb.h +++ b/lib/igt_fb.h @@ -136,6 +136,7 @@ uint64_t igt_fb_tiling_to_mod(uint64_t tiling); /* cairo-based painting */ cairo_surface_t *igt_get_cairo_surface(int fd, struct igt_fb *fb); +cairo_surface_t *igt_cairo_image_surface_create_from_png(const char *filename); cairo_t *igt_get_cairo_ctx(int fd, struct igt_fb *fb); void igt_paint_color(cairo_t *cr, int x, int y, int w, int h, double r, double g, double b); |