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

Side by Side Diff: experimental/PdfViewer/src/SkPdfContext.cpp

Issue 83183004: Simplify SkPdfTokenLooper behavior. (Closed) Base URL: https://skia.googlecode.com/svn/trunk
Patch Set: Respond to comment (FIXME) Created 7 years 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/inc/SkPdfTokenLooper.h ('k') | experimental/PdfViewer/src/SkPdfOps.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright 2013 Google Inc. 2 * Copyright 2013 Google Inc.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license that can be 4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file. 5 * found in the LICENSE file.
6 */ 6 */
7 7
8 #include "SkPdfContext.h" 8 #include "SkPdfContext.h"
9 #include "SkPdfNativeDoc.h" 9 #include "SkPdfNativeDoc.h"
10 #include "SkPdfReporter.h" 10 #include "SkPdfReporter.h"
11 #include "SkPdfTokenLooper.h" 11 #include "SkPdfTokenLooper.h"
12 12
13 /////////////////////////////////////////////////////////////////////////////// 13 ///////////////////////////////////////////////////////////////////////////////
14 14
15 class PdfMainLooper : public SkPdfTokenLooper { 15 class PdfMainLooper : public SkPdfTokenLooper {
16 public: 16 public:
17 PdfMainLooper(SkPdfTokenLooper* parent, 17 PdfMainLooper(SkPdfNativeTokenizer* tokenizer,
18 SkPdfNativeTokenizer* tokenizer,
19 SkPdfContext* pdfContext, 18 SkPdfContext* pdfContext,
20 SkCanvas* canvas) 19 SkCanvas* canvas)
21 : SkPdfTokenLooper(parent, tokenizer, pdfContext, canvas) {} 20 : INHERITED(tokenizer, pdfContext, canvas) {}
22 21
23 virtual SkPdfResult consumeToken(PdfToken& token); 22 virtual SkPdfResult consumeToken(PdfToken& token) SK_OVERRIDE;
24 virtual void loop(); 23 virtual void loop() SK_OVERRIDE;
24
25 private:
26 typedef SkPdfTokenLooper INHERITED;
25 }; 27 };
26 28
27 /////////////////////////////////////////////////////////////////////////////// 29 ///////////////////////////////////////////////////////////////////////////////
28 30
29 SkPdfContext::SkPdfContext(SkPdfNativeDoc* doc) 31 SkPdfContext::SkPdfContext(SkPdfNativeDoc* doc)
30 : fPdfDoc(doc) 32 : fPdfDoc(doc)
31 { 33 {
32 SkASSERT(fPdfDoc != NULL); 34 SkASSERT(fPdfDoc != NULL);
33 } 35 }
34 36
35 void SkPdfContext::parseStream(SkPdfNativeObject* stream, SkCanvas* canvas) { 37 void SkPdfContext::parseStream(SkPdfNativeObject* stream, SkCanvas* canvas) {
36 SkPdfNativeTokenizer* tokenizer = fPdfDoc->tokenizerOfStream(stream, &fTmpPa geAllocator); 38 SkPdfNativeTokenizer* tokenizer = fPdfDoc->tokenizerOfStream(stream, &fTmpPa geAllocator);
37 if (NULL == tokenizer) { 39 if (NULL == tokenizer) {
38 // Nothing to parse. 40 // Nothing to parse.
39 return; 41 return;
40 } 42 }
41 PdfMainLooper looper(NULL, tokenizer, this, canvas); 43 PdfMainLooper looper(tokenizer, this, canvas);
42 looper.loop(); 44 looper.loop();
43 // FIXME (scroggo): Will restructure to put tokenizer on the stack. 45 // FIXME (scroggo): Will restructure to put tokenizer on the stack.
44 delete tokenizer; 46 delete tokenizer;
45 } 47 }
46 48
47 /////////////////////////////////////////////////////////////////////////////// 49 ///////////////////////////////////////////////////////////////////////////////
48 50
49 // FIXME (scroggo): This probably belongs in a debugging file. 51 // FIXME (scroggo): This probably belongs in a debugging file.
50 // For reportRenderStats declaration. 52 // For reportRenderStats declaration.
51 #include "SkPdfRenderer.h" 53 #include "SkPdfRenderer.h"
(...skipping 28 matching lines...) Expand all
80 } 82 }
81 83
82 #include "SkPdfOps.h" 84 #include "SkPdfOps.h"
83 85
84 SkPdfResult PdfMainLooper::consumeToken(PdfToken& token) { 86 SkPdfResult PdfMainLooper::consumeToken(PdfToken& token) {
85 if (token.fType == kKeyword_TokenType && token.fKeywordLength < 256) 87 if (token.fType == kKeyword_TokenType && token.fKeywordLength < 256)
86 { 88 {
87 PdfOperatorRenderer pdfOperatorRenderer = NULL; 89 PdfOperatorRenderer pdfOperatorRenderer = NULL;
88 if (gPdfOps.find(token.fKeyword, token.fKeywordLength, &pdfOperatorRende rer) && 90 if (gPdfOps.find(token.fKeyword, token.fKeywordLength, &pdfOperatorRende rer) &&
89 pdfOperatorRenderer) { 91 pdfOperatorRenderer) {
90 SkPdfTokenLooper* childLooper = NULL;
91 // Main work is done by pdfOperatorRenderer(...) 92 // Main work is done by pdfOperatorRenderer(...)
92 SkPdfResult result = pdfOperatorRenderer(fPdfContext, fCanvas, &chil dLooper); 93 SkPdfResult result = pdfOperatorRenderer(fPdfContext, fCanvas, this) ;
93 94
94 int cnt = 0; 95 int cnt = 0;
95 gRenderStats[result].find(token.fKeyword, token.fKeywordLength, &cnt ); 96 gRenderStats[result].find(token.fKeyword, token.fKeywordLength, &cnt );
96 gRenderStats[result].set(token.fKeyword, token.fKeywordLength, cnt + 1); 97 gRenderStats[result].set(token.fKeyword, token.fKeywordLength, cnt + 1);
97 if (childLooper) {
98 // FIXME (scroggo): Auto delete this.
99 childLooper->setUp(this);
100 childLooper->loop();
101 delete childLooper;
102 }
103 } else { 98 } else {
104 int cnt = 0; 99 int cnt = 0;
105 gRenderStats[kUnsupported_SkPdfResult].find(token.fKeyword, 100 gRenderStats[kUnsupported_SkPdfResult].find(token.fKeyword,
106 token.fKeywordLength, 101 token.fKeywordLength,
107 &cnt); 102 &cnt);
108 gRenderStats[kUnsupported_SkPdfResult].set(token.fKeyword, 103 gRenderStats[kUnsupported_SkPdfResult].set(token.fKeyword,
109 token.fKeywordLength, 104 token.fKeywordLength,
110 cnt + 1); 105 cnt + 1);
111 } 106 }
112 } 107 }
(...skipping 10 matching lines...) Expand all
123 } 118 }
124 return kOK_SkPdfResult; 119 return kOK_SkPdfResult;
125 } 120 }
126 121
127 void PdfMainLooper::loop() { 122 void PdfMainLooper::loop() {
128 PdfToken token; 123 PdfToken token;
129 while (fTokenizer->readToken(&token, true)) { 124 while (fTokenizer->readToken(&token, true)) {
130 this->consumeToken(token); 125 this->consumeToken(token);
131 } 126 }
132 } 127 }
OLDNEW
« no previous file with comments | « experimental/PdfViewer/inc/SkPdfTokenLooper.h ('k') | experimental/PdfViewer/src/SkPdfOps.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698