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

Side by Side Diff: Source/platform/fonts/win/FontPlatformDataWin.cpp

Issue 179723005: Remove GDI font rendering code for windows (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 6 years, 10 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 | Annotate | Revision Log
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2006, 2007 Apple Computer, Inc. 2 * Copyright (C) 2006, 2007 Apple Computer, Inc.
3 * Copyright (c) 2006, 2007, 2008, 2009, 2012 Google Inc. All rights reserved. 3 * Copyright (c) 2006, 2007, 2008, 2009, 2012 Google Inc. All rights reserved.
4 * 4 *
5 * Redistribution and use in source and binary forms, with or without 5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are 6 * modification, are permitted provided that the following conditions are
7 * met: 7 * met:
8 * 8 *
9 * * Redistributions of source code must retain the above copyright 9 * * Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer. 10 * notice, this list of conditions and the following disclaimer.
(...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after
167 , m_paintTextFlags(0) 167 , m_paintTextFlags(0)
168 , m_isHashTableDeletedValue(false) 168 , m_isHashTableDeletedValue(false)
169 , m_useSubpixelPositioning(false) 169 , m_useSubpixelPositioning(false)
170 { 170 {
171 #if !USE(HARFBUZZ) 171 #if !USE(HARFBUZZ)
172 m_font = 0; 172 m_font = 0;
173 m_scriptCache = 0; 173 m_scriptCache = 0;
174 #endif 174 #endif
175 } 175 }
176 176
177 #if ENABLE(GDI_FONTS_ON_WINDOWS) && !USE(HARFBUZZ)
178 FontPlatformData::FontPlatformData(HFONT font, float size, FontOrientation orien tation)
179 : m_font(RefCountedHFONT::create(font))
180 , m_textSize(size)
181 , m_syntheticBold(false)
182 , m_syntheticItalic(false)
183 , m_orientation(orientation)
184 , m_scriptCache(0)
185 , m_typeface(CreateTypefaceFromHFont(font, 0))
186 , m_isHashTableDeletedValue(false)
187 , m_useSubpixelPositioning(false)
188 {
189 m_paintTextFlags = computePaintTextFlags(fontFamilyName());
190 }
191 #endif
192
193 // FIXME: this constructor is needed for SVG fonts but doesn't seem to do much 177 // FIXME: this constructor is needed for SVG fonts but doesn't seem to do much
194 FontPlatformData::FontPlatformData(float size, bool bold, bool oblique) 178 FontPlatformData::FontPlatformData(float size, bool bold, bool oblique)
195 : m_textSize(size) 179 : m_textSize(size)
196 , m_syntheticBold(false) 180 , m_syntheticBold(false)
197 , m_syntheticItalic(false) 181 , m_syntheticItalic(false)
198 , m_orientation(Horizontal) 182 , m_orientation(Horizontal)
199 , m_typeface(adoptRef(SkTypeface::RefDefault())) 183 , m_typeface(adoptRef(SkTypeface::RefDefault()))
200 , m_paintTextFlags(0) 184 , m_paintTextFlags(0)
201 , m_isHashTableDeletedValue(false) 185 , m_isHashTableDeletedValue(false)
202 , m_useSubpixelPositioning(false) 186 , m_useSubpixelPositioning(false)
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
287 FontPlatformData::~FontPlatformData() 271 FontPlatformData::~FontPlatformData()
288 { 272 {
289 #if !USE(HARFBUZZ) 273 #if !USE(HARFBUZZ)
290 ScriptFreeCache(&m_scriptCache); 274 ScriptFreeCache(&m_scriptCache);
291 m_scriptCache = 0; 275 m_scriptCache = 0;
292 #endif 276 #endif
293 } 277 }
294 278
295 String FontPlatformData::fontFamilyName() const 279 String FontPlatformData::fontFamilyName() const
296 { 280 {
297 #if ENABLE(GDI_FONTS_ON_WINDOWS)
298 HWndDC dc(0);
299 HGDIOBJ oldFont = static_cast<HFONT>(SelectObject(dc, hfont()));
300 WCHAR name[LF_FACESIZE];
301 unsigned resultLength = GetTextFace(dc, LF_FACESIZE, name);
302 if (resultLength > 0)
303 resultLength--; // ignore the null terminator
304 SelectObject(dc, oldFont);
305 return String(name, resultLength);
306 #else
307 // FIXME: This returns the requested name, perhaps a better solution would b e to 281 // FIXME: This returns the requested name, perhaps a better solution would b e to
308 // return the list of names provided by SkTypeface::createFamilyNameIterator . 282 // return the list of names provided by SkTypeface::createFamilyNameIterator .
309 ASSERT(typeface()); 283 ASSERT(typeface());
310 SkString familyName; 284 SkString familyName;
311 typeface()->getFamilyName(&familyName); 285 typeface()->getFamilyName(&familyName);
312 return String::fromUTF8(familyName.c_str()); 286 return String::fromUTF8(familyName.c_str());
313 #endif
314 } 287 }
315 288
316 bool FontPlatformData::isFixedPitch() const 289 bool FontPlatformData::isFixedPitch() const
317 { 290 {
318 #if ENABLE(GDI_FONTS_ON_WINDOWS)
319 // TEXTMETRICS have this. Set m_treatAsFixedPitch based off that.
320 HWndDC dc(0);
321 HGDIOBJ oldFont = SelectObject(dc, hfont());
322
323 // Yes, this looks backwards, but the fixed pitch bit is actually set if the font
324 // is *not* fixed pitch. Unbelievable but true.
325 TEXTMETRIC textMetric = { 0 };
326 if (!GetTextMetrics(dc, &textMetric)) {
327 if (ensureFontLoaded(hfont())) {
328 // Retry GetTextMetrics.
329 // FIXME: Handle gracefully the error if this call also fails.
330 // See http://crbug.com/6401.
331 if (!GetTextMetrics(dc, &textMetric))
332 WTF_LOG_ERROR("Unable to get the text metrics after second attem pt");
333 }
334 }
335
336 bool treatAsFixedPitch = !(textMetric.tmPitchAndFamily & TMPF_FIXED_PITCH);
337
338 SelectObject(dc, oldFont);
339
340 return treatAsFixedPitch;
341 #else
342 return typeface() && typeface()->isFixedPitch(); 291 return typeface() && typeface()->isFixedPitch();
343 #endif
344 } 292 }
345 293
346 bool FontPlatformData::operator==(const FontPlatformData& a) const 294 bool FontPlatformData::operator==(const FontPlatformData& a) const
347 { 295 {
348 return SkTypeface::Equal(m_typeface.get(), a.m_typeface.get()) 296 return SkTypeface::Equal(m_typeface.get(), a.m_typeface.get())
349 && m_textSize == a.m_textSize 297 && m_textSize == a.m_textSize
350 && m_syntheticBold == a.m_syntheticBold 298 && m_syntheticBold == a.m_syntheticBold
351 && m_syntheticItalic == a.m_syntheticItalic 299 && m_syntheticItalic == a.m_syntheticItalic
352 && m_orientation == a.m_orientation 300 && m_orientation == a.m_orientation
353 && m_isHashTableDeletedValue == a.m_isHashTableDeletedValue; 301 && m_isHashTableDeletedValue == a.m_isHashTableDeletedValue;
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
399 { 347 {
400 blink::WebSandboxSupport* sandboxSupport = blink::Platform::current()->sandb oxSupport(); 348 blink::WebSandboxSupport* sandboxSupport = blink::Platform::current()->sandb oxSupport();
401 // if there is no sandbox, then we can assume the font 349 // if there is no sandbox, then we can assume the font
402 // was able to be loaded successfully already 350 // was able to be loaded successfully already
403 return sandboxSupport ? sandboxSupport->ensureFontLoaded(font) : true; 351 return sandboxSupport ? sandboxSupport->ensureFontLoaded(font) : true;
404 } 352 }
405 #endif 353 #endif
406 354
407 bool FontPlatformData::defaultUseSubpixelPositioning() 355 bool FontPlatformData::defaultUseSubpixelPositioning()
408 { 356 {
409 #if OS(WIN) && !ENABLE(GDI_FONTS_ON_WINDOWS) 357 #if OS(WIN)
410 return FontCache::fontCache()->useSubpixelPositioning(); 358 return FontCache::fontCache()->useSubpixelPositioning();
411 #else 359 #else
412 return false; 360 return false;
413 #endif 361 #endif
414 } 362 }
415 363
416 #ifndef NDEBUG 364 #ifndef NDEBUG
417 String FontPlatformData::description() const 365 String FontPlatformData::description() const
418 { 366 {
419 return String(); 367 return String();
420 } 368 }
421 #endif 369 #endif
422 370
423 } // namespace WebCore 371 } // namespace WebCore
OLDNEW
« no previous file with comments | « Source/platform/fonts/win/FontPlatformDataWin.h ('k') | Source/platform/fonts/win/GlyphPageTreeNodeWin.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698