14d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann// Copyright 2016 PDFium Authors. All rights reserved. 2ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Use of this source code is governed by a BSD-style license that can be 3ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// found in the LICENSE file. 4ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 5ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com 6ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 74d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "core/fxge/android/cfpf_skiafont.h" 8ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 9ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#include <algorithm> 10ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "core/fxcrt/fx_system.h" 124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "core/fxge/android/cfpf_skiabufferfont.h" 134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "core/fxge/android/cfpf_skiafilefont.h" 144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "core/fxge/android/cfpf_skiafontdescriptor.h" 154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "core/fxge/android/cfpf_skiafontmgr.h" 164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "core/fxge/android/cfpf_skiapathfont.h" 174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "core/fxge/fx_freetype.h" 184d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 19ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FPF_EM_ADJUST(em, a) (em == 0 ? (a) : (a)*1000 / em) 204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 21ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCFPF_SkiaFont::CFPF_SkiaFont() 224d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann : m_pFontMgr(nullptr), 234d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_pFontDes(nullptr), 244d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_Face(nullptr), 25ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_dwStyle(0), 26ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_uCharset(0), 27ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_dwRefCount(0) {} 284d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 29ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCFPF_SkiaFont::~CFPF_SkiaFont() { 304d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (m_Face) 31ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FXFT_Done_Face(m_Face); 32ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 334d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 34ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CFPF_SkiaFont::Release() { 354d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (--m_dwRefCount == 0) 36ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann delete this; 37ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 384d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 394d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannCFPF_SkiaFont* CFPF_SkiaFont::Retain() { 40ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_dwRefCount++; 414d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return this; 42ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 434d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 44d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. MoltmannByteString CFPF_SkiaFont::GetFamilyName() { 454d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (!m_Face) 46d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return ByteString(); 47d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return ByteString(FXFT_Get_Face_Family_Name(m_Face)); 48ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 494d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 50d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. MoltmannByteString CFPF_SkiaFont::GetPsName() { 514d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (!m_Face) 52d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return ByteString(); 534d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return FXFT_Get_Postscript_Name(m_Face); 54ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 554d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 56d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannint32_t CFPF_SkiaFont::GetGlyphIndex(wchar_t wUnicode) { 574d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (!m_Face) 58ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return wUnicode; 594d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (FXFT_Select_Charmap(m_Face, FXFT_ENCODING_UNICODE)) 60ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return 0; 61ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return FXFT_Get_Char_Index(m_Face, wUnicode); 62ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 634d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 64ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannint32_t CFPF_SkiaFont::GetGlyphWidth(int32_t iGlyphIndex) { 654d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (!m_Face) 66ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return 0; 67ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (FXFT_Load_Glyph( 68ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_Face, iGlyphIndex, 69ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FXFT_LOAD_NO_SCALE | FXFT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH)) { 70ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return 0; 71ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 72ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return FPF_EM_ADJUST(FXFT_Get_Face_UnitsPerEM(m_Face), 73ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FXFT_Get_Glyph_HoriAdvance(m_Face)); 74ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 754d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 76ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannint32_t CFPF_SkiaFont::GetAscent() const { 774d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (!m_Face) 78ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return 0; 79ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return FPF_EM_ADJUST(FXFT_Get_Face_UnitsPerEM(m_Face), 80ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FXFT_Get_Face_Ascender(m_Face)); 81ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 824d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 83ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannint32_t CFPF_SkiaFont::GetDescent() const { 844d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (!m_Face) 85ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return 0; 86ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return FPF_EM_ADJUST(FXFT_Get_Face_UnitsPerEM(m_Face), 87ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FXFT_Get_Face_Descender(m_Face)); 88ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 894d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 904d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool CFPF_SkiaFont::GetGlyphBBox(int32_t iGlyphIndex, FX_RECT& rtBBox) { 914d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (!m_Face) 924d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return false; 93ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (FXFT_Is_Face_Tricky(m_Face)) { 944d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (FXFT_Set_Char_Size(m_Face, 0, 1000 * 64, 72, 72)) 954d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return false; 96ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (FXFT_Load_Glyph(m_Face, iGlyphIndex, 97ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FXFT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH)) { 98ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FXFT_Set_Pixel_Sizes(m_Face, 0, 64); 994d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return false; 100ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 101ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FXFT_Glyph glyph; 102ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (FXFT_Get_Glyph(m_Face->glyph, &glyph)) { 103ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FXFT_Set_Pixel_Sizes(m_Face, 0, 64); 1044d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return false; 105ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 106ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FXFT_BBox cbox; 107ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FXFT_Glyph_Get_CBox(glyph, FXFT_GLYPH_BBOX_PIXELS, &cbox); 108ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int32_t x_ppem = m_Face->size->metrics.x_ppem; 109ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int32_t y_ppem = m_Face->size->metrics.y_ppem; 110ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann rtBBox.left = FPF_EM_ADJUST(x_ppem, cbox.xMin); 111ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann rtBBox.right = FPF_EM_ADJUST(x_ppem, cbox.xMax); 112ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann rtBBox.top = FPF_EM_ADJUST(y_ppem, cbox.yMax); 113ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann rtBBox.bottom = FPF_EM_ADJUST(y_ppem, cbox.yMin); 114ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann rtBBox.top = std::min(rtBBox.top, GetAscent()); 115ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann rtBBox.bottom = std::max(rtBBox.bottom, GetDescent()); 116ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FXFT_Done_Glyph(glyph); 117ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return FXFT_Set_Pixel_Sizes(m_Face, 0, 64) == 0; 118ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 119ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (FXFT_Load_Glyph( 120ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_Face, iGlyphIndex, 121ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FXFT_LOAD_NO_SCALE | FXFT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH)) { 1224d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return false; 123ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 124ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann rtBBox.left = FPF_EM_ADJUST(FXFT_Get_Face_UnitsPerEM(m_Face), 125ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FXFT_Get_Glyph_HoriBearingX(m_Face)); 126ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann rtBBox.bottom = FPF_EM_ADJUST(FXFT_Get_Face_UnitsPerEM(m_Face), 127ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FXFT_Get_Glyph_HoriBearingY(m_Face)); 128ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann rtBBox.right = FPF_EM_ADJUST( 129ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FXFT_Get_Face_UnitsPerEM(m_Face), 130ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FXFT_Get_Glyph_HoriBearingX(m_Face) + FXFT_Get_Glyph_Width(m_Face)); 131ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann rtBBox.top = FPF_EM_ADJUST( 132ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FXFT_Get_Face_UnitsPerEM(m_Face), 133ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FXFT_Get_Glyph_HoriBearingY(m_Face) - FXFT_Get_Glyph_Height(m_Face)); 1344d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return true; 135ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 1364d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 1374d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool CFPF_SkiaFont::GetBBox(FX_RECT& rtBBox) { 138ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!m_Face) { 1394d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return false; 140ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 141ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann rtBBox.left = FPF_EM_ADJUST(FXFT_Get_Face_UnitsPerEM(m_Face), 142ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FXFT_Get_Face_xMin(m_Face)); 143ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann rtBBox.top = FPF_EM_ADJUST(FXFT_Get_Face_UnitsPerEM(m_Face), 144ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FXFT_Get_Face_yMin(m_Face)); 145ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann rtBBox.right = FPF_EM_ADJUST(FXFT_Get_Face_UnitsPerEM(m_Face), 146ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FXFT_Get_Face_xMax(m_Face)); 147ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann rtBBox.bottom = FPF_EM_ADJUST(FXFT_Get_Face_UnitsPerEM(m_Face), 148ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FXFT_Get_Face_yMax(m_Face)); 1494d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return true; 150ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 1514d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 152ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannint32_t CFPF_SkiaFont::GetHeight() const { 1534d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (!m_Face) 154ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return 0; 155ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return FPF_EM_ADJUST(FXFT_Get_Face_UnitsPerEM(m_Face), 156ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FXFT_Get_Face_Height(m_Face)); 157ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 1584d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 159ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannint32_t CFPF_SkiaFont::GetItalicAngle() const { 1604d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (!m_Face) 161ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return 0; 1624d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 163ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann TT_Postscript* ttInfo = 164ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann (TT_Postscript*)FT_Get_Sfnt_Table(m_Face, ft_sfnt_post); 1654d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (ttInfo) 166ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return ttInfo->italicAngle; 167ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return 0; 168ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 1694d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 1704d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannuint32_t CFPF_SkiaFont::GetFontData(uint32_t dwTable, 171ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann uint8_t* pBuffer, 1724d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann uint32_t dwSize) { 1734d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (!m_Face) 174ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return 0; 1754d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 176ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FT_ULong ulSize = pdfium::base::checked_cast<FT_ULong>(dwSize); 1774d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (FXFT_Load_Sfnt_Table(m_Face, dwTable, 0, pBuffer, &ulSize)) 178ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return 0; 1794d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return pdfium::base::checked_cast<uint32_t>(ulSize); 180ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 1814d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 1824d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool CFPF_SkiaFont::InitFont(CFPF_SkiaFontMgr* pFontMgr, 1834d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFPF_SkiaFontDescriptor* pFontDes, 184d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann const ByteStringView& bsFamily, 1854d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann uint32_t dwStyle, 1864d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann uint8_t uCharset) { 1874d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (!pFontMgr || !pFontDes) 1884d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return false; 1894d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 190ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann switch (pFontDes->GetType()) { 191ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann case FPF_SKIAFONTTYPE_Path: { 192ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFPF_SkiaPathFont* pFont = (CFPF_SkiaPathFont*)pFontDes; 193ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_Face = pFontMgr->GetFontFace(pFont->m_pPath, pFont->m_iFaceIndex); 1944d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann break; 1954d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 196ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann case FPF_SKIAFONTTYPE_File: { 197ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFPF_SkiaFileFont* pFont = (CFPF_SkiaFileFont*)pFontDes; 198ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_Face = pFontMgr->GetFontFace(pFont->m_pFile, pFont->m_iFaceIndex); 1994d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann break; 2004d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 201ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann case FPF_SKIAFONTTYPE_Buffer: { 202ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFPF_SkiaBufferFont* pFont = (CFPF_SkiaBufferFont*)pFontDes; 203ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_Face = pFontMgr->GetFontFace((const uint8_t*)pFont->m_pBuffer, 204ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pFont->m_szBuffer, pFont->m_iFaceIndex); 2054d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann break; 2064d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 207ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann default: 2084d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return false; 209ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 2104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (!m_Face) 2114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return false; 2124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 213ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_dwStyle = dwStyle; 214ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_uCharset = uCharset; 215ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pFontMgr = pFontMgr; 216ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pFontDes = pFontDes; 217ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_dwRefCount = 1; 2184d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return true; 219ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 220