summaryrefslogtreecommitdiff
path: root/source
diff options
context:
space:
mode:
authorRobin Watts <robin.watts@artifex.com>2018-03-14 15:09:50 +0000
committerRobin Watts <robin.watts@artifex.com>2018-03-14 15:28:36 +0000
commit461b81547c1328b819ee626a3f9b55c044b45dcd (patch)
tree34758397f9ee72eef9046c0b25f03441f92bace8 /source
parentb925766ea8794f1924ce0dea9fa942966dea3350 (diff)
downloadmupdf-461b81547c1328b819ee626a3f9b55c044b45dcd.tar.xz
Bug 699110: Fix Antialiased renderer to look at correct scale factor.
Rather than looking at their individual scale factors, they were looking at the global one.
Diffstat (limited to 'source')
-rw-r--r--source/fitz/draw-edge.c12
-rw-r--r--source/fitz/draw-imp.h2
2 files changed, 8 insertions, 6 deletions
diff --git a/source/fitz/draw-edge.c b/source/fitz/draw-edge.c
index 244a4834..f56fab08 100644
--- a/source/fitz/draw-edge.c
+++ b/source/fitz/draw-edge.c
@@ -515,10 +515,9 @@ even_odd_aa(fz_context *ctx, fz_gel *gel, int *list, int xofs, int h)
}
static inline void
-undelta_aa(fz_context *ctx, unsigned char * restrict out, int * restrict in, int n)
+undelta_aa(fz_context *ctx, unsigned char * restrict out, int * restrict in, int n, int scale)
{
int d = 0;
- const int scale = fz_aa_scale;
(void)scale; /* Avoid warnings in some builds */
while (n--)
@@ -549,6 +548,7 @@ fz_scan_convert_aa(fz_context *ctx, fz_gel *gel, int eofill, const fz_irect *cli
int height, h0, rh;
const int hscale = fz_rasterizer_aa_hscale(&gel->super);
const int vscale = fz_rasterizer_aa_vscale(&gel->super);
+ const int scale = fz_rasterizer_aa_scale(&gel->super);
int xmin = fz_idiv(gel->super.bbox.x0, hscale);
int xmax = fz_idiv_up(gel->super.bbox.x1, hscale);
@@ -639,7 +639,7 @@ fz_scan_convert_aa(fz_context *ctx, fz_gel *gel, int eofill, const fz_irect *cli
rh = (yc+1)*vscale - y;
if (yc != yd)
{
- undelta_aa(ctx, alphas, deltas, skipx + clipn);
+ undelta_aa(ctx, alphas, deltas, skipx + clipn, scale);
blit_aa(dst, xmin + skipx, yd, alphas + skipx, clipn, color, painter, eop);
memset(deltas, 0, (skipx + clipn) * sizeof(int));
}
@@ -662,7 +662,7 @@ fz_scan_convert_aa(fz_context *ctx, fz_gel *gel, int eofill, const fz_irect *cli
even_odd_aa(ctx, gel, deltas, xofs, rh);
else
non_zero_winding_aa(ctx, gel, deltas, xofs, rh);
- undelta_aa(ctx, alphas, deltas, skipx + clipn);
+ undelta_aa(ctx, alphas, deltas, skipx + clipn, scale);
blit_aa(dst, xmin + skipx, yd, alphas + skipx, clipn, color, painter, eop);
memset(deltas, 0, (skipx + clipn) * sizeof(int));
yd++;
@@ -679,7 +679,7 @@ fz_scan_convert_aa(fz_context *ctx, fz_gel *gel, int eofill, const fz_irect *cli
even_odd_aa(ctx, gel, deltas, xofs, vscale);
else
non_zero_winding_aa(ctx, gel, deltas, xofs, vscale);
- undelta_aa(ctx, alphas, deltas, skipx + clipn);
+ undelta_aa(ctx, alphas, deltas, skipx + clipn, scale);
do
{
/* Do any successive whole scanlines - no need
@@ -712,7 +712,7 @@ advance:
if (yd < clip->y1)
{
- undelta_aa(ctx, alphas, deltas, skipx + clipn);
+ undelta_aa(ctx, alphas, deltas, skipx + clipn, scale);
blit_aa(dst, xmin + skipx, yd, alphas + skipx, clipn, color, painter, eop);
}
clip_ended:
diff --git a/source/fitz/draw-imp.h b/source/fitz/draw-imp.h
index f6cc1367..efbc6cde 100644
--- a/source/fitz/draw-imp.h
+++ b/source/fitz/draw-imp.h
@@ -19,6 +19,7 @@ static inline int fz_idiv_up(int a, int b)
#ifdef AA_BITS
#define fz_aa_scale 0
+#define fz_rasterizer_aa_scale(ras) 0
#if AA_BITS > 6
#define AA_SCALE(s, x) (x)
@@ -87,6 +88,7 @@ static inline int fz_idiv_up(int a, int b)
#define fz_aa_text_bits (ctx->aa->text_bits)
#define fz_rasterizer_aa_hscale(ras) ((ras)->aa.hscale)
#define fz_rasterizer_aa_vscale(ras) ((ras)->aa.vscale)
+#define fz_rasterizer_aa_scale(ras) ((ras)->aa.scale)
#define fz_rasterizer_aa_bits(ras) ((ras)->aa.bits)
#define fz_rasterizer_aa_text_bits(ras) ((ras)->aa.text_bits)