summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormartin-s <martin-s@ffa7fe5e-494d-0410-b361-a75ebd5db220>2013-05-24 13:47:27 +0000
committermartin-s <martin-s@ffa7fe5e-494d-0410-b361-a75ebd5db220>2013-05-24 13:47:27 +0000
commitb7c6731bddb1749962ebd95af7cc5153388caaa6 (patch)
treeac7e0c0ec18f3c78932f5ffcd928082436223a2d
parente5d81bad7b3a3dcca90d7750f177945470b2aaa4 (diff)
downloadnavit-b7c6731bddb1749962ebd95af7cc5153388caaa6.tar.gz
Add:graphics_gtk_drawing_area:Improved draw_image_warp support
git-svn-id: https://navit.svn.sourceforge.net/svnroot/navit/trunk@5502 ffa7fe5e-494d-0410-b361-a75ebd5db220
-rw-r--r--navit/navit/graphics/gtk_drawing_area/graphics_gtk_drawing_area.c15
1 files changed, 13 insertions, 2 deletions
diff --git a/navit/navit/graphics/gtk_drawing_area/graphics_gtk_drawing_area.c b/navit/navit/graphics/gtk_drawing_area/graphics_gtk_drawing_area.c
index 1b400ca63..b716634b5 100644
--- a/navit/navit/graphics/gtk_drawing_area/graphics_gtk_drawing_area.c
+++ b/navit/navit/graphics/gtk_drawing_area/graphics_gtk_drawing_area.c
@@ -536,9 +536,18 @@ draw_image_warp(struct graphics_priv *gr, struct graphics_gc_priv *fg, struct po
#endif
img->image=imlib_create_image(w, h);
imlib_context_set_image(img->image);
- if (gdk_pixbuf_get_colorspace(img->pixbuf) != GDK_COLORSPACE_RGB || gdk_pixbuf_get_has_alpha(img->pixbuf) || gdk_pixbuf_get_n_channels(img->pixbuf) != 3 || gdk_pixbuf_get_bits_per_sample(img->pixbuf) != 8) {
+ if (gdk_pixbuf_get_colorspace(img->pixbuf) != GDK_COLORSPACE_RGB || gdk_pixbuf_get_bits_per_sample(img->pixbuf) != 8) {
dbg(0,"implement me\n");
- } else {
+ } else if (gdk_pixbuf_get_has_alpha(img->pixbuf) && gdk_pixbuf_get_n_channels(img->pixbuf) == 4) {
+ for (y=0 ; y < h ; y++) {
+ unsigned int *dst=imlib_image_get_data()+y*w;
+ unsigned char *src=gdk_pixbuf_get_pixels(img->pixbuf)+y*gdk_pixbuf_get_rowstride(img->pixbuf);
+ for (x=0 ; x < w ; x++) {
+ *dst++=0xff000000|(src[0] << 16)|(src[1] << 8)|src[2];
+ src+=4;
+ }
+ }
+ } else if (!gdk_pixbuf_get_has_alpha(img->pixbuf) && gdk_pixbuf_get_n_channels(img->pixbuf) == 3) {
for (y=0 ; y < h ; y++) {
unsigned int *dst=imlib_image_get_data()+y*w;
unsigned char *src=gdk_pixbuf_get_pixels(img->pixbuf)+y*gdk_pixbuf_get_rowstride(img->pixbuf);
@@ -547,6 +556,8 @@ draw_image_warp(struct graphics_priv *gr, struct graphics_gc_priv *fg, struct po
src+=3;
}
}
+ } else {
+ dbg(0,"implement me\n");
}
} else