1ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com 2f966fd35cf37562df7aaaf08a490582b764ba170ctguil@chromium.org/* 3ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Copyright 2011 Google Inc. 4f966fd35cf37562df7aaaf08a490582b764ba170ctguil@chromium.org * 5ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Use of this source code is governed by a BSD-style license that can be 6ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * found in the LICENSE file. 7f966fd35cf37562df7aaaf08a490582b764ba170ctguil@chromium.org */ 8f966fd35cf37562df7aaaf08a490582b764ba170ctguil@chromium.org 9ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com 10f966fd35cf37562df7aaaf08a490582b764ba170ctguil@chromium.org#ifndef SkPDFUtils_DEFINED 11f966fd35cf37562df7aaaf08a490582b764ba170ctguil@chromium.org#define SkPDFUtils_DEFINED 12f966fd35cf37562df7aaaf08a490582b764ba170ctguil@chromium.org 13683001ce0de70c859ea5e5353245b18cadbefc45vandebo@chromium.org#include "SkPaint.h" 14f71b2103d56dde247605b718a0c89123ad8f0094vandebo@chromium.org#include "SkPath.h" 15f71b2103d56dde247605b718a0c89123ad8f0094vandebo@chromium.org 16f71b2103d56dde247605b718a0c89123ad8f0094vandebo@chromium.orgclass SkMatrix; 17f71b2103d56dde247605b718a0c89123ad8f0094vandebo@chromium.orgclass SkPath; 18f71b2103d56dde247605b718a0c89123ad8f0094vandebo@chromium.orgclass SkPDFArray; 198989d31cf0472cc73484d74e45c54a24fed2dc00vandebo@chromium.orgstruct SkRect; 20c73dd5c6880739f26216f198c757028fd28df1a4djsollen@google.comclass SkWStream; 21f71b2103d56dde247605b718a0c89123ad8f0094vandebo@chromium.org 22f71b2103d56dde247605b718a0c89123ad8f0094vandebo@chromium.org#if 0 23f71b2103d56dde247605b718a0c89123ad8f0094vandebo@chromium.org#define PRINT_NOT_IMPL(str) fprintf(stderr, str) 24f71b2103d56dde247605b718a0c89123ad8f0094vandebo@chromium.org#else 25f71b2103d56dde247605b718a0c89123ad8f0094vandebo@chromium.org#define PRINT_NOT_IMPL(str) 26f71b2103d56dde247605b718a0c89123ad8f0094vandebo@chromium.org#endif 27f71b2103d56dde247605b718a0c89123ad8f0094vandebo@chromium.org 28f966fd35cf37562df7aaaf08a490582b764ba170ctguil@chromium.org#define NOT_IMPLEMENTED(condition, assert) \ 29f966fd35cf37562df7aaaf08a490582b764ba170ctguil@chromium.org do { \ 30330313a8a8343876ee596da39da06a5d69badd9cmtklein@google.com if ((bool)(condition)) { \ 31f71b2103d56dde247605b718a0c89123ad8f0094vandebo@chromium.org PRINT_NOT_IMPL("NOT_IMPLEMENTED: " #condition "\n"); \ 32f966fd35cf37562df7aaaf08a490582b764ba170ctguil@chromium.org SkDEBUGCODE(SkASSERT(!assert);) \ 33f966fd35cf37562df7aaaf08a490582b764ba170ctguil@chromium.org } \ 34a5c7234e81748f76cbeede40e619351146e5286actguil@chromium.org } while (0) 35f966fd35cf37562df7aaaf08a490582b764ba170ctguil@chromium.org 36f966fd35cf37562df7aaaf08a490582b764ba170ctguil@chromium.orgclass SkPDFUtils { 37f966fd35cf37562df7aaaf08a490582b764ba170ctguil@chromium.orgpublic: 3893a2e213441c75033b04365c7d68c8d3887288accommit-bot@chromium.org static SkPDFArray* RectToArray(const SkRect& rect); 39f966fd35cf37562df7aaaf08a490582b764ba170ctguil@chromium.org static SkPDFArray* MatrixToArray(const SkMatrix& matrix); 4075f97e452e8f2ee55cd2b283df7d7734f48bc2bfvandebo@chromium.org static void AppendTransform(const SkMatrix& matrix, SkWStream* content); 41cae5fba82e687d674b076b10cdc8aba46e1ac3b3vandebo@chromium.org 42cae5fba82e687d674b076b10cdc8aba46e1ac3b3vandebo@chromium.org static void MoveTo(SkScalar x, SkScalar y, SkWStream* content); 43cae5fba82e687d674b076b10cdc8aba46e1ac3b3vandebo@chromium.org static void AppendLine(SkScalar x, SkScalar y, SkWStream* content); 44f966fd35cf37562df7aaaf08a490582b764ba170ctguil@chromium.org static void AppendCubic(SkScalar ctl1X, SkScalar ctl1Y, 45f966fd35cf37562df7aaaf08a490582b764ba170ctguil@chromium.org SkScalar ctl2X, SkScalar ctl2Y, 46cae5fba82e687d674b076b10cdc8aba46e1ac3b3vandebo@chromium.org SkScalar dstX, SkScalar dstY, SkWStream* content); 479fbdf875183f5142b8e0ba46ab430cc46ad701bfvandebo@chromium.org static void AppendRectangle(const SkRect& rect, SkWStream* content); 48683001ce0de70c859ea5e5353245b18cadbefc45vandebo@chromium.org static void EmitPath(const SkPath& path, SkPaint::Style paintStyle, 498b2bc252faed7c751cf9248c3833c0631f498b7dhalcanary bool doConsumeDegerates, SkWStream* content); 508b2bc252faed7c751cf9248c3833c0631f498b7dhalcanary static void EmitPath(const SkPath& path, SkPaint::Style paintStyle, 518b2bc252faed7c751cf9248c3833c0631f498b7dhalcanary SkWStream* content) { 528b2bc252faed7c751cf9248c3833c0631f498b7dhalcanary SkPDFUtils::EmitPath(path, paintStyle, true, content); 538b2bc252faed7c751cf9248c3833c0631f498b7dhalcanary } 54cae5fba82e687d674b076b10cdc8aba46e1ac3b3vandebo@chromium.org static void ClosePath(SkWStream* content); 55f966fd35cf37562df7aaaf08a490582b764ba170ctguil@chromium.org static void PaintPath(SkPaint::Style style, SkPath::FillType fill, 56cae5fba82e687d674b076b10cdc8aba46e1ac3b3vandebo@chromium.org SkWStream* content); 57cae5fba82e687d674b076b10cdc8aba46e1ac3b3vandebo@chromium.org static void StrokePath(SkWStream* content); 586112c215fbdd53388e64ece36e6c7bba0fe3a451vandebo@chromium.org static void DrawFormXObject(int objectIndex, SkWStream* content); 596112c215fbdd53388e64ece36e6c7bba0fe3a451vandebo@chromium.org static void ApplyGraphicState(int objectIndex, SkWStream* content); 6093a2e213441c75033b04365c7d68c8d3887288accommit-bot@chromium.org static void ApplyPattern(int objectIndex, SkWStream* content); 618e9f5e39d774198a5a5d9345bc9f863e855c593bhalcanary 628e9f5e39d774198a5a5d9345bc9f863e855c593bhalcanary // 3 = '-', '.', and '\0' characters. 638e9f5e39d774198a5a5d9345bc9f863e855c593bhalcanary // 9 = number of significant digits 648e9f5e39d774198a5a5d9345bc9f863e855c593bhalcanary // abs(FLT_MIN_10_EXP) = number of zeros in FLT_MIN 658e9f5e39d774198a5a5d9345bc9f863e855c593bhalcanary static const size_t kMaximumFloatDecimalLength = 3 + 9 - FLT_MIN_10_EXP; 668e9f5e39d774198a5a5d9345bc9f863e855c593bhalcanary // FloatToDecimal is exposed for unit tests. 678e9f5e39d774198a5a5d9345bc9f863e855c593bhalcanary static size_t FloatToDecimal(float value, 688e9f5e39d774198a5a5d9345bc9f863e855c593bhalcanary char output[kMaximumFloatDecimalLength]); 69bc4696b9176e05940a7c2d6778276cdbc55ccd61halcanary static void AppendScalar(SkScalar value, SkWStream* stream); 70bc4696b9176e05940a7c2d6778276cdbc55ccd61halcanary static SkString FormatString(const char* input, size_t len); 71f966fd35cf37562df7aaaf08a490582b764ba170ctguil@chromium.org}; 72f966fd35cf37562df7aaaf08a490582b764ba170ctguil@chromium.org 73f966fd35cf37562df7aaaf08a490582b764ba170ctguil@chromium.org#endif 74