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

Side by Side Diff: Source/platform/fonts/mac/SimpleFontDataCoreText.cpp

Issue 244253003: SimpleFontData::fillGlyphPage should not set zero for missing glyphs (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: fix expectation Created 6 years, 8 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, 2012 Apple Inc. All rights reserved. 2 * Copyright (C) 2005, 2006, 2012 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 87 matching lines...) Expand 10 before | Expand all | Expand 10 after
98 } 98 }
99 99
100 bool SimpleFontData::fillGlyphPage(GlyphPage* pageToFill, unsigned offset, unsig ned length, UChar* buffer, unsigned bufferLength) const 100 bool SimpleFontData::fillGlyphPage(GlyphPage* pageToFill, unsigned offset, unsig ned length, UChar* buffer, unsigned bufferLength) const
101 { 101 {
102 bool haveGlyphs = false; 102 bool haveGlyphs = false;
103 103
104 Vector<CGGlyph, 512> glyphs(bufferLength); 104 Vector<CGGlyph, 512> glyphs(bufferLength);
105 if (!shouldUseCoreText(buffer, bufferLength, this)) { 105 if (!shouldUseCoreText(buffer, bufferLength, this)) {
106 CGFontGetGlyphsForUnichars(platformData().cgFont(), buffer, glyphs.data( ), bufferLength); 106 CGFontGetGlyphsForUnichars(platformData().cgFont(), buffer, glyphs.data( ), bufferLength);
107 for (unsigned i = 0; i < length; ++i) { 107 for (unsigned i = 0; i < length; ++i) {
108 if (!glyphs[i]) { 108 if (glyphs[i]) {
109 pageToFill->setGlyphDataForIndex(offset + i, 0, 0);
110 } else {
111 pageToFill->setGlyphDataForIndex(offset + i, glyphs[i], this); 109 pageToFill->setGlyphDataForIndex(offset + i, glyphs[i], this);
112 haveGlyphs = true; 110 haveGlyphs = true;
113 } 111 }
114 } 112 }
115 } else if (!platformData().isCompositeFontReference() && platformData().widt hVariant() != RegularWidth 113 } else if (!platformData().isCompositeFontReference() && platformData().widt hVariant() != RegularWidth
116 && CTFontGetGlyphsForCharacters(platformData().ctFont(), buffer, glyphs. data(), bufferLength)) { 114 && CTFontGetGlyphsForCharacters(platformData().ctFont(), buffer, glyphs. data(), bufferLength)) {
117 // When buffer consists of surrogate pairs, CTFontGetGlyphsForCharacters 115 // When buffer consists of surrogate pairs, CTFontGetGlyphsForCharacters
118 // places the glyphs at indices corresponding to the first character of each pair. 116 // places the glyphs at indices corresponding to the first character of each pair.
119 unsigned glyphStep = bufferLength / length; 117 unsigned glyphStep = bufferLength / length;
120 for (unsigned i = 0; i < length; ++i) { 118 for (unsigned i = 0; i < length; ++i) {
121 if (!glyphs[i * glyphStep]) { 119 if (glyphs[i * glyphStep]) {
122 pageToFill->setGlyphDataForIndex(offset + i, 0, 0);
123 } else {
124 pageToFill->setGlyphDataForIndex(offset + i, glyphs[i * glyphSte p], this); 120 pageToFill->setGlyphDataForIndex(offset + i, glyphs[i * glyphSte p], this);
125 haveGlyphs = true; 121 haveGlyphs = true;
126 } 122 }
127 } 123 }
128 } else { 124 } else {
129 // We ask CoreText for possible vertical variant glyphs 125 // We ask CoreText for possible vertical variant glyphs
130 RetainPtr<CFStringRef> string(AdoptCF, CFStringCreateWithCharactersNoCop y(kCFAllocatorDefault, buffer, bufferLength, kCFAllocatorNull)); 126 RetainPtr<CFStringRef> string(AdoptCF, CFStringCreateWithCharactersNoCop y(kCFAllocatorDefault, buffer, bufferLength, kCFAllocatorNull));
131 RetainPtr<CFAttributedStringRef> attributedString(AdoptCF, CFAttributedS tringCreate(kCFAllocatorDefault, string.get(), getCFStringAttributes(0, hasVerti calGlyphs() ? Vertical : Horizontal))); 127 RetainPtr<CFAttributedStringRef> attributedString(AdoptCF, CFAttributedS tringCreate(kCFAllocatorDefault, string.get(), getCFStringAttributes(0, hasVerti calGlyphs() ? Vertical : Horizontal)));
132 RetainPtr<CTLineRef> line(AdoptCF, CTLineCreateWithAttributedString(attr ibutedString.get())); 128 RetainPtr<CTLineRef> line(AdoptCF, CTLineCreateWithAttributedString(attr ibutedString.get()));
133 129
134 CFArrayRef runArray = CTLineGetGlyphRuns(line.get()); 130 CFArrayRef runArray = CTLineGetGlyphRuns(line.get());
135 CFIndex runCount = CFArrayGetCount(runArray); 131 CFIndex runCount = CFArrayGetCount(runArray);
136 132
137 // Initialize glyph entries
138 for (unsigned index = 0; index < length; ++index)
139 pageToFill->setGlyphDataForIndex(offset + index, 0, 0);
140
141 Vector<CGGlyph, 512> glyphVector; 133 Vector<CGGlyph, 512> glyphVector;
142 Vector<CFIndex, 512> indexVector; 134 Vector<CFIndex, 512> indexVector;
143 bool done = false; 135 bool done = false;
144 136
145 // For the CGFont comparison in the loop, use the CGFont that Core Text assigns to the CTFont. This may 137 // For the CGFont comparison in the loop, use the CGFont that Core Text assigns to the CTFont. This may
146 // be non-CFEqual to platformData().cgFont(). 138 // be non-CFEqual to platformData().cgFont().
147 RetainPtr<CGFontRef> cgFont(AdoptCF, CTFontCopyGraphicsFont(platformData ().ctFont(), 0)); 139 RetainPtr<CGFontRef> cgFont(AdoptCF, CTFontCopyGraphicsFont(platformData ().ctFont(), 0));
148 140
149 for (CFIndex r = 0; r < runCount && !done ; ++r) { 141 for (CFIndex r = 0; r < runCount && !done ; ++r) {
150 // CTLine could map characters over multiple fonts using its own fon t fallback list. 142 // CTLine could map characters over multiple fonts using its own fon t fallback list.
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
200 } 192 }
201 } 193 }
202 } 194 }
203 } 195 }
204 } 196 }
205 197
206 return haveGlyphs; 198 return haveGlyphs;
207 } 199 }
208 200
209 } // namespace WebCore 201 } // namespace WebCore
OLDNEW
« no previous file with comments | « Source/platform/fonts/GlyphPageTreeNode.cpp ('k') | Source/platform/fonts/skia/SimpleFontDataSkia.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698