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