diff options
Diffstat (limited to 'base/gxclist.c')
-rw-r--r-- | base/gxclist.c | 157 |
1 files changed, 56 insertions, 101 deletions
diff --git a/base/gxclist.c b/base/gxclist.c index 7c7f0aa4..a3b3ccb3 100644 --- a/base/gxclist.c +++ b/base/gxclist.c @@ -120,95 +120,65 @@ private_st_clist_icctable(); /* Forward declarations of driver procedures */ dev_proc_open_device(clist_open); dev_proc_output_page(clist_output_page); -static dev_proc_close_device(clist_close); -static dev_proc_get_band(clist_get_band); +dev_proc_close_device(clist_close); /* Driver procedures defined in other files are declared in gxcldev.h. */ /* Other forward declarations */ static int clist_put_current_params(gx_device_clist_writer *cldev); -/* The device procedures */ -const gx_device_procs gs_clist_device_procs = { - clist_open, - gx_forward_get_initial_matrix, - gx_default_sync_output, - clist_output_page, - clist_close, - gx_forward_map_rgb_color, - gx_forward_map_color_rgb, - clist_fill_rectangle, - gx_default_tile_rectangle, - clist_copy_mono, - clist_copy_color, - gx_default_draw_line, - gx_default_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, - clist_copy_alpha, - clist_get_band, - gx_default_copy_rop, - clist_fill_path, - clist_stroke_path, - clist_fill_mask, - clist_fill_trapezoid, - clist_fill_parallelogram, - clist_fill_triangle, - gx_default_draw_thin_line, - gx_default_begin_image, - gx_default_image_data, - gx_default_end_image, - clist_strip_tile_rectangle, - clist_strip_copy_rop, - gx_forward_get_clipping_box, - clist_begin_typed_image, - clist_get_bits_rectangle, - gx_forward_map_color_rgb_alpha, - clist_create_compositor, - gx_forward_get_hardware_params, - gx_default_text_begin, - gx_default_finish_copydevice, - gx_default_begin_transparency_group, /* begin_transparency_group */ - gx_default_end_transparency_group, /* end_transparency_group */ - gx_default_begin_transparency_mask, /* begin_transparency_mask */ - gx_default_end_transparency_mask, /* end_transparency_mask */ - gx_default_discard_transparency_layer, /* discard_transparency_layer */ - gx_forward_get_color_mapping_procs, - gx_forward_get_color_comp_index, - gx_forward_encode_color, - gx_forward_decode_color, - gx_default_pattern_manage, /* pattern_manage */ - clist_fill_rectangle_hl_color, - gx_default_include_color_space, - gx_default_fill_linear_color_scanline, - clist_fill_linear_color_trapezoid, - clist_fill_linear_color_triangle, - gx_forward_update_spot_equivalent_colors, - gx_forward_ret_devn_params, - clist_fillpage, - gx_default_push_transparency_state, /* push_transparency_state */ - gx_default_pop_transparency_state, /* pop_transparency_state */ - gx_default_put_image, /* put_image */ - clist_dev_spec_op, - clist_copy_planes, /* copy planes */ - gx_default_get_profile, - gx_default_set_graphics_type_tag, - clist_strip_copy_rop2, - clist_strip_tile_rect_devn, - clist_copy_alpha_hl_color, - clist_process_page, - gx_default_transform_pixel_region, - clist_fill_stroke_path, -}; +void +clist_initialize_device_procs(gx_device *dev) +{ + set_dev_proc(dev, open_device, clist_open); + set_dev_proc(dev, get_initial_matrix, gx_forward_get_initial_matrix); + set_dev_proc(dev, sync_output, gx_default_sync_output); + set_dev_proc(dev, output_page, clist_output_page); + set_dev_proc(dev, close_device, clist_close); + 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, clist_fill_rectangle); + set_dev_proc(dev, copy_mono, clist_copy_mono); + set_dev_proc(dev, copy_color, clist_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, clist_copy_alpha); + set_dev_proc(dev, fill_path, clist_fill_path); + set_dev_proc(dev, stroke_path, clist_stroke_path); + set_dev_proc(dev, fill_mask, clist_fill_mask); + set_dev_proc(dev, fill_trapezoid, clist_fill_trapezoid); + set_dev_proc(dev, fill_parallelogram, clist_fill_parallelogram); + set_dev_proc(dev, fill_triangle, clist_fill_triangle); + set_dev_proc(dev, strip_tile_rectangle, clist_strip_tile_rectangle); + set_dev_proc(dev, get_clipping_box, gx_forward_get_clipping_box); + set_dev_proc(dev, begin_typed_image, clist_begin_typed_image); + set_dev_proc(dev, get_bits_rectangle, clist_get_bits_rectangle); + set_dev_proc(dev, composite, clist_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, clist_fill_rectangle_hl_color); + set_dev_proc(dev, fill_linear_color_trapezoid, clist_fill_linear_color_trapezoid); + set_dev_proc(dev, fill_linear_color_triangle, clist_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, clist_fillpage); + set_dev_proc(dev, dev_spec_op, clist_dev_spec_op); + set_dev_proc(dev, copy_planes, clist_copy_planes); + set_dev_proc(dev, strip_copy_rop2, clist_strip_copy_rop2); + set_dev_proc(dev, strip_tile_rect_devn, clist_strip_tile_rect_devn); + set_dev_proc(dev, copy_alpha_hl_color, clist_copy_alpha_hl_color); + set_dev_proc(dev, process_page, clist_process_page); + set_dev_proc(dev, fill_stroke_path, clist_fill_stroke_path); +} /*------------------- Choose the implementation ----------------------- - For chossing the clist i/o implementation by makefile options + For choosing the clist i/o implementation by makefile options we define global variables, which are initialized with file/memory io procs when they are included into the build. */ @@ -741,7 +711,7 @@ errxit: return code; } -static int +int clist_close(gx_device *dev) { int i; @@ -965,22 +935,6 @@ clist_put_current_params(gx_device_clist_writer *cldev) /* ---------------- Driver interface ---------------- */ -static int -clist_get_band(gx_device * dev, int y, int *band_start) -{ - gx_device_clist_writer * const cdev = - &((gx_device_clist *)dev)->writer; - int band_height = cdev->page_band_height; - int start; - - if (y < 0) - y = 0; - else if (y >= dev->height) - y = dev->height; - *band_start = start = y - y % band_height; - return min(dev->height - start, band_height); -} - /* ICC table operations. See gxclist.h for details */ /* This checks the table for a hash code entry */ bool @@ -1386,7 +1340,7 @@ clist_make_accum_device(gs_memory_t *mem, gx_device *target, const char *dname, return 0; memset(cdev, 0, sizeof(*cdev)); cwdev->params_size = sizeof(gx_device_clist); - cwdev->static_procs = NULL; + cwdev->initialize_device_procs = clist_initialize_device_procs; cwdev->dname = dname; cwdev->memory = mem->stable_memory; cwdev->stype = &st_device_clist; @@ -1413,7 +1367,8 @@ clist_make_accum_device(gs_memory_t *mem, gx_device *target, const char *dname, cwdev->icc_table = NULL; cwdev->UseCIEColor = target->UseCIEColor; cwdev->LockSafetyParams = true; - cwdev->procs = gs_clist_device_procs; + cwdev->initialize_device_procs((gx_device *)cwdev); + gx_device_fill_in_procs((gx_device *)cwdev); gx_device_copy_color_params((gx_device *)cwdev, target); rc_assign(cwdev->target, target, "clist_make_accum_device"); clist_init_io_procs(cdev, use_memory_clist); @@ -1550,7 +1505,7 @@ open_c: pdev->clist_disable_mask, pdev->page_uses_transparency, pdev->page_uses_overprint); - code = (*gs_clist_device_procs.open_device)( (gx_device *)pcldev ); + code = clist_open( (gx_device *)pcldev ); if (code < 0) { /* If there wasn't enough room, and we haven't */ /* already shrunk the buffer, try enlarging it. */ |