9fbdf87518
Instead of writing all drawing and state updates into the final content stream immediately, this change creates a new ContentEntry each time the transform, clip, or paint changes. Drawing is done into a stream in the ContentEntry. When the consumer asks for the content, we combine all the ContentEntries with appropriate updates to the state (clip, transform, paint) in between. This allows us to modify the clip even after a drawing has completed. It also lets us remove ContentEntries with no drawing. Further optimization can be done to better use the stack features of PDF, for now we follow the previous model of having a single clip followed by a single transform on the graphic state stack. Push rectangle logic into SkPDFUtil::AppendRectangle. Change private functions to adhere to coding standards. Review URL: http://codereview.appspot.com/4459041 git-svn-id: http://skia.googlecode.com/svn/trunk@1269 2bbb7eff-a529-9590-31e7-b0007b416f81
60 lines
2.1 KiB
C++
60 lines
2.1 KiB
C++
/*
|
|
* Copyright (C) 2011 Google Inc.
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
#ifndef SkPDFUtils_DEFINED
|
|
#define SkPDFUtils_DEFINED
|
|
|
|
#include "SkPath.h"
|
|
|
|
class SkMatrix;
|
|
class SkPath;
|
|
class SkPDFArray;
|
|
class SkRect;
|
|
|
|
#if 0
|
|
#define PRINT_NOT_IMPL(str) fprintf(stderr, str)
|
|
#else
|
|
#define PRINT_NOT_IMPL(str)
|
|
#endif
|
|
|
|
#define NOT_IMPLEMENTED(condition, assert) \
|
|
do { \
|
|
if (condition) { \
|
|
PRINT_NOT_IMPL("NOT_IMPLEMENTED: " #condition "\n"); \
|
|
SkDEBUGCODE(SkASSERT(!assert);) \
|
|
} \
|
|
} while(0)
|
|
|
|
class SkPDFUtils {
|
|
public:
|
|
static SkPDFArray* MatrixToArray(const SkMatrix& matrix);
|
|
static void AppendTransform(const SkMatrix& matrix, SkWStream* content);
|
|
|
|
static void MoveTo(SkScalar x, SkScalar y, SkWStream* content);
|
|
static void AppendLine(SkScalar x, SkScalar y, SkWStream* content);
|
|
static void AppendCubic(SkScalar ctl1X, SkScalar ctl1Y,
|
|
SkScalar ctl2X, SkScalar ctl2Y,
|
|
SkScalar dstX, SkScalar dstY, SkWStream* content);
|
|
static void AppendRectangle(const SkRect& rect, SkWStream* content);
|
|
static void EmitPath(const SkPath& path, SkWStream* content);
|
|
static void ClosePath(SkWStream* content);
|
|
static void PaintPath(SkPaint::Style style, SkPath::FillType fill,
|
|
SkWStream* content);
|
|
static void StrokePath(SkWStream* content);
|
|
};
|
|
|
|
#endif
|