1e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// Copyright 2014 PDFium Authors. All rights reserved. 2e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// Use of this source code is governed by a BSD-style license that can be 3e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// found in the LICENSE file. 4ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 5e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com 6e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 7e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#ifndef CORE_INCLUDE_FPDFAPI_FPDF_RESOURCE_H_ 8e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#define CORE_INCLUDE_FPDFAPI_FPDF_RESOURCE_H_ 9e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 10ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#include <map> 11ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 12ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#include "core/include/fxcrt/fx_system.h" 13ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#include "core/include/fxge/fx_font.h" 14e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#include "fpdf_parser.h" 15e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 16ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannclass CFX_CTTGSUBTable; 17ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannclass CFX_DIBitmap; 18ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannclass CFX_Font; 19ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannclass CFX_SubstFont; 20ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannclass CPDF_CID2UnicodeMap; 21e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovclass CPDF_CIDFont; 22e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovclass CPDF_CMap; 23e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovclass CPDF_Color; 24ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannclass CPDF_ColorSpace; 25ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannclass CPDF_Face; 26ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannclass CPDF_FontEncoding; 27ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannclass CPDF_Form; 28e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovclass CPDF_Function; 29ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannclass CPDF_Image; 30ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannclass CPDF_ImageObject; 31ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannclass CPDF_Page; 32e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovclass CPDF_Pattern; 33ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannclass CPDF_RenderContext; 34e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovclass CPDF_ShadingPattern; 35ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannclass CPDF_TilingPattern; 36e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovclass CPDF_ToUnicodeMap; 37ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannclass CPDF_TrueTypeFont; 38ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannclass CPDF_Type1Font; 39ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannclass CPDF_Type3Font; 40e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovtypedef struct FT_FaceRec_* FXFT_Face; 41e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 42e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovFX_WCHAR PDF_UnicodeFromAdobeName(const FX_CHAR* name); 43e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovCFX_ByteString PDF_AdobeNameFromUnicode(FX_WCHAR unicode); 44ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannconst FX_CHAR* FCS_GetAltStr(FX_WCHAR unicode); 45ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannconst FX_CHAR* PDF_CharNameFromPredefinedCharSet(int encoding, 46ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann uint8_t charcode); 47ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 48ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_WCHAR FT_UnicodeFromCharCode(int encoding, FX_DWORD charcode); 49ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_DWORD FT_CharCodeFromUnicode(int encoding, FX_WCHAR unicode); 50ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannconst FX_WORD* PDF_UnicodesForPredefinedCharSet(int encoding); 51ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannconst FX_CHAR* GetAdobeCharName(int iBaseEncoding, 52ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann const CFX_ByteString* pCharNames, 53ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int charcode); 54ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 55ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmanntemplate <class T> 56ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannclass CPDF_CountedObject { 57ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann public: 58ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann explicit CPDF_CountedObject(T* ptr) : m_nCount(1), m_pObj(ptr) {} 59ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann void reset(T* ptr) { // CAUTION: tosses prior ref counts. 60ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_nCount = 1; 61ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pObj = ptr; 62ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 63ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann void clear() { // Now you're all weak ptrs ... 64ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann delete m_pObj; 65ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pObj = nullptr; 66ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 67ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann T* get() const { return m_pObj; } 68ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann T* AddRef() { 69ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FXSYS_assert(m_pObj); 70ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann ++m_nCount; 71ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return m_pObj; 72ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 73ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann void RemoveRef() { 74ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (m_nCount) 75ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann --m_nCount; 76ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 77ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann size_t use_count() const { return m_nCount; } 78ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 79ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann protected: 80ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann size_t m_nCount; 81ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann T* m_pObj; 82ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}; 83ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannusing CPDF_CountedColorSpace = CPDF_CountedObject<CPDF_ColorSpace>; 84ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannusing CPDF_CountedPattern = CPDF_CountedObject<CPDF_Pattern>; 85ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define PDFFONT_TYPE1 1 86ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define PDFFONT_TRUETYPE 2 87ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define PDFFONT_TYPE3 3 88ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define PDFFONT_CIDFONT 4 89ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define PDFFONT_FIXEDPITCH 1 90ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define PDFFONT_SERIF 2 91ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define PDFFONT_SYMBOLIC 4 92ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define PDFFONT_SCRIPT 8 93ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define PDFFONT_NONSYMBOLIC 32 94ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define PDFFONT_ITALIC 64 95ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define PDFFONT_ALLCAP 0x10000 96ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define PDFFONT_SMALLCAP 0x20000 97ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define PDFFONT_FORCEBOLD 0x40000 98ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define PDFFONT_USEEXTERNATTR 0x80000 99ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannclass CPDF_Font { 100ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann public: 101ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann static CPDF_Font* CreateFontF(CPDF_Document* pDoc, 102ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Dictionary* pFontDict); 103ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann static CPDF_Font* GetStockFont(CPDF_Document* pDoc, 104ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann const CFX_ByteStringC& fontname); 105ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann static const FX_DWORD kInvalidCharCode = static_cast<FX_DWORD>(-1); 106e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 107ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann virtual ~CPDF_Font(); 108e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 109ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann bool IsFontType(int fonttype) const { return fonttype == m_FontType; } 110ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int GetFontType() const { return m_FontType; } 111e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 112ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_ByteString GetFontTypeName() const; 113e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 114ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann const CFX_ByteString& GetBaseFont() const { return m_BaseFont; } 115e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 116ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann const CFX_SubstFont* GetSubstFont() const { return m_Font.GetSubstFont(); } 117e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 118ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_DWORD GetFlags() const { return m_Flags; } 119e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 120ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann virtual FX_BOOL IsVertWriting() const; 121e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 122ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Type1Font* GetType1Font() const { 123ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return m_FontType == PDFFONT_TYPE1 ? (CPDF_Type1Font*)(void*)this : NULL; 124ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 125e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 126ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_TrueTypeFont* GetTrueTypeFont() const { 127ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return m_FontType == PDFFONT_TRUETYPE ? (CPDF_TrueTypeFont*)(void*)this 128ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann : NULL; 129ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 130e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 131ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_CIDFont* GetCIDFont() const { 132ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return (m_FontType == PDFFONT_CIDFONT) ? (CPDF_CIDFont*)(void*)this : NULL; 133ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 134e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 135ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Type3Font* GetType3Font() const { 136ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return (m_FontType == PDFFONT_TYPE3) ? (CPDF_Type3Font*)(void*)this : NULL; 137ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 138e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 139ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_BOOL IsEmbedded() const { 140ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return m_FontType == PDFFONT_TYPE3 || m_pFontFile != NULL; 141ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 142e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 143ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann virtual FX_BOOL IsUnicodeCompatible() const { return FALSE; } 144e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 145ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_StreamAcc* GetFontFile() const { return m_pFontFile; } 146e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 147ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Dictionary* GetFontDict() const { return m_pFontDict; } 148e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 149ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_BOOL IsStandardFont() const; 150e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 151ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FXFT_Face GetFace() const { return m_Font.GetFace(); } 152e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 153ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann virtual FX_DWORD GetNextChar(const FX_CHAR* pString, 154ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int nStrLen, 155ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int& offset) const { 156ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (offset < 0 || nStrLen < 1) { 157ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return 0; 158e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 159ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann uint8_t ch = offset < nStrLen ? pString[offset++] : pString[nStrLen - 1]; 160ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return static_cast<FX_DWORD>(ch); 161ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 162e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 163ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann virtual int CountChar(const FX_CHAR* pString, int size) const { return size; } 164e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 165ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann void AppendChar(CFX_ByteString& str, FX_DWORD charcode) const; 166e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 167ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann virtual int AppendChar(FX_CHAR* buf, FX_DWORD charcode) const { 168ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann *buf = (FX_CHAR)charcode; 169ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return 1; 170ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 171e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 172ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann virtual int GetCharSize(FX_DWORD charcode) const { return 1; } 173e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 174ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann virtual int GlyphFromCharCode(FX_DWORD charcode, 175ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_BOOL* pVertGlyph = NULL) = 0; 176ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann virtual int GlyphFromCharCodeExt(FX_DWORD charcode) { 177ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return GlyphFromCharCode(charcode); 178ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 179e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 180ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_WideString UnicodeFromCharCode(FX_DWORD charcode) const; 181e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 182ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_DWORD CharCodeFromUnicode(FX_WCHAR Unicode) const; 183e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 184ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_CharMap* GetCharMap() { return m_pCharMap; } 185e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 186ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_ByteString EncodeString(const CFX_WideString& str) const; 187e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 188ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_WideString DecodeString(const CFX_ByteString& str) const; 189e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 190ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann void GetFontBBox(FX_RECT& rect) const { rect = m_FontBBox; } 191e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 192ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int GetTypeAscent() const { return m_Ascent; } 193e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 194ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int GetTypeDescent() const { return m_Descent; } 195e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 196ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int GetItalicAngle() const { return m_ItalicAngle; } 197e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 198ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int GetStemV() const { return m_StemV; } 199e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 200ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int GetStringWidth(const FX_CHAR* pString, int size); 201e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 202ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann virtual int GetCharWidthF(FX_DWORD charcode, int level = 0) = 0; 203e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 204ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann virtual int GetCharTypeWidth(FX_DWORD charcode); 205e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 206ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann virtual void GetCharBBox(FX_DWORD charcode, FX_RECT& rect, int level = 0) = 0; 207e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 208ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Document* m_pDocument; 209e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 210ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann class CFX_PathData* LoadGlyphPath(FX_DWORD charcode, int dest_width = 0); 211e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 212ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_Font m_Font; 213e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 214ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann protected: 215ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann explicit CPDF_Font(int fonttype); 216e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 217ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_BOOL Initialize(); 218e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 219ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_BOOL Load(); 220e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 221ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann virtual FX_BOOL _Load() = 0; 222e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 223ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann virtual FX_WCHAR _UnicodeFromCharCode(FX_DWORD charcode) const = 0; 224e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 225ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann virtual FX_DWORD _CharCodeFromUnicode(FX_WCHAR Unicode) const = 0; 226e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 227ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann void LoadUnicodeMap(); 228e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 229ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann void LoadPDFEncoding(CPDF_Object* pEncoding, 230ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int& iBaseEncoding, 231ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_ByteString*& pCharNames, 232ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_BOOL bEmbedded, 233ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_BOOL bTrueType); 234e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 235ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann void LoadFontDescriptor(CPDF_Dictionary*); 236e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 237ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann void LoadCharWidths(FX_WORD* pWidths); 238e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 239ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann void CheckFontMetrics(); 240e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 241ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_CharMap* m_pCharMap; 242e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 243ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_ByteString m_BaseFont; 244e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 245ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_StreamAcc* m_pFontFile; 246e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 247ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Dictionary* m_pFontDict; 248e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 249ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_ToUnicodeMap* m_pToUnicodeMap; 250e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 251ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_BOOL m_bToUnicodeLoaded; 252e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 253ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int m_Flags; 254e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 255ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_RECT m_FontBBox; 256e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 257ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int m_StemV; 258e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 259ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int m_Ascent; 260e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 261ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int m_Descent; 262e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 263ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int m_ItalicAngle; 264e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 265ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann private: 266ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann const int m_FontType; 267e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}; 268ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define PDFFONT_ENCODING_BUILTIN 0 269ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define PDFFONT_ENCODING_WINANSI 1 270ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define PDFFONT_ENCODING_MACROMAN 2 271ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define PDFFONT_ENCODING_MACEXPERT 3 272ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define PDFFONT_ENCODING_STANDARD 4 273ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define PDFFONT_ENCODING_ADOBE_SYMBOL 5 274ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define PDFFONT_ENCODING_ZAPFDINGBATS 6 275ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define PDFFONT_ENCODING_PDFDOC 7 276ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define PDFFONT_ENCODING_MS_SYMBOL 8 277ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define PDFFONT_ENCODING_UNICODE 9 278ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannclass CPDF_FontEncoding { 279ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann public: 280ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_FontEncoding(); 281e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 282ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_FontEncoding(int PredefinedEncoding); 283e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 284ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann void LoadEncoding(CPDF_Object* pEncoding); 285e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 286ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_BOOL IsIdentical(CPDF_FontEncoding* pAnother) const; 287e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 288ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_WCHAR UnicodeFromCharCode(uint8_t charcode) const { 289ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return m_Unicodes[charcode]; 290ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 291e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 292ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int CharCodeFromUnicode(FX_WCHAR unicode) const; 293e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 294ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann void SetUnicode(uint8_t charcode, FX_WCHAR unicode) { 295ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_Unicodes[charcode] = unicode; 296ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 297e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 298ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Object* Realize(); 299e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 300ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann public: 301ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_WCHAR m_Unicodes[256]; 302e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}; 303e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 304ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannclass CPDF_SimpleFont : public CPDF_Font { 305ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann public: 306ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann explicit CPDF_SimpleFont(int fonttype); 307ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann ~CPDF_SimpleFont() override; 308e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 309ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_FontEncoding* GetEncoding() { return &m_Encoding; } 310ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int GetCharWidthF(FX_DWORD charcode, int level = 0) override; 311ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann void GetCharBBox(FX_DWORD charcode, FX_RECT& rect, int level = 0) override; 312ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int GlyphFromCharCode(FX_DWORD charcode, FX_BOOL* pVertGlyph = NULL) override; 313ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_BOOL IsUnicodeCompatible() const override; 314e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 315ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann protected: 316ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_BOOL LoadCommon(); 317e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 318ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann void LoadSubstFont(); 319e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 320ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann void LoadFaceMetrics(); 321e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 322ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann virtual void LoadGlyphMap() = 0; 323e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 324ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_WCHAR _UnicodeFromCharCode(FX_DWORD charcode) const override { 325ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return m_Encoding.UnicodeFromCharCode((uint8_t)charcode); 326ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 327e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 328ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_DWORD _CharCodeFromUnicode(FX_WCHAR Unicode) const override { 329ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return m_Encoding.CharCodeFromUnicode(Unicode); 330ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 331e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 332ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann void LoadCharMetrics(int charcode); 333e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 334ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_FontEncoding m_Encoding; 335ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_WORD m_GlyphIndex[256]; 336ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_WORD m_ExtGID[256]; 337ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_ByteString* m_pCharNames; 338ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int m_BaseEncoding; 339ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_WORD m_CharWidth[256]; 340ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_SMALL_RECT m_CharBBox[256]; 341ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_BOOL m_bUseFontWidth; 342ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}; 343e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 344ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannclass CPDF_Type1Font : public CPDF_SimpleFont { 345ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann public: 346ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Type1Font(); 347e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 348ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int GetBase14Font() { return m_Base14Font; } 349e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 350ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann protected: 351ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann // CPDF_SimpleFont: 352ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int GlyphFromCharCodeExt(FX_DWORD charcode) override; 353ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_BOOL _Load() override; 354ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann void LoadGlyphMap() override; 355e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 356ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int m_Base14Font; 357e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}; 358ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannclass CPDF_TrueTypeFont : public CPDF_SimpleFont { 359ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann public: 360ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_TrueTypeFont(); 361ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 362ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann protected: 363ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann // CPDF_SimpleFont: 364ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_BOOL _Load() override; 365ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann void LoadGlyphMap() override; 366e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}; 367e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 368ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannclass CPDF_Type3Char { 369ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann public: 370ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann // Takes ownership of |pForm|. 371ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann explicit CPDF_Type3Char(CPDF_Form* pForm); 372ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann ~CPDF_Type3Char(); 373e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 374ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_BOOL LoadBitmap(CPDF_RenderContext* pContext); 375e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 376ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Form* m_pForm; 377ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_DIBitmap* m_pBitmap; 378ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_BOOL m_bColored; 379ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int m_Width; 380ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_Matrix m_ImageMatrix; 381ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_RECT m_BBox; 382e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}; 383e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 384ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannclass CPDF_Type3Font : public CPDF_SimpleFont { 385ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann public: 386ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Type3Font(); 387ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann ~CPDF_Type3Font() override; 388ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 389ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann void SetPageResources(CPDF_Dictionary* pResources) { 390ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pPageResources = pResources; 391ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 392ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Type3Char* LoadChar(FX_DWORD charcode, int level = 0); 393ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int GetCharWidthF(FX_DWORD charcode, int level = 0) override; 394ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int GetCharTypeWidth(FX_DWORD charcode) override { 395ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return GetCharWidthF(charcode); 396ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 397ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann void GetCharBBox(FX_DWORD charcode, FX_RECT& rect, int level = 0) override; 398ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_Matrix& GetFontMatrix() { return m_FontMatrix; } 399ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann void CheckType3FontMetrics(); 400ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 401ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann protected: 402ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_Matrix m_FontMatrix; 403ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 404ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann private: 405ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_BOOL _Load() override; 406ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann void LoadGlyphMap() override {} 407ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 408ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int m_CharWidthL[256]; 409ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Dictionary* m_pCharProcs; 410ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Dictionary* m_pPageResources; 411ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Dictionary* m_pFontResources; 412ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann std::map<FX_DWORD, CPDF_Type3Char*> m_CacheMap; 413ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}; 414e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 415ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannenum CIDSet { 416ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CIDSET_UNKNOWN, 417ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CIDSET_GB1, 418ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CIDSET_CNS1, 419ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CIDSET_JAPAN1, 420ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CIDSET_KOREA1, 421ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CIDSET_UNICODE, 422ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CIDSET_NUM_SETS 423ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}; 424e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 425ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannclass CPDF_CIDFont : public CPDF_Font { 426ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann public: 427ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_CIDFont(); 428ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 429ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann ~CPDF_CIDFont() override; 430ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 431ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann static FX_FLOAT CIDTransformToFloat(uint8_t ch); 432ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 433ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann // CPDF_Font: 434ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int GlyphFromCharCode(FX_DWORD charcode, FX_BOOL* pVertGlyph = NULL) override; 435ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int GetCharWidthF(FX_DWORD charcode, int level = 0) override; 436ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann void GetCharBBox(FX_DWORD charcode, FX_RECT& rect, int level = 0) override; 437ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_DWORD GetNextChar(const FX_CHAR* pString, 438ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int nStrLen, 439ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int& offset) const override; 440ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int CountChar(const FX_CHAR* pString, int size) const override; 441ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int AppendChar(FX_CHAR* str, FX_DWORD charcode) const override; 442ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int GetCharSize(FX_DWORD charcode) const override; 443ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_BOOL IsVertWriting() const override; 444ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_BOOL IsUnicodeCompatible() const override; 445ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_BOOL _Load() override; 446ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_WCHAR _UnicodeFromCharCode(FX_DWORD charcode) const override; 447ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_DWORD _CharCodeFromUnicode(FX_WCHAR Unicode) const override; 448ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 449ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_BOOL LoadGB2312(); 450ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_WORD CIDFromCharCode(FX_DWORD charcode) const; 451ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_BOOL IsTrueType() const { return !m_bType1; } 452ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann const uint8_t* GetCIDTransform(FX_WORD CID) const; 453ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann short GetVertWidth(FX_WORD CID) const; 454ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann void GetVertOrigin(FX_WORD CID, short& vx, short& vy) const; 455ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann virtual FX_BOOL IsFontStyleFromCharCode(FX_DWORD charcode) const; 456ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 457ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann protected: 458ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann friend class CPDF_Font; 459ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 460ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int GetGlyphIndex(FX_DWORD unicodeb, FX_BOOL* pVertGlyph); 461ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann void LoadMetricsArray(CPDF_Array* pArray, 462ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_DWordArray& result, 463ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int nElements); 464ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann void LoadSubstFont(); 465ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 466ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_CMap* m_pCMap; 467ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_CMap* m_pAllocatedCMap; 468ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_CID2UnicodeMap* m_pCID2UnicodeMap; 469ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CIDSet m_Charset; 470ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_BOOL m_bType1; 471ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_StreamAcc* m_pCIDToGIDMap; 472ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_BOOL m_bCIDIsGID; 473ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_WORD m_DefaultWidth; 474ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_WORD* m_pAnsiWidths; 475ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_SMALL_RECT m_CharBBox[256]; 476ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_DWordArray m_WidthList; 477ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann short m_DefaultVY; 478ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann short m_DefaultW1; 479ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_DWordArray m_VertMetrics; 480ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_BOOL m_bAdobeCourierStd; 481ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_CTTGSUBTable* m_pTTGSUBTable; 482ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}; 483e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 484ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define PDFCS_DEVICEGRAY 1 485ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define PDFCS_DEVICERGB 2 486ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define PDFCS_DEVICECMYK 3 487ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define PDFCS_CALGRAY 4 488ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define PDFCS_CALRGB 5 489ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define PDFCS_LAB 6 490ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define PDFCS_ICCBASED 7 491ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define PDFCS_SEPARATION 8 492ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define PDFCS_DEVICEN 9 493ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define PDFCS_INDEXED 10 494ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define PDFCS_PATTERN 11 495ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 496ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannclass CPDF_ColorSpace { 497ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann public: 498ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann static CPDF_ColorSpace* GetStockCS(int Family); 499ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 500ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann static CPDF_ColorSpace* Load(CPDF_Document* pDoc, CPDF_Object* pCSObj); 501ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 502ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann void ReleaseCS(); 503ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 504ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int GetBufSize() const; 505ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 506ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_FLOAT* CreateBuf(); 507ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 508ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann void GetDefaultColor(FX_FLOAT* buf) const; 509ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 510ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int CountComponents() const { return m_nComponents; } 511ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 512ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int GetFamily() const { return m_Family; } 513ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 514ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann virtual void GetDefaultValue(int iComponent, 515ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_FLOAT& value, 516ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_FLOAT& min, 517ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_FLOAT& max) const { 518ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann value = 0; 519ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann min = 0; 520ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann max = 1.0f; 521ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 522ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 523ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_BOOL sRGB() const; 524ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 525ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann virtual FX_BOOL GetRGB(FX_FLOAT* pBuf, 526ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_FLOAT& R, 527ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_FLOAT& G, 528ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_FLOAT& B) const = 0; 529ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 530ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann virtual FX_BOOL SetRGB(FX_FLOAT* pBuf, 531ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_FLOAT R, 532ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_FLOAT G, 533ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_FLOAT B) const { 534ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return FALSE; 535ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 536ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 537ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_BOOL GetCMYK(FX_FLOAT* pBuf, 538ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_FLOAT& c, 539ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_FLOAT& m, 540ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_FLOAT& y, 541ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_FLOAT& k) const; 542ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 543ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_BOOL SetCMYK(FX_FLOAT* pBuf, 544ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_FLOAT c, 545ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_FLOAT m, 546ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_FLOAT y, 547ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_FLOAT k) const; 548ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 549ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann virtual void TranslateImageLine(uint8_t* dest_buf, 550ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann const uint8_t* src_buf, 551ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int pixels, 552ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int image_width, 553ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int image_height, 554ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_BOOL bTransMask = FALSE) const; 555ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 556ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Array*& GetArray() { return m_pArray; } 557ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 558ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int GetMaxIndex() const; 559ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 560ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann virtual CPDF_ColorSpace* GetBaseCS() const { return NULL; } 561ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 562ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann virtual void EnableStdConversion(FX_BOOL bEnabled); 563ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 564ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Document* const m_pDocument; 565ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 566ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann protected: 567ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_ColorSpace(CPDF_Document* pDoc, int family, int nComponents) 568ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann : m_pDocument(pDoc), 569ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_Family(family), 570ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_nComponents(nComponents), 571ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pArray(nullptr), 572ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_dwStdConversion(0) {} 573ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann virtual ~CPDF_ColorSpace() {} 574ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann virtual FX_BOOL v_Load(CPDF_Document* pDoc, CPDF_Array* pArray) { 575ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return TRUE; 576ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 577ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann virtual FX_BOOL v_GetCMYK(FX_FLOAT* pBuf, 578ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_FLOAT& c, 579ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_FLOAT& m, 580ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_FLOAT& y, 581ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_FLOAT& k) const { 582ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return FALSE; 583ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 584ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann virtual FX_BOOL v_SetCMYK(FX_FLOAT* pBuf, 585ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_FLOAT c, 586ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_FLOAT m, 587ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_FLOAT y, 588ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_FLOAT k) const { 589ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return FALSE; 590ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 591ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 592ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int m_Family; 593ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 594ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int m_nComponents; 595ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 596ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Array* m_pArray; 597ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 598ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_DWORD m_dwStdConversion; 599e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}; 600ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannclass CPDF_Color { 601ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann public: 602ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Color() : m_pCS(NULL), m_pBuffer(NULL) {} 603e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 604ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Color(int family); 605e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 606ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann ~CPDF_Color(); 607e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 608ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_BOOL IsNull() const { return !m_pBuffer; } 609e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 610ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_BOOL IsEqual(const CPDF_Color& other) const; 611e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 612ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_BOOL IsPattern() const { 613ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return m_pCS && m_pCS->GetFamily() == PDFCS_PATTERN; 614ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 615e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 616ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann void Copy(const CPDF_Color* pSrc); 617e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 618ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann void SetColorSpace(CPDF_ColorSpace* pCS); 619e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 620ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann void SetValue(FX_FLOAT* comp); 621e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 622ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann void SetValue(CPDF_Pattern* pPattern, FX_FLOAT* comp, int ncomps); 623e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 624ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_BOOL GetRGB(int& R, int& G, int& B) const; 625e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 626ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Pattern* GetPattern() const; 627e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 628ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_ColorSpace* GetPatternCS() const; 629e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 630ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_FLOAT* GetPatternColor() const; 631e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 632ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_ColorSpace* m_pCS; 633e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 634ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann protected: 635ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann void ReleaseBuffer(); 636ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann void ReleaseColorSpace(); 637ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_FLOAT* m_pBuffer; 638e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}; 639e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 640ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannclass CPDF_Pattern { 641ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann public: 642ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann enum PatternType { TILING = 1, SHADING }; 643e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 644ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann virtual ~CPDF_Pattern(); 645e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 646ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann void SetForceClear(FX_BOOL bForceClear) { m_bForceClear = bForceClear; } 647e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 648ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann const PatternType m_PatternType; 649ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Document* const m_pDocument; 650ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Object* const m_pPatternObj; 651ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_Matrix m_Pattern2Form; 652ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_Matrix m_ParentMatrix; 653e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 654ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann protected: 655ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Pattern(PatternType type, 656ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Document* pDoc, 657ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Object* pObj, 658ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann const CFX_Matrix* pParentMatrix); 659e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 660ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_BOOL m_bForceClear; 661e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}; 662e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 663ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannclass CPDF_TilingPattern : public CPDF_Pattern { 664ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann public: 665ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_TilingPattern(CPDF_Document* pDoc, 666ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Object* pPatternObj, 667ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann const CFX_Matrix* parentMatrix); 668e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 669ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann ~CPDF_TilingPattern() override; 670e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 671ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_BOOL Load(); 672e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 673ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_BOOL m_bColored; 674e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 675ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_FloatRect m_BBox; 676e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 677ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_FLOAT m_XStep; 678e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 679ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_FLOAT m_YStep; 680e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 681ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Form* m_pForm; 682ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}; 683e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 684ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmanntypedef enum { 685ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann kInvalidShading = 0, 686ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann kFunctionBasedShading = 1, 687ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann kAxialShading = 2, 688ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann kRadialShading = 3, 689ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann kFreeFormGouraudTriangleMeshShading = 4, 690ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann kLatticeFormGouraudTriangleMeshShading = 5, 691ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann kCoonsPatchMeshShading = 6, 692ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann kTensorProductPatchMeshShading = 7, 693ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann kMaxShading = 8 694ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} ShadingType; 695ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 696ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannclass CPDF_ShadingPattern : public CPDF_Pattern { 697ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann public: 698ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_ShadingPattern(CPDF_Document* pDoc, 699ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Object* pPatternObj, 700ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_BOOL bShading, 701ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann const CFX_Matrix* parentMatrix); 702ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 703ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann ~CPDF_ShadingPattern() override; 704ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 705ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann bool IsMeshShading() const { 706ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return m_ShadingType == kFreeFormGouraudTriangleMeshShading || 707ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_ShadingType == kLatticeFormGouraudTriangleMeshShading || 708ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_ShadingType == kCoonsPatchMeshShading || 709ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_ShadingType == kTensorProductPatchMeshShading; 710ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 711ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_BOOL Load(); 712ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 713ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann ShadingType m_ShadingType; 714ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_BOOL m_bShadingObj; 715ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Object* m_pShadingObj; 716ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 717ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann // Still keep |m_pCS| as some CPDF_ColorSpace (name object) are not managed 718ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann // as counted objects. Refer to CPDF_DocPageData::GetColorSpace. 719ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_ColorSpace* m_pCS; 720ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 721ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_CountedColorSpace* m_pCountedCS; 722ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Function* m_pFunctions[4]; 723ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int m_nFuncs; 724e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}; 725ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 726e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovstruct CPDF_MeshVertex { 727ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_FLOAT x, y; 728ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_FLOAT r, g, b; 729e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}; 730ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannclass CPDF_MeshStream { 731ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann public: 732ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_BOOL Load(CPDF_Stream* pShadingStream, 733ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Function** pFuncs, 734ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int nFuncs, 735ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_ColorSpace* pCS); 736ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 737ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_DWORD GetFlag(); 738ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 739ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann void GetCoords(FX_FLOAT& x, FX_FLOAT& y); 740ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 741ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann void GetColor(FX_FLOAT& r, FX_FLOAT& g, FX_FLOAT& b); 742ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 743ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_DWORD GetVertex(CPDF_MeshVertex& vertex, CFX_Matrix* pObject2Bitmap); 744ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 745ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_BOOL GetVertexRow(CPDF_MeshVertex* vertex, 746ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int count, 747ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_Matrix* pObject2Bitmap); 748ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Function** m_pFuncs; 749ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_ColorSpace* m_pCS; 750ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_DWORD m_nFuncs, m_nCoordBits, m_nCompBits, m_nFlagBits, m_nComps; 751ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_DWORD m_CoordMax, m_CompMax; 752ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_FLOAT m_xmin, m_xmax, m_ymin, m_ymax; 753ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_FLOAT m_ColorMin[8], m_ColorMax[8]; 754ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_StreamAcc m_Stream; 755ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_BitStream m_BitStream; 756e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}; 757ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define PDF_IMAGE_NO_COMPRESS 0x0000 758ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define PDF_IMAGE_LOSSY_COMPRESS 0x0001 759ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define PDF_IMAGE_LOSSLESS_COMPRESS 0x0002 760ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define PDF_IMAGE_MASK_LOSSY_COMPRESS 0x0004 761ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define PDF_IMAGE_MASK_LOSSLESS_COMPRESS 0x0008 762ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannclass CPDF_ImageSetParam { 763ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann public: 764ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_ImageSetParam() : pMatteColor(NULL), nQuality(80) {} 765ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_ARGB* pMatteColor; 766ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int32_t nQuality; 767e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}; 768ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannclass CPDF_Image { 769ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann public: 770ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Image(CPDF_Document* pDoc); 771e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 772ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann ~CPDF_Image(); 773e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 774ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_BOOL LoadImageF(CPDF_Stream* pImageStream, FX_BOOL bInline); 775e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 776ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann void Release(); 777e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 778ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Image* Clone(); 779e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 780ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_BOOL IsInline() { return m_bInline; } 781e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 782ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann void SetInlineDict(CPDF_Dictionary* pDict) { m_pInlineDict = pDict; } 783e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 784ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Dictionary* GetInlineDict() const { return m_pInlineDict; } 785e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 786ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Stream* GetStream() const { return m_pStream; } 787e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 788ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Dictionary* GetDict() const { 789ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return m_pStream ? m_pStream->GetDict() : NULL; 790ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 791e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 792ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Dictionary* GetOC() const { return m_pOC; } 793e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 794ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Document* GetDocument() const { return m_pDocument; } 795e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 796ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int32_t GetPixelHeight() const { return m_Height; } 797e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 798ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int32_t GetPixelWidth() const { return m_Width; } 799e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 800ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_BOOL IsMask() const { return m_bIsMask; } 801e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 802ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_BOOL IsInterpol() const { return m_bInterpolate; } 803e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 804ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_DIBSource* LoadDIBSource(CFX_DIBSource** ppMask = NULL, 805ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_DWORD* pMatteColor = NULL, 806ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_BOOL bStdCS = FALSE, 807ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_DWORD GroupFamily = 0, 808ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_BOOL bLoadMask = FALSE) const; 809e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 810ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann void SetImage(const CFX_DIBitmap* pDIBitmap, 811ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int32_t iCompress, 812ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann IFX_FileWrite* pFileWrite = NULL, 813ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann IFX_FileRead* pFileRead = NULL, 814ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann const CFX_DIBitmap* pMask = NULL, 815ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann const CPDF_ImageSetParam* pParam = NULL); 816e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 817ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann void SetJpegImage(uint8_t* pImageData, FX_DWORD size); 818e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 819ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann void SetJpegImage(IFX_FileRead* pFile); 820e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 821ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann void ResetCache(CPDF_Page* pPage, const CFX_DIBitmap* pDIBitmap); 822e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 823ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann public: 824ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_BOOL StartLoadDIBSource(CPDF_Dictionary* pFormResource, 825ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Dictionary* pPageResource, 826ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_BOOL bStdCS = FALSE, 827ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_DWORD GroupFamily = 0, 828ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_BOOL bLoadMask = FALSE); 829ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_BOOL Continue(IFX_Pause* pPause); 830ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_DIBSource* DetachBitmap(); 831ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_DIBSource* DetachMask(); 832ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_DIBSource* m_pDIBSource; 833ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_DIBSource* m_pMask; 834ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_DWORD m_MatteColor; 835e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 836ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann private: 837ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Stream* m_pStream; 838ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_BOOL m_bInline; 839ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Dictionary* m_pInlineDict; 840e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 841ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int32_t m_Height; 842e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 843ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int32_t m_Width; 844e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 845ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_BOOL m_bIsMask; 846e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 847ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_BOOL m_bInterpolate; 848e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 849ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Document* m_pDocument; 850e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 851ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Dictionary* m_pOC; 852ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Dictionary* InitJPEG(uint8_t* pData, FX_DWORD size); 853e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}; 854e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 855e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#endif // CORE_INCLUDE_FPDFAPI_FPDF_RESOURCE_H_ 856