From 5d18e6897aa7fe53fcadb457fa7d1caf5a143da3 Mon Sep 17 00:00:00 2001 From: Sebastian Geerken Date: Tue, 19 Nov 2013 12:14:34 +0100 Subject: Toplevel images work now. --- src/dicache.c | 5 +++-- src/image.cc | 20 ++++++++++++++++++++ src/image.hh | 3 +++ 3 files changed, 26 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/dicache.c b/src/dicache.c index ec63df1f..db3b86b2 100644 --- a/src/dicache.c +++ b/src/dicache.c @@ -403,7 +403,8 @@ static void *Dicache_image(int ImgType, const char *MimeType, void *Ptr, dReturn_val_if_fail(MimeType && Ptr, NULL); if (!web->Image) { - web->Image = a_Image_new(NULL, NULL, web->bgColor); + web->Image = + a_Image_new_with_dw(web->bw->render_layout, NULL, web->bgColor); a_Image_ref(web->Image); } @@ -430,7 +431,7 @@ static void *Dicache_image(int ImgType, const char *MimeType, void *Ptr, *Data = DicEntry->DecoderData; *Call = (CA_Callback_t) a_Dicache_callback; - return (web->Image->img_rnd); + return (a_Image_get_dw (web->Image)); } /* diff --git a/src/image.cc b/src/image.cc index 04d89a82..7e6c27a4 100644 --- a/src/image.cc +++ b/src/image.cc @@ -49,6 +49,26 @@ DilloImage *a_Image_new(void *layout, void *img_rnd, int32_t bg_color) return Image; } +/* + * Create and initialize a new image structure with an image widget. + */ +DilloImage *a_Image_new_with_dw(void *layout, const char *alt_text, + int32_t bg_color) +{ + dw::Image *dw = new dw::Image(alt_text); + return a_Image_new(layout, (void*)(dw::core::ImgRenderer*)dw, bg_color); +} + +/* + * Return the image renderer as a widget. This is somewhat tricky, + * since simple casting leads to wrong (and hard to debug) results, + * because of multiple inheritance. This function can be used from C + * code, where only access to void* is possible. + */ +void *a_Image_get_dw(DilloImage *Image) +{ + return (dw::Image*)(dw::core::ImgRenderer*)Image->img_rnd; +} /* * Deallocate an Image structure */ diff --git a/src/image.hh b/src/image.hh index fd105a7e..52bd1cf1 100644 --- a/src/image.hh +++ b/src/image.hh @@ -63,6 +63,9 @@ struct _DilloImage { * Function prototypes */ DilloImage *a_Image_new(void *layout, void *img_rnd, int32_t bg_color); +DilloImage *a_Image_new_with_dw(void *layout, const char *alt_text, + int32_t bg_color); +void *a_Image_get_dw(DilloImage *Image); void a_Image_ref(DilloImage *Image); void a_Image_unref(DilloImage *Image); -- cgit v1.2.3