1 /* 2 * Copyright 2013 Google Inc. 3 * 4 * Use of this source code is governed by a BSD-style license that can be 5 * found in the LICENSE file. 6 */ 7 8 #ifndef SkPdfConfig_DEFINED 9 #define SkPdfConfig_DEFINED 10 11 #include "stddef.h" 12 class SkPdfNativeObject; 13 14 // shows what objects have not been used in rendering. can be used to track what features we might 15 // have not implemented, or where we implemented only the default behaivour 16 //#define PDF_TRACK_OBJECT_USAGE 17 18 // tracks the position in the stream, it can be used to show where exactly the errors happened 19 //#define PDF_TRACK_STREAM_OFFSETS 20 21 // reports issues, warning, NYI, errors, ... 22 // enable PDF_TRACK_STREAM_OFFSETS to also have the offset in the stream where the error happened 23 //#define PDF_REPORT 24 25 // At various points in code we show the value of important variables with this flag 26 //#define PDF_TRACE 27 28 // displays the result of each read token, individual result 29 //#define PDF_TRACE_READ_TOKEN 30 31 // Every drawtext draws before a rectangle, in this way we see the one that might have failed 32 //#define PDF_TRACE_DRAWTEXT 33 34 // For each render operations, it will dump the canvas in a png 35 //#define PDF_TRACE_DIFF_IN_PNG 36 37 // Does not clip at all, can be used in debugging issues 38 //#define PDF_DEBUG_NO_CLIPING 39 40 // Does not click the page, use is with 3x 41 //#define PDF_DEBUG_NO_PAGE_CLIPING 42 43 // render the page 3X bigger (with content in center) - used to make sure we don't mess up 44 // positioning 45 // like a tick tac toe board, only the center one has content, all the rest of them have to be clean 46 //#define PDF_DEBUG_3X 47 48 49 // TODO(edisonn): pass a flag to say how it was used? e.g. asked the type? Obtained value? 50 // Implement it when it will be needed the first time to fix some bug. 51 #ifdef PDF_TRACK_OBJECT_USAGE 52 #define SkPdfMarkObjectUsed() fUsed = true 53 #else 54 #define SkPdfMarkObjectUsed() 55 #endif // PDF_TRACK_OBJECT_USAGE 56 57 #ifdef PDF_TRACK_OBJECT_USAGE 58 #define SkPdfMarkObjectUnused() fUsed = false 59 #else 60 #define SkPdfMarkObjectUnused() 61 #endif // PDF_TRACK_OBJECT_USAGE 62 63 #ifdef PDF_TRACK_STREAM_OFFSETS 64 #define TRACK_OBJECT_SRC(a) 65 #define STORE_TRACK_PARAMETERS(obj) (obj)->fStreamId = streamId;\ 66 (obj)->fOffsetStart = offsetStart;\ 67 (obj)->fOffsetEnd = offsetEnd; 68 #define STORE_TRACK_PARAMETER_OFFSET_END(obj,offsetEnd) (obj)->fOffsetEnd = (offsetEnd)-streamStart; 69 #else 70 #define TRACK_OBJECT_SRC(a) 71 #define STORE_TRACK_PARAMETERS(obj) 72 #define STORE_TRACK_PARAMETER_OFFSET_END(obj,offsetEnd) 73 #endif //PDF_TRACK_STREAM_OFFSETS 74 75 // TODO(edisonn): move it somewhere else? 76 struct SkPdfInputStream { 77 #ifdef PDF_TRACK_STREAM_OFFSETS 78 // no parent object -> original file to be rendered 79 // no parent file -> stream object 80 // both -> external stream object 81 int fParentFileID; 82 const SkPdfNativeObject* fParentObject; 83 84 size_t fDelta; // delta in parent stream 85 const unsigned char* fStart; 86 #endif // PDF_TRACK_STREAM_OFFSETS 87 88 const unsigned char* fEnd; 89 }; 90 91 struct SkPdfInputStreamLocation { 92 SkPdfInputStream fInputStream; 93 const unsigned char* fNow; 94 }; 95 96 #ifdef PDF_TRACK_STREAM_OFFSETS 97 struct SkPdfInputStreamRange { 98 SkPdfInputStream fInputStream; 99 const unsigned char* fRangeStart; 100 const unsigned char* fRangeEnd; 101 }; 102 #endif // PDF_TRACK_STREAM_OFFSETS 103 104 105 #endif // SkPdfConfig_DEFINED 106