2 |
- |
1 |
/* Copyright (C) 1997, 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: gsptype1.h,v 1.5 2002/06/16 08:45:42 lpd Exp $ */
|
|
|
18 |
/* Client interface to PatternType 1 Patterns */
|
|
|
19 |
|
|
|
20 |
#ifndef gsptype1_INCLUDED
|
|
|
21 |
# define gsptype1_INCLUDED
|
|
|
22 |
|
|
|
23 |
#include "gspcolor.h"
|
|
|
24 |
#include "gxbitmap.h"
|
|
|
25 |
|
|
|
26 |
/* ---------------- Types and structures ---------------- */
|
|
|
27 |
|
|
|
28 |
/* PatternType 1 template */
|
|
|
29 |
|
|
|
30 |
typedef struct gs_pattern1_template_s {
|
|
|
31 |
/*
|
|
|
32 |
* The common template must come first. It defines type, uid,
|
|
|
33 |
* PatternType, and client_data.
|
|
|
34 |
*/
|
|
|
35 |
gs_pattern_template_common;
|
|
|
36 |
int PaintType;
|
|
|
37 |
int TilingType;
|
|
|
38 |
gs_rect BBox;
|
|
|
39 |
float XStep;
|
|
|
40 |
float YStep;
|
|
|
41 |
int (*PaintProc) (const gs_client_color *, gs_state *);
|
|
|
42 |
} gs_pattern1_template_t;
|
|
|
43 |
|
|
|
44 |
#define private_st_pattern1_template() /* in gspcolor.c */\
|
|
|
45 |
gs_private_st_suffix_add0(st_pattern1_template,\
|
|
|
46 |
gs_pattern1_template_t, "gs_pattern1_template_t",\
|
|
|
47 |
pattern1_template_enum_ptrs, pattern1_template_reloc_ptrs,\
|
|
|
48 |
st_pattern_template)
|
|
|
49 |
#define st_pattern1_template_max_ptrs st_pattern_template_max_ptrs
|
|
|
50 |
|
|
|
51 |
/* Backward compatibility */
|
|
|
52 |
typedef gs_pattern1_template_t gs_client_pattern;
|
|
|
53 |
|
|
|
54 |
/* ---------------- Procedures ---------------- */
|
|
|
55 |
|
|
|
56 |
/*
|
|
|
57 |
* Construct a PatternType 1 Pattern color space. If the base space is
|
|
|
58 |
* NULL, the color space can only be used with colored patterns.
|
|
|
59 |
*/
|
|
|
60 |
extern int gs_cspace_build_Pattern1(
|
|
|
61 |
gs_color_space ** ppcspace,
|
|
|
62 |
const gs_color_space * pbase_cspace,
|
|
|
63 |
gs_memory_t * pmem
|
|
|
64 |
);
|
|
|
65 |
|
|
|
66 |
/* Initialize a PatternType 1 pattern. */
|
|
|
67 |
void gs_pattern1_init(gs_pattern1_template_t *);
|
|
|
68 |
|
|
|
69 |
/* Backward compatibility */
|
|
|
70 |
#define gs_client_pattern_init(ppat) gs_pattern1_init(ppat)
|
|
|
71 |
|
|
|
72 |
/*
|
|
|
73 |
* Define versions of make_pattern and get_pattern specifically for
|
|
|
74 |
* PatternType 1 patterns.
|
|
|
75 |
*
|
|
|
76 |
* The gs_memory_t argument for gs_makepattern may be NULL, meaning use the
|
|
|
77 |
* same allocator as for the gs_state argument. Note that gs_makepattern
|
|
|
78 |
* uses rc_alloc_struct_1 to allocate pattern instances.
|
|
|
79 |
*/
|
|
|
80 |
int gs_makepattern(gs_client_color *, const gs_client_pattern *,
|
|
|
81 |
const gs_matrix *, gs_state *, gs_memory_t *);
|
|
|
82 |
const gs_client_pattern *gs_getpattern(const gs_client_color *);
|
|
|
83 |
|
|
|
84 |
/*
|
|
|
85 |
* Make a pattern from a bitmap or pixmap. The pattern may be colored or
|
|
|
86 |
* uncolored, as determined by the mask operand. This code is intended
|
|
|
87 |
* primarily for use by PCL.
|
|
|
88 |
*
|
|
|
89 |
* By convention, if pmat is null the identity matrix will be used, and if
|
|
|
90 |
* id is no_UniqueID the code will assign a unique id. Thes conventions allow
|
|
|
91 |
* gs_makebitmappattern to be implemented as a macro. Also, if mem is a
|
|
|
92 |
* null pointer, the memory allocator for the graphic state is used.
|
|
|
93 |
*
|
|
|
94 |
* For mask patterns, pix_depth must be 1, while pcspace and white_index are
|
|
|
95 |
* ignored; the polarity of the mask considers ones part of the mask, while
|
|
|
96 |
* zeros are not. For colored patterns pspace must point to an indexed color
|
|
|
97 |
* space and the image must used the canoncial Decode array for this color
|
|
|
98 |
* space. For both cases no interpolation or adjustment is provided.
|
|
|
99 |
*
|
|
|
100 |
* For backwards compatibility, if mask is false, pcspace is null, and
|
|
|
101 |
* pix_depth is 1, the pattern will be rendered with a color space that maps
|
|
|
102 |
* 0 to white and 1 to black.
|
|
|
103 |
*
|
|
|
104 |
* The image must be described by a gx_tile_bitmap structure (this is actually
|
|
|
105 |
* somewhat awkward, but the only option available at the moment), and the
|
|
|
106 |
* pattern step will exactly match the image size. The client need not maintain
|
|
|
107 |
* the gx_tile_bitmap structure after the completion of this call, but the
|
|
|
108 |
* raw image data itself must be kept until the pattern is no longer needed.
|
|
|
109 |
*
|
|
|
110 |
* NB: For proper handling of transparency in PCL, there must be only a single
|
|
|
111 |
* white value accessed by the pattern image. If the palette contains
|
|
|
112 |
* multiple white values, the PCL component must remap the image data to
|
|
|
113 |
* ensure that all white indices are mapped to the single, given white
|
|
|
114 |
* index.
|
|
|
115 |
*/
|
|
|
116 |
extern int gs_makepixmappattern(
|
|
|
117 |
gs_client_color * pcc,
|
|
|
118 |
const gs_depth_bitmap * pbitmap,
|
|
|
119 |
bool mask,
|
|
|
120 |
const gs_matrix * pmat,
|
|
|
121 |
long id,
|
|
|
122 |
const gs_color_space * pcspace,
|
|
|
123 |
uint white_index,
|
|
|
124 |
gs_state * pgs,
|
|
|
125 |
gs_memory_t * mem
|
|
|
126 |
);
|
|
|
127 |
|
|
|
128 |
/*
|
|
|
129 |
* Backwards compatibility feature, to allow the existing
|
|
|
130 |
* gs_makebitmappattern operation to still function.
|
|
|
131 |
*/
|
|
|
132 |
extern int gs_makebitmappattern_xform(
|
|
|
133 |
gs_client_color * pcc,
|
|
|
134 |
const gx_tile_bitmap * ptile,
|
|
|
135 |
bool mask,
|
|
|
136 |
const gs_matrix * pmat,
|
|
|
137 |
long id,
|
|
|
138 |
gs_state * pgs,
|
|
|
139 |
gs_memory_t * mem
|
|
|
140 |
);
|
|
|
141 |
|
|
|
142 |
#define gs_makebitmappattern(pcc, tile, mask, pgs, mem) \
|
|
|
143 |
gs_makebitmappattern_xform(pcc, tile, mask, 0, no_UniqueID, pgs, mem)
|
|
|
144 |
|
|
|
145 |
#endif /* gsptype1_INCLUDED */
|