summaryrefslogtreecommitdiff
path: root/splash
diff options
context:
space:
mode:
authorAlbert Astals Cid <aacid@kde.org>2012-01-10 23:33:40 +0100
committerAlbert Astals Cid <aacid@kde.org>2012-01-10 23:33:40 +0100
commit52d190d8ff962a57a59218f6871c3a63a443ea53 (patch)
tree3c8666baa6fb03166c93ea88b7f3fea3834d8e74 /splash
parentbf75a957650dd5208ecf1f6db1555a3d00b7949c (diff)
[xpdf303] tiling "merges" from Thomas, using mostly our "old" code instead of xpdf's
Diffstat (limited to 'splash')
-rw-r--r--splash/Splash.cc32
1 files changed, 24 insertions, 8 deletions
diff --git a/splash/Splash.cc b/splash/Splash.cc
index 7c65f773..a188f347 100644
--- a/splash/Splash.cc
+++ b/splash/Splash.cc
@@ -2636,7 +2636,7 @@ SplashError Splash::fillImageMask(SplashImageMaskSource src, void *srcData,
blitMask(scaledMask, x0, y0, clipRes);
delete scaledMask;
}
-
+
// scaling plus vertical flip
} else if (mat[0] > 0 && minorAxisZero && mat[3] < 0) {
x0 = imgCoordMungeLowerC(mat[4], glyphMode);
@@ -3412,7 +3412,7 @@ SplashError Splash::drawImage(SplashImageSource src, void *srcData,
blitImage(scaledImg, srcAlpha, x0, y0, clipRes);
delete scaledImg;
}
-
+
// scaling plus vertical flip
} else if (mat[0] > 0 && minorAxisZero && mat[3] < 0) {
x0 = imgCoordMungeLower(mat[4]);
@@ -3467,7 +3467,7 @@ SplashError Splash::arbitraryTransformImage(SplashImageSource src, void *srcData
SplashClipResult clipRes, clipRes2;
SplashPipe pipe;
SplashColor pixel;
- int scaledWidth, scaledHeight, t0, t1;
+ int scaledWidth, scaledHeight, t0, t1, th;
SplashCoord r00, r01, r10, r11, det, ir00, ir01, ir10, ir11;
SplashCoord vx[4], vy[4];
int xMin, yMin, xMax, yMax;
@@ -3524,13 +3524,29 @@ SplashError Splash::arbitraryTransformImage(SplashImageSource src, void *srcData
scaledWidth = t0 > t1 ? t0 : t1;
if (mat[2] >= 0) {
t0 = imgCoordMungeUpper(mat[2] + mat[4]) - imgCoordMungeLower(mat[4]);
+ if (splashAbs(mat[1]) >= 1) {
+ th = imgCoordMungeUpper(mat[2]) - imgCoordMungeLower(mat[0] * mat[3] / mat[1]);
+ if (th > t0) t0 = th;
+ }
} else {
t0 = imgCoordMungeUpper(mat[4]) - imgCoordMungeLower(mat[2] + mat[4]);
+ if (splashAbs(mat[1]) >= 1) {
+ th = imgCoordMungeUpper(mat[0] * mat[3] / mat[1]) - imgCoordMungeLower(mat[2]);
+ if (th > t0) t0 = th;
+ }
}
if (mat[3] >= 0) {
t1 = imgCoordMungeUpper(mat[3] + mat[5]) - imgCoordMungeLower(mat[5]);
+ if (splashAbs(mat[0]) >= 1) {
+ th = imgCoordMungeUpper(mat[3]) - imgCoordMungeLower(mat[1] * mat[2] / mat[0]);
+ if (th > t1) t1 = th;
+ }
} else {
t1 = imgCoordMungeUpper(mat[5]) - imgCoordMungeLower(mat[3] + mat[5]);
+ if (splashAbs(mat[0]) >= 1) {
+ th = imgCoordMungeUpper(mat[1] * mat[2] / mat[0]) - imgCoordMungeLower(mat[3]);
+ if (th > t1) t1 = th;
+ }
}
scaledHeight = t0 > t1 ? t0 : t1;
if (scaledWidth == 0) {
@@ -3901,7 +3917,7 @@ void Splash::scaleImageYdXd(SplashImageSource src, void *srcData,
*destPtr++ = (Guchar)pix2;
*destPtr++ = (Guchar)pix1;
*destPtr++ = (Guchar)pix0;
- *destPtr++ = (Guchar)255;
+ *destPtr++ = (Guchar)255;
break;
case splashModeBGR8:
@@ -4081,7 +4097,7 @@ void Splash::scaleImageYdXu(SplashImageSource src, void *srcData,
*destPtr++ = (Guchar)pix[2];
*destPtr++ = (Guchar)pix[1];
*destPtr++ = (Guchar)pix[0];
- *destPtr++ = (Guchar)255;
+ *destPtr++ = (Guchar)255;
}
break;
case splashModeBGR8:
@@ -4222,7 +4238,7 @@ void Splash::scaleImageYuXd(SplashImageSource src, void *srcData,
*destPtr++ = (Guchar)pix[2];
*destPtr++ = (Guchar)pix[1];
*destPtr++ = (Guchar)pix[0];
- *destPtr++ = (Guchar)255;
+ *destPtr++ = (Guchar)255;
}
break;
case splashModeBGR8:
@@ -4365,7 +4381,7 @@ void Splash::scaleImageYuXu(SplashImageSource src, void *srcData,
*destPtr++ = (Guchar)pix[2];
*destPtr++ = (Guchar)pix[1];
*destPtr++ = (Guchar)pix[0];
- *destPtr++ = (Guchar)255;
+ *destPtr++ = (Guchar)255;
}
}
break;
@@ -5243,7 +5259,7 @@ SplashError Splash::blitTransparent(SplashBitmap *src, int xSrc, int ySrc,
SplashPath *Splash::makeStrokePath(SplashPath *path, SplashCoord w,
GBool flatten) {
- SplashPath *pathIn, *dashPath, *pathOut;
+SplashPath *pathIn, *dashPath, *pathOut;
SplashCoord d, dx, dy, wdx, wdy, dxNext, dyNext, wdxNext, wdyNext;
SplashCoord crossprod, dotprod, miter, m;
GBool first, last, closed;