[prev in list] [next in list] [prev in thread] [next in thread]
List: freedesktop-poppler
Subject: [poppler] poppler/CairoOutputDev.cc
From: ajohnson () kemper ! freedesktop ! org (Adrian Johnson)
Date: 2016-07-02 8:29:36
Message-ID: 20160702082936.AD799761F2 () kemper ! freedesktop ! org
[Download RAW message or body]
poppler/CairoOutputDev.cc | 10 ++++++++--
1 file changed, 8 insertions(+), 2 deletions(-)
New commits:
commit 9faa9b05171e46815924b48d31a7c45a1285c403
Author: Adrian Johnson <ajohnson@redneon.com>
Date: Sun Jun 5 22:44:56 2016 +0930
Fix tiling patterns with BBox with non-zero x,y
diff --git a/poppler/CairoOutputDev.cc b/poppler/CairoOutputDev.cc
index a734324..6cc9bdb 100644
--- a/poppler/CairoOutputDev.cc
+++ b/poppler/CairoOutputDev.cc
@@ -900,6 +900,7 @@ GBool CairoOutputDev::tilingPatternFill(GfxState *state, Gfx *gfxA, Catalog *cat
cairo_t *old_cairo;
double xMin, yMin, xMax, yMax;
double width, height;
+ double scaleX, scaleY;
int surface_width, surface_height;
StrokePathClip *strokePathTmp;
GBool adjusted_stroke_width_tmp;
@@ -924,6 +925,8 @@ GBool CairoOutputDev::tilingPatternFill(GfxState *state, Gfx *gfxA, Catalog *cat
double heightX = 0, heightY = height;
cairo_matrix_transform_distance (&matrix, &heightX, &heightY);
surface_height = ceil (sqrt (heightX * heightX + heightY * heightY));
+ scaleX = surface_width / width;
+ scaleY = surface_height / height;
surface = cairo_surface_create_similar (cairo_get_target (cairo),
CAIRO_CONTENT_COLOR_ALPHA,
@@ -935,10 +938,12 @@ GBool CairoOutputDev::tilingPatternFill(GfxState *state, Gfx *gfxA, Catalog *cat
cairo = cairo_create (surface);
cairo_surface_destroy (surface);
setContextAntialias(cairo, antialias);
- cairo_scale (cairo, surface_width / width, surface_height / height);
box.x1 = bbox[0]; box.y1 = bbox[1];
box.x2 = bbox[2]; box.y2 = bbox[3];
+ cairo_scale (cairo, scaleX, scaleY);
+ cairo_translate (cairo, -box.x1, -box.y1);
+
strokePathTmp = strokePathClip;
strokePathClip = NULL;
adjusted_stroke_width_tmp = adjusted_stroke_width;
@@ -964,7 +969,8 @@ GBool CairoOutputDev::tilingPatternFill(GfxState *state, Gfx *gfxA, Catalog *cat
state->getUserClipBBox(&xMin, &yMin, &xMax, &yMax);
cairo_rectangle (cairo, xMin, yMin, xMax - xMin, yMax - yMin);
- cairo_matrix_init_scale (&matrix, surface_width / width, surface_height / height);
+ cairo_matrix_init_scale (&matrix, scaleX, scaleY);
+ cairo_matrix_translate (&matrix, -box.x1, -box.y1);
cairo_pattern_set_matrix (pattern, &matrix);
cairo_transform (cairo, &pattern_matrix);
_______________________________________________
poppler mailing list
poppler@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/poppler
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic