diff options
author | Henry Stiles <henry.stiles@artifex.com> | 2009-07-09 05:59:44 +0000 |
---|---|---|
committer | Henry Stiles <henry.stiles@artifex.com> | 2009-07-09 05:59:44 +0000 |
commit | e92b6fbfbab1d238ca66eba5aaa602d651502c78 (patch) | |
tree | c5784d61c646169d7e18271137edc4a5e3748a36 | |
parent | fa8ef261f65f7387a1ae253bac31a15f2e6d7b20 (diff) |
Remove ad hoc code to draw thin rectangles. It appears this code is
obsolete with respect to the current fill code. Many fills adjusted
with this code will actually render without enlargement. Differences
noted in the following files were insignificant or improvements.
comparefiles/012-05.ps
comparefiles/013-05.ps
comparefiles/067a_unc-stroke.pdf
comparefiles/298-09.ps
comparefiles/321-09.ps
comparefiles/86554321.pdf
comparefiles/Bug687603.ps
comparefiles/Bug687724.pdf
comparefiles/Bug687840.pdf
comparefiles/Bug687901.ps
comparefiles/Bug688485.pdf
comparefiles/Bug688631.pdf
comparefiles/Bug688807.pdf
comparefiles/Bug689083.pdf
comparefiles/Bug689516.pdf
comparefiles/Bug689842.pdf
comparefiles/Bug689918.pdf
comparefiles/Bug689978.pdf
comparefiles/Bug690115.pdf
comparefiles/Bug690206.pdf
comparefiles/Bug690395.pdf
comparefiles/Clarke-Tate-Manns-Chinese.ai
comparefiles/H00216q.pdf
comparefiles/LMG-40-7161-RU-DUC-01.pdf
comparefiles/Testform.v1.0.2.pdf
comparefiles/WD0010L0.pdf
comparefiles/annots.pdf
comparefiles/bug_687457.pdf
comparefiles/bulletin.pdf
comparefiles/knight.pdf
comparefiles/messenger.pdf
comparefiles/messenger16.pdf
comparefiles/p2b-100.pdf
comparefiles/z400454b01d4-1.pdf
pdf/PDFIA1.7_SUBSET/CATX2140.pdf
pdf/PDFIA1.7_SUBSET/CATX5233.pdf
pdf/PDFIA1.7_SUBSET/CATX9004.pdf
pdf/PDFIA1.7_SUBSET/CATX9214.pdf
pdf/PDFIA1.7_SUBSET/CATX9558.pdf
pdf/PDFIA1.7_SUBSET/IA3Z0005.pdf
pdf/PDFIA1.7_SUBSET/IA3Z0302.pdf
pdf/PDFIA1.7_SUBSET/IA3Z1351.pdf
pdf/PDFIA1.7_SUBSET/IA3Z3225.pdf
pdf/PDFIA1.7_SUBSET/IA3Z3356.pdf
pdf/PDFIA1.7_SUBSET/IA3Z3359.pdf
pdf/PDFIA1.7_SUBSET/IA3Z3519.pdf
pdf/PDFIA1.7_SUBSET/IA3Z3778.pdf
pdf/PDFIA1.7_SUBSET/IA3Z4373.pdf
pdf/PDFIA1.7_SUBSET/IA3Z4663.pdf
ps/ps3cet/11-01.PS
ps/ps3cet/11-26C.PS
ps/ps3cet/12-05.PS
ps/ps3cet/13-01.PS
ps/ps3cet/13-02.PS
ps/ps3cet/13-03.PS
ps/ps3cet/13-10.PS
ps/ps3cet/13-12.PS
ps/ps3cet/13-13.PS
ps/ps3cet/13-15.PS
ps/ps3cet/13-16.PS
ps/ps3cet/13-17.PS
ps/ps3cet/13-18.PS
ps/ps3cet/13-19.PS
ps/ps3cet/13-20.PS
ps/ps3cet/13-22.PS
ps/ps3cet/13-26.PS
ps/ps3cet/13-27.PS
ps/ps3cet/13-28.PS
ps/ps3cet/13-29.PS
ps/ps3cet/14-08.PS
ps/ps3cet/23-25.PS
ps/ps3cet/29-03.PS
git-svn-id: http://svn.ghostscript.com/ghostscript/trunk@9852 a1074d23-0009-0410-80fe-cf8c14f379e6
-rw-r--r-- | gs/base/gdevbbox.c | 4 | ||||
-rw-r--r-- | gs/base/gdevpdfd.c | 1 | ||||
-rw-r--r-- | gs/base/gdevtrac.c | 5 | ||||
-rw-r--r-- | gs/base/gxacpath.c | 1 | ||||
-rw-r--r-- | gs/base/gxclrast.c | 4 | ||||
-rw-r--r-- | gs/base/gxcpath.c | 2 | ||||
-rw-r--r-- | gs/base/gxfill.c | 32 | ||||
-rw-r--r-- | gs/base/gxpaint.c | 1 | ||||
-rw-r--r-- | gs/base/gxpaint.h | 2 | ||||
-rw-r--r-- | gs/base/gxshade.c | 1 | ||||
-rw-r--r-- | gs/base/gxstroke.c | 6 | ||||
-rw-r--r-- | gs/base/gxttfb.c | 1 |
12 files changed, 2 insertions, 58 deletions
diff --git a/gs/base/gdevbbox.c b/gs/base/gdevbbox.c index c8523e719..6caeefa6e 100644 --- a/gs/base/gdevbbox.c +++ b/gs/base/gdevbbox.c @@ -760,8 +760,6 @@ bbox_fill_path(gx_device * dev, const gs_imager_state * pis, gx_path * ppath, return 0; gx_cpath_inner_box(pcpath, &ibox); adjust = params->adjust; - if (params->fill_zero_width) - gx_adjust_if_empty(&ibox, &adjust); adjust_box(&ibox, adjust); BBOX_ADD_RECT(bdev, ibox.p.x, ibox.p.y, ibox.q.x, ibox.q.y); return 0; @@ -772,8 +770,6 @@ bbox_fill_path(gx_device * dev, const gs_imager_state * pis, gx_path * ppath, if (gx_path_bbox(ppath, &ibox) < 0) return 0; adjust = params->adjust; - if (params->fill_zero_width) - gx_adjust_if_empty(&ibox, &adjust); adjust_box(&ibox, adjust); /* * If the path lies within the already accumulated box, just draw diff --git a/gs/base/gdevpdfd.c b/gs/base/gdevpdfd.c index 6f19288a5..9e605c4e3 100644 --- a/gs/base/gdevpdfd.c +++ b/gs/base/gdevpdfd.c @@ -1405,7 +1405,6 @@ gdev_pdf_fill_rectangle_hl_color(gx_device *dev, const gs_fixed_rect *rect, params.rule = 1; /* Not important because the path is a rectange. */ params.adjust.x = params.adjust.y = 0; params.flatness = pis->flatness; - params.fill_zero_width = false; gx_path_init_local(&path, pis->memory); code = gx_path_add_rectangle(&path, rect->p.x, rect->p.y, rect->q.x, rect->q.y); if (code < 0) diff --git a/gs/base/gdevtrac.c b/gs/base/gdevtrac.c index 546b96c55..0d136792b 100644 --- a/gs/base/gdevtrac.c +++ b/gs/base/gdevtrac.c @@ -290,10 +290,9 @@ trace_fill_path(gx_device * dev, const gs_imager_state * pis, dputs("fill_path({\n"); trace_path(ppath); trace_drawing_color("}, ", pdcolor); - dprintf5(", rule=%d, adjust=(%g,%g), flatness=%g, fill_zero_width=%s", + dprintf4(", rule=%d, adjust=(%g,%g), flatness=%g", params->rule, fixed2float(params->adjust.x), - fixed2float(params->adjust.y), params->flatness, - (params->fill_zero_width ? "true" : "false")); + fixed2float(params->adjust.y), params->flatness); trace_clip(dev, pcpath); /****** pis ******/ dputs(")\n"); diff --git a/gs/base/gxacpath.c b/gs/base/gxacpath.c index ec85c333b..ff894fc7f 100644 --- a/gs/base/gxacpath.c +++ b/gs/base/gxacpath.c @@ -207,7 +207,6 @@ gx_cpath_intersect_path_slow(gx_clip_path * pcpath, gx_path * ppath, params.adjust.x = float2fixed(fadjust.x); params.adjust.y = float2fixed(fadjust.y); params.flatness = gs_currentflat_inline(pis); - params.fill_zero_width = true; } code = gx_fill_path_only(ppath, (gx_device *)&adev, pis, ¶ms, &devc, pcpath); diff --git a/gs/base/gxclrast.c b/gs/base/gxclrast.c index e98f24a43..93d45034f 100644 --- a/gs/base/gxclrast.c +++ b/gs/base/gxclrast.c @@ -598,7 +598,6 @@ in: /* Initialize for a new page. */ gx_set_cmap_procs(&imager_state, tdev); gx_imager_setscreenphase(&imager_state, -x0, -y0, gs_color_select_all); halftone_type = ht_type_none; - fill_params.fill_zero_width = false; pcs = gs_cspace_new_DeviceGray(mem); if (pcs == NULL) { code = gs_note_error(gs_error_VMerror); @@ -1777,9 +1776,6 @@ idata: data_size = 0; fill: fill_params.adjust = imager_state.fill_adjust; fill_params.flatness = imager_state.flatness; - fill_params.fill_zero_width = - fill_params.adjust.x != 0 || - fill_params.adjust.y != 0; code = gx_fill_path_only(ppath, tdev, &imager_state, &fill_params, diff --git a/gs/base/gxcpath.c b/gs/base/gxcpath.c index 690067641..211bc5630 100644 --- a/gs/base/gxcpath.c +++ b/gs/base/gxcpath.c @@ -602,8 +602,6 @@ gx_cpath_intersect_with_params(gx_clip_path *pcpath, /*const*/ gx_path *ppath_or if (adjust.x == -1) adjust_xl = adjust_xu = adjust_yl = adjust_yu = 0; else { - if (params->fill_zero_width) - gx_adjust_if_empty(&new_box, &adjust); adjust_xl = (adjust.x == fixed_half ? fixed_half - fixed_epsilon : adjust.x); adjust_yl = (adjust.y == fixed_half ? fixed_half - fixed_epsilon : adjust.y); adjust_xu = adjust.x; diff --git a/gs/base/gxfill.c b/gs/base/gxfill.c index 33bb88baf..794b2dfc0 100644 --- a/gs/base/gxfill.c +++ b/gs/base/gxfill.c @@ -255,36 +255,6 @@ unclose_path(gx_path * ppath, int count) } /* - * Tweak the fill adjustment if necessary so that (nearly) empty - * rectangles are guaranteed to produce some output. This is a hack - * to work around a bug in the Microsoft Windows PostScript driver, - * which draws thin lines by filling zero-width rectangles, and in - * some other drivers that try to fill epsilon-width rectangles. - */ -void -gx_adjust_if_empty(const gs_fixed_rect * pbox, gs_fixed_point * adjust) -{ - /* - * For extremely large coordinates, the obvious subtractions could - * overflow. We can work around this easily by noting that since - * we know q.{x,y} >= p.{x,y}, the subtraction overflows iff the - * result is negative. - */ - const fixed - dx = pbox->q.x - pbox->p.x, dy = pbox->q.y - pbox->p.y; - - if (dx < fixed_half && dx > 0 && (dy >= int2fixed(2) || dy < 0)) { - adjust->x = arith_rshift_1(fixed_1 + fixed_epsilon - dx); - if_debug1('f', "[f]thin adjust_x=%g\n", - fixed2float(adjust->x)); - } else if (dy < fixed_half && dy > 0 && (dx >= int2fixed(2) || dx < 0)) { - adjust->y = arith_rshift_1(fixed_1 + fixed_epsilon - dy); - if_debug1('f', "[f]thin adjust_y=%g\n", - fixed2float(adjust->y)); - } -} - -/* * The general fill path algorithm. */ static int @@ -330,8 +300,6 @@ gx_general_fill_path(gx_device * pdev, const gs_imager_state * pis, adjust.x = adjust.y = 0; else adjust = params->adjust; - if (params->fill_zero_width && !pseudo_rasterization) - gx_adjust_if_empty(&ibox, &adjust); lst.contour_count = 0; lst.windings = NULL; lst.bbox_left = fixed2int(ibox.p.x - adjust.x - fixed_epsilon); diff --git a/gs/base/gxpaint.c b/gs/base/gxpaint.c index 50860bd28..4cad30622 100644 --- a/gs/base/gxpaint.c +++ b/gs/base/gxpaint.c @@ -45,7 +45,6 @@ gx_fill_path(gx_path * ppath, gx_device_color * pdevc, gs_state * pgs, params.adjust.x = adjust_x; params.adjust.y = adjust_y; params.flatness = (caching_an_outline_font(pgs) ? 0.0 : pgs->flatness); - params.fill_zero_width = (adjust_x | adjust_y) != 0; return (*dev_proc(dev, fill_path)) (dev, (const gs_imager_state *)pgs, ppath, ¶ms, pdevc, pcpath); } diff --git a/gs/base/gxpaint.h b/gs/base/gxpaint.h index c8c792668..97fa7e9e0 100644 --- a/gs/base/gxpaint.h +++ b/gs/base/gxpaint.h @@ -95,8 +95,6 @@ struct gx_fill_params_s { int rule; /* -1 = winding #, 1 = even/odd */ gs_fixed_point adjust; float flatness; - bool fill_zero_width; /* if true, make zero-width/height */ - /* rectangles one pixel wide/high */ }; #define gx_fill_path_only(ppath, dev, pis, params, pdevc, pcpath)\ diff --git a/gs/base/gxshade.c b/gs/base/gxshade.c index 032bb0eb6..b22f45e84 100644 --- a/gs/base/gxshade.c +++ b/gs/base/gxshade.c @@ -380,7 +380,6 @@ shade_fill_path(const shading_fill_state_t * pfs, gx_path * ppath, params.rule = -1; /* irrelevant */ params.adjust = *fill_adjust; params.flatness = 0; /* irrelevant */ - params.fill_zero_width = false; return (*dev_proc(pfs->dev, fill_path)) (pfs->dev, pfs->pis, ppath, ¶ms, pdevc, NULL); } diff --git a/gs/base/gxstroke.c b/gs/base/gxstroke.c index 8a1f67dab..2c50319c3 100644 --- a/gs/base/gxstroke.c +++ b/gs/base/gxstroke.c @@ -457,12 +457,6 @@ gx_stroke_path_only_aux(gx_path * ppath, gx_path * to_path, gx_device * pdev, } fill_params.rule = gx_rule_winding_number; fill_params.flatness = pis->flatness; -#ifdef USE_FILL_ADJUSTMENT - fill_params.fill_zero_width = - (pis->fill_adjust.x | pis->fill_adjust.y) != 0; -#else - fill_params.fill_zero_width = false; -#endif if (line_width < 0) line_width = -line_width; line_width_and_scale = line_width * (double)int2fixed(1); diff --git a/gs/base/gxttfb.c b/gs/base/gxttfb.c index ad20bd057..d45ff54a2 100644 --- a/gs/base/gxttfb.c +++ b/gs/base/gxttfb.c @@ -689,7 +689,6 @@ static int grid_fit(gx_device_spot_analyzer *padev, gx_path *path, params.rule = gx_rule_winding_number; params.adjust.x = params.adjust.y = 0; params.flatness = fixed2float(max(bbox.q.x - bbox.p.x, bbox.q.y - bbox.p.y)) / 100.0; - params.fill_zero_width = false; for (h.transpose = 0; h.transpose < 2; h.transpose++) { h.midx = (padev->xmin + padev->xmax) / 2; |