aboutsummaryrefslogtreecommitdiffstats
path: root/image.c
diff options
context:
space:
mode:
Diffstat (limited to 'image.c')
-rw-r--r--image.c20
1 files changed, 19 insertions, 1 deletions
diff --git a/image.c b/image.c
index 62e3da1..a1a1bb5 100644
--- a/image.c
+++ b/image.c
@@ -2,6 +2,7 @@
#include <stdlib.h>
#include <stdint.h>
#include <string.h>
+#include <strings.h>
#include <unistd.h>
#include <errno.h>
#include <endian.h>
@@ -12,7 +13,7 @@
#include "image.h"
-cairo_surface_t *load_jpeg(const char* filename)
+static cairo_surface_t *load_jpeg(const char* filename)
{
struct jpeg_decompress_struct info;
struct jpeg_error_mgr err;
@@ -56,3 +57,20 @@ cairo_surface_t *load_jpeg(const char* filename)
fclose(file);
return surface;
}
+
+cairo_surface_t *load_image(const char* filename)
+{
+ char *ext = strrchr(filename, '.');
+
+ if (!ext)
+ return NULL;
+
+ if (strcasecmp(ext, ".jpeg") == 0 ||
+ strcasecmp(ext, ".jpg"))
+ return load_jpeg(filename);
+
+ if (strcasecmp(ext, ".png") == 0)
+ return cairo_image_surface_create_from_png(filename);
+
+ return NULL;
+}