| Index: src/doc/SkDocument.cpp
|
| diff --git a/src/doc/SkDocument.cpp b/src/doc/SkDocument.cpp
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..efceee9ad759d4400ccebb4de1b465518e62ac59
|
| --- /dev/null
|
| +++ b/src/doc/SkDocument.cpp
|
| @@ -0,0 +1,77 @@
|
| +/*
|
| + * Copyright 2013 Google Inc.
|
| + *
|
| + * Use of this source code is governed by a BSD-style license that can be
|
| + * found in the LICENSE file.
|
| + */
|
| +
|
| +#include "SkDocument.h"
|
| +#include "SkStream.h"
|
| +
|
| +SkDocument::SkDocument(SkWStream* stream) {
|
| + fStream = stream;
|
| + fState = kBetweenPages_State;
|
| +}
|
| +
|
| +SkDocument::~SkDocument() {
|
| + this->close();
|
| +}
|
| +
|
| +SkCanvas* SkDocument::beginPage(SkScalar width, SkScalar height,
|
| + const SkRect* content) {
|
| + if (width <= 0 || height <= 0) {
|
| + return NULL;
|
| + }
|
| +
|
| + SkRect outer = SkRect::MakeWH(width, height);
|
| + SkRect inner;
|
| + if (content) {
|
| + inner = *content;
|
| + if (!inner.intersect(outer)) {
|
| + return NULL;
|
| + }
|
| + } else {
|
| + inner = outer;
|
| + }
|
| +
|
| + for (;;) {
|
| + switch (fState) {
|
| + case kBetweenPages_State:
|
| + fState = kInPage_State;
|
| + return this->onBeginPage(width, height, inner);
|
| + case kInPage_State:
|
| + this->endPage();
|
| + break;
|
| + case kClosed_State:
|
| + return NULL;
|
| + }
|
| + }
|
| + SkASSERT(!"never get here");
|
| + return NULL;
|
| +}
|
| +
|
| +void SkDocument::endPage() {
|
| + if (kInPage_State == fState) {
|
| + fState = kBetweenPages_State;
|
| + this->onEndPage();
|
| + }
|
| +}
|
| +
|
| +void SkDocument::close() {
|
| + for (;;) {
|
| + switch (fState) {
|
| + case kBetweenPages_State:
|
| + fState = kClosed_State;
|
| + this->onClose(fStream);
|
| + SkDELETE(fStream);
|
| + fStream = NULL;
|
| + return;
|
| + case kInPage_State:
|
| + this->endPage();
|
| + break;
|
| + case kClosed_State:
|
| + return;
|
| + }
|
| + }
|
| +}
|
| +
|
|
|