| Index: experimental/PdfViewer/SkPdfGraphicsState.h
|
| ===================================================================
|
| --- experimental/PdfViewer/SkPdfGraphicsState.h (revision 11730)
|
| +++ experimental/PdfViewer/SkPdfGraphicsState.h (working copy)
|
| @@ -13,34 +13,39 @@
|
| #include "SkPdfConfig.h"
|
| #include "SkPdfUtils.h"
|
|
|
| +class SkPdfAllocator;
|
| class SkPdfFont;
|
| class SkPdfDoc;
|
| +class SkPdfNativeDoc;
|
| class SkPdfNativeObject;
|
| class SkPdfResourceDictionary;
|
| class SkPdfSoftMaskDictionary;
|
| +#include "SkTypes.h"
|
|
|
| -class SkPdfNativeDoc;
|
| -class SkPdfAllocator;
|
|
|
| -// TODO(edisonn): move this class in include/core?
|
| -// Ref objects can't be dealt unless we use a specific class initialization
|
| -// The difference between SkTDStackNew and SkTDStack is that SkTDStackNew uses new/delete
|
| -// to be a manage c++ stuff (like initializations)
|
| +// TODO(edisonn): move SkTDStackNester class in its own private file
|
|
|
| // Adobe limits it to 28, so 256 should be more than enough
|
| #define MAX_NESTING 256
|
|
|
| -#include "SkTypes.h"
|
| -template <typename T> class SkTDStackNew : SkNoncopyable {
|
| +/** \class SkTDStackNester
|
| + *
|
| + * The difference between SkTDStackNester and SkTDStack is that:
|
| + * - SkTDStackNester uses new/delete to manage initializations
|
| + * - Supports nest/unnest which simulates a stack of stack. unnest will pop all the
|
| + * objects pushed since the last nest
|
| + */
|
| +
|
| +template <typename T> class SkTDStackNester : SkNoncopyable {
|
| public:
|
| - SkTDStackNew() : fCount(0), fTotalCount(0), fLocalCount(0) {
|
| + SkTDStackNester() : fCount(0), fTotalCount(0), fLocalCount(0) {
|
| fInitialRec.fNext = NULL;
|
| fRec = &fInitialRec;
|
|
|
| // fCount = kSlotCount;
|
| }
|
|
|
| - ~SkTDStackNew() {
|
| + ~SkTDStackNester() {
|
| Rec* rec = fRec;
|
| while (rec != &fInitialRec) {
|
| Rec* next = rec->fNext;
|
| @@ -157,7 +162,9 @@
|
| int fNestingLevel;
|
| };
|
|
|
| -// TODO(edisonn): better class design.
|
| +/** \class SkTDStackNester
|
| + * Operates on stroking or non-stroking properties.
|
| + */
|
| class SkPdfColorOperator {
|
|
|
| /*
|
| @@ -168,9 +175,7 @@
|
| */
|
|
|
| // 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;
|
| SkPdfNativeObject* fPattern;
|
| @@ -187,15 +192,14 @@
|
| 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.
|
| +
|
| + // TODO(edisonn): implement the default values for all fields.
|
| SkPdfColorOperator() : fPattern(NULL), fColor(SK_ColorBLACK), fOpacity(1) {
|
| NotOwnedString::init(&fColorSpace, "DeviceRGB");
|
| }
|
| @@ -216,7 +220,9 @@
|
| }
|
| };
|
|
|
| -// TODO(edisonn): better class design.
|
| +/** \class SkTDStackNester
|
| + * Operates on stroking or non-stroking properties.
|
| + */
|
| struct SkPdfGraphicsState {
|
| // TODO(edisonn): deprecate and remove these!
|
| double fCurPosX;
|
| @@ -235,9 +241,8 @@
|
| 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)
|
| + // TODO(edisonn): Can we move most of these in canvas/paint?
|
| + // Might need to strore some properties in 2 paints (stroking paint and non stroking paint)
|
|
|
| // TABLE 4.2 Device-independent graphics state parameters
|
| /*
|
| @@ -457,10 +462,7 @@
|
| installation-dependent.
|
| */
|
|
|
| -
|
| -
|
| // TODO(edisonn): some defaults are contextual, they could on colorspace, pdf version, ...
|
| -
|
| SkPdfGraphicsState() {
|
| fCurPosX = 0.0;
|
| fCurPosY = 0.0;
|
| @@ -493,14 +495,15 @@
|
| void applyGraphicsState(SkPaint* paint, bool stroking);
|
| };
|
|
|
| +/** \class SkPdfContext
|
| + * The context of the drawing. The document we draw from, the current stack of objects, ...
|
| + */
|
| class SkPdfContext {
|
| public:
|
| - SkTDStackNew<SkPdfNativeObject*> fObjectStack;
|
| - SkTDStackNew<SkPdfGraphicsState> fStateStack;
|
| + SkTDStackNester<SkPdfNativeObject*> fObjectStack;
|
| + SkTDStackNester<SkPdfGraphicsState> fStateStack;
|
| SkPdfGraphicsState fGraphicsState;
|
| SkPdfNativeDoc* fPdfDoc;
|
| - // TODO(edisonn): the allocator, could be freed after the page is done drawing, so we have the
|
| - // pixels on the screen asap.
|
| SkPdfAllocator* fTmpPageAllocator;
|
| SkMatrix fOriginalMatrix;
|
|
|
|
|