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 |