1fb62b3d423fa34c672df42f47017dbef087d19e9halcanary/* 2fb62b3d423fa34c672df42f47017dbef087d19e9halcanary * Copyright 2015 Google Inc. 3fb62b3d423fa34c672df42f47017dbef087d19e9halcanary * 4fb62b3d423fa34c672df42f47017dbef087d19e9halcanary * Use of this source code is governed by a BSD-style license that can be 5fb62b3d423fa34c672df42f47017dbef087d19e9halcanary * found in the LICENSE file. 6fb62b3d423fa34c672df42f47017dbef087d19e9halcanary */ 7fb62b3d423fa34c672df42f47017dbef087d19e9halcanary#ifndef SkPDFCanon_DEFINED 8fb62b3d423fa34c672df42f47017dbef087d19e9halcanary#define SkPDFCanon_DEFINED 9fb62b3d423fa34c672df42f47017dbef087d19e9halcanary 109b9510a71182ab88cd82effd6728aaa0584b8dccHal Canary#include "SkBitmapKey.h" 119b9510a71182ab88cd82effd6728aaa0584b8dccHal Canary#include "SkPDFGradientShader.h" 12be27a118c277af23377d38e9b3bfd3fcc276114fhalcanary#include "SkPDFGraphicState.h" 13fb62b3d423fa34c672df42f47017dbef087d19e9halcanary#include "SkPDFShader.h" 14fb62b3d423fa34c672df42f47017dbef087d19e9halcanary#include "SkTDArray.h" 15be27a118c277af23377d38e9b3bfd3fcc276114fhalcanary#include "SkTHash.h" 169b9510a71182ab88cd82effd6728aaa0584b8dccHal Canary#include "SkTypeface.h" 17fb62b3d423fa34c672df42f47017dbef087d19e9halcanary 18fb62b3d423fa34c672df42f47017dbef087d19e9halcanaryclass SkPDFFont; 19209e4b1b70a5e9c2f504de15f038999ed9ee4ae5Hal Canarystruct SkAdvancedTypefaceMetrics; 207a14b310d6c618fa2151d93a43b29f9599adc32ahalcanary 21792c80f5a7b66e75d42664ccb298f31962c6654chalcanary/** 22a50151dcb5a0b8bfdef383e363e519c91d2d2c7ahalcanary * The SkPDFCanon canonicalizes objects across PDF pages 23a50151dcb5a0b8bfdef383e363e519c91d2d2c7ahalcanary * (SkPDFDevices) and across draw calls. 24792c80f5a7b66e75d42664ccb298f31962c6654chalcanary */ 2594fd66cc2502383628b2c5fb72a445460b752c35Hal Canaryclass SkPDFCanon { 26fb62b3d423fa34c672df42f47017dbef087d19e9halcanarypublic: 27cee13425b5cd862189d1e5d7cf8f258bccae5f5dhalcanary ~SkPDFCanon(); 2894fd66cc2502383628b2c5fb72a445460b752c35Hal Canary SkPDFCanon(); 2994fd66cc2502383628b2c5fb72a445460b752c35Hal Canary SkPDFCanon(const SkPDFCanon&) = delete; 3094fd66cc2502383628b2c5fb72a445460b752c35Hal Canary SkPDFCanon& operator=(const SkPDFCanon&) = delete; 312e3f9d8a9309686eeb4c76ccfde5800da87a68b3halcanary 32ec2576864139967dc0359c5ec5223625123354fbHal Canary SkTHashMap<SkPDFImageShaderKey, sk_sp<SkPDFObject>> fImageShaderMap; 33530ea8e24bc88f2d7973c35a703f18c1dafb56dchalcanary 342d171397f863699eb7804b814994d4c2fcb00cb7Hal Canary SkPDFGradientShader::HashMap fGradientPatternMap; 35fb62b3d423fa34c672df42f47017dbef087d19e9halcanary 365c1b360a89f85accd7dc446670f6f062c73e7e77Hal Canary SkTHashMap<SkBitmapKey, sk_sp<SkPDFObject>> fPDFBitmapMap; 3766a82f3872abf4ebb98b3915b2a9ecc73ad352c5halcanary 38209e4b1b70a5e9c2f504de15f038999ed9ee4ae5Hal Canary SkTHashMap<uint32_t, std::unique_ptr<SkAdvancedTypefaceMetrics>> fTypefaceMetrics; 395c1b360a89f85accd7dc446670f6f062c73e7e77Hal Canary SkTHashMap<uint32_t, sk_sp<SkPDFDict>> fFontDescriptors; 405c1b360a89f85accd7dc446670f6f062c73e7e77Hal Canary SkTHashMap<uint64_t, sk_sp<SkPDFFont>> fFontMap; 41712fdf7603c62820b21174da9b0a2071c174936bhalcanary 4280fa7cea93974b0480f35f7a5260ce78ba50420fHal Canary SkTHashMap<SkPDFStrokeGraphicState, sk_sp<SkPDFDict>> fStrokeGSMap; 4380fa7cea93974b0480f35f7a5260ce78ba50420fHal Canary SkTHashMap<SkPDFFillGraphicState, sk_sp<SkPDFDict>> fFillGSMap; 4480fa7cea93974b0480f35f7a5260ce78ba50420fHal Canary 455c1b360a89f85accd7dc446670f6f062c73e7e77Hal Canary sk_sp<SkPDFStream> fInvertFunction; 465c1b360a89f85accd7dc446670f6f062c73e7e77Hal Canary sk_sp<SkPDFDict> fNoSmaskGraphicState; 475c1b360a89f85accd7dc446670f6f062c73e7e77Hal Canary sk_sp<SkPDFArray> fRangeObject; 489b9510a71182ab88cd82effd6728aaa0584b8dccHal Canary 499b9510a71182ab88cd82effd6728aaa0584b8dccHal Canary SK_BEGIN_REQUIRE_DENSE 509b9510a71182ab88cd82effd6728aaa0584b8dccHal Canary struct BitmapGlyphKey { 519b9510a71182ab88cd82effd6728aaa0584b8dccHal Canary SkFontID fFontID; // uint32_t 529b9510a71182ab88cd82effd6728aaa0584b8dccHal Canary SkScalar fTextSize; // float32 539b9510a71182ab88cd82effd6728aaa0584b8dccHal Canary SkScalar fTextScaleX; // float32 549b9510a71182ab88cd82effd6728aaa0584b8dccHal Canary SkScalar fTextSkewX; // float32 559b9510a71182ab88cd82effd6728aaa0584b8dccHal Canary SkGlyphID fGlyphID; // uint16_t 569b9510a71182ab88cd82effd6728aaa0584b8dccHal Canary uint16_t fPadding; 579b9510a71182ab88cd82effd6728aaa0584b8dccHal Canary }; 589b9510a71182ab88cd82effd6728aaa0584b8dccHal Canary SK_END_REQUIRE_DENSE 599b9510a71182ab88cd82effd6728aaa0584b8dccHal Canary struct BitmapGlyph { 609b9510a71182ab88cd82effd6728aaa0584b8dccHal Canary sk_sp<SkImage> fImage; 619b9510a71182ab88cd82effd6728aaa0584b8dccHal Canary SkIPoint fOffset; 629b9510a71182ab88cd82effd6728aaa0584b8dccHal Canary }; 639b9510a71182ab88cd82effd6728aaa0584b8dccHal Canary SkTHashMap<BitmapGlyphKey, BitmapGlyph> fBitmapGlyphImages; 64fb62b3d423fa34c672df42f47017dbef087d19e9halcanary}; 659b9510a71182ab88cd82effd6728aaa0584b8dccHal Canary 669b9510a71182ab88cd82effd6728aaa0584b8dccHal Canaryinline bool operator==(const SkPDFCanon::BitmapGlyphKey& u, const SkPDFCanon::BitmapGlyphKey& v) { 671d746208a1335a192433923b4a818ded3978228dMike Klein return memcmp(&u, &v, sizeof(SkPDFCanon::BitmapGlyphKey)) == 0; 689b9510a71182ab88cd82effd6728aaa0584b8dccHal Canary} 69fb62b3d423fa34c672df42f47017dbef087d19e9halcanary#endif // SkPDFCanon_DEFINED 70