Index: experimental/PdfViewer/SkPdfBasics.h |
=================================================================== |
--- experimental/PdfViewer/SkPdfBasics.h (revision 10712) |
+++ experimental/PdfViewer/SkPdfBasics.h (working copy) |
@@ -1,400 +0,0 @@ |
-#ifndef __DEFINED__SkPdfBasics |
-#define __DEFINED__SkPdfBasics |
- |
-#include "SkCanvas.h" |
-#include "SkPaint.h" |
-#include "SkPdfConfig.h" |
- |
-#include <iostream> |
-#include <cstdio> |
-#include <map> |
-#include <stack> |
- |
-class SkPdfFont; |
-class SkPdfDoc; |
-class SkPdfObject; |
-class SkPdfResourceDictionary; |
-class SkPdfSoftMaskDictionary; |
- |
-class SkNativeParsedPDF; |
-class SkPdfAllocator; |
- |
-// TODO(edisonn): better class design. |
-class 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* |
-// TODO(edisonn): remove this public, let fields be private |
-// TODO(edisonn): make color space an enum! |
-public: |
- NotOwnedString fColorSpace; |
- SkPdfObject* fPattern; |
- |
- /* |
- 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. |
- |
-public: |
- void setRGBColor(SkColor color) { |
- // TODO(edisonn): ASSERT DeviceRGB is the color space. |
- fPattern = NULL; |
- fColor = color; |
- } |
- // TODO(edisonn): double check the default values for all fields. |
- SkPdfColorOperator() : fPattern(NULL), fColor(SK_ColorBLACK), fOpacity(1) { |
- NotOwnedString::init(&fColorSpace, "DeviceRGB"); |
- } |
- |
- void setColorSpace(NotOwnedString* colorSpace) { |
- fColorSpace = *colorSpace; |
- fPattern = NULL; |
- } |
- |
- void setPatternColorSpace(SkPdfObject* pattern) { |
- fColorSpace.fBuffer = (const unsigned char*)"Pattern"; |
- fColorSpace.fBytes = 7; // strlen("Pattern") |
- fPattern = pattern; |
- } |
- |
- void applyGraphicsState(SkPaint* paint) { |
- paint->setColor(SkColorSetA(fColor, (U8CPU)(fOpacity * 255))); |
- } |
-}; |
- |
-// TODO(edisonn): better class design. |
-struct SkPdfGraphicsState { |
- // TODO(edisonn): deprecate and remove these! |
- double fCurPosX; |
- double fCurPosY; |
- |
- double fCurFontSize; |
- bool fTextBlock; |
- SkPdfFont* fSkFont; |
- 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; |
- |
- SkMatrix fContentStreamMatrix; |
- |
-/* |
-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; |
- |
- 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; |
- |
- |
-/* |
-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 fBlendModes[256]; |
- int fBlendModesLength; |
- |
-/* |
-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. |
- */ |
- SkPdfSoftMaskDictionary* fSoftMaskDictionary; |
- // TODO(edisonn): make sMask private, add setter and getter, ref/unref/..., at the moment we most likely leask |
- 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; |
- fCTM = SkMatrix::I(); |
- fMatrixTm = SkMatrix::I(); |
- fMatrixTlm = SkMatrix::I(); |
- fPathClosed = true; |
- fLineWidth = 0; |
- fTextLeading = 0; |
- fWordSpace = 0; |
- fCharSpace = 0; |
- fHasClipPathToApply = false; |
- fResources = NULL; |
- fSkFont = NULL; |
- fLineCap = 0; |
- fLineJoin = 0; |
- fMiterLimit = 10.0; |
- fAphaConstant = 1.0; |
- fAlphaSource = false; |
- fDashArrayLength = 0; |
- fDashPhase = 0; |
- fBlendModesLength = 1; |
- fBlendModes[0] = SkXfermode::kSrc_Mode; // PDF: Normal Blend mode |
- fSMask = NULL; |
- } |
- |
- // TODO(edisonn): make two functons instead, stroking and non stoking, avoid branching |
- void applyGraphicsState(SkPaint* paint, bool stroking); |
-}; |
- |
-// TODO(edisonn): better class design. |
-// TODO(edisonn): could we remove it? |
-// TODO(edisonn): rename to SkPdfInlineImage |
-struct SkPdfInlineImage { |
- std::map<std::string, std::string> fKeyValuePairs; |
- std::string fImageData; |
-}; |
- |
-// TODO(edisonn): better class design. |
-// TODO(edisonn): rename to SkPdfContext |
-struct PdfContext { |
- std::stack<SkPdfObject*> fObjectStack; |
- std::stack<SkPdfGraphicsState> fStateStack; |
- SkPdfGraphicsState fGraphicsState; |
- SkNativeParsedPDF* fPdfDoc; |
- // TODO(edisonn): the allocator, could be freed after the page is done drawing. |
- SkPdfAllocator* fTmpPageAllocator; |
- SkMatrix fOriginalMatrix; |
- |
- SkPdfInlineImage fInlineImage; |
- |
- PdfContext(SkNativeParsedPDF* doc); |
- ~PdfContext(); |
-}; |
- |
-// TODO(edisonn): temporary code, to report how much of the PDF we actually think we rendered. |
-// TODO(edisonn): rename to SkPdfResult |
-enum PdfResult { |
- kOK_PdfResult, |
- kPartial_PdfResult, |
- kNYI_PdfResult, |
- kIgnoreError_PdfResult, |
- kError_PdfResult, |
- kUnsupported_PdfResult, |
- |
- kCount_PdfResult |
-}; |
- |
-#endif // __DEFINED__SkPdfBasics |