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