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

Unified Diff: experimental/PdfViewer/SkPdfBasics.h

Issue 23020003: pdfviewer: debug code for drawText (show magenta background for text, to show text even when we fai… (Closed) Base URL: http://skia.googlecode.com/svn/trunk/
Patch Set: Created 7 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | experimental/PdfViewer/SkPdfBasics.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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
« no previous file with comments | « no previous file | experimental/PdfViewer/SkPdfBasics.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698