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

Side by Side Diff: Source/core/platform/graphics/mac/SimpleFontDataMac.mm

Issue 14856004: Finish removing WebKitSystemInterface from Blink. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Simplify Created 7 years, 7 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) 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 20 matching lines...) Expand all
31 #import <ApplicationServices/ApplicationServices.h> 31 #import <ApplicationServices/ApplicationServices.h>
32 #import <float.h> 32 #import <float.h>
33 #import <unicode/uchar.h> 33 #import <unicode/uchar.h>
34 #import "core/platform/SharedBuffer.h" 34 #import "core/platform/SharedBuffer.h"
35 #import "core/platform/graphics/Color.h" 35 #import "core/platform/graphics/Color.h"
36 #import "core/platform/graphics/FloatRect.h" 36 #import "core/platform/graphics/FloatRect.h"
37 #import "core/platform/graphics/Font.h" 37 #import "core/platform/graphics/Font.h"
38 #import "core/platform/graphics/FontCache.h" 38 #import "core/platform/graphics/FontCache.h"
39 #import "core/platform/graphics/FontDescription.h" 39 #import "core/platform/graphics/FontDescription.h"
40 #import "core/platform/mac/BlockExceptions.h" 40 #import "core/platform/mac/BlockExceptions.h"
41 #import "core/platform/mac/WebCoreSystemInterface.h"
42 #import <wtf/Assertions.h> 41 #import <wtf/Assertions.h>
43 #import <wtf/RetainPtr.h> 42 #import <wtf/RetainPtr.h>
44 #import <wtf/StdLibExtras.h> 43 #import <wtf/StdLibExtras.h>
45 #import <wtf/UnusedParam.h> 44 #import <wtf/UnusedParam.h>
46 45
47 @interface NSFont (WebAppKitSecretAPI) 46 @interface NSFont (WebAppKitSecretAPI)
48 - (BOOL)_isFakeFixedPitch; 47 - (BOOL)_isFakeFixedPitch;
49 @end 48 @end
50 49
50 // The names of these constants were taken from history
51 // /trunk/WebKit/WebCoreSupport.subproj/WebTextRenderer.m@9311. The values
52 // were derived from the assembly of libWebKitSystemInterfaceLeopard.a.
53 enum CGFontRenderingMode {
54 kCGFontRenderingMode1BitPixelAligned = 0x0,
55 kCGFontRenderingModeAntialiasedPixelAligned = 0x1,
56 kCGFontRenderingModeAntialiased = 0xd
57 };
58
59 // Forward declare Mac SPIs.
60 extern "C" {
61 // Request for public API: rdar://13803586
62 bool CGFontGetGlyphAdvancesForStyle(CGFontRef font, CGAffineTransform* transform , CGFontRenderingMode renderingMode, ATSGlyphRef* glyph, size_t count, CGSize* a dvance);
63
64 // Request for public API: rdar://13803619
65 CTLineRef CTLineCreateWithUniCharProvider(const UniChar* (*provide)(CFIndex stri ngIndex, CFIndex* charCount, CFDictionaryRef* attributes, void* context), void ( *dispose)(const UniChar* chars, void* context), void* context);
66 }
67
68 static CGFontRenderingMode cgFontRenderingModeForNSFont(NSFont* font) {
69 if (!font)
70 return kCGFontRenderingModeAntialiasedPixelAligned;
71
72 switch ([font renderingMode]) {
73 case NSFontIntegerAdvancementsRenderingMode: return kCGFontRenderingMode 1BitPixelAligned;
74 case NSFontAntialiasedIntegerAdvancementsRenderingMode: return kCGFontRe nderingModeAntialiasedPixelAligned;
75 default: return kCGFontRenderingModeAntialiased;
76 }
77 }
78
51 using namespace std; 79 using namespace std;
52 80
53 namespace WebCore { 81 namespace WebCore {
54 82
55 static bool fontHasVerticalGlyphs(CTFontRef ctFont) 83 static bool fontHasVerticalGlyphs(CTFontRef ctFont)
56 { 84 {
57 // The check doesn't look neat but this is what AppKit does for vertical wri ting... 85 // The check doesn't look neat but this is what AppKit does for vertical wri ting...
58 RetainPtr<CFArrayRef> tableTags(AdoptCF, CTFontCopyAvailableTables(ctFont, k CTFontTableOptionNoOptions)); 86 RetainPtr<CFArrayRef> tableTags(AdoptCF, CTFontCopyAvailableTables(ctFont, k CTFontTableOptionNoOptions));
59 CFIndex numTables = CFArrayGetCount(tableTags.get()); 87 CFIndex numTables = CFArrayGetCount(tableTags.get());
60 for (CFIndex index = 0; index < numTables; ++index) { 88 for (CFIndex index = 0; index < numTables; ++index) {
61 CTFontTableTag tag = (CTFontTableTag)(uintptr_t)CFArrayGetValueAtIndex(t ableTags.get(), index); 89 CTFontTableTag tag = (CTFontTableTag)(uintptr_t)CFArrayGetValueAtIndex(t ableTags.get(), index);
62 if (tag == kCTFontTableVhea || tag == kCTFontTableVORG) 90 if (tag == kCTFontTableVhea || tag == kCTFontTableVORG)
63 return true; 91 return true;
64 } 92 }
(...skipping 321 matching lines...) Expand 10 before | Expand all | Expand 10 after
386 float SimpleFontData::platformWidthForGlyph(Glyph glyph) const 414 float SimpleFontData::platformWidthForGlyph(Glyph glyph) const
387 { 415 {
388 CGSize advance = CGSizeZero; 416 CGSize advance = CGSizeZero;
389 if (platformData().orientation() == Horizontal || m_isBrokenIdeographFallbac k) { 417 if (platformData().orientation() == Horizontal || m_isBrokenIdeographFallbac k) {
390 NSFont *font = platformData().font(); 418 NSFont *font = platformData().font();
391 if (font && platformData().isColorBitmapFont()) 419 if (font && platformData().isColorBitmapFont())
392 advance = NSSizeToCGSize([font advancementForGlyph:glyph]); 420 advance = NSSizeToCGSize([font advancementForGlyph:glyph]);
393 else { 421 else {
394 float pointSize = platformData().m_size; 422 float pointSize = platformData().m_size;
395 CGAffineTransform m = CGAffineTransformMakeScale(pointSize, pointSiz e); 423 CGAffineTransform m = CGAffineTransformMakeScale(pointSize, pointSiz e);
396 if (!WKGetGlyphTransformedAdvances(platformData().cgFont(), font, &m , &glyph, &advance)) { 424 if (!CGFontGetGlyphAdvancesForStyle(platformData().cgFont(), &m, cgF ontRenderingModeForNSFont(font), &glyph, 1, &advance)) {
397 LOG_ERROR("Unable to cache glyph widths for %@ %f", [font displa yName], pointSize); 425 LOG_ERROR("Unable to cache glyph widths for %@ %f", [font displa yName], pointSize);
398 advance.width = 0; 426 advance.width = 0;
399 } 427 }
400 } 428 }
401 } else 429 } else
402 CTFontGetAdvancesForGlyphs(m_platformData.ctFont(), kCTFontVerticalOrien tation, &glyph, &advance, 1); 430 CTFontGetAdvancesForGlyphs(m_platformData.ctFont(), kCTFontVerticalOrien tation, &glyph, &advance, 1);
403 431
404 return advance.width + m_syntheticBoldOffset; 432 return advance.width + m_syntheticBoldOffset;
405 } 433 }
406 434
(...skipping 21 matching lines...) Expand all
428 if (!m_combiningCharacterSequenceSupport) 456 if (!m_combiningCharacterSequenceSupport)
429 m_combiningCharacterSequenceSupport = adoptPtr(new HashMap<String, bool> ); 457 m_combiningCharacterSequenceSupport = adoptPtr(new HashMap<String, bool> );
430 458
431 WTF::HashMap<String, bool>::AddResult addResult = m_combiningCharacterSequen ceSupport->add(String(characters, length), false); 459 WTF::HashMap<String, bool>::AddResult addResult = m_combiningCharacterSequen ceSupport->add(String(characters, length), false);
432 if (!addResult.isNewEntry) 460 if (!addResult.isNewEntry)
433 return addResult.iterator->value; 461 return addResult.iterator->value;
434 462
435 RetainPtr<CGFontRef> cgFont(AdoptCF, CTFontCopyGraphicsFont(platformData().c tFont(), 0)); 463 RetainPtr<CGFontRef> cgFont(AdoptCF, CTFontCopyGraphicsFont(platformData().c tFont(), 0));
436 464
437 ProviderInfo info = { characters, length, getCFStringAttributes(0, platformD ata().orientation()) }; 465 ProviderInfo info = { characters, length, getCFStringAttributes(0, platformD ata().orientation()) };
438 RetainPtr<CTLineRef> line(AdoptCF, WKCreateCTLineWithUniCharProvider(&provid eStringAndAttributes, 0, &info)); 466 RetainPtr<CTLineRef> line(AdoptCF, CTLineCreateWithUniCharProvider(&provideS tringAndAttributes, 0, &info));
439 467
440 CFArrayRef runArray = CTLineGetGlyphRuns(line.get()); 468 CFArrayRef runArray = CTLineGetGlyphRuns(line.get());
441 CFIndex runCount = CFArrayGetCount(runArray); 469 CFIndex runCount = CFArrayGetCount(runArray);
442 470
443 for (CFIndex r = 0; r < runCount; r++) { 471 for (CFIndex r = 0; r < runCount; r++) {
444 CTRunRef ctRun = static_cast<CTRunRef>(CFArrayGetValueAtIndex(runArray, r)); 472 CTRunRef ctRun = static_cast<CTRunRef>(CFArrayGetValueAtIndex(runArray, r));
445 ASSERT(CFGetTypeID(ctRun) == CTRunGetTypeID()); 473 ASSERT(CFGetTypeID(ctRun) == CTRunGetTypeID());
446 CFDictionaryRef runAttributes = CTRunGetAttributes(ctRun); 474 CFDictionaryRef runAttributes = CTRunGetAttributes(ctRun);
447 CTFontRef runFont = static_cast<CTFontRef>(CFDictionaryGetValue(runAttri butes, kCTFontAttributeName)); 475 CTFontRef runFont = static_cast<CTFontRef>(CFDictionaryGetValue(runAttri butes, kCTFontAttributeName));
448 RetainPtr<CGFontRef> runCGFont(AdoptCF, CTFontCopyGraphicsFont(runFont, 0)); 476 RetainPtr<CGFontRef> runCGFont(AdoptCF, CTFontCopyGraphicsFont(runFont, 0));
449 if (!CFEqual(runCGFont.get(), cgFont.get())) 477 if (!CFEqual(runCGFont.get(), cgFont.get()))
450 return false; 478 return false;
451 } 479 }
452 480
453 addResult.iterator->value = true; 481 addResult.iterator->value = true;
454 return true; 482 return true;
455 } 483 }
456 484
457 } // namespace WebCore 485 } // namespace WebCore
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698