Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(530)

Side by Side Diff: experimental/PdfViewer/SkPdfGraphicsState.h

Issue 1266093003: Remove experimental/PdfViewer (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: 2015-08-03 (Monday) 10:43:56 EDT Created 5 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « experimental/PdfViewer/SkPdfFont.cpp ('k') | experimental/PdfViewer/SkPdfGraphicsState.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 /*
2 * Copyright 2013 Google Inc.
3 *
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
6 */
7
8 #ifndef SkPdfGraphicsState_DEFINED
9 #define SkPdfGraphicsState_DEFINED
10
11 #include "SkCanvas.h"
12 #include "SkPaint.h"
13 #include "SkPdfConfig.h"
14 #include "SkPdfUtils.h"
15
16 class SkPdfFont;
17 class SkPdfNativeObject;
18 class SkPdfResourceDictionary;
19 class SkPdfSoftMaskDictionary;
20
21 /** \class SkPdfColorOperator
22 * Operates on stroking or non-stroking properties.
23 */
24 class SkPdfColorOperator {
25
26 /*
27 color space name or array The current color space in which color value s are to be interpreted
28 (see Section 4.5, “Color Spaces”). There are two separate color space
29 parameters: one for stroking and one for all other painting opera-
30 tions. Initial value: DeviceGray.
31 */
32
33 // TODO(edisonn): implement the array part too
34 // TODO(edisonn): remove this public, let fields be private
35 public:
36 NotOwnedString fColorSpace;
37 SkPdfNativeObject* fPattern;
38
39 /*
40 color (various) The current color to be used during painting operations (see Section
41 4.5, “Color Spaces”). The type and interpret ation of this parameter
42 depend on the current color space; for most color spaces, a color
43 value consists of one to four numbers. There are two separate color
44 parameters: one for stroking and one for all other painting opera-
45 tions. Initial value: black.
46 */
47
48 SkColor fColor;
49 double fOpacity; // ca or CA
50
51 public:
52 void setRGBColor(SkColor color) {
53 // TODO(edisonn): ASSERT DeviceRGB is the color space.
54 fPattern = NULL;
55 fColor = color;
56 }
57
58 // TODO(edisonn): implement the default values for all fields.
59 SkPdfColorOperator() : fPattern(NULL), fColor(SK_ColorBLACK), fOpacity(1) {
60 NotOwnedString::init(&fColorSpace, "DeviceRGB");
61 }
62
63 void setColorSpace(NotOwnedString* colorSpace) {
64 fColorSpace = *colorSpace;
65 fPattern = NULL;
66 }
67
68 void setPatternColorSpace(SkPdfNativeObject* pattern) {
69 fColorSpace.fBuffer = (const unsigned char*)"Pattern";
70 fColorSpace.fBytes = 7; // strlen("Pattern")
71 fPattern = pattern;
72 }
73
74 void applyGraphicsState(SkPaint* paint) {
75 paint->setColor(SkColorSetA(fColor, (U8CPU)(fOpacity * 255)));
76 }
77 };
78
79 /**
80 * Operates on stroking or non-stroking properties.
81 */
82 struct SkPdfGraphicsState {
83 // TODO(edisonn): deprecate and remove these!
84 double fCurPosX;
85 double fCurPosY;
86
87 double fCurFontSize;
88 bool fTextBlock;
89 SkPdfFont* fSkFont;
90 SkPath fPath;
91 bool fPathClosed;
92
93 double fTextLeading;
94 double fWordSpace;
95 double fCharSpace;
96
97 SkPdfResourceDictionary* fResources;
98
99
100 // TODO(edisonn): Can we move most of these in canvas/paint?
101 // Might need to strore some properties in 2 paints (stroking paint and non stroking paint)
102
103 // TABLE 4.2 Device-independent graphics state parameters
104 /*
105 * CTM array The current transformation matrix, which maps positions from user
106 coordinates to device coordinates (see Section 4 .2, “Coordinate Sys-
107 tems”). This matrix is modified by each applicati on of the coordi-
108 nate transformation operator, cm. Initial value: a matrix that
109 transforms default user coordinates to device co ordinates.
110 */
111 SkMatrix fCTM;
112
113 SkMatrix fContentStreamMatrix;
114
115 /*
116 clipping path (internal) The current clipping path, which defines the boun dary against
117 which all output is to be cropped (see Section 4 .4.3, “Clipping Path
118 Operators”). Initial value: the boundary of the entire imageable
119 portion of the output page.
120 */
121 // Clip that is applied after the drawing is done!!!
122 bool fHasClipPathToApply;
123 SkPath fClipPath;
124
125 SkPdfColorOperator fStroking;
126 SkPdfColorOperator fNonStroking;
127
128 /*
129 text state (various) A set of nine graphics state parameters that per tain only to the
130 painting of text. These include parameters that select the font, scale
131 the glyphs to an appropriate size, and accomplis h other effects. The
132 text state parameters are described in Section 5 .2, “Text State
133 Parameters and Operators.”
134 */
135
136 // TODO(edisonn): add SkPdfTextState class. remove these two existing fields
137 SkMatrix fMatrixTm;
138 SkMatrix fMatrixTlm;
139
140
141 /*
142 line width number The thickness, in user space units, of paths to be stroked (see “Line
143 Width” on page 152). Initial value: 1.0.
144 */
145 double fLineWidth;
146
147
148 /*
149 line cap integer A code specifying the shape of the endpoints for any open path that
150 is stroked (see “Line Cap Style” on page 153). I nitial value: 0, for
151 square butt caps.
152 */
153 // TODO (edisonn): implement defaults - page 153
154 int fLineCap;
155
156 /*
157 line join integer A code specifying the shape of joints between co nnected segments
158 of a stroked path (see “Line Join Style” on page 153). Initial value: 0,
159 for mitered joins.
160 */
161 // TODO (edisonn): implement defaults - page 153
162 int fLineJoin;
163
164 /*
165 miter limit number The maximum length of mitered line joins for str oked paths (see
166 “Miter Limit” on page 153). This parameter limit s the length of
167 “spikes” produced when line segments join at sha rp angles. Initial
168 value: 10.0, for a miter cutoff below approximat ely 11.5 degrees.
169 */
170 // TODO (edisonn): implement defaults - page 153
171 double fMiterLimit;
172
173 /*
174 dash pattern array and A description of the dash pattern to be used whe n paths are
175 number stroked (see “Line Dash Pattern” on page 155). I nitial value: a solid
176 line.
177 */
178 SkScalar fDashArray[256]; // TODO(edisonn): allocate array?
179 int fDashArrayLength;
180 SkScalar fDashPhase;
181
182
183 /*
184 rendering intent name The rendering intent to be used when converting CIE-based colors
185 to device colors (see “Rendering Intents” on pag e 197). Default
186 value: RelativeColorimetric.
187 */
188 // TODO(edisonn): seems paper only. Verify.
189
190 /*
191 stroke adjustment boolean (PDF 1.2) A flag specifying whether to compensate for possible ras-
192 terization effects when stroking a path with a l ine width that is
193 small relative to the pixel resolution of the ou tput device (see Sec-
194 tion 6.5.4, “Automatic Stroke Adjustment”). Note that this is con-
195 sidered a device-independent parameter, even tho ugh the details of
196 its effects are device-dependent. Initial value: false.
197 */
198 // TODO(edisonn): stroke adjustment low priority.
199
200
201 /*
202 blend mode name or array (PDF 1.4) The current blend mode to be used in t he transparent
203 imaging model (see Sections 7.2.4, “Blend Mode,” and 7.5.2, “Spec-
204 ifying Blending Color Space and Blend Mode”). Th is parameter is
205 implicitly reset to its initial value at the beg inning of execution of a
206 transparency group XObject (see Section 7.5.5, “ Transparency
207 Group XObjects”). Initial value: Normal.
208 */
209 SkXfermode::Mode fBlendModes[256];
210 int fBlendModesLength;
211
212 /*
213 soft mask dictionary (PDF 1.4) A soft-mask dictionary (see “Soft-Mask Dictionaries” on
214 or name page 445) specifying the mask shape or mask opac ity values to be
215 used in the transparent imaging model (see “Sour ce Shape and
216 Opacity” on page 421 and “Mask Shape and Opacity ” on page 443),
217 or the name None if no such mask is specified. Th is parameter is
218 implicitly reset to its initial value at the beg inning of execution of a
219 transparency group XObject (see Section 7.5.5, “ Transparency
220 Group XObjects”). Initial value: None.
221 */
222 SkPdfSoftMaskDictionary* fSoftMaskDictionary;
223 // TODO(edisonn): make sMask private, add setter and getter, ref/unref/..., at the moment we most likely leask
224 SkBitmap* fSMask;
225
226
227 /*
228 alpha constant number (PDF 1.4) The constant shape or constant opacity value to be used
229 in the transparent imaging model (see “Source Sh ape and Opacity”
230 on page 421 and “Constant Shape and Opacity” on page 444).
231 There are two separate alpha constant parameters : one for stroking
232 and one for all other painting operations. This parameter is implic-
233 itly reset to its initial value at the beginning of execution of a trans-
234 parency group XObject (see Section 7.5.5, “Trans parency Group
235 XObjects”). Initial value: 1.0.
236 */
237 double fAphaConstant;
238
239 /*
240 alpha source boolean (PDF 1.4) A flag specifying whether the current s oft mask and alpha
241 constant parameters are to be interpreted as sha pe values (true) or
242 opacity values (false). This flag also governs th e interpretation of
243 the SMask entry, if any, in an image dictionary (see Section 4.8.4,
244 “Image Dictionaries”). Initial value: false.
245 */
246 bool fAlphaSource;
247
248
249 // TODO(edisonn): Device-dependent seem to be required only on the actual physic al printer?
250 // TABLE 4.3 Device-dependent graphics state parameters
251 /*
252 overprint boolean (PDF 1.2) A flag specifying (on output devi ces that support the
253 overprint control feature) whether paintin g in one set of colorants
254 should cause the corresponding areas of ot her colorants to be
255 erased (false) or left unchanged (true); s ee Section 4.5.6, “Over-
256 print Control.” In PDF 1.3, there are two separate overprint param-
257 eters: one for stroking and one for all ot her painting operations.
258 Initial value: false.
259 */
260
261
262 /*
263 overprint mode number (PDF 1.3) A code specifying whether a colo r component value of 0
264 in a DeviceCMYK color space should erase t hat component (0) or
265 leave it unchanged (1) when overprinting ( see Section 4.5.6, “Over-
266 print Control”). Initial value: 0.
267 */
268
269
270 /*
271 black generation function (PDF 1.2) A function that calculates the l evel of the black color
272 or name component to use when converting RGB color s to CMYK (see Sec-
273 tion 6.2.3, “Conversion from DeviceRGB to DeviceCMYK”). Initial
274 value: installation-dependent.
275 */
276
277
278 /*
279 undercolor removal function (PDF 1.2) A function that calculates the r eduction in the levels of
280 or name the cyan, magenta, and yellow color compon ents to compensate for
281 the amount of black added by black generat ion (see Section 6.2.3,
282 “Conversion from DeviceRGB to DeviceCMYK”) . Initial value: in-
283 stallation-dependent.
284 */
285
286
287 /*
288 transfer function, (PDF 1.2) A function that adjusts device g ray or color component
289 array, or name levels to compensate for nonlinear respons e in a particular out-
290 put device (see Section 6.3, “Transfer Fun ctions”). Initial value:
291 installation-dependent.
292 */
293
294
295 /*
296 halftone dictionary, (PDF 1.2) A halftone screen for gray and c olor rendering, specified
297 stream, or name as a halftone dictionary or stream (see Se ction 6.4, “Halftones”).
298 Initial value: installation-dependent.
299 */
300
301
302 /*
303 flatness number The precision with which curves are to be rendered on the output
304 device (see Section 6.5.1, “Flatness Toler ance”). The value of this
305 parameter gives the maximum error toleranc e, measured in output
306 device pixels; smaller numbers give smooth er curves at the expense
307 of more computation and memory use. Initia l value: 1.0.
308 */
309
310
311 /*
312 smoothness number (PDF 1.3) The precision with which col or gradients are to be ren-
313 dered on the output device (see Sectio n 6.5.2, “Smoothness Toler-
314 ance”). The value of this parameter gi ves the maximum error
315 tolerance, expressed as a fraction of the range of each color compo-
316 nent; smaller numbers give smoother co lor transitions at the
317 expense of more computation and memory use. Initial value:
318 installation-dependent.
319 */
320
321 // TODO(edisonn): some defaults are contextual, they could on colorspace, pd f version, ...
322 SkPdfGraphicsState() {
323 fCurPosX = 0.0;
324 fCurPosY = 0.0;
325 fCurFontSize = 0.0;
326 fTextBlock = false;
327 fCTM = SkMatrix::I();
328 fMatrixTm = SkMatrix::I();
329 fMatrixTlm = SkMatrix::I();
330 fPathClosed = true;
331 fLineWidth = 0;
332 fTextLeading = 0;
333 fWordSpace = 0;
334 fCharSpace = 0;
335 fHasClipPathToApply = false;
336 fResources = NULL;
337 fSkFont = NULL;
338 fLineCap = 0;
339 fLineJoin = 0;
340 fMiterLimit = 10.0;
341 fAphaConstant = 1.0;
342 fAlphaSource = false;
343 fDashArrayLength = 0;
344 fDashPhase = 0;
345 fBlendModesLength = 1;
346 fBlendModes[0] = SkXfermode::kSrc_Mode; // PDF: Normal Blend mode
347 fSMask = NULL;
348 }
349
350 // TODO(edisonn): make two functions instead, stroking and non stoking, avoi d branching
351 void applyGraphicsState(SkPaint* paint, bool stroking);
352 };
353
354 #endif // SkPdfGraphicsState_DEFINED
OLDNEW
« no previous file with comments | « experimental/PdfViewer/SkPdfFont.cpp ('k') | experimental/PdfViewer/SkPdfGraphicsState.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698