/* * Copyright 2013 Google Inc. * * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ #ifndef SkPdfTokenLooper_DEFINED #define SkPdfTokenLooper_DEFINED #include "SkPdfNativeTokenizer.h" // For SkPdfResult #include "SkPdfUtils.h" class SkCanvas; class SkPdfContext; /** * An object which reads tokens from a tokenizer and draws it to an SkCanvas. * FIXME (scroggo): Can this be an interface? See http://goo.gl/AXQtkH */ class SkPdfTokenLooper { public: /** * Create a looper with no parent. * @param tokenizer SkPdfNativeTokenizer for reading tokens. * @param pdfContext Context for drawing state. * @param canvas Target SkCanvas for drawing. */ SkPdfTokenLooper(SkPdfNativeTokenizer* tokenizer, SkPdfContext* pdfContext, SkCanvas* canvas) : fParent(NULL) , fTokenizer(tokenizer) , fPdfContext(pdfContext) , fCanvas(canvas) {} /** * Create a looper as a child of parent. It will share the * SkPdfContext, SkPdfTokenizer, and SkCanvas with its parent. */ explicit SkPdfTokenLooper(SkPdfTokenLooper* parent) : fParent(parent) , fTokenizer(parent->fTokenizer) , fPdfContext(parent->fPdfContext) , fCanvas(parent->fCanvas) {} virtual ~SkPdfTokenLooper() {} /** * Consume a token, and draw to fCanvas as directed. */ virtual SkPdfResult consumeToken(PdfToken& token) = 0; /** * Consume all the tokens this looper can handle. */ virtual void loop() = 0; protected: // All are unowned pointers. SkPdfTokenLooper* fParent; SkPdfNativeTokenizer* fTokenizer; SkPdfContext* fPdfContext; SkCanvas* fCanvas; }; #endif // SkPdfTokenLooper_DEFINED