1fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot/*
2fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * Copyright 2015 Google Inc.
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#ifndef SkPDFCanon_DEFINED
8fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#define SkPDFCanon_DEFINED
9fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
10fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkBitmapKey.h"
11fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkPDFGradientShader.h"
12fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkPDFGraphicState.h"
13fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkPDFShader.h"
14fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkTDArray.h"
15fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkTHash.h"
16fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkTypeface.h"
17fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
18fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotclass SkPDFFont;
19fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotstruct SkAdvancedTypefaceMetrics;
20fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
21fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot/**
22fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot *  The SkPDFCanon canonicalizes objects across PDF pages
23fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot *  (SkPDFDevices) and across draw calls.
24fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot */
25fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotclass SkPDFCanon {
26fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotpublic:
27fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    ~SkPDFCanon();
28fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    SkPDFCanon();
29fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    SkPDFCanon(const SkPDFCanon&) = delete;
30fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    SkPDFCanon& operator=(const SkPDFCanon&) = delete;
31fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
32fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    SkTHashMap<SkPDFImageShaderKey, sk_sp<SkPDFObject>> fImageShaderMap;
33fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
34fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    SkPDFGradientShader::HashMap fGradientPatternMap;
35fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
36fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    SkTHashMap<SkBitmapKey, sk_sp<SkPDFObject>> fPDFBitmapMap;
37fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
38fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    SkTHashMap<uint32_t, std::unique_ptr<SkAdvancedTypefaceMetrics>> fTypefaceMetrics;
39fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    SkTHashMap<uint32_t, sk_sp<SkPDFDict>> fFontDescriptors;
40fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    SkTHashMap<uint64_t, sk_sp<SkPDFFont>> fFontMap;
41fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
42fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    SkTHashMap<SkPDFStrokeGraphicState, sk_sp<SkPDFDict>> fStrokeGSMap;
43fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    SkTHashMap<SkPDFFillGraphicState, sk_sp<SkPDFDict>> fFillGSMap;
44fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
45fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    sk_sp<SkPDFStream> fInvertFunction;
46fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    sk_sp<SkPDFDict> fNoSmaskGraphicState;
47fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    sk_sp<SkPDFArray> fRangeObject;
48fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
49fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    SK_BEGIN_REQUIRE_DENSE
50fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    struct BitmapGlyphKey {
51fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        SkFontID fFontID;      // uint32_t
52fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        SkScalar fTextSize;    // float32
53fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        SkScalar fTextScaleX;  // float32
54fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        SkScalar fTextSkewX;   // float32
55fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        SkGlyphID fGlyphID;    // uint16_t
56fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        uint16_t fPadding;
57fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    };
58fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    SK_END_REQUIRE_DENSE
59fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    struct BitmapGlyph {
60fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        sk_sp<SkImage> fImage;
61fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        SkIPoint fOffset;
62fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    };
63fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    SkTHashMap<BitmapGlyphKey, BitmapGlyph> fBitmapGlyphImages;
64fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot};
65fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
66fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotinline bool operator==(const SkPDFCanon::BitmapGlyphKey& u, const SkPDFCanon::BitmapGlyphKey& v) {
67fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    return memcmp(&u, &v, sizeof(SkPDFCanon::BitmapGlyphKey)) == 0;
68fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot}
69fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#endif  // SkPDFCanon_DEFINED
70