Re: Fix for 687410, 687478 in bbox device
"Igor V. Melichev" <[email protected]> Mon, 24 May 2004 11:45:59 +0400
| Newsgroups | gmane.comp.printing.ghostscript.patches |
|---|---|
| Message-ID | <[email protected]> |
Please commit. Igor. ----- Original Message ----- From: "Alex Cherepanov" <[email protected]> To: <[email protected]> Sent: Monday, May 24, 2004 5:10 AM Subject: [gs-code-review] Fix for 687410, 687478 in bbox device > Add /WhiteIsOpaque page device parameter to provide user interface > to the corresponding bbox device flag. Fix a bug introduced in > gdevbbox.c v.1.9 (for bug 645531) that left bdev->white and > bdev->black uninitialized, resulting in black objects skipped > as white. > Fix bugs 687410, 687478 > -------------------------------------------------------------------------------- > Index: gs/src/gdevbbox.c > =================================================================== > RCS file: /cvs/ghostscript/gs/src/gdevbbox.c,v > retrieving revision 1.16 > diff -b -u -r1.16 gdevbbox.c > --- a/gs/src/gdevbbox.c 14 Apr 2004 00:02:20 -0000 1.16 > +++ b/gs/src/gdevbbox.c 24 May 2004 00:54:18 -0000 > @@ -222,7 +222,7 @@ > > if (tdev != 0) > gx_device_copy_params((gx_device *)bdev, tdev); > - if (remap_colors && bdev->is_open) { > + if (remap_colors) { > bdev->black = gx_device_black((gx_device *)bdev); > bdev->white = gx_device_white((gx_device *)bdev); > bdev->transparent = > @@ -522,7 +522,11 @@ > bbox[2] = fixed2float(fbox.q.x); > bbox[3] = fixed2float(fbox.q.y); > bba.data = bbox, bba.size = 4, bba.persistent = false; > - return param_write_float_array(plist, "PageBoundingBox", &bba); > + code = param_write_float_array(plist, "PageBoundingBox", &bba); > + if (code < 0) > + return code; > + code = param_write_bool(plist, "WhiteIsOpaque", &bdev->white_is_opaque); > + return code; > } > > /* We implement put_params to ensure that we keep the important */ > @@ -534,6 +538,7 @@ > gx_device_bbox *const bdev = (gx_device_bbox *) dev; > int code; > int ecode = 0; > + bool white_is_opaque = bdev->white_is_opaque; > gs_param_name param_name; > gs_param_float_array bba; > > @@ -553,15 +558,27 @@ > bba.data = 0; > } > > + switch (code = param_read_bool(plist, (param_name = "WhiteIsOpaque"), &white_is_opaque)) { > + default: > + ecode = code; > + param_signal_error(plist, param_name, ecode); > + case 0: > + case 1: > + break; > + } > + > code = gx_forward_put_params(dev, plist); > if (ecode < 0) > code = ecode; > - if (code >= 0 && bba.data != 0) { > + if (code >= 0) { > + if( bba.data != 0) { > BBOX_INIT_BOX(bdev); > BBOX_ADD_RECT(bdev, float2fixed(bba.data[0]), float2fixed(bba.data[1]), > float2fixed(bba.data[2]), float2fixed(bba.data[3])); > } > - bbox_copy_params(bdev, true); > + bdev->white_is_opaque = white_is_opaque; > + } > + bbox_copy_params(bdev, bdev->is_open); > return code; > } > > Index: gs/doc/Devices.htm > =================================================================== > RCS file: /cvs/ghostscript/gs/doc/Devices.htm,v > retrieving revision 1.73 > diff -b -u -r1.73 Devices.htm > --- a/gs/doc/Devices.htm 23 Dec 2003 15:36:13 -0000 1.73 > +++ b/gs/doc/Devices.htm 24 May 2004 00:54:18 -0000 > @@ -1146,6 +1146,15 @@ > eventually, it should also recognize <b><tt>-sOutputFile=</tt></b>. > > <p> > +By default, white objects don't contribute to the bounding box because > +many files fill the whole page with white before drawing other objects. > +This can be changed by: > + > +<blockquote><tt><b> > +<< /WhiteIsOpaque true >> setpagedevice > +</b></tt></blockquote> > + > +<p> > Note that this device, like other devices, has a resolution and a (maximum) > page size. As for other devices, the product (resolution x page size) is > limited to approximately 500K pixels. By default, the resolution is 4000 > -------------------------------------------------------------------------------- > _______________________________________________ > gs-code-review mailing list > [email protected] > http://www.ghostscript.com/mailman/listinfo/gs-code-review >