From 461b81547c1328b819ee626a3f9b55c044b45dcd Mon Sep 17 00:00:00 2001 From: Robin Watts Date: Wed, 14 Mar 2018 15:09:50 +0000 Subject: 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. --- source/fitz/draw-edge.c | 12 ++++++------ source/fitz/draw-imp.h | 2 ++ 2 files changed, 8 insertions(+), 6 deletions(-) (limited to 'source') 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) -- cgit v1.2.3