Index: include/core/SkDocument.h |
diff --git a/include/core/SkDocument.h b/include/core/SkDocument.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..4fb8458ca775942c4da6fa06039e39c1077c7107 |
--- /dev/null |
+++ b/include/core/SkDocument.h |
@@ -0,0 +1,92 @@ |
+/* |
+ * 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[]); |
wrong vandebo
2013/06/10 16:41:12
Are these factory methods and you'll have addition
|
+ |
+ /** |
+ * Create a PDF-backed document, writing the results into a stream. |
+ * there is an error trying to create the doc, returns NULL. |
+ * |
+ * The document may write to the stream at anytime during its lifetime, |
+ * until either close() is called or the document is deleted. Once close() |
+ * has been called, and all of the data has been written to the stream, |
+ * if there is a Done proc provided, it will be called with the stream. |
+ * The proc can delete the stream, or whatever it needs to do. |
+ */ |
+ static SkDocument* CreatePDF(SkWStream*, void (*Done)(SkWStream*) = NULL); |
wrong vandebo
2013/06/10 16:41:12
PDF has a couple of document options: disable comp
|
+ |
+ /** |
+ * 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); |
wrong vandebo
2013/06/10 16:41:12
I tried using only a rect to specify the content a
|
+ |
+ /** |
+ * 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(); |
wrong vandebo
2013/06/10 16:41:12
A feature that the PDF code has that's not represe
|
+ |
+protected: |
+ SkDocument(SkWStream*, void (*)(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; |
+ void (*fDoneProc)(SkWStream*); |
+ State fState; |
+}; |
+ |
+#endif |