| Index: experimental/PdfViewer/SkPdfBasics.h
|
| ===================================================================
|
| --- experimental/PdfViewer/SkPdfBasics.h (revision 10357)
|
| +++ experimental/PdfViewer/SkPdfBasics.h (working copy)
|
| @@ -20,8 +20,28 @@
|
|
|
| // TODO(edisonn): better class design.
|
| struct SkPdfColorOperator {
|
| +
|
| + /*
|
| + color space name or array The current color space in which color values are to be interpreted
|
| + (see Section 4.5, “Color Spaces”). There are two separate color space
|
| + parameters: one for stroking and one for all other painting opera-
|
| + tions. Initial value: DeviceGray.
|
| + */
|
| +
|
| + // TODO(edisonn): implement the array part too
|
| // does not own the char*
|
| NotOwnedString fColorSpace;
|
| +
|
| +
|
| + /*
|
| + color (various) The current color to be used during painting operations (see Section
|
| + 4.5, “Color Spaces”). The type and interpretation of this parameter
|
| + depend on the current color space; for most color spaces, a color
|
| + value consists of one to four numbers. There are two separate color
|
| + parameters: one for stroking and one for all other painting opera-
|
| + tions. Initial value: black.
|
| + */
|
| +
|
| SkColor fColor;
|
| double fOpacity; // ca or CA
|
| // TODO(edisonn): add here other color space options.
|
| @@ -42,10 +62,7 @@
|
|
|
| // TODO(edisonn): better class design.
|
| struct SkPdfGraphicsState {
|
| - SkMatrix fMatrix;
|
| - SkMatrix fMatrixTm;
|
| - SkMatrix fMatrixTlm;
|
| -
|
| + // TODO(edisonn): deprecate and remove these!
|
| double fCurPosX;
|
| double fCurPosY;
|
|
|
| @@ -55,6 +72,35 @@
|
| SkPath fPath;
|
| bool fPathClosed;
|
|
|
| +
|
| +
|
| + double fTextLeading;
|
| + double fWordSpace;
|
| + double fCharSpace;
|
| +
|
| + SkPdfResourceDictionary* fResources;
|
| +
|
| +
|
| + // TODO(edisonn): move most of these in canvas/paint?
|
| + // we could have some in canvas (matrixes?),
|
| + // some in 2 paints (stroking paint and non stroking paint)
|
| +
|
| +// TABLE 4.2 Device-independent graphics state parameters
|
| +/*
|
| + * CTM array The current transformation matrix, which maps positions from user
|
| + coordinates to device coordinates (see Section 4.2, “Coordinate Sys-
|
| + tems”). This matrix is modified by each application of the coordi-
|
| + nate transformation operator, cm. Initial value: a matrix that
|
| + transforms default user coordinates to device coordinates.
|
| + */
|
| + SkMatrix fCTM;
|
| +
|
| +/*
|
| +clipping path (internal) The current clipping path, which defines the boundary against
|
| + which all output is to be cropped (see Section 4.4.3, “Clipping Path
|
| + Operators”). Initial value: the boundary of the entire imageable
|
| + portion of the output page.
|
| + */
|
| // Clip that is applied after the drawing is done!!!
|
| bool fHasClipPathToApply;
|
| SkPath fClipPath;
|
| @@ -62,21 +108,208 @@
|
| SkPdfColorOperator fStroking;
|
| SkPdfColorOperator fNonStroking;
|
|
|
| +/*
|
| +text state (various) A set of nine graphics state parameters that pertain only to the
|
| + painting of text. These include parameters that select the font, scale
|
| + the glyphs to an appropriate size, and accomplish other effects. The
|
| + text state parameters are described in Section 5.2, “Text State
|
| + Parameters and Operators.”
|
| + */
|
| +
|
| + // TODO(edisonn): add SkPdfTextState class. remove these two existing fields
|
| + SkMatrix fMatrixTm;
|
| + SkMatrix fMatrixTlm;
|
| +
|
| +
|
| +/*
|
| +line width number The thickness, in user space units, of paths to be stroked (see “Line
|
| + Width” on page 152). Initial value: 1.0.
|
| + */
|
| double fLineWidth;
|
| - double fTextLeading;
|
| - double fWordSpace;
|
| - double fCharSpace;
|
|
|
| - SkPdfResourceDictionary* fResources;
|
|
|
| +/*
|
| +line cap integer A code specifying the shape of the endpoints for any open path that
|
| + is stroked (see “Line Cap Style” on page 153). Initial value: 0, for
|
| + square butt caps.
|
| + */
|
| + // TODO (edisonn): implement defaults - page 153
|
| + int fLineCap;
|
| +
|
| +/*
|
| +line join integer A code specifying the shape of joints between connected segments
|
| + of a stroked path (see “Line Join Style” on page 153). Initial value: 0,
|
| + for mitered joins.
|
| + */
|
| + // TODO (edisonn): implement defaults - page 153
|
| + int fLineJoin;
|
| +
|
| +/*
|
| +miter limit number The maximum length of mitered line joins for stroked paths (see
|
| + “Miter Limit” on page 153). This parameter limits the length of
|
| + “spikes” produced when line segments join at sharp angles. Initial
|
| + value: 10.0, for a miter cutoff below approximately 11.5 degrees.
|
| + */
|
| + // TODO (edisonn): implement defaults - page 153
|
| + double fMiterLimit;
|
| +
|
| +/*
|
| +dash pattern array and A description of the dash pattern to be used when paths are
|
| + number stroked (see “Line Dash Pattern” on page 155). Initial value: a solid
|
| + line.
|
| + */
|
| + SkScalar fDashArray[256]; // TODO(edisonn): allocate array?
|
| + int fDashArrayLength;
|
| + SkScalar fDashPhase;
|
| +
|
| +
|
| +/*
|
| +rendering intent name The rendering intent to be used when converting CIE-based colors
|
| + to device colors (see “Rendering Intents” on page 197). Default
|
| + value: RelativeColorimetric.
|
| + */
|
| + // TODO(edisonn): seems paper only. Verify.
|
| +
|
| +/*
|
| +stroke adjustment boolean (PDF 1.2) A flag specifying whether to compensate for possible ras-
|
| + terization effects when stroking a path with a line width that is
|
| + small relative to the pixel resolution of the output device (see Sec-
|
| + tion 6.5.4, “Automatic Stroke Adjustment”). Note that this is con-
|
| + sidered a device-independent parameter, even though the details of
|
| + its effects are device-dependent. Initial value: false.
|
| + */
|
| + // TODO(edisonn): stroke adjustment low priority.
|
| +
|
| +
|
| +/*
|
| +blend mode name or array (PDF 1.4) The current blend mode to be used in the transparent
|
| + imaging model (see Sections 7.2.4, “Blend Mode,” and 7.5.2, “Spec-
|
| + ifying Blending Color Space and Blend Mode”). This parameter is
|
| + implicitly reset to its initial value at the beginning of execution of a
|
| + transparency group XObject (see Section 7.5.5, “Transparency
|
| + Group XObjects”). Initial value: Normal.
|
| + */
|
| + SkXfermode::Mode fBlendMode;
|
| +
|
| +/*
|
| +soft mask dictionary (PDF 1.4) A soft-mask dictionary (see “Soft-Mask Dictionaries” on
|
| + or name page 445) specifying the mask shape or mask opacity values to be
|
| + used in the transparent imaging model (see “Source Shape and
|
| + Opacity” on page 421 and “Mask Shape and Opacity” on page 443),
|
| + or the name None if no such mask is specified. This parameter is
|
| + implicitly reset to its initial value at the beginning of execution of a
|
| + transparency group XObject (see Section 7.5.5, “Transparency
|
| + Group XObjects”). Initial value: None.
|
| + */
|
| SkBitmap fSMask;
|
|
|
| +
|
| +/*
|
| +alpha constant number (PDF 1.4) The constant shape or constant opacity value to be used
|
| + in the transparent imaging model (see “Source Shape and Opacity”
|
| + on page 421 and “Constant Shape and Opacity” on page 444).
|
| + There are two separate alpha constant parameters: one for stroking
|
| + and one for all other painting operations. This parameter is implic-
|
| + itly reset to its initial value at the beginning of execution of a trans-
|
| + parency group XObject (see Section 7.5.5, “Transparency Group
|
| + XObjects”). Initial value: 1.0.
|
| + */
|
| + double fAphaConstant;
|
| +
|
| +/*
|
| +alpha source boolean (PDF 1.4) A flag specifying whether the current soft mask and alpha
|
| + constant parameters are to be interpreted as shape values (true) or
|
| + opacity values (false). This flag also governs the interpretation of
|
| + the SMask entry, if any, in an image dictionary (see Section 4.8.4,
|
| + “Image Dictionaries”). Initial value: false.
|
| + */
|
| + bool fAlphaSource;
|
| +
|
| +
|
| +// TODO(edisonn): Device-dependent seem to be required only on the actual physical printer?
|
| +// TABLE 4.3 Device-dependent graphics state parameters
|
| +/*
|
| +overprint boolean (PDF 1.2) A flag specifying (on output devices that support the
|
| + overprint control feature) whether painting in one set of colorants
|
| + should cause the corresponding areas of other colorants to be
|
| + erased (false) or left unchanged (true); see Section 4.5.6, “Over-
|
| + print Control.” In PDF 1.3, there are two separate overprint param-
|
| + eters: one for stroking and one for all other painting operations.
|
| + Initial value: false.
|
| + */
|
| +
|
| +
|
| +/*
|
| +overprint mode number (PDF 1.3) A code specifying whether a color component value of 0
|
| + in a DeviceCMYK color space should erase that component (0) or
|
| + leave it unchanged (1) when overprinting (see Section 4.5.6, “Over-
|
| + print Control”). Initial value: 0.
|
| + */
|
| +
|
| +
|
| +/*
|
| +black generation function (PDF 1.2) A function that calculates the level of the black color
|
| + or name component to use when converting RGB colors to CMYK (see Sec-
|
| + tion 6.2.3, “Conversion from DeviceRGB to DeviceCMYK”). Initial
|
| + value: installation-dependent.
|
| + */
|
| +
|
| +
|
| +/*
|
| +undercolor removal function (PDF 1.2) A function that calculates the reduction in the levels of
|
| + or name the cyan, magenta, and yellow color components to compensate for
|
| + the amount of black added by black generation (see Section 6.2.3,
|
| + “Conversion from DeviceRGB to DeviceCMYK”). Initial value: in-
|
| + stallation-dependent.
|
| + */
|
| +
|
| +
|
| +/*
|
| +transfer function, (PDF 1.2) A function that adjusts device gray or color component
|
| + array, or name levels to compensate for nonlinear response in a particular out-
|
| + put device (see Section 6.3, “Transfer Functions”). Initial value:
|
| + installation-dependent.
|
| + */
|
| +
|
| +
|
| +/*
|
| +halftone dictionary, (PDF 1.2) A halftone screen for gray and color rendering, specified
|
| + stream, or name as a halftone dictionary or stream (see Section 6.4, “Halftones”).
|
| + Initial value: installation-dependent.
|
| + */
|
| +
|
| +
|
| +/*
|
| +flatness number The precision with which curves are to be rendered on the output
|
| + device (see Section 6.5.1, “Flatness Tolerance”). The value of this
|
| + parameter gives the maximum error tolerance, measured in output
|
| + device pixels; smaller numbers give smoother curves at the expense
|
| + of more computation and memory use. Initial value: 1.0.
|
| + */
|
| +
|
| +
|
| +/*
|
| +smoothness number (PDF 1.3) The precision with which color gradients are to be ren-
|
| + dered on the output device (see Section 6.5.2, “Smoothness Toler-
|
| + ance”). The value of this parameter gives the maximum error
|
| + tolerance, expressed as a fraction of the range of each color compo-
|
| + nent; smaller numbers give smoother color transitions at the
|
| + expense of more computation and memory use. Initial value:
|
| + installation-dependent.
|
| + */
|
| +
|
| +
|
| +
|
| +
|
| +
|
| +
|
| +
|
| SkPdfGraphicsState() {
|
| fCurPosX = 0.0;
|
| fCurPosY = 0.0;
|
| fCurFontSize = 0.0;
|
| fTextBlock = false;
|
| - fMatrix = SkMatrix::I();
|
| + fCTM = SkMatrix::I();
|
| fMatrixTm = SkMatrix::I();
|
| fMatrixTlm = SkMatrix::I();
|
| fPathClosed = true;
|
| @@ -87,22 +320,18 @@
|
| fHasClipPathToApply = false;
|
| fResources = NULL;
|
| fSkFont = NULL;
|
| + fLineCap = 0;
|
| + fLineJoin = 0;
|
| + fMiterLimit = 10.0;
|
| + fAphaConstant = 1.0;
|
| + fAlphaSource = false;
|
| + fDashArrayLength = 0;
|
| + fDashPhase = 0;
|
| + fBlendMode = SkXfermode::kSrc_Mode; // PDF: Normal Blend mode
|
| }
|
|
|
| - void applyGraphicsState(SkPaint* paint, bool stroking) {
|
| - if (stroking) {
|
| - fStroking.applyGraphicsState(paint);
|
| - } else {
|
| - fNonStroking.applyGraphicsState(paint);
|
| - }
|
| -
|
| - // TODO(edisonn): get this from pdfContext->options,
|
| - // or pdfContext->addPaintOptions(&paint);
|
| - paint->setAntiAlias(true);
|
| -
|
| - // TODO(edisonn): dashing, miter, ...
|
| - paint->setStrokeWidth(SkDoubleToScalar(fLineWidth));
|
| - }
|
| + // TODO(edisonn): make two functons instead, stroking and non stoking, avoid branching
|
| + void applyGraphicsState(SkPaint* paint, bool stroking);
|
| };
|
|
|
| // TODO(edisonn): better class design.
|
|
|