diff options
Diffstat (limited to 'pdf/xpdf/GDKSplashOutputDev.cc')
-rw-r--r-- | pdf/xpdf/GDKSplashOutputDev.cc | 41 |
1 files changed, 3 insertions, 38 deletions
diff --git a/pdf/xpdf/GDKSplashOutputDev.cc b/pdf/xpdf/GDKSplashOutputDev.cc index 90f8811..ad0040f 100644 --- a/pdf/xpdf/GDKSplashOutputDev.cc +++ b/pdf/xpdf/GDKSplashOutputDev.cc @@ -41,7 +41,7 @@ static SplashColor makeSplashColor(int r, int g, int b) GDKSplashOutputDev::GDKSplashOutputDev(GdkScreen *screen, void (*redrawCbkA)(void *data), void *redrawCbkDataA): - SplashOutputDev(splashModeRGB8, gFalse, makeSplashColor (255,255,255)), + SplashOutputDev(splashModeRGB8Packed, gFalse, makeSplashColor (255,255,255)), incrementalUpdate (1) { redrawCbk = redrawCbkA; @@ -104,55 +104,20 @@ void GDKSplashOutputDev::redraw(int srcX, int srcY, GdkDrawable *drawable, int destX, int destY, int width, int height) { - SplashColorPtr dataPtr; GdkGC *gc; - guchar *gdk_buf; int gdk_rowstride; - int bw, x, y, r, g, b; - gdk_rowstride = width * 3; - - /* better to draw nothing than crash on a huge image */ - gdk_buf = (guchar*) g_try_malloc (height * gdk_rowstride); - if (gdk_buf == NULL) - return; - - bw = getBitmap()->getWidth(); - dataPtr = getBitmap()->getDataPtr(); - - for (y = 0; y < height; ++y) - { - SplashRGB8 *p; - SplashRGB8 rgb; - guchar *gdk_p; - - p = dataPtr.rgb8 + (y + srcY) * bw + srcX; - gdk_p = gdk_buf + y * gdk_rowstride; - for (x = 0; x < width; ++x) - { - rgb = *p++; - r = splashRGB8R(rgb); - g = splashRGB8G(rgb); - b = splashRGB8B(rgb); - - *gdk_p++ = r; - *gdk_p++ = g; - *gdk_p++ = b; - } - } - + gdk_rowstride = getBitmap()->getRowSize(); gc = gdk_gc_new (drawable); gdk_draw_rgb_image (drawable, gc, destX, destY, width, height, GDK_RGB_DITHER_NORMAL, - gdk_buf, + getBitmap()->getDataPtr().rgb8p + srcY * gdk_rowstride + srcX, gdk_rowstride); g_object_unref (gc); - - g_free (gdk_buf); } void GDKSplashOutputDev::drawToPixbuf(GdkPixbuf *pixbuf, int pageNum) { |