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