static bool bbox_forward_init_box(void *pdata) { gx_device_bbox *const bdev = (gx_device_bbox *)pdata; return BBOX_INIT_BOX(bdev); }
static int bbox_open_device(gx_device * dev) { gx_device_bbox *bdev = (gx_device_bbox *) dev; int code; if (bdev->free_standing) { gx_device_forward_fill_in_procs((gx_device_forward *) dev); bdev->box_procs = box_procs_default; bdev->box_proc_data = bdev; code = install_internal_subclass_devices((gx_device **)&bdev, NULL); if (code < 0) return code; } if (bdev->box_procs.init_box == box_procs_default.init_box) BBOX_INIT_BOX(bdev); /* gx_forward_open_device doesn't exist */ { gx_device *tdev = bdev->target; int code = (tdev && bdev->forward_open_close ? gs_opendevice(tdev) : 0); bbox_copy_params(bdev, true); return code; } }
int bbox_fillpage(gx_device *dev, gs_imager_state * pis, gx_device_color *pdevc) { /* Call the target's proc, but don't account the size. */ gx_device_bbox *const bdev = (gx_device_bbox *) dev; gx_device *tdev = bdev->target; BBOX_INIT_BOX(bdev); if (tdev == NULL) return 0; return dev_proc(tdev, fillpage)(tdev, pis, pdevc); }
/* from PageBoundingBox. */ static int bbox_put_params(gx_device * dev, gs_param_list * plist) { 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; code = param_read_float_array(plist, (param_name = "PageBoundingBox"), &bba); switch (code) { case 0: if (bba.size != 4) { ecode = gs_note_error(gs_error_rangecheck); goto e; } break; default: ecode = code; e:param_signal_error(plist, param_name, ecode); case 1: 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) { 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])); } bdev->white_is_opaque = white_is_opaque; } bbox_copy_params(bdev, bdev->is_open); return code; }