| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2008 Nikolas Zimmermann <zimmermann@kde.org> | 2 * Copyright (C) 2008 Nikolas Zimmermann <zimmermann@kde.org> |
| 3 * | 3 * |
| 4 * This library is free software; you can redistribute it and/or | 4 * This library is free software; you can redistribute it and/or |
| 5 * modify it under the terms of the GNU Library General Public | 5 * modify it under the terms of the GNU Library General Public |
| 6 * License as published by the Free Software Foundation; either | 6 * License as published by the Free Software Foundation; either |
| 7 * version 2 of the License, or (at your option) any later version. | 7 * version 2 of the License, or (at your option) any later version. |
| 8 * | 8 * |
| 9 * This library is distributed in the hope that it will be useful, | 9 * This library is distributed in the hope that it will be useful, |
| 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of | 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| (...skipping 238 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 249 return fillNonBMPGlyphs(fontElement, pageToFill, offset, length, buffer, fon
tData); | 249 return fillNonBMPGlyphs(fontElement, pageToFill, offset, length, buffer, fon
tData); |
| 250 } | 250 } |
| 251 | 251 |
| 252 bool SVGFontData::fillBMPGlyphs(SVGFontElement* fontElement, GlyphPage* pageToFi
ll, unsigned offset, unsigned length, UChar* buffer, const SimpleFontData* fontD
ata) const | 252 bool SVGFontData::fillBMPGlyphs(SVGFontElement* fontElement, GlyphPage* pageToFi
ll, unsigned offset, unsigned length, UChar* buffer, const SimpleFontData* fontD
ata) const |
| 253 { | 253 { |
| 254 bool haveGlyphs = false; | 254 bool haveGlyphs = false; |
| 255 Vector<SVGGlyph> glyphs; | 255 Vector<SVGGlyph> glyphs; |
| 256 for (unsigned i = 0; i < length; ++i) { | 256 for (unsigned i = 0; i < length; ++i) { |
| 257 String lookupString(buffer + i, 1); | 257 String lookupString(buffer + i, 1); |
| 258 fontElement->collectGlyphsForString(lookupString, glyphs); | 258 fontElement->collectGlyphsForString(lookupString, glyphs); |
| 259 if (glyphs.isEmpty()) { | 259 if (glyphs.isEmpty()) |
| 260 pageToFill->setGlyphDataForIndex(offset + i, 0, 0); | |
| 261 continue; | 260 continue; |
| 262 } | |
| 263 | 261 |
| 264 // Associate entry in glyph page with first valid SVGGlyph. | 262 // Associate entry in glyph page with first valid SVGGlyph. |
| 265 // If there are multiple valid ones, just take the first one. WidthItera
tor will take | 263 // If there are multiple valid ones, just take the first one. WidthItera
tor will take |
| 266 // care of matching to the correct glyph, if multiple ones are available
, as that's | 264 // care of matching to the correct glyph, if multiple ones are available
, as that's |
| 267 // only possible within the context of a string (eg. arabic form matchin
g). | 265 // only possible within the context of a string (eg. arabic form matchin
g). |
| 268 haveGlyphs = true; | 266 haveGlyphs = true; |
| 269 pageToFill->setGlyphDataForIndex(offset + i, glyphs.first().tableEntry,
fontData); | 267 pageToFill->setGlyphDataForIndex(offset + i, glyphs.first().tableEntry,
fontData); |
| 270 glyphs.clear(); | 268 glyphs.clear(); |
| 271 } | 269 } |
| 272 | 270 |
| 273 return haveGlyphs; | 271 return haveGlyphs; |
| 274 } | 272 } |
| 275 | 273 |
| 276 bool SVGFontData::fillNonBMPGlyphs(SVGFontElement* fontElement, GlyphPage* pageT
oFill, unsigned offset, unsigned length, UChar* buffer, const SimpleFontData* fo
ntData) const | 274 bool SVGFontData::fillNonBMPGlyphs(SVGFontElement* fontElement, GlyphPage* pageT
oFill, unsigned offset, unsigned length, UChar* buffer, const SimpleFontData* fo
ntData) const |
| 277 { | 275 { |
| 278 bool haveGlyphs = false; | 276 bool haveGlyphs = false; |
| 279 Vector<SVGGlyph> glyphs; | 277 Vector<SVGGlyph> glyphs; |
| 280 for (unsigned i = 0; i < length; ++i) { | 278 for (unsigned i = 0; i < length; ++i) { |
| 281 // Each character here consists of a surrogate pair | 279 // Each character here consists of a surrogate pair |
| 282 String lookupString(buffer + i * 2, 2); | 280 String lookupString(buffer + i * 2, 2); |
| 283 fontElement->collectGlyphsForString(lookupString, glyphs); | 281 fontElement->collectGlyphsForString(lookupString, glyphs); |
| 284 if (glyphs.isEmpty()) { | 282 if (glyphs.isEmpty()) |
| 285 pageToFill->setGlyphDataForIndex(offset + i, 0, 0); | |
| 286 continue; | 283 continue; |
| 287 } | |
| 288 | 284 |
| 289 // Associate entry in glyph page with first valid SVGGlyph. | 285 // Associate entry in glyph page with first valid SVGGlyph. |
| 290 // If there are multiple valid ones, just take the first one. WidthItera
tor will take | 286 // If there are multiple valid ones, just take the first one. WidthItera
tor will take |
| 291 // care of matching to the correct glyph, if multiple ones are available
, as that's | 287 // care of matching to the correct glyph, if multiple ones are available
, as that's |
| 292 // only possible within the context of a string (eg. arabic form matchin
g). | 288 // only possible within the context of a string (eg. arabic form matchin
g). |
| 293 haveGlyphs = true; | 289 haveGlyphs = true; |
| 294 pageToFill->setGlyphDataForIndex(offset + i, glyphs.first().tableEntry,
fontData); | 290 pageToFill->setGlyphDataForIndex(offset + i, glyphs.first().tableEntry,
fontData); |
| 295 glyphs.clear(); | 291 glyphs.clear(); |
| 296 } | 292 } |
| 297 | 293 |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 334 | 330 |
| 335 bool SVGFontData::shouldSkipDrawing() const | 331 bool SVGFontData::shouldSkipDrawing() const |
| 336 { | 332 { |
| 337 // FIXME: (http://crbug.com/359380) Glyph may be referenced after removeNode
from the current editing impl. | 333 // FIXME: (http://crbug.com/359380) Glyph may be referenced after removeNode
from the current editing impl. |
| 338 return !m_svgFontFaceElement || !m_svgFontFaceElement->inDocument(); | 334 return !m_svgFontFaceElement || !m_svgFontFaceElement->inDocument(); |
| 339 } | 335 } |
| 340 | 336 |
| 341 } // namespace WebCore | 337 } // namespace WebCore |
| 342 | 338 |
| 343 #endif | 339 #endif |
| OLD | NEW |