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

Side by Side Diff: core/src/fxge/ge/fx_ge_linux.cpp

Issue 1265503005: clang-format all pdfium code. (Closed) Base URL: https://pdfium.googlesource.com/pdfium.git@master
Patch Set: sigh Created 5 years, 4 months 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
1 // Copyright 2014 PDFium Authors. All rights reserved. 1 // Copyright 2014 PDFium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6 6
7 #include "../../../include/fxge/fx_ge.h" 7 #include "../../../include/fxge/fx_ge.h"
8 #include "../agg/include/fx_agg_driver.h" 8 #include "../agg/include/fx_agg_driver.h"
9 #include "text_int.h" 9 #include "text_int.h"
10 10
11 #if _FXM_PLATFORM_ == _FXM_PLATFORM_LINUX_ 11 #if _FXM_PLATFORM_ == _FXM_PLATFORM_LINUX_
12 static const struct { 12 static const struct {
13 const FX_CHAR*» m_pName; 13 const FX_CHAR* m_pName;
14 const FX_CHAR*» m_pSubstName; 14 const FX_CHAR* m_pSubstName;
15 } 15 } Base14Substs[] = {
16 Base14Substs[] = {
17 {"Courier", "Courier New"}, 16 {"Courier", "Courier New"},
18 {"Courier-Bold", "Courier New Bold"}, 17 {"Courier-Bold", "Courier New Bold"},
19 {"Courier-BoldOblique", "Courier New Bold Italic"}, 18 {"Courier-BoldOblique", "Courier New Bold Italic"},
20 {"Courier-Oblique", "Courier New Italic"}, 19 {"Courier-Oblique", "Courier New Italic"},
21 {"Helvetica", "Arial"}, 20 {"Helvetica", "Arial"},
22 {"Helvetica-Bold", "Arial Bold"}, 21 {"Helvetica-Bold", "Arial Bold"},
23 {"Helvetica-BoldOblique", "Arial Bold Italic"}, 22 {"Helvetica-BoldOblique", "Arial Bold Italic"},
24 {"Helvetica-Oblique", "Arial Italic"}, 23 {"Helvetica-Oblique", "Arial Italic"},
25 {"Times-Roman", "Times New Roman"}, 24 {"Times-Roman", "Times New Roman"},
26 {"Times-Bold", "Times New Roman Bold"}, 25 {"Times-Bold", "Times New Roman Bold"},
27 {"Times-BoldItalic", "Times New Roman Bold Italic"}, 26 {"Times-BoldItalic", "Times New Roman Bold Italic"},
28 {"Times-Italic", "Times New Roman Italic"}, 27 {"Times-Italic", "Times New Roman Italic"},
29 }; 28 };
30 class CFX_LinuxFontInfo : public CFX_FolderFontInfo 29 class CFX_LinuxFontInfo : public CFX_FolderFontInfo {
31 { 30 public:
32 public: 31 void* MapFont(int weight,
33 void* MapFont(int weight, FX_BOOL bItalic, int charset, int pitch_family, co nst FX_CHAR* family, int& iExact) override; 32 FX_BOOL bItalic,
34 FX_BOOL» » » » ParseFontCfg(); 33 int charset,
35 void*» » » » FindFont(int weight, FX_BOOL bItalic, in t charset, int pitch_family, const FX_CHAR* family, FX_BOOL bMatchName); 34 int pitch_family,
36 }; 35 const FX_CHAR* family,
37 #define LINUX_GPNAMESIZE» 6 36 int& iExact) override;
37 FX_BOOL ParseFontCfg();
38 void* FindFont(int weight,
39 FX_BOOL bItalic,
40 int charset,
41 int pitch_family,
42 const FX_CHAR* family,
43 FX_BOOL bMatchName);
44 };
45 #define LINUX_GPNAMESIZE 6
38 static const struct { 46 static const struct {
39 const FX_CHAR* NameArr[LINUX_GPNAMESIZE]; 47 const FX_CHAR* NameArr[LINUX_GPNAMESIZE];
40 } 48 } LinuxGpFontList[] = {
41 LinuxGpFontList[] = { 49 {{"TakaoPGothic", "VL PGothic", "IPAPGothic", "VL Gothic", "Kochi Gothic",
42 {{"TakaoPGothic", "VL PGothic", "IPAPGothic", "VL Gothic", "Kochi Gothic", " VL Gothic regular"}}, 50 "VL Gothic regular"}},
43 {{"TakaoGothic", "VL Gothic", "IPAGothic", "Kochi Gothic", NULL, "VL Gothic regular"}}, 51 {{"TakaoGothic", "VL Gothic", "IPAGothic", "Kochi Gothic", NULL,
44 {{"TakaoPMincho", "IPAPMincho", "VL Gothic", "Kochi Mincho", NULL, "VL Gothi c regular"}}, 52 "VL Gothic regular"}},
45 {{"TakaoMincho", "IPAMincho", "VL Gothic", "Kochi Mincho", NULL, "VL Gothic regular"}}, 53 {{"TakaoPMincho", "IPAPMincho", "VL Gothic", "Kochi Mincho", NULL,
54 "VL Gothic regular"}},
55 {{"TakaoMincho", "IPAMincho", "VL Gothic", "Kochi Mincho", NULL,
56 "VL Gothic regular"}},
46 }; 57 };
47 static const FX_CHAR* const g_LinuxGbFontList[] = { 58 static const FX_CHAR* const g_LinuxGbFontList[] = {
48 "AR PL UMing CN Light", 59 "AR PL UMing CN Light", "WenQuanYi Micro Hei", "AR PL UKai CN",
49 "WenQuanYi Micro Hei",
50 "AR PL UKai CN",
51 }; 60 };
52 static const FX_CHAR* const g_LinuxB5FontList[] = { 61 static const FX_CHAR* const g_LinuxB5FontList[] = {
53 "AR PL UMing TW Light", 62 "AR PL UMing TW Light", "WenQuanYi Micro Hei", "AR PL UKai TW",
54 "WenQuanYi Micro Hei",
55 "AR PL UKai TW",
56 }; 63 };
57 static const FX_CHAR* const g_LinuxHGFontList[] = { 64 static const FX_CHAR* const g_LinuxHGFontList[] = {
58 "UnDotum", 65 "UnDotum",
59 }; 66 };
60 static int32_t GetJapanesePreference(const FX_CHAR* facearr, int weight, int pic th_family) 67 static int32_t GetJapanesePreference(const FX_CHAR* facearr,
61 { 68 int weight,
62 CFX_ByteString face = facearr; 69 int picth_family) {
63 if (face.Find("Gothic") >= 0 || face.Find("\x83\x53\x83\x56\x83\x62\x83\x4e" ) >= 0) { 70 CFX_ByteString face = facearr;
64 if (face.Find("PGothic") >= 0 || face.Find("\x82\x6f\x83\x53\x83\x56\x83 \x62\x83\x4e") >= 0) { 71 if (face.Find("Gothic") >= 0 ||
65 return 0; 72 face.Find("\x83\x53\x83\x56\x83\x62\x83\x4e") >= 0) {
66 } 73 if (face.Find("PGothic") >= 0 ||
67 return 1; 74 face.Find("\x82\x6f\x83\x53\x83\x56\x83\x62\x83\x4e") >= 0) {
68 } 75 return 0;
69 if (face.Find("Mincho") >= 0 || face.Find("\x96\xbe\x92\xa9") >= 0) { 76 }
70 if (face.Find("PMincho") >= 0 || face.Find("\x82\x6f\x96\xbe\x92\xa9") > = 0) { 77 return 1;
71 return 2; 78 }
72 } 79 if (face.Find("Mincho") >= 0 || face.Find("\x96\xbe\x92\xa9") >= 0) {
73 return 3; 80 if (face.Find("PMincho") >= 0 ||
74 } 81 face.Find("\x82\x6f\x96\xbe\x92\xa9") >= 0) {
75 if (!(picth_family & FXFONT_FF_ROMAN) && weight > 400) { 82 return 2;
76 return 0; 83 }
77 } 84 return 3;
78 return 2; 85 }
79 } 86 if (!(picth_family & FXFONT_FF_ROMAN) && weight > 400) {
80 void* CFX_LinuxFontInfo::MapFont(int weight, FX_BOOL bItalic, int charset, int p itch_family, const FX_CHAR* cstr_face, int& iExact)
81 {
82 CFX_ByteString face = cstr_face;
83 int iBaseFont;
84 for (iBaseFont = 0; iBaseFont < 12; iBaseFont ++)
85 if (face == CFX_ByteStringC(Base14Substs[iBaseFont].m_pName)) {
86 face = Base14Substs[iBaseFont].m_pSubstName;
87 iExact = 1;
88 break;
89 }
90 if (iBaseFont < 12) {
91 return GetFont(face);
92 }
93 void* p = NULL;
94 FX_BOOL bCJK = TRUE;
95 switch (charset) {
96 case FXFONT_SHIFTJIS_CHARSET: {
97 int32_t index = GetJapanesePreference(cstr_face, weight, pitch_f amily);
98 if (index < 0) {
99 break;
100 }
101 for (int32_t i = 0; i < LINUX_GPNAMESIZE; i++)
102 if (m_FontList.Lookup(LinuxGpFontList[index].NameArr[i], p)) {
103 return p;
104 }
105 }
106 break;
107 case FXFONT_GB2312_CHARSET: {
108 static int32_t s_gbCount = sizeof(g_LinuxGbFontList) / sizeof(co nst FX_CHAR*);
109 for (int32_t i = 0; i < s_gbCount; i++)
110 if (m_FontList.Lookup(g_LinuxGbFontList[i], p)) {
111 return p;
112 }
113 }
114 break;
115 case FXFONT_CHINESEBIG5_CHARSET: {
116 static int32_t s_b5Count = sizeof(g_LinuxB5FontList) / sizeof(co nst FX_CHAR*);
117 for (int32_t i = 0; i < s_b5Count; i++)
118 if (m_FontList.Lookup(g_LinuxB5FontList[i], p)) {
119 return p;
120 }
121 }
122 break;
123 case FXFONT_HANGEUL_CHARSET: {
124 static int32_t s_hgCount = sizeof(g_LinuxHGFontList) / sizeof(co nst FX_CHAR*);
125 for (int32_t i = 0; i < s_hgCount; i++)
126 if (m_FontList.Lookup(g_LinuxHGFontList[i], p)) {
127 return p;
128 }
129 }
130 break;
131 default:
132 bCJK = FALSE;
133 break;
134 }
135 if (charset == FXFONT_ANSI_CHARSET && (pitch_family & FXFONT_FF_FIXEDPITCH)) {
136 return GetFont("Courier New");
137 }
138 return FindFont(weight, bItalic, charset, pitch_family, cstr_face, !bCJK);
139 }
140 static FX_DWORD _LinuxGetCharset(int charset)
141 {
142 switch(charset) {
143 case FXFONT_SHIFTJIS_CHARSET:
144 return CHARSET_FLAG_SHIFTJIS;
145 case FXFONT_GB2312_CHARSET:
146 return CHARSET_FLAG_GB;
147 case FXFONT_CHINESEBIG5_CHARSET:
148 return CHARSET_FLAG_BIG5;
149 case FXFONT_HANGEUL_CHARSET:
150 return CHARSET_FLAG_KOREAN;
151 case FXFONT_SYMBOL_CHARSET:
152 return CHARSET_FLAG_SYMBOL;
153 case FXFONT_ANSI_CHARSET:
154 return CHARSET_FLAG_ANSI;
155 default:
156 break;
157 }
158 return 0; 87 return 0;
159 } 88 }
160 static int32_t _LinuxGetSimilarValue(int weight, FX_BOOL bItalic, int pitch_fami ly, FX_DWORD style) 89 return 2;
161 { 90 }
91 void* CFX_LinuxFontInfo::MapFont(int weight,
92 FX_BOOL bItalic,
93 int charset,
94 int pitch_family,
95 const FX_CHAR* cstr_face,
96 int& iExact) {
97 CFX_ByteString face = cstr_face;
98 int iBaseFont;
99 for (iBaseFont = 0; iBaseFont < 12; iBaseFont++)
100 if (face == CFX_ByteStringC(Base14Substs[iBaseFont].m_pName)) {
101 face = Base14Substs[iBaseFont].m_pSubstName;
102 iExact = 1;
103 break;
104 }
105 if (iBaseFont < 12) {
106 return GetFont(face);
107 }
108 void* p = NULL;
109 FX_BOOL bCJK = TRUE;
110 switch (charset) {
111 case FXFONT_SHIFTJIS_CHARSET: {
112 int32_t index = GetJapanesePreference(cstr_face, weight, pitch_family);
113 if (index < 0) {
114 break;
115 }
116 for (int32_t i = 0; i < LINUX_GPNAMESIZE; i++)
117 if (m_FontList.Lookup(LinuxGpFontList[index].NameArr[i], p)) {
118 return p;
119 }
120 } break;
121 case FXFONT_GB2312_CHARSET: {
122 static int32_t s_gbCount =
123 sizeof(g_LinuxGbFontList) / sizeof(const FX_CHAR*);
124 for (int32_t i = 0; i < s_gbCount; i++)
125 if (m_FontList.Lookup(g_LinuxGbFontList[i], p)) {
126 return p;
127 }
128 } break;
129 case FXFONT_CHINESEBIG5_CHARSET: {
130 static int32_t s_b5Count =
131 sizeof(g_LinuxB5FontList) / sizeof(const FX_CHAR*);
132 for (int32_t i = 0; i < s_b5Count; i++)
133 if (m_FontList.Lookup(g_LinuxB5FontList[i], p)) {
134 return p;
135 }
136 } break;
137 case FXFONT_HANGEUL_CHARSET: {
138 static int32_t s_hgCount =
139 sizeof(g_LinuxHGFontList) / sizeof(const FX_CHAR*);
140 for (int32_t i = 0; i < s_hgCount; i++)
141 if (m_FontList.Lookup(g_LinuxHGFontList[i], p)) {
142 return p;
143 }
144 } break;
145 default:
146 bCJK = FALSE;
147 break;
148 }
149 if (charset == FXFONT_ANSI_CHARSET && (pitch_family & FXFONT_FF_FIXEDPITCH)) {
150 return GetFont("Courier New");
151 }
152 return FindFont(weight, bItalic, charset, pitch_family, cstr_face, !bCJK);
153 }
154 static FX_DWORD _LinuxGetCharset(int charset) {
155 switch (charset) {
156 case FXFONT_SHIFTJIS_CHARSET:
157 return CHARSET_FLAG_SHIFTJIS;
158 case FXFONT_GB2312_CHARSET:
159 return CHARSET_FLAG_GB;
160 case FXFONT_CHINESEBIG5_CHARSET:
161 return CHARSET_FLAG_BIG5;
162 case FXFONT_HANGEUL_CHARSET:
163 return CHARSET_FLAG_KOREAN;
164 case FXFONT_SYMBOL_CHARSET:
165 return CHARSET_FLAG_SYMBOL;
166 case FXFONT_ANSI_CHARSET:
167 return CHARSET_FLAG_ANSI;
168 default:
169 break;
170 }
171 return 0;
172 }
173 static int32_t _LinuxGetSimilarValue(int weight,
174 FX_BOOL bItalic,
175 int pitch_family,
176 FX_DWORD style) {
177 int32_t iSimilarValue = 0;
178 if ((style & FXFONT_BOLD) == (weight > 400)) {
179 iSimilarValue += 16;
180 }
181 if ((style & FXFONT_ITALIC) == bItalic) {
182 iSimilarValue += 16;
183 }
184 if ((style & FXFONT_SERIF) == (pitch_family & FXFONT_FF_ROMAN)) {
185 iSimilarValue += 16;
186 }
187 if ((style & FXFONT_SCRIPT) == (pitch_family & FXFONT_FF_SCRIPT)) {
188 iSimilarValue += 8;
189 }
190 if ((style & FXFONT_FIXED_PITCH) == (pitch_family & FXFONT_FF_FIXEDPITCH)) {
191 iSimilarValue += 8;
192 }
193 return iSimilarValue;
194 }
195 void* CFX_LinuxFontInfo::FindFont(int weight,
196 FX_BOOL bItalic,
197 int charset,
198 int pitch_family,
199 const FX_CHAR* family,
200 FX_BOOL bMatchName) {
201 CFontFaceInfo* pFind = NULL;
202 FX_DWORD charset_flag = _LinuxGetCharset(charset);
203 int32_t iBestSimilar = 0;
204 FX_POSITION pos = m_FontList.GetStartPosition();
205 while (pos) {
206 CFX_ByteString bsName;
207 CFontFaceInfo* pFont = NULL;
208 m_FontList.GetNextAssoc(pos, bsName, (void*&)pFont);
209 if (!(pFont->m_Charsets & charset_flag) &&
210 charset != FXFONT_DEFAULT_CHARSET) {
211 continue;
212 }
162 int32_t iSimilarValue = 0; 213 int32_t iSimilarValue = 0;
163 if ((style & FXFONT_BOLD) == (weight > 400)) { 214 int32_t index = bsName.Find(family);
164 iSimilarValue += 16; 215 if (bMatchName && index < 0) {
165 } 216 continue;
166 if ((style & FXFONT_ITALIC) == bItalic) { 217 }
167 iSimilarValue += 16; 218 if (!bMatchName && index > 0) {
168 } 219 iSimilarValue += 64;
169 if ((style & FXFONT_SERIF) == (pitch_family & FXFONT_FF_ROMAN)) { 220 }
170 iSimilarValue += 16; 221 iSimilarValue =
171 } 222 _LinuxGetSimilarValue(weight, bItalic, pitch_family, pFont->m_Styles);
172 if ((style & FXFONT_SCRIPT) == (pitch_family & FXFONT_FF_SCRIPT)) { 223 if (iSimilarValue > iBestSimilar) {
173 iSimilarValue += 8; 224 iBestSimilar = iSimilarValue;
174 } 225 pFind = pFont;
175 if ((style & FXFONT_FIXED_PITCH) == (pitch_family & FXFONT_FF_FIXEDPITCH)) { 226 }
176 iSimilarValue += 8; 227 }
177 } 228 return pFind;
178 return iSimilarValue; 229 }
179 } 230 IFX_SystemFontInfo* IFX_SystemFontInfo::CreateDefault() {
180 void* CFX_LinuxFontInfo::FindFont(int weight, FX_BOOL bItalic, int charset, int pitch_family, const FX_CHAR* family, FX_BOOL bMatchName) 231 CFX_LinuxFontInfo* pInfo = new CFX_LinuxFontInfo;
181 { 232 if (!pInfo->ParseFontCfg()) {
182 CFontFaceInfo* pFind = NULL; 233 pInfo->AddPath("/usr/share/fonts");
183 FX_DWORD charset_flag = _LinuxGetCharset(charset); 234 pInfo->AddPath("/usr/share/X11/fonts/Type1");
184 int32_t iBestSimilar = 0; 235 pInfo->AddPath("/usr/share/X11/fonts/TTF");
185 FX_POSITION pos = m_FontList.GetStartPosition(); 236 pInfo->AddPath("/usr/local/share/fonts");
186 while (pos) { 237 }
187 CFX_ByteString bsName; 238 return pInfo;
188 CFontFaceInfo* pFont = NULL; 239 }
189 m_FontList.GetNextAssoc(pos, bsName, (void*&)pFont); 240 FX_BOOL CFX_LinuxFontInfo::ParseFontCfg() {
190 if (!(pFont->m_Charsets & charset_flag) && charset != FXFONT_DEFAULT_CHA RSET) { 241 return FALSE;
191 continue; 242 }
192 } 243 void CFX_GEModule::InitPlatform() {
193 int32_t iSimilarValue = 0; 244 m_pFontMgr->SetSystemFontInfo(IFX_SystemFontInfo::CreateDefault());
194 int32_t index = bsName.Find(family); 245 }
195 if (bMatchName && index < 0) { 246 void CFX_GEModule::DestroyPlatform() {}
196 continue;
197 }
198 if (!bMatchName && index > 0) {
199 iSimilarValue += 64;
200 }
201 iSimilarValue = _LinuxGetSimilarValue(weight, bItalic, pitch_family, pFo nt->m_Styles);
202 if (iSimilarValue > iBestSimilar) {
203 iBestSimilar = iSimilarValue;
204 pFind = pFont;
205 }
206 }
207 return pFind;
208 }
209 IFX_SystemFontInfo* IFX_SystemFontInfo::CreateDefault()
210 {
211 CFX_LinuxFontInfo* pInfo = new CFX_LinuxFontInfo;
212 if (!pInfo->ParseFontCfg()) {
213 pInfo->AddPath("/usr/share/fonts");
214 pInfo->AddPath("/usr/share/X11/fonts/Type1");
215 pInfo->AddPath("/usr/share/X11/fonts/TTF");
216 pInfo->AddPath("/usr/local/share/fonts");
217 }
218 return pInfo;
219 }
220 FX_BOOL CFX_LinuxFontInfo::ParseFontCfg()
221 {
222 return FALSE;
223 }
224 void CFX_GEModule::InitPlatform()
225 {
226 m_pFontMgr->SetSystemFontInfo(IFX_SystemFontInfo::CreateDefault());
227 }
228 void CFX_GEModule::DestroyPlatform()
229 {
230 }
231 #endif // _FXM_PLATFORM_ == _FXM_PLATFORM_LINUX_ 247 #endif // _FXM_PLATFORM_ == _FXM_PLATFORM_LINUX_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698