Home | History | Annotate | Download | only in pdf
      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