1fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot/* 2fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * Copyright 2010 The Android Open Source Project 3fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * 4fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * Use of this source code is governed by a BSD-style license that can be 5fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * found in the LICENSE file. 6fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot */ 7fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 8fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 9fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#ifndef SkPDFGraphicState_DEFINED 10fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#define SkPDFGraphicState_DEFINED 11fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 12fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkPDFTypes.h" 13fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkOpts.h" 14fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 15fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotclass SkPaint; 16fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotclass SkPDFCanon; 17fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 18fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot/** \class SkPDFGraphicState 19fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkPaint objects roughly correspond to graphic state dictionaries that can 20fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot be installed. So that a given dictionary is only output to the pdf file 21fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot once, we want to canonicalize them. 22fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot*/ 23fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotnamespace SkPDFGraphicState { 24fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot enum SkPDFSMaskMode { 25fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot kAlpha_SMaskMode, 26fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot kLuminosity_SMaskMode 27fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot }; 28fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 29fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot /** Get the graphic state for the passed SkPaint. 30fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot */ 31fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot sk_sp<SkPDFDict> GetGraphicStateForPaint(SkPDFCanon*, const SkPaint&); 32fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 33fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot /** Make a graphic state that only sets the passed soft mask. 34fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * @param sMask The form xobject to use as a soft mask. 35fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * @param invert Indicates if the alpha of the sMask should be inverted. 36fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * @param sMaskMode Whether to use alpha or luminosity for the sMask. 37fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * 38fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * These are not de-duped. 39fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot */ 40fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot sk_sp<SkPDFDict> GetSMaskGraphicState(sk_sp<SkPDFObject> sMask, 41fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot bool invert, 42fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkPDFSMaskMode sMaskMode, 43fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkPDFCanon* canon); 44fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 45fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot sk_sp<SkPDFStream> MakeInvertFunction(); 46fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot} 47fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 48fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team RobotSK_BEGIN_REQUIRE_DENSE 49fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotstruct SkPDFStrokeGraphicState { 50fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkScalar fStrokeWidth; 51fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkScalar fStrokeMiter; 52fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot uint8_t fStrokeCap; // SkPaint::Cap 53fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot uint8_t fStrokeJoin; // SkPaint::Join 54fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot uint8_t fAlpha; 55fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot uint8_t fBlendMode; 56fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot bool operator==(const SkPDFStrokeGraphicState& o) const { return !memcmp(this, &o, sizeof(o)); } 57fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot bool operator!=(const SkPDFStrokeGraphicState& o) const { return !(*this == o); } 58fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot}; 59fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team RobotSK_END_REQUIRE_DENSE 60fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 61fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team RobotSK_BEGIN_REQUIRE_DENSE 62fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotstruct SkPDFFillGraphicState { 63fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot uint8_t fAlpha; 64fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot uint8_t fBlendMode; 65fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot bool operator==(const SkPDFFillGraphicState& o) const { return !memcmp(this, &o, sizeof(o)); } 66fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot bool operator!=(const SkPDFFillGraphicState& o) const { return !(*this == o); } 67fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot}; 68fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team RobotSK_END_REQUIRE_DENSE 69fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 70fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#endif 71