Chromium Code Reviews| Index: include/core/SkDocument.h |
| diff --git a/include/core/SkDocument.h b/include/core/SkDocument.h |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..fe0f24e406b07dfea5477845c2a5bd2eb8da3094 |
| --- /dev/null |
| +++ b/include/core/SkDocument.h |
| @@ -0,0 +1,89 @@ |
| +/* |
| + * 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 SkDocument_DEFINED |
| +#define SkDocument_DEFINED |
| + |
| +#include "SkRect.h" |
| +#include "SkRefCnt.h" |
| + |
| +class SkCanvas; |
| +class SkWStream; |
| + |
| +/** |
| + * High-level API for creating a document-based canvas. To use.. |
| + * |
| + * 1. Create a document, specifying a stream to store the output. |
| + * 2. For each "page" of content: |
| + * a. canvas = doc->beginPage(...) |
| + * b. draw_my_content(canvas); |
| + * c. doc->endPage(); |
| + * 3. Close the document with doc->close(). |
| + */ |
| +class SkDocument : public SkRefCnt { |
| +public: |
| + /** |
| + * Create a PDF-backed document, writing the results into a file. If there |
| + * is an error trying to create the doc, returns NULL. |
| + */ |
| + static SkDocument* CreatePDF(const char filename[]); |
| + |
| + /** |
| + * Create a PDF-backed document, writing the results into a stream. |
| + * there is an error trying to create the doc, returns NULL. |
|
scroggo
2013/06/07 20:12:32
If got lost here.
|
| + * |
| + * The document may write to the stream at anytime during its lifetime, |
| + * until either close() is called or the document is deleted. Thus the |
| + * caller must ensure that the stream remains in scope. |
| + */ |
| + static SkDocument* CreatePDF(SkWStream*); |
| + |
| + /** |
| + * Begin a new page for the document, returning the canvas that will draw |
| + * into the page. The document owns this canvas, and it will go out of |
| + * scope when endPage() or close() is called, or the document is deleted. |
| + */ |
| + SkCanvas* beginPage(SkScalar width, SkScalar height, |
| + const SkRect* content = NULL); |
| + |
| + /** |
| + * Call endPage() when the content for the current page has been drawn |
| + * (into the canvas returned by beginPage()). After this call the canvas |
| + * returned by beginPage() will be out-of-scope. |
| + */ |
| + void endPage(); |
| + |
| + /** |
| + * Call close() when all pages have been drawn. This will close the file |
| + * or stream holding the document's contents. After close() the document |
| + * can no longer add new pages. Deleting the document will automatically |
| + * call close() if need be. |
| + */ |
| + void close(); |
| + |
| +protected: |
| + SkDocument(SkWStream*); |
| + virtual ~SkDocument(); |
| + |
| + virtual SkCanvas* onBeginPage(SkScalar width, SkScalar height, |
| + const SkRect& content) = 0; |
| + virtual void onEndPage() = 0; |
| + virtual void onClose(SkWStream*) = 0; |
| + |
| + enum State { |
| + kBetweenPages_State, |
| + kInPage_State, |
| + kClosed_State |
| + }; |
| + State getState() const { return fState; } |
| + |
| +private: |
| + SkWStream* fStream; |
| + State fState; |
| +}; |
| + |
| +#endif |