1 /* Copyright (C) 2001-2006 Artifex Software, Inc. 2 All Rights Reserved. 3 4 This software is provided AS-IS with no warranty, either express or 5 implied. 6 7 This software is distributed under license and may not be copied, modified 8 or distributed except as expressly authorized under the terms of that 9 license. Refer to licensing information at http://www.artifex.com/ 10 or contact Artifex Software, Inc., 7 Mt. Lassen Drive - Suite A-134, 11 San Rafael, CA 94903, U.S.A., +1(415)492-9861, for further information. 12 */ 13 14 /* $Id: gsptype2.h 9934 2009-08-05 22:12:58Z marcos $ */ 15 /* Client interface to PatternType 2 Patterns */ 16 17 #ifndef gsptype2_INCLUDED 18 # define gsptype2_INCLUDED 19 20 #include "gspcolor.h" 21 #include "gsdcolor.h" 22 #include "gxfixed.h" 23 24 /* ---------------- Types and structures ---------------- */ 25 26 /* PatternType 2 template */ 27 28 #ifndef gs_shading_t_DEFINED 29 # define gs_shading_t_DEFINED 30 typedef struct gs_shading_s gs_shading_t; 31 #endif 32 33 typedef struct gs_pattern2_template_s { 34 gs_pattern_template_common; 35 const gs_shading_t *Shading; 36 } gs_pattern2_template_t; 37 38 #define private_st_pattern2_template() /* in gsptype2.c */\ 39 gs_private_st_suffix_add1(st_pattern2_template,\ 40 gs_pattern2_template_t, "gs_pattern2_template_t",\ 41 pattern2_template_enum_ptrs, pattern2_template_reloc_ptrs,\ 42 st_pattern_template, Shading) 43 #define st_pattern2_template_max_ptrs (st_pattern_template_max_ptrs + 1) 44 45 /* PatternType 2 instance */ 46 47 #ifndef gx_device_color_DEFINED 48 # define gx_device_color_DEFINED 49 typedef struct gx_device_color_s gx_device_color; 50 #endif 51 52 typedef struct gs_pattern2_instance_s { 53 gs_pattern_instance_common; 54 gs_pattern2_template_t template; 55 bool shfill; 56 } gs_pattern2_instance_t; 57 58 #define private_st_pattern2_instance() /* in gsptype2.c */\ 59 gs_private_st_composite(st_pattern2_instance, gs_pattern2_instance_t,\ 60 "gs_pattern2_instance_t", pattern2_instance_enum_ptrs,\ 61 pattern2_instance_reloc_ptrs) 62 63 #ifndef gx_path_DEFINED 64 #define gx_path_DEFINED 65 typedef struct gx_path_s gx_path; 66 #endif 67 68 #ifndef gx_device_DEFINED 69 #define gx_device_DEFINED 70 typedef struct gx_device_s gx_device; 71 #endif 72 73 #ifndef gs_color_space_DEFINED 74 # define gs_color_space_DEFINED 75 typedef struct gs_color_space_s gs_color_space; 76 #endif 77 78 #ifndef gx_clip_path_DEFINED 79 # define gx_clip_path_DEFINED 80 typedef struct gx_clip_path_s gx_clip_path; 81 #endif 82 83 extern const gx_device_color_type_t gx_dc_pattern2; 84 85 #define gx_dc_type_pattern2 (&gx_dc_pattern2) 86 87 /* ---------------- Procedures ---------------- */ 88 89 /* 90 * We should provide a gs_cspace_build_Pattern2 procedure to construct 91 * the color space, but we don't. 92 */ 93 94 /* Initialize a PatternType 2 pattern. */ 95 void gs_pattern2_init(gs_pattern2_template_t *); 96 97 /* Check device color for Pattern Type 2. */ 98 bool gx_dc_is_pattern2_color(const gx_device_color *pdevc); 99 100 /* Set the 'shfill' flag to a PatternType 2 pattern instance. */ 101 int gs_pattern2_set_shfill(gs_client_color * pcc); 102 103 /* Transform a shading bounding box into device space. */ 104 int gx_dc_pattern2_shade_bbox_transform2fixed(const gs_rect * rect, 105 const gs_imager_state * pis, gs_fixed_rect * rfixed); 106 107 /* Get a shading bbox. Returns 1 on success. */ 108 int gx_dc_pattern2_get_bbox(const gx_device_color * pdevc, gs_fixed_rect *bbox); 109 110 /* Checks whether a PatternType 2 has a shading BBox. */ 111 int gx_dc_pattern2_color_has_bbox(const gx_device_color * pdevc); 112 113 /* Intersect a clipping path a shading BBox. */ 114 int gx_dc_pattern2_clip_with_bbox(const gx_device_color * pdevc, gx_device * pdev, 115 gx_clip_path *cpath_local, const gx_clip_path **cpath1); 116 /* Intersect a clipping path a shading BBox. */ 117 int gx_dc_pattern2_clip_with_bbox_simple(const gx_device_color * pdevc, gx_device * pdev, 118 gx_clip_path *cpath); 119 /* Check whether color is a shading with BBox. */ 120 int gx_dc_pattern2_is_rectangular_cell(const gx_device_color * pdevc, gx_device * pdev, gs_fixed_rect *rect); 121 122 /* Get a shading color space. */ 123 const gs_color_space *gx_dc_pattern2_get_color_space(const gx_device_color * pdevc); 124 125 /* Check device color for a possibly self-overlapping shading. */ 126 bool gx_dc_pattern2_can_overlap(const gx_device_color *pdevc); 127 128 /* Check whether a pattern color has a background. */ 129 bool gx_dc_pattern2_has_background(const gx_device_color *pdevc); 130 #endif /* gsptype2_INCLUDED */ 131