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

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

Issue 23258004: pdfviewer: code cleanup - remove STL usage (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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « experimental/PdfViewer/SkPdfFont.cpp ('k') | experimental/PdfViewer/SkPdfRenderer.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 #ifndef __DEFINED__SkPdfBasics 1 #ifndef __DEFINED__SkPdfBasics
2 #define __DEFINED__SkPdfBasics 2 #define __DEFINED__SkPdfBasics
3 3
4 #include "SkCanvas.h" 4 #include "SkCanvas.h"
5 #include "SkPaint.h" 5 #include "SkPaint.h"
6 #include "SkPdfConfig.h" 6 #include "SkPdfConfig.h"
7 #include "SkPdfUtils.h" 7 #include "SkPdfUtils.h"
8 8
9 #include <stack> 9 //#include "SkTDStack.h"
10 10
11 class SkPdfFont; 11 class SkPdfFont;
12 class SkPdfDoc; 12 class SkPdfDoc;
13 class SkPdfNativeObject; 13 class SkPdfNativeObject;
14 class SkPdfResourceDictionary; 14 class SkPdfResourceDictionary;
15 class SkPdfSoftMaskDictionary; 15 class SkPdfSoftMaskDictionary;
16 16
17 class SkPdfNativeDoc; 17 class SkPdfNativeDoc;
18 class SkPdfAllocator; 18 class SkPdfAllocator;
19 19
20 // TODO(edisonn): move this class in iclude/core?
21 // Ref objects can't be dealt unless we use a specific class initialization
22 // The difference between SkTDStackNew and SkTDStack is that SkTDStackNew uses n ew/delete
23 // to be a manage c++ stuff (like initializations)
24 #include "SkTypes.h"
25 template <typename T> class SkTDStackNew : SkNoncopyable {
26 public:
27 SkTDStackNew() : fCount(0), fTotalCount(0) {
28 fInitialRec.fNext = NULL;
29 fRec = &fInitialRec;
30
31 // fCount = kSlotCount;
32 }
33
34 ~SkTDStackNew() {
35 Rec* rec = fRec;
36 while (rec != &fInitialRec) {
37 Rec* next = rec->fNext;
38 delete rec;
39 rec = next;
40 }
41 }
42
43 int count() const { return fTotalCount; }
44 int depth() const { return fTotalCount; }
45 bool empty() const { return fTotalCount == 0; }
46
47 T* push() {
48 SkASSERT(fCount <= kSlotCount);
49 if (fCount == kSlotCount) {
50 Rec* rec = new Rec();
51 rec->fNext = fRec;
52 fRec = rec;
53 fCount = 0;
54 }
55 ++fTotalCount;
56 return &fRec->fSlots[fCount++];
57 }
58
59 void push(const T& elem) { *this->push() = elem; }
60
61 const T& index(int idx) const {
62 SkASSERT(fRec && fCount > idx);
63 return fRec->fSlots[fCount - idx - 1];
64 }
65
66 T& index(int idx) {
67 SkASSERT(fRec && fCount > idx);
68 return fRec->fSlots[fCount - idx - 1];
69 }
70
71 const T& top() const {
72 SkASSERT(fRec && fCount > 0);
73 return fRec->fSlots[fCount - 1];
74 }
75
76 T& top() {
77 SkASSERT(fRec && fCount > 0);
78 return fRec->fSlots[fCount - 1];
79 }
80
81 void pop(T* elem) {
82 if (elem) {
83 *elem = fRec->fSlots[fCount - 1];
84 }
85 this->pop();
86 }
87
88 void pop() {
89 SkASSERT(fCount > 0 && fRec);
90 --fTotalCount;
91 if (--fCount == 0) {
92 if (fRec != &fInitialRec) {
93 Rec* rec = fRec->fNext;
94 delete fRec;
95 fCount = kSlotCount;
96 fRec = rec;
97 } else {
98 SkASSERT(fTotalCount == 0);
99 }
100 }
101 }
102
103 private:
104 enum {
105 kSlotCount = 64
106 };
107
108 struct Rec;
109 friend struct Rec;
110
111 struct Rec {
112 Rec* fNext;
113 T fSlots[kSlotCount];
114 };
115 Rec fInitialRec;
116 Rec* fRec;
117 int fCount, fTotalCount;
118 };
119
20 // TODO(edisonn): better class design. 120 // TODO(edisonn): better class design.
21 class SkPdfColorOperator { 121 class SkPdfColorOperator {
22 122
23 /* 123 /*
24 color space name or array The current color space in which color value s are to be interpreted 124 color space name or array The current color space in which color value s are to be interpreted
25 (see Section 4.5, “Color Spaces”). There are two separate color space 125 (see Section 4.5, “Color Spaces”). There are two separate color space
26 parameters: one for stroking and one for all other painting opera- 126 parameters: one for stroking and one for all other painting opera-
27 tions. Initial value: DeviceGray. 127 tions. Initial value: DeviceGray.
28 */ 128 */
29 129
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
81 // TODO(edisonn): deprecate and remove these! 181 // TODO(edisonn): deprecate and remove these!
82 double fCurPosX; 182 double fCurPosX;
83 double fCurPosY; 183 double fCurPosY;
84 184
85 double fCurFontSize; 185 double fCurFontSize;
86 bool fTextBlock; 186 bool fTextBlock;
87 SkPdfFont* fSkFont; 187 SkPdfFont* fSkFont;
88 SkPath fPath; 188 SkPath fPath;
89 bool fPathClosed; 189 bool fPathClosed;
90 190
91
92
93 double fTextLeading; 191 double fTextLeading;
94 double fWordSpace; 192 double fWordSpace;
95 double fCharSpace; 193 double fCharSpace;
96 194
97 SkPdfResourceDictionary* fResources; 195 SkPdfResourceDictionary* fResources;
98 196
99 197
100 // TODO(edisonn): move most of these in canvas/paint? 198 // TODO(edisonn): move most of these in canvas/paint?
101 // we could have some in canvas (matrixes?), 199 // we could have some in canvas (matrixes?),
102 // some in 2 paints (stroking paint and non stroking paint) 200 // some in 2 paints (stroking paint and non stroking paint)
(...skipping 251 matching lines...) Expand 10 before | Expand all | Expand 10 after
354 } 452 }
355 453
356 // TODO(edisonn): make two functons instead, stroking and non stoking, avoid branching 454 // TODO(edisonn): make two functons instead, stroking and non stoking, avoid branching
357 void applyGraphicsState(SkPaint* paint, bool stroking); 455 void applyGraphicsState(SkPaint* paint, bool stroking);
358 }; 456 };
359 457
360 // TODO(edisonn): better class design. 458 // TODO(edisonn): better class design.
361 // TODO(edisonn): rename to SkPdfContext 459 // TODO(edisonn): rename to SkPdfContext
362 class SkPdfContext { 460 class SkPdfContext {
363 public: 461 public:
364 std::stack<SkPdfNativeObject*> fObjectStack; 462 SkTDStackNew<SkPdfNativeObject*> fObjectStack;
365 std::stack<SkPdfGraphicsState> fStateStack; 463 SkTDStackNew<SkPdfGraphicsState> fStateStack;
366 SkPdfGraphicsState fGraphicsState; 464 SkPdfGraphicsState fGraphicsState;
367 SkPdfNativeDoc* fPdfDoc; 465 SkPdfNativeDoc* fPdfDoc;
368 // TODO(edisonn): the allocator, could be freed after the page is done drawi ng. 466 // TODO(edisonn): the allocator, could be freed after the page is done drawi ng.
369 SkPdfAllocator* fTmpPageAllocator; 467 SkPdfAllocator* fTmpPageAllocator;
370 SkMatrix fOriginalMatrix; 468 SkMatrix fOriginalMatrix;
371 469
372 SkPdfContext(SkPdfNativeDoc* doc); 470 SkPdfContext(SkPdfNativeDoc* doc);
373 ~SkPdfContext(); 471 ~SkPdfContext();
374 }; 472 };
375 473
376 #endif // __DEFINED__SkPdfBasics 474 #endif // __DEFINED__SkPdfBasics
OLDNEW
« no previous file with comments | « experimental/PdfViewer/SkPdfFont.cpp ('k') | experimental/PdfViewer/SkPdfRenderer.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698