OLD | NEW |
| (Empty) |
1 // Copyright 2014 PDFium Authors. All rights reserved. | |
2 // Use of this source code is governed by a BSD-style license that can be | |
3 // found in the LICENSE file. | |
4 | |
5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com | |
6 | |
7 #ifndef CORE_SRC_FXGE_APPLE_APPLE_INT_H_ | |
8 #define CORE_SRC_FXGE_APPLE_APPLE_INT_H_ | |
9 | |
10 #if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_ | |
11 | |
12 #include "core/include/fxge/fx_ge.h" | |
13 | |
14 #if _FX_OS_ == _FX_MACOSX_ | |
15 #include <Carbon/Carbon.h> | |
16 #endif | |
17 | |
18 typedef enum eFXIOSFONTCHARSET { | |
19 eFXFontCharsetDEFAULT = 0, | |
20 eFXFontCharsetANSI = 1, | |
21 eFXFontCharsetSYMBOL = 1 << 1, | |
22 eFXFontCharsetSHIFTJIS = 1 << 2, | |
23 eFXFontCharsetHANGEUL = 1 << 3, | |
24 eFXFontCharsetGB2312 = 1 << 4, | |
25 eFXFontCharsetCHINESEBIG5 = 1 << 5, | |
26 eFXFontCharsetTHAI = 1 << 6, | |
27 eFXFontCharsetEASTEUROPE = 1 << 7, | |
28 eFXFontCharsetRUSSIAN = 1 << 8, | |
29 eFXFontCharsetGREEK = 1 << 9, | |
30 eFXFontCharsetTURKISH = 1 << 10, | |
31 eFXFontCharsetHEBREW = 1 << 11, | |
32 eFXFontCharsetARABIC = 1 << 12, | |
33 eFXFontCharsetBALTIC = 1 << 13, | |
34 } FX_IOSCHARSET; | |
35 FX_IOSCHARSET FX_GetiOSCharset(int charset); | |
36 typedef enum eFXIOSFONTFLAG { | |
37 eFXFontFlagBold = 1, | |
38 eFXFontFlagItalic = 1 << 1, | |
39 eFXFontFlagFixedPitch = 1 << 2, | |
40 eFXFontFlagSerif = 1 << 3, | |
41 eFXFontFlagScript = 1 << 4, | |
42 } FX_IOSFONTFLAG; | |
43 typedef struct IOS_FONTDATA_ { | |
44 FX_DWORD nHashCode; | |
45 const char* psName; | |
46 FX_DWORD charsets; | |
47 FX_DWORD styles; | |
48 } IOS_FONTDATA; | |
49 class CQuartz2D { | |
50 public: | |
51 void* createGraphics(CFX_DIBitmap* bitmap); | |
52 void destroyGraphics(void* graphics); | |
53 | |
54 void* CreateFont(const uint8_t* pFontData, FX_DWORD dwFontSize); | |
55 void DestroyFont(void* pFont); | |
56 void setGraphicsTextMatrix(void* graphics, CFX_Matrix* matrix); | |
57 FX_BOOL drawGraphicsString(void* graphics, | |
58 void* font, | |
59 FX_FLOAT fontSize, | |
60 FX_WORD* glyphIndices, | |
61 CGPoint* glyphPositions, | |
62 int32_t chars, | |
63 FX_ARGB argb, | |
64 CFX_Matrix* matrix = NULL); | |
65 void saveGraphicsState(void* graphics); | |
66 void restoreGraphicsState(void* graphics); | |
67 }; | |
68 class CApplePlatform { | |
69 public: | |
70 CApplePlatform() {} | |
71 ~CApplePlatform() {} | |
72 | |
73 CQuartz2D _quartz2d; | |
74 }; | |
75 | |
76 class CFX_QuartzDeviceDriver : public IFX_RenderDeviceDriver { | |
77 public: | |
78 CFX_QuartzDeviceDriver(CGContextRef context, int32_t deviceClass); | |
79 ~CFX_QuartzDeviceDriver() override; | |
80 | |
81 // IFX_RenderDeviceDriver | |
82 int GetDeviceCaps(int caps_id) override; | |
83 CFX_Matrix GetCTM() const override; | |
84 FX_BOOL IsPSPrintDriver() override { return FALSE; } | |
85 FX_BOOL StartRendering() override { return TRUE; } | |
86 void EndRendering() override {} | |
87 void SaveState() override; | |
88 void RestoreState(FX_BOOL bKeepSaved) override; | |
89 FX_BOOL SetClip_PathFill(const CFX_PathData* pPathData, | |
90 const CFX_Matrix* pObject2Device, | |
91 int fill_mode) override; | |
92 FX_BOOL SetClip_PathStroke(const CFX_PathData* pPathData, | |
93 const CFX_Matrix* pObject2Device, | |
94 const CFX_GraphStateData* pGraphState) override; | |
95 FX_BOOL DrawPath(const CFX_PathData* pPathData, | |
96 const CFX_Matrix* pObject2Device, | |
97 const CFX_GraphStateData* pGraphState, | |
98 FX_DWORD fill_color, | |
99 FX_DWORD stroke_color, | |
100 int fill_mode, | |
101 int alpha_flag = 0, | |
102 void* pIccTransform = NULL, | |
103 int blend_type = FXDIB_BLEND_NORMAL) override; | |
104 FX_BOOL SetPixel(int x, | |
105 int y, | |
106 FX_DWORD color, | |
107 int alpha_flag = 0, | |
108 void* pIccTransform = NULL) override { | |
109 return FALSE; | |
110 } | |
111 FX_BOOL FillRect(const FX_RECT* pRect, | |
112 FX_DWORD fill_color, | |
113 int alpha_flag = 0, | |
114 void* pIccTransform = NULL, | |
115 int blend_type = FXDIB_BLEND_NORMAL) override; | |
116 FX_BOOL DrawCosmeticLine(FX_FLOAT x1, | |
117 FX_FLOAT y1, | |
118 FX_FLOAT x2, | |
119 FX_FLOAT y2, | |
120 FX_DWORD color, | |
121 int alpha_flag = 0, | |
122 void* pIccTransform = NULL, | |
123 int blend_type = FXDIB_BLEND_NORMAL) override; | |
124 FX_BOOL GetClipBox(FX_RECT* pRect) override; | |
125 FX_BOOL GetDIBits(CFX_DIBitmap* pBitmap, | |
126 int left, | |
127 int top, | |
128 void* pIccTransform = NULL, | |
129 FX_BOOL bDEdge = FALSE) override; | |
130 CFX_DIBitmap* GetBackDrop() override { return NULL; } | |
131 FX_BOOL SetDIBits(const CFX_DIBSource* pBitmap, | |
132 FX_DWORD color, | |
133 const FX_RECT* pSrcRect, | |
134 int dest_left, | |
135 int dest_top, | |
136 int blend_type, | |
137 int alpha_flag = 0, | |
138 void* pIccTransform = NULL) override; | |
139 FX_BOOL StretchDIBits(const CFX_DIBSource* pBitmap, | |
140 FX_DWORD color, | |
141 int dest_left, | |
142 int dest_top, | |
143 int dest_width, | |
144 int dest_height, | |
145 const FX_RECT* pClipRect, | |
146 FX_DWORD flags, | |
147 int alpha_flag = 0, | |
148 void* pIccTransform = NULL, | |
149 int blend_type = FXDIB_BLEND_NORMAL) override; | |
150 FX_BOOL StartDIBits(const CFX_DIBSource* pBitmap, | |
151 int bitmap_alpha, | |
152 FX_DWORD color, | |
153 const CFX_Matrix* pMatrix, | |
154 FX_DWORD flags, | |
155 void*& handle, | |
156 int alpha_flag = 0, | |
157 void* pIccTransform = NULL, | |
158 int blend_type = FXDIB_BLEND_NORMAL) override { | |
159 return FALSE; | |
160 } | |
161 FX_BOOL ContinueDIBits(void* handle, IFX_Pause* pPause) override { | |
162 return FALSE; | |
163 } | |
164 void CancelDIBits(void* handle) override {} | |
165 FX_BOOL DrawDeviceText(int nChars, | |
166 const FXTEXT_CHARPOS* pCharPos, | |
167 CFX_Font* pFont, | |
168 CFX_FontCache* pCache, | |
169 const CFX_Matrix* pObject2Device, | |
170 FX_FLOAT font_size, | |
171 FX_DWORD color, | |
172 int alpha_flag = 0, | |
173 void* pIccTransform = NULL) override; | |
174 void* GetPlatformSurface() override { return NULL; } | |
175 void ClearDriver() override; | |
176 | |
177 protected: | |
178 void setStrokeInfo(const CFX_GraphStateData* graphState, | |
179 FX_ARGB argb, | |
180 FX_FLOAT lineWidth); | |
181 void setFillInfo(FX_ARGB argb); | |
182 void setPathToContext(const CFX_PathData* pathData); | |
183 FX_FLOAT getLineWidth(const CFX_GraphStateData* graphState, | |
184 CGAffineTransform ctm); | |
185 FX_BOOL CG_DrawGlypRun(int nChars, | |
186 const FXTEXT_CHARPOS* pCharPos, | |
187 CFX_Font* pFont, | |
188 CFX_FontCache* pCache, | |
189 const CFX_Matrix* pGlyphMatrix, | |
190 const CFX_Matrix* pObject2Device, | |
191 FX_FLOAT font_size, | |
192 FX_DWORD argb, | |
193 int alpha_flag, | |
194 void* pIccTransform); | |
195 void CG_SetImageTransform(int dest_left, | |
196 int dest_top, | |
197 int dest_width, | |
198 int dest_height, | |
199 CGRect* rect = NULL); | |
200 | |
201 protected: | |
202 CGContextRef _context; | |
203 CGAffineTransform _foxitDevice2User; | |
204 CGAffineTransform _user2FoxitDevice; | |
205 int32_t m_saveCount; | |
206 | |
207 int32_t _width; | |
208 int32_t _height; | |
209 int32_t _bitsPerPixel; | |
210 int32_t _deviceClass; | |
211 int32_t _renderCaps; | |
212 int32_t _horzSize; | |
213 int32_t _vertSize; | |
214 }; | |
215 | |
216 class CFX_FontProvider final : public IFX_FileRead { | |
217 public: | |
218 // IFX_FileRead | |
219 void Release() override { delete this; } | |
220 FX_FILESIZE GetSize() override { return (FX_FILESIZE)_totalSize; } | |
221 FX_BOOL IsEOF() override { return _offSet == _totalSize; } | |
222 FX_FILESIZE GetPosition() override { return (FX_FILESIZE)_offSet; } | |
223 FX_BOOL ReadBlock(void* buffer, FX_FILESIZE offset, size_t size) override; | |
224 size_t ReadBlock(void* buffer, size_t size) override; | |
225 | |
226 public: | |
227 CFX_FontProvider(CGFontRef cgFont); | |
228 ~CFX_FontProvider() override; | |
229 void InitTableOffset(); | |
230 unsigned long Read(unsigned long offset, | |
231 unsigned char* buffer, | |
232 unsigned long count); | |
233 | |
234 protected: | |
235 uint32_t CalcTableCheckSum(const uint32_t* table, | |
236 uint32_t numberOfBytesInTable); | |
237 uint32_t CalcTableDataRefCheckSum(CFDataRef dataRef); | |
238 | |
239 private: | |
240 CGFontRef m_cgFont; | |
241 UInt32 m_iTableSize; | |
242 size_t _offSet; | |
243 typedef struct FontHeader { | |
244 int32_t fVersion; | |
245 uint16_t fNumTables; | |
246 uint16_t fSearchRange; | |
247 uint16_t fEntrySelector; | |
248 uint16_t fRangeShift; | |
249 } FontHeader; | |
250 typedef struct TableEntry { | |
251 uint32_t fTag; | |
252 uint32_t fCheckSum; | |
253 uint32_t fOffset; | |
254 uint32_t fLength; | |
255 } TableEntry; | |
256 FontHeader _fontHeader; | |
257 unsigned char* _tableEntries; | |
258 size_t* _tableOffsets; | |
259 int _tableCount; | |
260 int _totalSize; | |
261 }; | |
262 | |
263 uint32_t FX_GetHashCode(const FX_CHAR* pStr); | |
264 FX_DWORD FX_IOSGetMatchFamilyNameHashcode(const FX_CHAR* pFontName); | |
265 uint32_t FX_IOSGetFamilyNamesCount(); | |
266 const FX_CHAR* FX_IOSGetFamilyName(uint32_t uIndex); | |
267 #endif | |
268 | |
269 #endif // CORE_SRC_FXGE_APPLE_APPLE_INT_H_ | |
OLD | NEW |