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

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

Issue 809513002: XFA: merge patch from issue 801913002 and 804463003 (Closed) Base URL: https://pdfium.googlesource.com/pdfium.git@xfa
Patch Set: Created 6 years 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
« no previous file with comments | « core/src/fxge/ge/fx_ge_linux.cpp ('k') | core/src/fxge/win32/fx_win32_device.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 "../../../include/fxge/fx_freetype.h" 8 #include "../../../include/fxge/fx_freetype.h"
9 #include "../../../include/fxcodec/fx_codec.h" 9 #include "../../../include/fxcodec/fx_codec.h"
10 #include "text_int.h" 10 #include "text_int.h"
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after
128 CFX_Font* pFont, CFX_FontCache* pCache, 128 CFX_Font* pFont, CFX_FontCache* pCache,
129 FX_FLOAT font_size, const CFX_AffineMatrix* pText2Device, 129 FX_FLOAT font_size, const CFX_AffineMatrix* pText2Device,
130 FX_DWORD fill_color, FX_DWORD text_flags, 130 FX_DWORD fill_color, FX_DWORD text_flags,
131 int alpha_flag, void* pIccTransform) 131 int alpha_flag, void* pIccTransform)
132 { 132 {
133 int nativetext_flags = text_flags; 133 int nativetext_flags = text_flags;
134 if (m_DeviceClass != FXDC_DISPLAY) { 134 if (m_DeviceClass != FXDC_DISPLAY) {
135 if (!(text_flags & FXTEXT_PRINTGRAPHICTEXT)) { 135 if (!(text_flags & FXTEXT_PRINTGRAPHICTEXT)) {
136 #if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_ 136 #if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_
137 if (!(text_flags & FXFONT_CIDFONT) && pFont->GetPsName().Find(CFX_Wi deString::FromLocal("+ZJHL")) == -1) 137 if (!(text_flags & FXFONT_CIDFONT) && pFont->GetPsName().Find(CFX_Wi deString::FromLocal("+ZJHL")) == -1)
138 #ifdef FOXIT_CHROME_BUILD
139 if (pFont->GetPsName() != CFX_WideString::FromLocal("CNAAJI+cmex 10")) 138 if (pFont->GetPsName() != CFX_WideString::FromLocal("CNAAJI+cmex 10"))
140 #endif 139 #endif
141 #endif
142 if (m_pDeviceDriver->DrawDeviceText(nChars, pCharPos, pFont, pCache, pText2Device, font_size, fill_color, alpha_flag, pIccTransform)) { 140 if (m_pDeviceDriver->DrawDeviceText(nChars, pCharPos, pFont, pCache, pText2Device, font_size, fill_color, alpha_flag, pIccTransform)) {
143 return TRUE; 141 return TRUE;
144 } 142 }
145 } 143 }
146 int alpha = FXGETFLAG_COLORTYPE(alpha_flag) ? FXGETFLAG_ALPHA_FILL(alpha _flag) : FXARGB_A(fill_color); 144 int alpha = FXGETFLAG_COLORTYPE(alpha_flag) ? FXGETFLAG_ALPHA_FILL(alpha _flag) : FXARGB_A(fill_color);
147 if (alpha < 255) { 145 if (alpha < 255) {
148 return FALSE; 146 return FALSE;
149 } 147 }
150 } else if (!(text_flags & FXTEXT_NO_NATIVETEXT)) { 148 } else if (!(text_flags & FXTEXT_NO_NATIVETEXT)) {
151 #if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_ 149 #if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_
152 if (!(text_flags & FXFONT_CIDFONT)) 150 if (!(text_flags & FXFONT_CIDFONT))
153 #ifdef FOXIT_CHROME_BUILD
154 if (pFont->GetPsName() != CFX_WideString::FromLocal("CNAAJI+cmex10") ) 151 if (pFont->GetPsName() != CFX_WideString::FromLocal("CNAAJI+cmex10") )
155 #endif 152 #endif
156 #endif
157 if (m_pDeviceDriver->DrawDeviceText(nChars, pCharPos, pFont, pCa che, pText2Device, font_size, fill_color, alpha_flag, pIccTransform)) { 153 if (m_pDeviceDriver->DrawDeviceText(nChars, pCharPos, pFont, pCa che, pText2Device, font_size, fill_color, alpha_flag, pIccTransform)) {
158 return TRUE; 154 return TRUE;
159 } 155 }
160 } 156 }
161 CFX_AffineMatrix char2device, deviceCtm, text2Device; 157 CFX_AffineMatrix char2device, deviceCtm, text2Device;
162 if (pText2Device) { 158 if (pText2Device) {
163 char2device = *pText2Device; 159 char2device = *pText2Device;
164 text2Device = *pText2Device; 160 text2Device = *pText2Device;
165 } 161 }
166 char2device.Scale(font_size, -font_size); 162 char2device.Scale(font_size, -font_size);
(...skipping 896 matching lines...) Expand 10 before | Expand all | Expand 10 after
1063 CFX_PathData* pPath; 1059 CFX_PathData* pPath;
1064 while (pos) { 1060 while (pos) {
1065 m_PathMap.GetNextAssoc(pos, key1, (FX_LPVOID&)pPath); 1061 m_PathMap.GetNextAssoc(pos, key1, (FX_LPVOID&)pPath);
1066 delete pPath; 1062 delete pPath;
1067 } 1063 }
1068 if (m_pBitmap) { 1064 if (m_pBitmap) {
1069 delete m_pBitmap; 1065 delete m_pBitmap;
1070 } 1066 }
1071 m_PathMap.RemoveAll(); 1067 m_PathMap.RemoveAll();
1072 } 1068 }
1073 #if ((_FXM_PLATFORM_ != _FXM_PLATFORM_APPLE_)|| defined(_FPDFAPI_MINI_)) 1069 #if _FXM_PLATFORM_ != _FXM_PLATFORM_APPLE_
1074 void CFX_FaceCache::InitPlatform() 1070 void CFX_FaceCache::InitPlatform()
1075 { 1071 {
1076 } 1072 }
1077 #endif 1073 #endif
1078 CFX_GlyphBitmap* CFX_FaceCache::LookUpGlyphBitmap(CFX_Font* pFont, const CFX_Aff ineMatrix* pMatrix, 1074 CFX_GlyphBitmap* CFX_FaceCache::LookUpGlyphBitmap(CFX_Font* pFont, const CFX_Aff ineMatrix* pMatrix,
1079 CFX_ByteStringC& FaceGlyphsKey, FX_DWORD glyph_index, FX_BOOL bFontStyle , 1075 CFX_ByteStringC& FaceGlyphsKey, FX_DWORD glyph_index, FX_BOOL bFontStyle ,
1080 int dest_width, int anti_alias) 1076 int dest_width, int anti_alias)
1081 { 1077 {
1082 CFX_SizeGlyphCache* pSizeCache = NULL; 1078 CFX_SizeGlyphCache* pSizeCache = NULL;
1083 if (!m_SizeMap.Lookup(FaceGlyphsKey, (void*&)pSizeCache)) { 1079 if (!m_SizeMap.Lookup(FaceGlyphsKey, (void*&)pSizeCache)) {
(...skipping 14 matching lines...) Expand all
1098 pSizeCache->m_GlyphMap.SetAt((FX_LPVOID)(FX_UINTPTR)glyph_index, pGlyphBitma p); 1094 pSizeCache->m_GlyphMap.SetAt((FX_LPVOID)(FX_UINTPTR)glyph_index, pGlyphBitma p);
1099 return pGlyphBitmap; 1095 return pGlyphBitmap;
1100 } 1096 }
1101 const CFX_GlyphBitmap* CFX_FaceCache::LoadGlyphBitmap(CFX_Font* pFont, FX_DWORD glyph_index, FX_BOOL bFontStyle, const CFX_AffineMatrix* pMatrix, 1097 const CFX_GlyphBitmap* CFX_FaceCache::LoadGlyphBitmap(CFX_Font* pFont, FX_DWORD glyph_index, FX_BOOL bFontStyle, const CFX_AffineMatrix* pMatrix,
1102 int dest_width, int anti_alias, int& text_flags) 1098 int dest_width, int anti_alias, int& text_flags)
1103 { 1099 {
1104 if (glyph_index == (FX_DWORD) - 1) { 1100 if (glyph_index == (FX_DWORD) - 1) {
1105 return NULL; 1101 return NULL;
1106 } 1102 }
1107 _CFX_UniqueKeyGen keygen; 1103 _CFX_UniqueKeyGen keygen;
1108 #if ((_FXM_PLATFORM_ != _FXM_PLATFORM_APPLE_)|| defined(_FPDFAPI_MINI_)) 1104 #if _FXM_PLATFORM_ != _FXM_PLATFORM_APPLE_
1109 if (pFont->GetSubstFont()) 1105 if (pFont->GetSubstFont())
1110 keygen.Generate(9, (int)(pMatrix->a * 10000), (int)(pMatrix->b * 10000), 1106 keygen.Generate(9, (int)(pMatrix->a * 10000), (int)(pMatrix->b * 10000),
1111 (int)(pMatrix->c * 10000), (int)(pMatrix->d * 10000), de st_width, anti_alias, 1107 (int)(pMatrix->c * 10000), (int)(pMatrix->d * 10000), de st_width, anti_alias,
1112 pFont->GetSubstFont()->m_Weight, pFont->GetSubstFont()-> m_ItalicAngle, pFont->IsVertical()); 1108 pFont->GetSubstFont()->m_Weight, pFont->GetSubstFont()-> m_ItalicAngle, pFont->IsVertical());
1113 else 1109 else
1114 keygen.Generate(6, (int)(pMatrix->a * 10000), (int)(pMatrix->b * 10000), 1110 keygen.Generate(6, (int)(pMatrix->a * 10000), (int)(pMatrix->b * 10000),
1115 (int)(pMatrix->c * 10000), (int)(pMatrix->d * 10000), de st_width, anti_alias); 1111 (int)(pMatrix->c * 10000), (int)(pMatrix->d * 10000), de st_width, anti_alias);
1116 #else 1112 #else
1117 if (text_flags & FXTEXT_NO_NATIVETEXT) { 1113 if (text_flags & FXTEXT_NO_NATIVETEXT) {
1118 if (pFont->GetSubstFont()) 1114 if (pFont->GetSubstFont())
1119 keygen.Generate(9, (int)(pMatrix->a * 10000), (int)(pMatrix->b * 100 00), 1115 keygen.Generate(9, (int)(pMatrix->a * 10000), (int)(pMatrix->b * 100 00),
1120 (int)(pMatrix->c * 10000), (int)(pMatrix->d * 10000) , dest_width, anti_alias, 1116 (int)(pMatrix->c * 10000), (int)(pMatrix->d * 10000) , dest_width, anti_alias,
1121 pFont->GetSubstFont()->m_Weight, pFont->GetSubstFont ()->m_ItalicAngle, pFont->IsVertical()); 1117 pFont->GetSubstFont()->m_Weight, pFont->GetSubstFont ()->m_ItalicAngle, pFont->IsVertical());
1122 else 1118 else
1123 keygen.Generate(6, (int)(pMatrix->a * 10000), (int)(pMatrix->b * 100 00), 1119 keygen.Generate(6, (int)(pMatrix->a * 10000), (int)(pMatrix->b * 100 00),
1124 (int)(pMatrix->c * 10000), (int)(pMatrix->d * 10000) , dest_width, anti_alias); 1120 (int)(pMatrix->c * 10000), (int)(pMatrix->d * 10000) , dest_width, anti_alias);
1125 } else { 1121 } else {
1126 if (pFont->GetSubstFont()) 1122 if (pFont->GetSubstFont())
1127 keygen.Generate(10, (int)(pMatrix->a * 10000), (int)(pMatrix->b * 10 000), 1123 keygen.Generate(10, (int)(pMatrix->a * 10000), (int)(pMatrix->b * 10 000),
1128 (int)(pMatrix->c * 10000), (int)(pMatrix->d * 10000) , dest_width, anti_alias, 1124 (int)(pMatrix->c * 10000), (int)(pMatrix->d * 10000) , dest_width, anti_alias,
1129 pFont->GetSubstFont()->m_Weight, pFont->GetSubstFont ()->m_ItalicAngle, pFont->IsVertical(), 3); 1125 pFont->GetSubstFont()->m_Weight, pFont->GetSubstFont ()->m_ItalicAngle, pFont->IsVertical(), 3);
1130 else 1126 else
1131 keygen.Generate(7, (int)(pMatrix->a * 10000), (int)(pMatrix->b * 100 00), 1127 keygen.Generate(7, (int)(pMatrix->a * 10000), (int)(pMatrix->b * 100 00),
1132 (int)(pMatrix->c * 10000), (int)(pMatrix->d * 10000) , dest_width, anti_alias, 3); 1128 (int)(pMatrix->c * 10000), (int)(pMatrix->d * 10000) , dest_width, anti_alias, 3);
1133 } 1129 }
1134 #endif 1130 #endif
1135 CFX_ByteStringC FaceGlyphsKey(keygen.m_Key, keygen.m_KeyLen); 1131 CFX_ByteStringC FaceGlyphsKey(keygen.m_Key, keygen.m_KeyLen);
1136 #if ((_FXM_PLATFORM_ != _FXM_PLATFORM_APPLE_)|| defined(_FPDFAPI_MINI_)) 1132 #if _FXM_PLATFORM_ != _FXM_PLATFORM_APPLE_
1137 return LookUpGlyphBitmap(pFont, pMatrix, FaceGlyphsKey, glyph_index, bFontSt yle, dest_width, anti_alias); 1133 return LookUpGlyphBitmap(pFont, pMatrix, FaceGlyphsKey, glyph_index, bFontSt yle, dest_width, anti_alias);
1138 #else 1134 #else
1139 if (text_flags & FXTEXT_NO_NATIVETEXT) { 1135 if (text_flags & FXTEXT_NO_NATIVETEXT) {
1140 return LookUpGlyphBitmap(pFont, pMatrix, FaceGlyphsKey, glyph_index, bFo ntStyle, dest_width, anti_alias); 1136 return LookUpGlyphBitmap(pFont, pMatrix, FaceGlyphsKey, glyph_index, bFo ntStyle, dest_width, anti_alias);
1141 } else { 1137 } else {
1142 CFX_GlyphBitmap* pGlyphBitmap; 1138 CFX_GlyphBitmap* pGlyphBitmap;
1143 CFX_SizeGlyphCache* pSizeCache = NULL; 1139 CFX_SizeGlyphCache* pSizeCache = NULL;
1144 if (m_SizeMap.Lookup(FaceGlyphsKey, (void*&)pSizeCache)) { 1140 if (m_SizeMap.Lookup(FaceGlyphsKey, (void*&)pSizeCache)) {
1145 if (pSizeCache->m_GlyphMap.Lookup((FX_LPVOID)(FX_UINTPTR)glyph_index , (void*&)pGlyphBitmap)) { 1141 if (pSizeCache->m_GlyphMap.Lookup((FX_LPVOID)(FX_UINTPTR)glyph_index , (void*&)pGlyphBitmap)) {
1146 return pGlyphBitmap; 1142 return pGlyphBitmap;
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
1179 { 1175 {
1180 FX_POSITION pos = m_GlyphMap.GetStartPosition(); 1176 FX_POSITION pos = m_GlyphMap.GetStartPosition();
1181 FX_LPVOID Key; 1177 FX_LPVOID Key;
1182 CFX_GlyphBitmap* pGlyphBitmap = NULL; 1178 CFX_GlyphBitmap* pGlyphBitmap = NULL;
1183 while(pos) { 1179 while(pos) {
1184 m_GlyphMap.GetNextAssoc(pos, Key, (void*&)pGlyphBitmap); 1180 m_GlyphMap.GetNextAssoc(pos, Key, (void*&)pGlyphBitmap);
1185 delete pGlyphBitmap; 1181 delete pGlyphBitmap;
1186 } 1182 }
1187 m_GlyphMap.RemoveAll(); 1183 m_GlyphMap.RemoveAll();
1188 } 1184 }
1189 #if defined(_FPDFAPI_MINI_)
1190 #define CONTRAST_RAMP_STEP 16
1191 #else
1192 #define CONTRAST_RAMP_STEP 1 1185 #define CONTRAST_RAMP_STEP 1
1193 #endif
1194 void CFX_Font::AdjustMMParams(int glyph_index, int dest_width, int weight) 1186 void CFX_Font::AdjustMMParams(int glyph_index, int dest_width, int weight)
1195 { 1187 {
1196 FXFT_MM_Var pMasters = NULL; 1188 FXFT_MM_Var pMasters = NULL;
1197 FXFT_Get_MM_Var(m_Face, &pMasters); 1189 FXFT_Get_MM_Var(m_Face, &pMasters);
1198 if (pMasters == NULL) { 1190 if (pMasters == NULL) {
1199 return; 1191 return;
1200 } 1192 }
1201 long coords[2]; 1193 long coords[2];
1202 if (weight == 0) { 1194 if (weight == 0) {
1203 coords[0] = FXFT_Get_MM_Axis_Def(FXFT_Get_MM_Axis(pMasters, 0)) / 65536; 1195 coords[0] = FXFT_Get_MM_Axis_Def(FXFT_Get_MM_Axis(pMasters, 0)) / 65536;
(...skipping 502 matching lines...) Expand 10 before | Expand all | Expand 10 after
1706 { 1698 {
1707 va_list argList; 1699 va_list argList;
1708 va_start(argList, count); 1700 va_start(argList, count);
1709 for (int i = 0; i < count; i ++) { 1701 for (int i = 0; i < count; i ++) {
1710 int p = va_arg(argList, int); 1702 int p = va_arg(argList, int);
1711 ((FX_DWORD*)m_Key)[i] = p; 1703 ((FX_DWORD*)m_Key)[i] = p;
1712 } 1704 }
1713 va_end(argList); 1705 va_end(argList);
1714 m_KeyLen = count * sizeof(FX_DWORD); 1706 m_KeyLen = count * sizeof(FX_DWORD);
1715 } 1707 }
OLDNEW
« no previous file with comments | « core/src/fxge/ge/fx_ge_linux.cpp ('k') | core/src/fxge/win32/fx_win32_device.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698