Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/pdf/xpdf
diff options
context:
space:
mode:
authorMartin Kretzschmar <martink@src.gnome.org>2005-01-08 21:59:23 (GMT)
committer Martin Kretzschmar <martink@src.gnome.org>2005-01-08 21:59:23 (GMT)
commit0607a5da99d7206625d8537fb28096d755721de3 (patch)
tree978330e3a78189ac0586d88026733112820051cb /pdf/xpdf
parentfed5ac607fbe74668f1b74c2022ef56b5ee25d61 (diff)
pdf/splash/SplashBitmap.cc (SplashBitmap, ~SplashBitmap, writePNMFile):
* pdf/splash/Splash.cc (clear, drawPixel, drawSpan, xorSpan, getPixel) (fillGlyph, fillImageMask, drawImage): pdf/splash/SplashBitmap.cc (SplashBitmap, ~SplashBitmap, writePNMFile): pdf/splash/SplashTypes.h: pdf/xpdf/SplashOutputDev (startPage, getColor, imageSrc): implement RGB8 packed mode for Splash. * pdf/xpdf/GDKSplashOutputDev.cc (GDKSplashOutputDev, redraw): use RGB8 packed mode, eliminates the pixbuf data creation loop.
Diffstat (limited to 'pdf/xpdf')
-rw-r--r--pdf/xpdf/GDKSplashOutputDev.cc41
-rw-r--r--pdf/xpdf/SplashOutputDev.cc5
2 files changed, 7 insertions, 39 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) {
diff --git a/pdf/xpdf/SplashOutputDev.cc b/pdf/xpdf/SplashOutputDev.cc
index 0284d82..58da12c 100644
--- a/pdf/xpdf/SplashOutputDev.cc
+++ b/pdf/xpdf/SplashOutputDev.cc
@@ -276,7 +276,8 @@ void SplashOutputDev::startPage(int pageNum, GfxState *state) {
switch (colorMode) {
case splashModeMono1: color.mono1 = 0; break;
case splashModeMono8: color.mono8 = 0; break;
- case splashModeRGB8: color.rgb8 = splashMakeRGB8(0, 0, 0); break;
+ case splashModeRGB8:
+ case splashModeRGB8Packed: color.rgb8 = splashMakeRGB8(0, 0, 0); break;
case splashModeBGR8Packed: color.bgr8 = splashMakeBGR8(0, 0, 0); break;
}
splash->setStrokePattern(new SplashSolidColor(color));
@@ -469,6 +470,7 @@ SplashPattern *SplashOutputDev::getColor(double gray, GfxRGB *rgb) {
pattern = new SplashSolidColor(color1);
break;
case splashModeRGB8:
+ case splashModeRGB8Packed:
color1.rgb8 = splashMakeRGB8(soutRound(255 * r),
soutRound(255 * g),
soutRound(255 * b));
@@ -1201,6 +1203,7 @@ GBool SplashOutputDev::imageSrc(void *data, SplashColor *pixel,
pixel->mono8 = soutRound(255 * gray);
break;
case splashModeRGB8:
+ case splashModeRGB8Packed:
imgData->colorMap->getRGB(pix, &rgb);
pixel->rgb8 = splashMakeRGB8(soutRound(255 * rgb.r),
soutRound(255 * rgb.g),