1bf6426120a8a9a034f37d37feaf942b1386b7a84scroggo@google.com/* 2bf6426120a8a9a034f37d37feaf942b1386b7a84scroggo@google.com * Copyright 2013 Google Inc. 3bf6426120a8a9a034f37d37feaf942b1386b7a84scroggo@google.com * 4bf6426120a8a9a034f37d37feaf942b1386b7a84scroggo@google.com * Use of this source code is governed by a BSD-style license that can be 5bf6426120a8a9a034f37d37feaf942b1386b7a84scroggo@google.com * found in the LICENSE file. 6bf6426120a8a9a034f37d37feaf942b1386b7a84scroggo@google.com */ 7bf6426120a8a9a034f37d37feaf942b1386b7a84scroggo@google.com 8bf6426120a8a9a034f37d37feaf942b1386b7a84scroggo@google.com#ifndef SkPdfTokenLooper_DEFINED 9bf6426120a8a9a034f37d37feaf942b1386b7a84scroggo@google.com#define SkPdfTokenLooper_DEFINED 10bf6426120a8a9a034f37d37feaf942b1386b7a84scroggo@google.com 11248647cebb3724fd2ce1d41745afb786516af4f8scroggo@google.com#include "SkPdfNativeTokenizer.h" 12248647cebb3724fd2ce1d41745afb786516af4f8scroggo@google.com// For SkPdfResult 13248647cebb3724fd2ce1d41745afb786516af4f8scroggo@google.com#include "SkPdfUtils.h" 14248647cebb3724fd2ce1d41745afb786516af4f8scroggo@google.com 15bf6426120a8a9a034f37d37feaf942b1386b7a84scroggo@google.comclass SkCanvas; 16bf6426120a8a9a034f37d37feaf942b1386b7a84scroggo@google.comclass SkPdfContext; 17bf6426120a8a9a034f37d37feaf942b1386b7a84scroggo@google.com 1836026de64400cbe91552c549cf9a906a0926fef3scroggo@google.com/** 1936026de64400cbe91552c549cf9a906a0926fef3scroggo@google.com * An object which reads tokens from a tokenizer and draws it to an SkCanvas. 2036026de64400cbe91552c549cf9a906a0926fef3scroggo@google.com * FIXME (scroggo): Can this be an interface? See http://goo.gl/AXQtkH 2136026de64400cbe91552c549cf9a906a0926fef3scroggo@google.com */ 22248647cebb3724fd2ce1d41745afb786516af4f8scroggo@google.comclass SkPdfTokenLooper { 23bf6426120a8a9a034f37d37feaf942b1386b7a84scroggo@google.compublic: 2436026de64400cbe91552c549cf9a906a0926fef3scroggo@google.com /** 2536026de64400cbe91552c549cf9a906a0926fef3scroggo@google.com * Create a looper with no parent. 2636026de64400cbe91552c549cf9a906a0926fef3scroggo@google.com * @param tokenizer SkPdfNativeTokenizer for reading tokens. 2736026de64400cbe91552c549cf9a906a0926fef3scroggo@google.com * @param pdfContext Context for drawing state. 2836026de64400cbe91552c549cf9a906a0926fef3scroggo@google.com * @param canvas Target SkCanvas for drawing. 2936026de64400cbe91552c549cf9a906a0926fef3scroggo@google.com */ 3036026de64400cbe91552c549cf9a906a0926fef3scroggo@google.com SkPdfTokenLooper(SkPdfNativeTokenizer* tokenizer, 3136026de64400cbe91552c549cf9a906a0926fef3scroggo@google.com SkPdfContext* pdfContext, 3236026de64400cbe91552c549cf9a906a0926fef3scroggo@google.com SkCanvas* canvas) 3336026de64400cbe91552c549cf9a906a0926fef3scroggo@google.com : fParent(NULL) 3436026de64400cbe91552c549cf9a906a0926fef3scroggo@google.com , fTokenizer(tokenizer) 3536026de64400cbe91552c549cf9a906a0926fef3scroggo@google.com , fPdfContext(pdfContext) 3636026de64400cbe91552c549cf9a906a0926fef3scroggo@google.com , fCanvas(canvas) {} 3736026de64400cbe91552c549cf9a906a0926fef3scroggo@google.com 3836026de64400cbe91552c549cf9a906a0926fef3scroggo@google.com /** 3936026de64400cbe91552c549cf9a906a0926fef3scroggo@google.com * Create a looper as a child of parent. It will share the 4036026de64400cbe91552c549cf9a906a0926fef3scroggo@google.com * SkPdfContext, SkPdfTokenizer, and SkCanvas with its parent. 4136026de64400cbe91552c549cf9a906a0926fef3scroggo@google.com */ 4236026de64400cbe91552c549cf9a906a0926fef3scroggo@google.com explicit SkPdfTokenLooper(SkPdfTokenLooper* parent) 4336026de64400cbe91552c549cf9a906a0926fef3scroggo@google.com : fParent(parent) 4436026de64400cbe91552c549cf9a906a0926fef3scroggo@google.com , fTokenizer(parent->fTokenizer) 4536026de64400cbe91552c549cf9a906a0926fef3scroggo@google.com , fPdfContext(parent->fPdfContext) 4636026de64400cbe91552c549cf9a906a0926fef3scroggo@google.com , fCanvas(parent->fCanvas) {} 47bf6426120a8a9a034f37d37feaf942b1386b7a84scroggo@google.com 48248647cebb3724fd2ce1d41745afb786516af4f8scroggo@google.com virtual ~SkPdfTokenLooper() {} 49bf6426120a8a9a034f37d37feaf942b1386b7a84scroggo@google.com 5036026de64400cbe91552c549cf9a906a0926fef3scroggo@google.com /** 5136026de64400cbe91552c549cf9a906a0926fef3scroggo@google.com * Consume a token, and draw to fCanvas as directed. 5236026de64400cbe91552c549cf9a906a0926fef3scroggo@google.com */ 53bf6426120a8a9a034f37d37feaf942b1386b7a84scroggo@google.com virtual SkPdfResult consumeToken(PdfToken& token) = 0; 5436026de64400cbe91552c549cf9a906a0926fef3scroggo@google.com 5536026de64400cbe91552c549cf9a906a0926fef3scroggo@google.com /** 5636026de64400cbe91552c549cf9a906a0926fef3scroggo@google.com * Consume all the tokens this looper can handle. 5736026de64400cbe91552c549cf9a906a0926fef3scroggo@google.com */ 58bf6426120a8a9a034f37d37feaf942b1386b7a84scroggo@google.com virtual void loop() = 0; 59bf6426120a8a9a034f37d37feaf942b1386b7a84scroggo@google.com 6036026de64400cbe91552c549cf9a906a0926fef3scroggo@google.comprotected: 6136026de64400cbe91552c549cf9a906a0926fef3scroggo@google.com // All are unowned pointers. 6236026de64400cbe91552c549cf9a906a0926fef3scroggo@google.com SkPdfTokenLooper* fParent; 6336026de64400cbe91552c549cf9a906a0926fef3scroggo@google.com SkPdfNativeTokenizer* fTokenizer; 6436026de64400cbe91552c549cf9a906a0926fef3scroggo@google.com SkPdfContext* fPdfContext; 6536026de64400cbe91552c549cf9a906a0926fef3scroggo@google.com SkCanvas* fCanvas; 66bf6426120a8a9a034f37d37feaf942b1386b7a84scroggo@google.com}; 67248647cebb3724fd2ce1d41745afb786516af4f8scroggo@google.com 68bf6426120a8a9a034f37d37feaf942b1386b7a84scroggo@google.com#endif // SkPdfTokenLooper_DEFINED 69