From c565f15e696db4b4cf983cdddf1e1ab273d547dc Mon Sep 17 00:00:00 2001 From: Carlos Garcia Campos Date: Mon, 8 Nov 2010 19:06:11 +0100 Subject: [PATCH] dvi: Add image_done method to DviDevice to notify that the image is finished This way we can mark the surface dirty when all pixels have been modified. --- backend/dvi/cairo-device.c | 7 +++++++ backend/dvi/mdvi-lib/bitmap.c | 2 ++ backend/dvi/mdvi-lib/mdvi.h | 2 ++ 3 files changed, 11 insertions(+) diff --git a/backend/dvi/cairo-device.c b/backend/dvi/cairo-device.c index 47425cad..51aea379 100644 --- a/backend/dvi/cairo-device.c +++ b/backend/dvi/cairo-device.c @@ -259,6 +259,12 @@ dvi_cairo_put_pixel (void *image, int x, int y, Ulong color) *p = color; } +static void +dvi_cairo_image_done (void *ptr) +{ + cairo_surface_mark_dirty((cairo_surface_t *)ptr); +} + static void dvi_cairo_set_color (void *device_data, Ulong fg, Ulong bg) { @@ -280,6 +286,7 @@ mdvi_cairo_device_init (DviDevice *device) device->create_image = dvi_cairo_create_image; device->free_image = dvi_cairo_free_image; device->put_pixel = dvi_cairo_put_pixel; + device->image_done = dvi_cairo_image_done; device->set_color = dvi_cairo_set_color; #ifdef HAVE_SPECTRE device->draw_ps = dvi_cairo_draw_ps; diff --git a/backend/dvi/mdvi-lib/bitmap.c b/backend/dvi/mdvi-lib/bitmap.c index 53f21207..6edec1df 100644 --- a/backend/dvi/mdvi-lib/bitmap.c +++ b/backend/dvi/mdvi-lib/bitmap.c @@ -1028,6 +1028,8 @@ void mdvi_shrink_glyph_grey(DviContext *dvi, DviFont *font, for(x = 0; x < w; x++) dev->put_pixel(image, x, y, pixels[0]); } + + dev->image_done(image); DEBUG((DBG_BITMAPS, "shrink_glyph_grey: (%dw,%dh,%dx,%dy) -> (%dw,%dh,%dx,%dy)\n", glyph->w, glyph->h, glyph->x, glyph->y, dest->w, dest->h, dest->x, dest->y)); diff --git a/backend/dvi/mdvi-lib/mdvi.h b/backend/dvi/mdvi-lib/mdvi.h index 327e61fe..37664a76 100644 --- a/backend/dvi/mdvi-lib/mdvi.h +++ b/backend/dvi/mdvi-lib/mdvi.h @@ -99,6 +99,7 @@ typedef void *(*DviCreateImage) __PROTO((void *device_data, Uint bpp)); typedef void (*DviFreeImage) __PROTO((void *image)); typedef void (*DviPutPixel) __PROTO((void *image, int x, int y, Ulong color)); +typedef void (*DviImageDone) __PROTO((void *image)); typedef void (*DviDevDestroy) __PROTO((void *data)); typedef void (*DviRefresh) __PROTO((DviContext *dvi, void *device_data)); typedef void (*DviSetColor) __PROTO((void *device_data, Ulong, Ulong)); @@ -114,6 +115,7 @@ struct _DviDevice { DviCreateImage create_image; DviFreeImage free_image; DviPutPixel put_pixel; + DviImageDone image_done; DviDevDestroy dev_destroy; DviRefresh refresh; DviSetColor set_color; -- 2.43.5