• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 "SkPDFTypes.h"
13 #include "SkOpts.h"
14 
15 class SkPaint;
16 class SkPDFCanon;
17 
18 /** \class SkPDFGraphicState
19     SkPaint objects roughly correspond to graphic state dictionaries that can
20     be installed. So that a given dictionary is only output to the pdf file
21     once, we want to canonicalize them.
22 */
23 namespace SkPDFGraphicState {
24     enum SkPDFSMaskMode {
25         kAlpha_SMaskMode,
26         kLuminosity_SMaskMode
27     };
28 
29     /** Get the graphic state for the passed SkPaint.
30      */
31     sk_sp<SkPDFDict> GetGraphicStateForPaint(SkPDFCanon*, const SkPaint&);
32 
33     /** Make a graphic state that only sets the passed soft mask.
34      *  @param sMask     The form xobject to use as a soft mask.
35      *  @param invert    Indicates if the alpha of the sMask should be inverted.
36      *  @param sMaskMode Whether to use alpha or luminosity for the sMask.
37      *
38      *  These are not de-duped.
39      */
40     sk_sp<SkPDFDict> GetSMaskGraphicState(sk_sp<SkPDFObject> sMask,
41                                           bool invert,
42                                           SkPDFSMaskMode sMaskMode,
43                                           SkPDFCanon* canon);
44 
45     sk_sp<SkPDFStream> MakeInvertFunction();
46 }
47 
48 SK_BEGIN_REQUIRE_DENSE
49 struct SkPDFStrokeGraphicState {
50     SkScalar fStrokeWidth;
51     SkScalar fStrokeMiter;
52     uint8_t fStrokeCap;   // SkPaint::Cap
53     uint8_t fStrokeJoin;  // SkPaint::Join
54     uint8_t fAlpha;
55     uint8_t fBlendMode;
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     uint8_t fAlpha;
64     uint8_t fBlendMode;
65     bool operator==(const SkPDFFillGraphicState& o) const { return !memcmp(this, &o, sizeof(o)); }
66     bool operator!=(const SkPDFFillGraphicState& o) const { return !(*this == o); }
67 };
68 SK_END_REQUIRE_DENSE
69 
70 #endif
71