1 /* 2 * Copyright 2010 The Android Open Source Project 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 9 #ifndef SkPDFGraphicState_DEFINED 10 #define SkPDFGraphicState_DEFINED 11 12 #include "SkMacros.h" 13 #include "SkOpts.h" 14 #include "SkPDFTypes.h" 15 16 class SkPaint; 17 18 19 /** \class SkPDFGraphicState 20 SkPaint objects roughly correspond to graphic state dictionaries that can 21 be installed. So that a given dictionary is only output to the pdf file 22 once, we want to canonicalize them. 23 */ 24 namespace SkPDFGraphicState { 25 enum SkPDFSMaskMode { 26 kAlpha_SMaskMode, 27 kLuminosity_SMaskMode 28 }; 29 30 /** Get the graphic state for the passed SkPaint. 31 */ 32 SkPDFIndirectReference GetGraphicStateForPaint(SkPDFDocument*, const SkPaint&); 33 34 /** Make a graphic state that only sets the passed soft mask. 35 * @param sMask The form xobject to use as a soft mask. 36 * @param invert Indicates if the alpha of the sMask should be inverted. 37 * @param sMaskMode Whether to use alpha or luminosity for the sMask. 38 * 39 * These are not de-duped. 40 */ 41 SkPDFIndirectReference GetSMaskGraphicState(SkPDFIndirectReference sMask, 42 bool invert, 43 SkPDFSMaskMode sMaskMode, 44 SkPDFDocument* doc); 45 } 46 47 SK_BEGIN_REQUIRE_DENSE 48 struct SkPDFStrokeGraphicState { 49 SkScalar fStrokeWidth; 50 SkScalar fStrokeMiter; 51 SkScalar fAlpha; 52 uint8_t fStrokeCap; // SkPaint::Cap 53 uint8_t fStrokeJoin; // SkPaint::Join 54 uint8_t fBlendMode; // SkBlendMode 55 uint8_t fPADDING = 0; 56 bool operator==(const SkPDFStrokeGraphicState& o) const { return !memcmp(this, &o, sizeof(o)); } 57 bool operator!=(const SkPDFStrokeGraphicState& o) const { return !(*this == o); } 58 }; 59 SK_END_REQUIRE_DENSE 60 61 SK_BEGIN_REQUIRE_DENSE 62 struct SkPDFFillGraphicState { 63 SkScalar fAlpha; 64 uint8_t fBlendMode; 65 uint8_t fPADDING[3] = {0, 0, 0}; 66 bool operator==(const SkPDFFillGraphicState& o) const { return !memcmp(this, &o, sizeof(o)); } 67 bool operator!=(const SkPDFFillGraphicState& o) const { return !(*this == o); } 68 }; 69 SK_END_REQUIRE_DENSE 70 71 #endif 72