xref: /plan9/sys/src/cmd/gs/src/gdevhit.c (revision 593dc095aefb2a85c828727bbfa9da139a49bdf4)
1 /* Copyright (C) 1998, 1999 Aladdin Enterprises.  All rights reserved.
2 
3   This software is provided AS-IS with no warranty, either express or
4   implied.
5 
6   This software is distributed under license and may not be copied,
7   modified or distributed except as expressly authorized under the terms
8   of the license contained in the file LICENSE in this distribution.
9 
10   For more information about licensing, please refer to
11   http://www.ghostscript.com/licensing/. For information on
12   commercial licensing, go to http://www.artifex.com/licensing/ or
13   contact Artifex Software, Inc., 101 Lucas Valley Road #110,
14   San Rafael, CA  94903, U.S.A., +1(415)492-9861.
15 */
16 
17 /* $Id: gdevhit.c,v 1.4 2002/02/21 22:24:51 giles Exp $ */
18 /* Hit detection device */
19 #include "std.h"
20 #include "gserror.h"
21 #include "gserrors.h"
22 #include "gstypes.h"
23 #include "gsmemory.h"
24 #include "gxdevice.h"
25 
26 /* Define the value returned for a detected hit. */
27 const int gs_hit_detected = gs_error_hit_detected;
28 
29 /*
30  * Define a minimal device for insideness testing.
31  * It returns e_hit whenever it is asked to actually paint any pixels.
32  */
33 private dev_proc_fill_rectangle(hit_fill_rectangle);
34 const gx_device gs_hit_device = {
35  std_device_std_body(gx_device, 0, "hit detector",
36 		     0, 0, 1, 1),
37  {NULL,				/* open_device */
38   NULL,				/* get_initial_matrix */
39   NULL,				/* sync_output */
40   NULL,				/* output_page */
41   NULL,				/* close_device */
42   gx_default_map_rgb_color,
43   gx_default_map_color_rgb,
44   hit_fill_rectangle,
45   NULL,				/* tile_rectangle */
46   NULL,				/* copy_mono */
47   NULL,				/* copy_color */
48   gx_default_draw_line,
49   NULL,				/* get_bits */
50   NULL,				/* get_params */
51   NULL,				/* put_params */
52   gx_default_map_cmyk_color,
53   NULL,				/* get_xfont_procs */
54   NULL,				/* get_xfont_device */
55   gx_default_map_rgb_alpha_color,
56   gx_default_get_page_device,
57   gx_default_get_alpha_bits,
58   NULL,				/* copy_alpha */
59   gx_default_get_band,
60   NULL,				/* copy_rop */
61   gx_default_fill_path,
62   NULL,				/* stroke_path */
63   NULL,				/* fill_mask */
64   gx_default_fill_trapezoid,
65   gx_default_fill_parallelogram,
66   gx_default_fill_triangle,
67   gx_default_draw_thin_line,
68   gx_default_begin_image,
69   gx_default_image_data,
70   gx_default_end_image,
71   gx_default_strip_tile_rectangle,
72   gx_default_strip_copy_rop,
73   gx_get_largest_clipping_box,
74   gx_default_begin_typed_image,
75   NULL,				/* get_bits_rectangle */
76   gx_default_map_color_rgb_alpha,
77   gx_non_imaging_create_compositor,
78   NULL				/* get_hardware_params */
79  }
80 };
81 
82 /* Test for a hit when filling a rectangle. */
83 private int
hit_fill_rectangle(gx_device * dev,int x,int y,int w,int h,gx_color_index color)84 hit_fill_rectangle(gx_device * dev, int x, int y, int w, int h,
85 		   gx_color_index color)
86 {
87     if (w > 0 && h > 0)
88 	return_error(gs_error_hit_detected);
89     return 0;
90 }
91