diff options
Diffstat (limited to 'core/fxge/apple/apple_int.h')
-rw-r--r-- | core/fxge/apple/apple_int.h | 271 |
1 files changed, 271 insertions, 0 deletions
diff --git a/core/fxge/apple/apple_int.h b/core/fxge/apple/apple_int.h new file mode 100644 index 0000000000..6fc665e8c3 --- /dev/null +++ b/core/fxge/apple/apple_int.h @@ -0,0 +1,271 @@ +// Copyright 2014 PDFium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com + +#ifndef CORE_FXGE_APPLE_APPLE_INT_H_ +#define CORE_FXGE_APPLE_APPLE_INT_H_ + +#include "core/include/fxcrt/fx_system.h" + +#if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_ + +#include "core/include/fxge/fx_ge.h" + +#if _FX_OS_ == _FX_MACOSX_ +#include <Carbon/Carbon.h> +#endif + +typedef enum eFXIOSFONTCHARSET { + eFXFontCharsetDEFAULT = 0, + eFXFontCharsetANSI = 1, + eFXFontCharsetSYMBOL = 1 << 1, + eFXFontCharsetSHIFTJIS = 1 << 2, + eFXFontCharsetHANGEUL = 1 << 3, + eFXFontCharsetGB2312 = 1 << 4, + eFXFontCharsetCHINESEBIG5 = 1 << 5, + eFXFontCharsetTHAI = 1 << 6, + eFXFontCharsetEASTEUROPE = 1 << 7, + eFXFontCharsetRUSSIAN = 1 << 8, + eFXFontCharsetGREEK = 1 << 9, + eFXFontCharsetTURKISH = 1 << 10, + eFXFontCharsetHEBREW = 1 << 11, + eFXFontCharsetARABIC = 1 << 12, + eFXFontCharsetBALTIC = 1 << 13, +} FX_IOSCHARSET; +FX_IOSCHARSET FX_GetiOSCharset(int charset); +typedef enum eFXIOSFONTFLAG { + eFXFontFlagBold = 1, + eFXFontFlagItalic = 1 << 1, + eFXFontFlagFixedPitch = 1 << 2, + eFXFontFlagSerif = 1 << 3, + eFXFontFlagScript = 1 << 4, +} FX_IOSFONTFLAG; +typedef struct IOS_FONTDATA_ { + FX_DWORD nHashCode; + const char* psName; + FX_DWORD charsets; + FX_DWORD styles; +} IOS_FONTDATA; +class CQuartz2D { + public: + void* createGraphics(CFX_DIBitmap* bitmap); + void destroyGraphics(void* graphics); + + void* CreateFont(const uint8_t* pFontData, FX_DWORD dwFontSize); + void DestroyFont(void* pFont); + void setGraphicsTextMatrix(void* graphics, CFX_Matrix* matrix); + FX_BOOL drawGraphicsString(void* graphics, + void* font, + FX_FLOAT fontSize, + FX_WORD* glyphIndices, + CGPoint* glyphPositions, + int32_t chars, + FX_ARGB argb, + CFX_Matrix* matrix = NULL); + void saveGraphicsState(void* graphics); + void restoreGraphicsState(void* graphics); +}; +class CApplePlatform { + public: + CApplePlatform() {} + ~CApplePlatform() {} + + CQuartz2D _quartz2d; +}; + +class CFX_QuartzDeviceDriver : public IFX_RenderDeviceDriver { + public: + CFX_QuartzDeviceDriver(CGContextRef context, int32_t deviceClass); + ~CFX_QuartzDeviceDriver() override; + + // IFX_RenderDeviceDriver + int GetDeviceCaps(int caps_id) override; + CFX_Matrix GetCTM() const override; + FX_BOOL IsPSPrintDriver() override { return FALSE; } + FX_BOOL StartRendering() override { return TRUE; } + void EndRendering() override {} + void SaveState() override; + void RestoreState(FX_BOOL bKeepSaved) override; + FX_BOOL SetClip_PathFill(const CFX_PathData* pPathData, + const CFX_Matrix* pObject2Device, + int fill_mode) override; + FX_BOOL SetClip_PathStroke(const CFX_PathData* pPathData, + const CFX_Matrix* pObject2Device, + const CFX_GraphStateData* pGraphState) override; + FX_BOOL DrawPath(const CFX_PathData* pPathData, + const CFX_Matrix* pObject2Device, + const CFX_GraphStateData* pGraphState, + FX_DWORD fill_color, + FX_DWORD stroke_color, + int fill_mode, + int alpha_flag = 0, + void* pIccTransform = NULL, + int blend_type = FXDIB_BLEND_NORMAL) override; + FX_BOOL SetPixel(int x, + int y, + FX_DWORD color, + int alpha_flag = 0, + void* pIccTransform = NULL) override { + return FALSE; + } + FX_BOOL FillRect(const FX_RECT* pRect, + FX_DWORD fill_color, + int alpha_flag = 0, + void* pIccTransform = NULL, + int blend_type = FXDIB_BLEND_NORMAL) override; + FX_BOOL DrawCosmeticLine(FX_FLOAT x1, + FX_FLOAT y1, + FX_FLOAT x2, + FX_FLOAT y2, + FX_DWORD color, + int alpha_flag = 0, + void* pIccTransform = NULL, + int blend_type = FXDIB_BLEND_NORMAL) override; + FX_BOOL GetClipBox(FX_RECT* pRect) override; + FX_BOOL GetDIBits(CFX_DIBitmap* pBitmap, + int left, + int top, + void* pIccTransform = NULL, + FX_BOOL bDEdge = FALSE) override; + CFX_DIBitmap* GetBackDrop() override { return NULL; } + FX_BOOL SetDIBits(const CFX_DIBSource* pBitmap, + FX_DWORD color, + const FX_RECT* pSrcRect, + int dest_left, + int dest_top, + int blend_type, + int alpha_flag = 0, + void* pIccTransform = NULL) override; + FX_BOOL StretchDIBits(const CFX_DIBSource* pBitmap, + FX_DWORD color, + int dest_left, + int dest_top, + int dest_width, + int dest_height, + const FX_RECT* pClipRect, + FX_DWORD flags, + int alpha_flag = 0, + void* pIccTransform = NULL, + int blend_type = FXDIB_BLEND_NORMAL) override; + FX_BOOL StartDIBits(const CFX_DIBSource* pBitmap, + int bitmap_alpha, + FX_DWORD color, + const CFX_Matrix* pMatrix, + FX_DWORD flags, + void*& handle, + int alpha_flag = 0, + void* pIccTransform = NULL, + int blend_type = FXDIB_BLEND_NORMAL) override { + return FALSE; + } + FX_BOOL ContinueDIBits(void* handle, IFX_Pause* pPause) override { + return FALSE; + } + void CancelDIBits(void* handle) override {} + FX_BOOL DrawDeviceText(int nChars, + const FXTEXT_CHARPOS* pCharPos, + CFX_Font* pFont, + CFX_FontCache* pCache, + const CFX_Matrix* pObject2Device, + FX_FLOAT font_size, + FX_DWORD color, + int alpha_flag = 0, + void* pIccTransform = NULL) override; + void* GetPlatformSurface() override { return NULL; } + void ClearDriver() override; + + protected: + void setStrokeInfo(const CFX_GraphStateData* graphState, + FX_ARGB argb, + FX_FLOAT lineWidth); + void setFillInfo(FX_ARGB argb); + void setPathToContext(const CFX_PathData* pathData); + FX_FLOAT getLineWidth(const CFX_GraphStateData* graphState, + CGAffineTransform ctm); + FX_BOOL CG_DrawGlypRun(int nChars, + const FXTEXT_CHARPOS* pCharPos, + CFX_Font* pFont, + CFX_FontCache* pCache, + const CFX_Matrix* pGlyphMatrix, + const CFX_Matrix* pObject2Device, + FX_FLOAT font_size, + FX_DWORD argb, + int alpha_flag, + void* pIccTransform); + void CG_SetImageTransform(int dest_left, + int dest_top, + int dest_width, + int dest_height, + CGRect* rect = NULL); + + protected: + CGContextRef _context; + CGAffineTransform _foxitDevice2User; + CGAffineTransform _user2FoxitDevice; + int32_t m_saveCount; + + int32_t _width; + int32_t _height; + int32_t _bitsPerPixel; + int32_t _deviceClass; + int32_t _renderCaps; + int32_t _horzSize; + int32_t _vertSize; +}; + +class CFX_FontProvider final : public IFX_FileRead { + public: + // IFX_FileRead + void Release() override { delete this; } + FX_FILESIZE GetSize() override { return (FX_FILESIZE)_totalSize; } + FX_BOOL IsEOF() override { return _offSet == _totalSize; } + FX_FILESIZE GetPosition() override { return (FX_FILESIZE)_offSet; } + FX_BOOL ReadBlock(void* buffer, FX_FILESIZE offset, size_t size) override; + size_t ReadBlock(void* buffer, size_t size) override; + + public: + CFX_FontProvider(CGFontRef cgFont); + ~CFX_FontProvider() override; + void InitTableOffset(); + unsigned long Read(unsigned long offset, + unsigned char* buffer, + unsigned long count); + + protected: + uint32_t CalcTableCheckSum(const uint32_t* table, + uint32_t numberOfBytesInTable); + uint32_t CalcTableDataRefCheckSum(CFDataRef dataRef); + + private: + CGFontRef m_cgFont; + UInt32 m_iTableSize; + size_t _offSet; + typedef struct FontHeader { + int32_t fVersion; + uint16_t fNumTables; + uint16_t fSearchRange; + uint16_t fEntrySelector; + uint16_t fRangeShift; + } FontHeader; + typedef struct TableEntry { + uint32_t fTag; + uint32_t fCheckSum; + uint32_t fOffset; + uint32_t fLength; + } TableEntry; + FontHeader _fontHeader; + unsigned char* _tableEntries; + size_t* _tableOffsets; + int _tableCount; + int _totalSize; +}; + +uint32_t FX_GetHashCode(const FX_CHAR* pStr); +FX_DWORD FX_IOSGetMatchFamilyNameHashcode(const FX_CHAR* pFontName); +uint32_t FX_IOSGetFamilyNamesCount(); +const FX_CHAR* FX_IOSGetFamilyName(uint32_t uIndex); +#endif + +#endif // CORE_FXGE_APPLE_APPLE_INT_H_ |