diff options
Diffstat (limited to 'base/gxclip2.c')
-rw-r--r-- | base/gxclip2.c | 163 |
1 files changed, 59 insertions, 104 deletions
diff --git a/base/gxclip2.c b/base/gxclip2.c index 38e79fab..ef3eb5b3 100644 --- a/base/gxclip2.c +++ b/base/gxclip2.c @@ -36,86 +36,69 @@ static dev_proc_copy_color(tile_clip_copy_color); static dev_proc_copy_planes(tile_clip_copy_planes); static dev_proc_copy_alpha(tile_clip_copy_alpha); static dev_proc_copy_alpha_hl_color(tile_clip_copy_alpha_hl_color); -static dev_proc_strip_copy_rop(tile_clip_strip_copy_rop); static dev_proc_strip_copy_rop2(tile_clip_strip_copy_rop2); /* The device descriptor. */ +static void +tile_clipper_initialize_device_procs(gx_device *dev) +{ + set_dev_proc(dev, get_initial_matrix, gx_forward_get_initial_matrix); + set_dev_proc(dev, map_rgb_color, gx_forward_map_rgb_color); + set_dev_proc(dev, map_color_rgb, gx_forward_map_color_rgb); + set_dev_proc(dev, fill_rectangle, tile_clip_fill_rectangle); + set_dev_proc(dev, copy_mono, tile_clip_copy_mono); + set_dev_proc(dev, copy_color, tile_clip_copy_color); + set_dev_proc(dev, get_params, gx_forward_get_params); + set_dev_proc(dev, put_params, gx_forward_put_params); + set_dev_proc(dev, map_cmyk_color, gx_forward_map_cmyk_color); + set_dev_proc(dev, get_page_device, gx_forward_get_page_device); + set_dev_proc(dev, get_alpha_bits, gx_forward_get_alpha_bits); + set_dev_proc(dev, copy_alpha, tile_clip_copy_alpha); + set_dev_proc(dev, get_clipping_box, gx_forward_get_clipping_box); + set_dev_proc(dev, get_bits_rectangle, gx_forward_get_bits_rectangle); + set_dev_proc(dev, composite, gx_no_composite); + set_dev_proc(dev, get_hardware_params, gx_forward_get_hardware_params); + set_dev_proc(dev, get_color_mapping_procs, gx_forward_get_color_mapping_procs); + set_dev_proc(dev, get_color_comp_index, gx_forward_get_color_comp_index); + set_dev_proc(dev, encode_color, gx_forward_encode_color); + set_dev_proc(dev, decode_color, gx_forward_decode_color); + set_dev_proc(dev, fill_rectangle_hl_color, tile_clip_fill_rectangle_hl_color); + set_dev_proc(dev, include_color_space, gx_forward_include_color_space); + set_dev_proc(dev, fill_linear_color_scanline, gx_forward_fill_linear_color_scanline); + set_dev_proc(dev, fill_linear_color_trapezoid, gx_forward_fill_linear_color_trapezoid); + set_dev_proc(dev, fill_linear_color_triangle, gx_forward_fill_linear_color_triangle); + set_dev_proc(dev, update_spot_equivalent_colors, gx_forward_update_spot_equivalent_colors); + set_dev_proc(dev, ret_devn_params, gx_forward_ret_devn_params); + set_dev_proc(dev, fillpage, gx_forward_fillpage); + set_dev_proc(dev, dev_spec_op, gx_forward_dev_spec_op); + set_dev_proc(dev, copy_planes, tile_clip_copy_planes); + set_dev_proc(dev, strip_copy_rop2, tile_clip_strip_copy_rop2); + set_dev_proc(dev, copy_alpha_hl_color, tile_clip_copy_alpha_hl_color); + + /* Ideally the following defaults would be set up for us, but this + * does not currently work. */ + set_dev_proc(dev, open_device, gx_default_open_device); + set_dev_proc(dev, sync_output, gx_default_sync_output); + set_dev_proc(dev, output_page, gx_default_output_page); + set_dev_proc(dev, close_device, gx_default_close_device); + set_dev_proc(dev, fill_path, gx_default_fill_path); + set_dev_proc(dev, stroke_path, gx_default_stroke_path); + set_dev_proc(dev, fill_mask, gx_default_fill_mask); + set_dev_proc(dev, fill_trapezoid, gx_default_fill_trapezoid); + set_dev_proc(dev, fill_parallelogram, gx_default_fill_parallelogram); + set_dev_proc(dev, fill_triangle, gx_default_fill_triangle); + set_dev_proc(dev, draw_thin_line, gx_default_draw_thin_line); + set_dev_proc(dev, strip_tile_rectangle, gx_default_strip_tile_rectangle); + set_dev_proc(dev, begin_typed_image, gx_default_begin_typed_image); + set_dev_proc(dev, text_begin, gx_default_text_begin); + set_dev_proc(dev, strip_tile_rect_devn, gx_default_strip_tile_rect_devn); +} + static const gx_device_tile_clip gs_tile_clip_device = -{std_device_std_body_open(gx_device_tile_clip, 0, "tile clipper", - 0, 0, 1, 1), - {gx_default_open_device, - gx_forward_get_initial_matrix, - gx_default_sync_output, - gx_default_output_page, - gx_default_close_device, - gx_forward_map_rgb_color, - gx_forward_map_color_rgb, - tile_clip_fill_rectangle, - gx_default_tile_rectangle, - tile_clip_copy_mono, - tile_clip_copy_color, - gx_default_draw_line, - gx_forward_get_bits, - gx_forward_get_params, - gx_forward_put_params, - gx_forward_map_cmyk_color, - gx_forward_get_xfont_procs, - gx_forward_get_xfont_device, - gx_forward_map_rgb_alpha_color, - gx_forward_get_page_device, - gx_forward_get_alpha_bits, - tile_clip_copy_alpha, - gx_forward_get_band, - gx_default_copy_rop, - gx_default_fill_path, - gx_default_stroke_path, - gx_default_fill_mask, - gx_default_fill_trapezoid, - gx_default_fill_parallelogram, - gx_default_fill_triangle, - gx_default_draw_thin_line, - gx_default_begin_image, - gx_default_image_data, - gx_default_end_image, - gx_default_strip_tile_rectangle, - tile_clip_strip_copy_rop, - gx_forward_get_clipping_box, - gx_default_begin_typed_image, - gx_forward_get_bits_rectangle, - gx_forward_map_color_rgb_alpha, - gx_no_create_compositor, - gx_forward_get_hardware_params, - gx_default_text_begin, - gx_default_finish_copydevice, - NULL, /* begin_transparency_group */ - NULL, /* end_transparency_group */ - NULL, /* begin_transparency_mask */ - NULL, /* end_transparency_mask */ - NULL, /* discard_transparency_layer */ - gx_forward_get_color_mapping_procs, - gx_forward_get_color_comp_index, - gx_forward_encode_color, - gx_forward_decode_color, - NULL, /* pattern_manage */ - tile_clip_fill_rectangle_hl_color, - gx_forward_include_color_space, - gx_forward_fill_linear_color_scanline, - gx_forward_fill_linear_color_trapezoid, - gx_forward_fill_linear_color_triangle, - gx_forward_update_spot_equivalent_colors, - gx_forward_ret_devn_params, - gx_forward_fillpage, - NULL, /* push_transparency_state */ - NULL, /* pop_transparency_state */ - NULL, /* put_image */ - gx_forward_dev_spec_op, - tile_clip_copy_planes, - NULL, /* get_profile */ - NULL, /* set_graphics_type_tag */ - tile_clip_strip_copy_rop2, - gx_default_strip_tile_rect_devn, - tile_clip_copy_alpha_hl_color - } +{std_device_std_body_open(gx_device_tile_clip, + tile_clipper_initialize_device_procs, + "tile clipper", + 0, 0, 1, 1) }; /* Initialize a tile clipping device from a mask. */ @@ -400,34 +383,6 @@ tile_clip_copy_alpha_hl_color(gx_device * dev, return 0; } -/* Copy a RasterOp rectangle similarly. */ -static int -tile_clip_strip_copy_rop(gx_device * dev, - const byte * data, int sourcex, uint raster, gx_bitmap_id id, - const gx_color_index * scolors, - const gx_strip_bitmap * textures, const gx_color_index * tcolors, - int x, int y, int w, int h, - int phase_x, int phase_y, gs_logical_operation_t lop) -{ - gx_device_tile_clip *cdev = (gx_device_tile_clip *) dev; - - fit_copy(dev, data, sourcex, raster, id, x, y, w, h); - { - FOR_RUNS(data_row, txrun, tx, ty) { - /* Copy the run. */ - int code = (*dev_proc(cdev->target, strip_copy_rop)) - (cdev->target, data_row, sourcex + txrun - x, raster, - gx_no_bitmap_id, scolors, textures, tcolors, - txrun, ty, tx - txrun, 1, phase_x, phase_y, lop); - - if (code < 0) - return code; - } - END_FOR_RUNS(); - } - return 0; -} - static int tile_clip_strip_copy_rop2(gx_device * dev, const byte * data, int sourcex, uint raster, gx_bitmap_id id, |