Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1100)

Side by Side Diff: core/fxge/android/fpf_skiafont.cpp

Issue 2448293002: Name core/fxge/android files appropriately and use one file per class (Closed)
Patch Set: Fix build Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(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 #include "core/fxge/android/fpf_skiafont.h"
8
9 #include <algorithm>
10
11 #include "core/fxcrt/fx_system.h"
12 #include "core/fxge/android/fpf_skiafontmgr.h"
13 #include "core/fxge/fx_freetype.h"
14
15 #define FPF_EM_ADJUST(em, a) (em == 0 ? (a) : (a)*1000 / em)
16
17 CFPF_SkiaFont::CFPF_SkiaFont()
18 : m_pFontMgr(nullptr),
19 m_pFontDes(nullptr),
20 m_Face(nullptr),
21 m_dwStyle(0),
22 m_uCharset(0),
23 m_dwRefCount(0) {}
24
25 CFPF_SkiaFont::~CFPF_SkiaFont() {
26 if (m_Face)
27 FXFT_Done_Face(m_Face);
28 }
29
30 void CFPF_SkiaFont::Release() {
31 if (--m_dwRefCount == 0)
32 delete this;
33 }
34
35 CFPF_SkiaFont* CFPF_SkiaFont::Retain() {
36 m_dwRefCount++;
37 return this;
38 }
39
40 CFX_ByteString CFPF_SkiaFont::GetFamilyName() {
41 if (!m_Face)
42 return CFX_ByteString();
43 return CFX_ByteString(FXFT_Get_Face_Family_Name(m_Face));
44 }
45
46 CFX_ByteString CFPF_SkiaFont::GetPsName() {
47 if (!m_Face)
48 return CFX_ByteString();
49 return FXFT_Get_Postscript_Name(m_Face);
50 }
51
52 int32_t CFPF_SkiaFont::GetGlyphIndex(FX_WCHAR wUnicode) {
53 if (!m_Face)
54 return wUnicode;
55 if (FXFT_Select_Charmap(m_Face, FXFT_ENCODING_UNICODE))
56 return 0;
57 return FXFT_Get_Char_Index(m_Face, wUnicode);
58 }
59
60 int32_t CFPF_SkiaFont::GetGlyphWidth(int32_t iGlyphIndex) {
61 if (!m_Face)
62 return 0;
63 if (FXFT_Load_Glyph(
64 m_Face, iGlyphIndex,
65 FXFT_LOAD_NO_SCALE | FXFT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH)) {
66 return 0;
67 }
68 return FPF_EM_ADJUST(FXFT_Get_Face_UnitsPerEM(m_Face),
69 FXFT_Get_Glyph_HoriAdvance(m_Face));
70 }
71
72 int32_t CFPF_SkiaFont::GetAscent() const {
73 if (!m_Face)
74 return 0;
75 return FPF_EM_ADJUST(FXFT_Get_Face_UnitsPerEM(m_Face),
76 FXFT_Get_Face_Ascender(m_Face));
77 }
78
79 int32_t CFPF_SkiaFont::GetDescent() const {
80 if (!m_Face)
81 return 0;
82 return FPF_EM_ADJUST(FXFT_Get_Face_UnitsPerEM(m_Face),
83 FXFT_Get_Face_Descender(m_Face));
84 }
85
86 FX_BOOL CFPF_SkiaFont::GetGlyphBBox(int32_t iGlyphIndex, FX_RECT& rtBBox) {
87 if (!m_Face)
88 return FALSE;
89 if (FXFT_Is_Face_Tricky(m_Face)) {
90 if (FXFT_Set_Char_Size(m_Face, 0, 1000 * 64, 72, 72))
91 return FALSE;
92 if (FXFT_Load_Glyph(m_Face, iGlyphIndex,
93 FXFT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH)) {
94 FXFT_Set_Pixel_Sizes(m_Face, 0, 64);
95 return FALSE;
96 }
97 FXFT_Glyph glyph;
98 if (FXFT_Get_Glyph(m_Face->glyph, &glyph)) {
99 FXFT_Set_Pixel_Sizes(m_Face, 0, 64);
100 return FALSE;
101 }
102 FXFT_BBox cbox;
103 FXFT_Glyph_Get_CBox(glyph, FXFT_GLYPH_BBOX_PIXELS, &cbox);
104 int32_t x_ppem = m_Face->size->metrics.x_ppem;
105 int32_t y_ppem = m_Face->size->metrics.y_ppem;
106 rtBBox.left = FPF_EM_ADJUST(x_ppem, cbox.xMin);
107 rtBBox.right = FPF_EM_ADJUST(x_ppem, cbox.xMax);
108 rtBBox.top = FPF_EM_ADJUST(y_ppem, cbox.yMax);
109 rtBBox.bottom = FPF_EM_ADJUST(y_ppem, cbox.yMin);
110 rtBBox.top = std::min(rtBBox.top, GetAscent());
111 rtBBox.bottom = std::max(rtBBox.bottom, GetDescent());
112 FXFT_Done_Glyph(glyph);
113 return FXFT_Set_Pixel_Sizes(m_Face, 0, 64) == 0;
114 }
115 if (FXFT_Load_Glyph(
116 m_Face, iGlyphIndex,
117 FXFT_LOAD_NO_SCALE | FXFT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH)) {
118 return FALSE;
119 }
120 rtBBox.left = FPF_EM_ADJUST(FXFT_Get_Face_UnitsPerEM(m_Face),
121 FXFT_Get_Glyph_HoriBearingX(m_Face));
122 rtBBox.bottom = FPF_EM_ADJUST(FXFT_Get_Face_UnitsPerEM(m_Face),
123 FXFT_Get_Glyph_HoriBearingY(m_Face));
124 rtBBox.right = FPF_EM_ADJUST(
125 FXFT_Get_Face_UnitsPerEM(m_Face),
126 FXFT_Get_Glyph_HoriBearingX(m_Face) + FXFT_Get_Glyph_Width(m_Face));
127 rtBBox.top = FPF_EM_ADJUST(
128 FXFT_Get_Face_UnitsPerEM(m_Face),
129 FXFT_Get_Glyph_HoriBearingY(m_Face) - FXFT_Get_Glyph_Height(m_Face));
130 return TRUE;
131 }
132
133 FX_BOOL CFPF_SkiaFont::GetBBox(FX_RECT& rtBBox) {
134 if (!m_Face) {
135 return FALSE;
136 }
137 rtBBox.left = FPF_EM_ADJUST(FXFT_Get_Face_UnitsPerEM(m_Face),
138 FXFT_Get_Face_xMin(m_Face));
139 rtBBox.top = FPF_EM_ADJUST(FXFT_Get_Face_UnitsPerEM(m_Face),
140 FXFT_Get_Face_yMin(m_Face));
141 rtBBox.right = FPF_EM_ADJUST(FXFT_Get_Face_UnitsPerEM(m_Face),
142 FXFT_Get_Face_xMax(m_Face));
143 rtBBox.bottom = FPF_EM_ADJUST(FXFT_Get_Face_UnitsPerEM(m_Face),
144 FXFT_Get_Face_yMax(m_Face));
145 return TRUE;
146 }
147
148 int32_t CFPF_SkiaFont::GetHeight() const {
149 if (!m_Face)
150 return 0;
151 return FPF_EM_ADJUST(FXFT_Get_Face_UnitsPerEM(m_Face),
152 FXFT_Get_Face_Height(m_Face));
153 }
154
155 int32_t CFPF_SkiaFont::GetItalicAngle() const {
156 if (!m_Face)
157 return 0;
158
159 TT_Postscript* ttInfo =
160 (TT_Postscript*)FT_Get_Sfnt_Table(m_Face, ft_sfnt_post);
161 if (ttInfo)
162 return ttInfo->italicAngle;
163 return 0;
164 }
165
166 uint32_t CFPF_SkiaFont::GetFontData(uint32_t dwTable,
167 uint8_t* pBuffer,
168 uint32_t dwSize) {
169 if (!m_Face)
170 return 0;
171
172 FT_ULong ulSize = pdfium::base::checked_cast<FT_ULong>(dwSize);
173 if (FXFT_Load_Sfnt_Table(m_Face, dwTable, 0, pBuffer, &ulSize))
174 return 0;
175 return pdfium::base::checked_cast<uint32_t>(ulSize);
176 }
177
178 FX_BOOL CFPF_SkiaFont::InitFont(CFPF_SkiaFontMgr* pFontMgr,
179 CFPF_SkiaFontDescriptor* pFontDes,
180 const CFX_ByteStringC& bsFamily,
181 uint32_t dwStyle,
182 uint8_t uCharset) {
183 if (!pFontMgr || !pFontDes)
184 return FALSE;
185
186 switch (pFontDes->GetType()) {
187 case FPF_SKIAFONTTYPE_Path: {
188 CFPF_SkiaPathFont* pFont = (CFPF_SkiaPathFont*)pFontDes;
189 m_Face = pFontMgr->GetFontFace(pFont->m_pPath, pFont->m_iFaceIndex);
190 break;
191 }
192 case FPF_SKIAFONTTYPE_File: {
193 CFPF_SkiaFileFont* pFont = (CFPF_SkiaFileFont*)pFontDes;
194 m_Face = pFontMgr->GetFontFace(pFont->m_pFile, pFont->m_iFaceIndex);
195 break;
196 }
197 case FPF_SKIAFONTTYPE_Buffer: {
198 CFPF_SkiaBufferFont* pFont = (CFPF_SkiaBufferFont*)pFontDes;
199 m_Face = pFontMgr->GetFontFace((const uint8_t*)pFont->m_pBuffer,
200 pFont->m_szBuffer, pFont->m_iFaceIndex);
201 break;
202 }
203 default:
204 return FALSE;
205 }
206 if (!m_Face)
207 return FALSE;
208
209 m_dwStyle = dwStyle;
210 m_uCharset = uCharset;
211 m_pFontMgr = pFontMgr;
212 m_pFontDes = pFontDes;
213 m_dwRefCount = 1;
214 return TRUE;
215 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698