diff options
Diffstat (limited to 'doc/subclass.htm')
-rw-r--r-- | doc/subclass.htm | 118 |
1 files changed, 28 insertions, 90 deletions
diff --git a/doc/subclass.htm b/doc/subclass.htm index 09dc9403..a3f9d144 100644 --- a/doc/subclass.htm +++ b/doc/subclass.htm @@ -511,103 +511,41 @@ Now we've got all the garbage collector machinery out of the way we can deal wit /* Device procedures */<br /> static dev_proc_text_begin(black_text_text_begin); </code> +<p>Then we define the procedure to initialize the device procs: +</p> +<code> +void black_text_init_dev_procs(gx_device *dev)<br /> +{<br /> + default_subclass_initialize_device_procs(dev);<br /> +<br /> + set_dev_proc(dev, text_begin, black_text_text_begin);<br /> +} +</code> <p>Then we define the actual device: </p> <code> const -gx_device_black_text gs_black_text_device = -{ -<dd> std_device_dci_type_body(gx_device_black_text, 0, "black_text", &st_black_text_device,<br /> - MAX_COORD, MAX_COORD,<br /> - MAX_RESOLUTION, MAX_RESOLUTION,<br /> - 1, 8, 255, 0, 256, 1),<br /> - {default_subclass_open_device,<br /> - default_subclass_get_initial_matrix,<br /> - default_subclass_sync_output, /* sync_output */<br /> - default_subclass_output_page,<br /> - default_subclass_close_device,<br /> - default_subclass_map_rgb_color,<br /> - default_subclass_map_color_rgb,<br /> - default_subclass_fill_rectangle,<br /> - default_subclass_tile_rectangle, /* tile_rectangle */<br /> - default_subclass_copy_mono,<br /> - default_subclass_copy_color,<br /> - default_subclass_draw_line, /* draw_line */<br /> - default_subclass_get_bits, /* get_bits */<br /> - default_subclass_get_params,<br /> - default_subclass_put_params,<br /> - default_subclass_map_cmyk_color,<br /> - default_subclass_get_xfont_procs, /* get_xfont_procs */<br /> - default_subclass_get_xfont_device, /* get_xfont_device */<br /> - default_subclass_map_rgb_alpha_color,<br /> - default_subclass_get_page_device,<br /> - default_subclass_get_alpha_bits, /* get_alpha_bits */<br /> - default_subclass_copy_alpha,<br /> - default_subclass_get_band, /* get_band */<br /> - default_subclass_copy_rop, /* copy_rop */<br /> - default_subclass_fill_path,<br /> - default_subclass_stroke_path,<br /> - default_subclass_fill_mask,<br /> - default_subclass_fill_trapezoid,<br /> - default_subclass_fill_parallelogram,<br /> - default_subclass_fill_triangle,<br /> - default_subclass_draw_thin_line,<br /> - default_subclass_begin_image,<br /> - default_subclass_image_data, /* image_data */<br /> - default_subclass_end_image, /* end_image */<br /> - default_subclass_strip_tile_rectangle,<br /> - default_subclass_strip_copy_rop,<br /> - default_subclass_get_clipping_box, /* get_clipping_box */<br /> - default_subclass_begin_typed_image,<br /> - default_subclass_get_bits_rectangle, /* get_bits_rectangle */<br /> - default_subclass_map_color_rgb_alpha,<br /> - default_subclass_create_compositor,<br /> - default_subclass_get_hardware_params, /* get_hardware_params */<br /> - black_text_text_begin,<br /> - default_subclass_finish_copydevice, /* finish_copydevice */<br /> - default_subclass_begin_transparency_group, /* begin_transparency_group */<br /> - default_subclass_end_transparency_group, /* end_transparency_group */<br /> - default_subclass_begin_transparency_mask, /* begin_transparency_mask */<br /> - default_subclass_end_transparency_mask, /* end_transparency_mask */<br /> - default_subclass_discard_transparency_layer, /* discard_transparency_layer */<br /> - default_subclass_get_color_mapping_procs, /* get_color_mapping_procs */<br /> - default_subclass_get_color_comp_index, /* get_color_comp_index */<br /> - default_subclass_encode_color, /* encode_color */<br /> - default_subclass_decode_color, /* decode_color */<br /> - default_subclass_pattern_manage, /* pattern_manage */<br /> - default_subclass_fill_rectangle_hl_color, /* fill_rectangle_hl_color */<br /> - default_subclass_include_color_space, /* include_color_space */<br /> - default_subclass_fill_linear_color_scanline, /* fill_linear_color_scanline */<br /> - default_subclass_fill_linear_color_trapezoid, /* fill_linear_color_trapezoid */<br /> - default_subclass_fill_linear_color_triangle, /* fill_linear_color_triangle */<br /> - default_subclass_update_spot_equivalent_colors, /* update_spot_equivalent_colors */<br /> - default_subclass_ret_devn_params, /* ret_devn_params */<br /> - default_subclass_fillpage, /* fillpage */<br /> - default_subclass_push_transparency_state, /* push_transparency_state */<br /> - default_subclass_pop_transparency_state, /* pop_transparency_state */<br /> - default_subclass_put_image, /* put_image */<br /> - default_subclass_dev_spec_op, /* dev_spec_op */<br /> - default_subclass_copy_planes, /* copy_planes */<br /> - default_subclass_get_profile, /* get_profile */<br /> - default_subclass_set_graphics_type_tag, /* set_graphics_type_tag */<br /> - default_subclass_strip_copy_rop2,<br /> - default_subclass_strip_tile_rect_devn,<br /> - default_subclass_copy_alpha_hl_color,<br /> - default_subclass_process_page -</dd> } +gx_device_black_text gs_black_text_device =<br /> +{<br /> + std_device_dci_type_body(gx_device_black_text, 0, "black_text", &st_black_text_device,<br /> + MAX_COORD, MAX_COORD,<br /> + MAX_RESOLUTION, MAX_RESOLUTION,<br /> + 1, 8, 255, 0, 256, 1),<br /> + black_text_initialize_device_procs<br /> }; </code> -<p>Much of this is simply boilerplate, defining the device methods as being the default methods for a subclassing device. The - exception being the text_begin method. The main body of the macro is:</p> +<p>The call to default_subclass_initialize_device_procs assigns the +default methods for a subclassing device. We then override the +text_begin method to our specific one. The main body of the macro is:</p> <code> const -gx_device_black_text gs_black_text_device = -{ -<dd> std_device_dci_type_body(gx_device_black_text, 0, "black_text", &st_black_text_device,<br /> - MAX_COORD, MAX_COORD,<br /> - MAX_RESOLUTION, MAX_RESOLUTION,<br /> - 1, 8, 255, 0, 256, 1), -</dd></code> +gx_device_black_text gs_black_text_device =<br /> +{<br /> + std_device_dci_type_body(gx_device_black_text, 0, "black_text", &st_black_text_device,<br /> + MAX_COORD, MAX_COORD,<br /> + MAX_RESOLUTION, MAX_RESOLUTION,<br /> + 1, 8, 255, 0, 256, 1), +</code> <p>This simply defines an instance of the 'gx_device_black_text' structure (which is simply a gx_device_s structure) initialised using a macro (yet another family of macros). Here we use the 'st_black_text_device' structure descriptor we created above, and some dummy values for the resolution, colour depth etc. Since this device doesn't do rendering these values aren't useful @@ -802,7 +740,7 @@ or contact Artifex Software, Inc., 1305 Grant Avenue - Suite 200, Novato, CA 94945, U.S.A., +1(415)492-9861. <p> -<small>Ghostscript version 9.54.0, 30 March 2021 +<small>Ghostscript version 9.55.0, 27 September 2021 <!-- [3.0 end visible trailer] ============================================= --> |