/*
|
* Copyright 2010 The Android Open Source Project
|
*
|
* Use of this source code is governed by a BSD-style license that can be
|
* found in the LICENSE file.
|
*/
|
|
|
#ifndef SkPDFGraphicState_DEFINED
|
#define SkPDFGraphicState_DEFINED
|
|
#include "SkMacros.h"
|
#include "SkOpts.h"
|
#include "SkPDFTypes.h"
|
|
class SkPaint;
|
|
|
/** \class SkPDFGraphicState
|
SkPaint objects roughly correspond to graphic state dictionaries that can
|
be installed. So that a given dictionary is only output to the pdf file
|
once, we want to canonicalize them.
|
*/
|
namespace SkPDFGraphicState {
|
enum SkPDFSMaskMode {
|
kAlpha_SMaskMode,
|
kLuminosity_SMaskMode
|
};
|
|
/** Get the graphic state for the passed SkPaint.
|
*/
|
SkPDFIndirectReference GetGraphicStateForPaint(SkPDFDocument*, const SkPaint&);
|
|
/** Make a graphic state that only sets the passed soft mask.
|
* @param sMask The form xobject to use as a soft mask.
|
* @param invert Indicates if the alpha of the sMask should be inverted.
|
* @param sMaskMode Whether to use alpha or luminosity for the sMask.
|
*
|
* These are not de-duped.
|
*/
|
SkPDFIndirectReference GetSMaskGraphicState(SkPDFIndirectReference sMask,
|
bool invert,
|
SkPDFSMaskMode sMaskMode,
|
SkPDFDocument* doc);
|
}
|
|
SK_BEGIN_REQUIRE_DENSE
|
struct SkPDFStrokeGraphicState {
|
SkScalar fStrokeWidth;
|
SkScalar fStrokeMiter;
|
SkScalar fAlpha;
|
uint8_t fStrokeCap; // SkPaint::Cap
|
uint8_t fStrokeJoin; // SkPaint::Join
|
uint8_t fBlendMode; // SkBlendMode
|
uint8_t fPADDING = 0;
|
bool operator==(const SkPDFStrokeGraphicState& o) const { return !memcmp(this, &o, sizeof(o)); }
|
bool operator!=(const SkPDFStrokeGraphicState& o) const { return !(*this == o); }
|
};
|
SK_END_REQUIRE_DENSE
|
|
SK_BEGIN_REQUIRE_DENSE
|
struct SkPDFFillGraphicState {
|
SkScalar fAlpha;
|
uint8_t fBlendMode;
|
uint8_t fPADDING[3] = {0, 0, 0};
|
bool operator==(const SkPDFFillGraphicState& o) const { return !memcmp(this, &o, sizeof(o)); }
|
bool operator!=(const SkPDFFillGraphicState& o) const { return !(*this == o); }
|
};
|
SK_END_REQUIRE_DENSE
|
|
#endif
|