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