diff options
author | martin-s <martin-s@ffa7fe5e-494d-0410-b361-a75ebd5db220> | 2013-05-24 13:47:27 +0000 |
---|---|---|
committer | martin-s <martin-s@ffa7fe5e-494d-0410-b361-a75ebd5db220> | 2013-05-24 13:47:27 +0000 |
commit | b7c6731bddb1749962ebd95af7cc5153388caaa6 (patch) | |
tree | ac7e0c0ec18f3c78932f5ffcd928082436223a2d | |
parent | e5d81bad7b3a3dcca90d7750f177945470b2aaa4 (diff) | |
download | navit-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.c | 15 |
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 |