OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2005, 2006, 2010, 2011 Apple Inc. All rights reserved. | 2 * Copyright (C) 2005, 2006, 2010, 2011 Apple Inc. All rights reserved. |
3 * Copyright (C) 2006 Alexey Proskuryakov | 3 * Copyright (C) 2006 Alexey Proskuryakov |
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 | 6 * modification, are permitted provided that the following conditions |
7 * are met: | 7 * are met: |
8 * 1. Redistributions of source code must retain the above copyright | 8 * 1. Redistributions of source code must retain the above copyright |
9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
10 * 2. Redistributions in binary form must reproduce the above copyright | 10 * 2. Redistributions in binary form must reproduce the above copyright |
(...skipping 375 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
386 float SimpleFontData::platformWidthForGlyph(Glyph glyph) const | 386 float SimpleFontData::platformWidthForGlyph(Glyph glyph) const |
387 { | 387 { |
388 CGSize advance = CGSizeZero; | 388 CGSize advance = CGSizeZero; |
389 if (platformData().orientation() == Horizontal || m_isBrokenIdeographFallbac
k) { | 389 if (platformData().orientation() == Horizontal || m_isBrokenIdeographFallbac
k) { |
390 NSFont *font = platformData().font(); | 390 NSFont *font = platformData().font(); |
391 if (font && platformData().isColorBitmapFont()) | 391 if (font && platformData().isColorBitmapFont()) |
392 advance = NSSizeToCGSize([font advancementForGlyph:glyph]); | 392 advance = NSSizeToCGSize([font advancementForGlyph:glyph]); |
393 else { | 393 else { |
394 float pointSize = platformData().m_size; | 394 float pointSize = platformData().m_size; |
395 CGAffineTransform m = CGAffineTransformMakeScale(pointSize, pointSiz
e); | 395 CGAffineTransform m = CGAffineTransformMakeScale(pointSize, pointSiz
e); |
396 if (!wkGetGlyphTransformedAdvances(platformData().cgFont(), font, &m
, &glyph, &advance)) { | 396 if (!WKGetGlyphTransformedAdvances(platformData().cgFont(), font, &m
, &glyph, &advance)) { |
397 LOG_ERROR("Unable to cache glyph widths for %@ %f", [font displa
yName], pointSize); | 397 LOG_ERROR("Unable to cache glyph widths for %@ %f", [font displa
yName], pointSize); |
398 advance.width = 0; | 398 advance.width = 0; |
399 } | 399 } |
400 } | 400 } |
401 } else | 401 } else |
402 CTFontGetAdvancesForGlyphs(m_platformData.ctFont(), kCTFontVerticalOrien
tation, &glyph, &advance, 1); | 402 CTFontGetAdvancesForGlyphs(m_platformData.ctFont(), kCTFontVerticalOrien
tation, &glyph, &advance, 1); |
403 | 403 |
404 return advance.width + m_syntheticBoldOffset; | 404 return advance.width + m_syntheticBoldOffset; |
405 } | 405 } |
406 | 406 |
(...skipping 21 matching lines...) Expand all Loading... |
428 if (!m_combiningCharacterSequenceSupport) | 428 if (!m_combiningCharacterSequenceSupport) |
429 m_combiningCharacterSequenceSupport = adoptPtr(new HashMap<String, bool>
); | 429 m_combiningCharacterSequenceSupport = adoptPtr(new HashMap<String, bool>
); |
430 | 430 |
431 WTF::HashMap<String, bool>::AddResult addResult = m_combiningCharacterSequen
ceSupport->add(String(characters, length), false); | 431 WTF::HashMap<String, bool>::AddResult addResult = m_combiningCharacterSequen
ceSupport->add(String(characters, length), false); |
432 if (!addResult.isNewEntry) | 432 if (!addResult.isNewEntry) |
433 return addResult.iterator->value; | 433 return addResult.iterator->value; |
434 | 434 |
435 RetainPtr<CGFontRef> cgFont(AdoptCF, CTFontCopyGraphicsFont(platformData().c
tFont(), 0)); | 435 RetainPtr<CGFontRef> cgFont(AdoptCF, CTFontCopyGraphicsFont(platformData().c
tFont(), 0)); |
436 | 436 |
437 ProviderInfo info = { characters, length, getCFStringAttributes(0, platformD
ata().orientation()) }; | 437 ProviderInfo info = { characters, length, getCFStringAttributes(0, platformD
ata().orientation()) }; |
438 RetainPtr<CTLineRef> line(AdoptCF, wkCreateCTLineWithUniCharProvider(&provid
eStringAndAttributes, 0, &info)); | 438 RetainPtr<CTLineRef> line(AdoptCF, WKCreateCTLineWithUniCharProvider(&provid
eStringAndAttributes, 0, &info)); |
439 | 439 |
440 CFArrayRef runArray = CTLineGetGlyphRuns(line.get()); | 440 CFArrayRef runArray = CTLineGetGlyphRuns(line.get()); |
441 CFIndex runCount = CFArrayGetCount(runArray); | 441 CFIndex runCount = CFArrayGetCount(runArray); |
442 | 442 |
443 for (CFIndex r = 0; r < runCount; r++) { | 443 for (CFIndex r = 0; r < runCount; r++) { |
444 CTRunRef ctRun = static_cast<CTRunRef>(CFArrayGetValueAtIndex(runArray,
r)); | 444 CTRunRef ctRun = static_cast<CTRunRef>(CFArrayGetValueAtIndex(runArray,
r)); |
445 ASSERT(CFGetTypeID(ctRun) == CTRunGetTypeID()); | 445 ASSERT(CFGetTypeID(ctRun) == CTRunGetTypeID()); |
446 CFDictionaryRef runAttributes = CTRunGetAttributes(ctRun); | 446 CFDictionaryRef runAttributes = CTRunGetAttributes(ctRun); |
447 CTFontRef runFont = static_cast<CTFontRef>(CFDictionaryGetValue(runAttri
butes, kCTFontAttributeName)); | 447 CTFontRef runFont = static_cast<CTFontRef>(CFDictionaryGetValue(runAttri
butes, kCTFontAttributeName)); |
448 RetainPtr<CGFontRef> runCGFont(AdoptCF, CTFontCopyGraphicsFont(runFont,
0)); | 448 RetainPtr<CGFontRef> runCGFont(AdoptCF, CTFontCopyGraphicsFont(runFont,
0)); |
449 if (!CFEqual(runCGFont.get(), cgFont.get())) | 449 if (!CFEqual(runCGFont.get(), cgFont.get())) |
450 return false; | 450 return false; |
451 } | 451 } |
452 | 452 |
453 addResult.iterator->value = true; | 453 addResult.iterator->value = true; |
454 return true; | 454 return true; |
455 } | 455 } |
456 | 456 |
457 } // namespace WebCore | 457 } // namespace WebCore |
OLD | NEW |