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

Side by Side Diff: Source/platform/fonts/Font.cpp

Issue 567543002: Avoid re-parsing of string in fillText and measureText in Canvas (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Updating code and adding Layout test case Created 6 years, 3 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
OLDNEW
1 /* 1 /*
2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org)
3 * (C) 1999 Antti Koivisto (koivisto@kde.org) 3 * (C) 1999 Antti Koivisto (koivisto@kde.org)
4 * (C) 2000 Dirk Mueller (mueller@kde.org) 4 * (C) 2000 Dirk Mueller (mueller@kde.org)
5 * Copyright (C) 2003, 2006, 2010, 2011 Apple Inc. All rights reserved. 5 * Copyright (C) 2003, 2006, 2010, 2011 Apple Inc. All rights reserved.
6 * 6 *
7 * This library is free software; you can redistribute it and/or 7 * This library is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU Library General Public 8 * modify it under the terms of the GNU Library General Public
9 * License as published by the Free Software Foundation; either 9 * License as published by the Free Software Foundation; either
10 * version 2 of the License, or (at your option) any later version. 10 * version 2 of the License, or (at your option) any later version.
(...skipping 373 matching lines...) Expand 10 before | Expand all | Expand 10 after
384 if (data.glyph != verticalRightData.glyph) 384 if (data.glyph != verticalRightData.glyph)
385 return std::make_pair(data, page); 385 return std::make_pair(data, page);
386 // The glyphs are identical, meaning that we should just use the hor izontal glyph. 386 // The glyphs are identical, meaning that we should just use the hor izontal glyph.
387 if (verticalRightData.fontData) 387 if (verticalRightData.fontData)
388 return std::make_pair(verticalRightData, verticalRightPage); 388 return std::make_pair(verticalRightData, verticalRightPage);
389 } 389 }
390 } 390 }
391 return std::make_pair(data, page); 391 return std::make_pair(data, page);
392 } 392 }
393 393
394 std::pair<GlyphData, GlyphPage*> Font::glyphDataAndPageForCharacter(UChar32 c, b ool mirror, FontDataVariant variant) const 394 std::pair<GlyphData, GlyphPage*> Font::glyphDataAndPageForCharacter(UChar32& c, bool mirror, bool spaceNormalize, FontDataVariant variant) const
395 { 395 {
396 ASSERT(isMainThread()); 396 ASSERT(isMainThread());
397 397
398 if (variant == AutoVariant) { 398 if (variant == AutoVariant) {
399 if (m_fontDescription.variant() == FontVariantSmallCaps && !primaryFont( )->isSVGFont()) { 399 if (m_fontDescription.variant() == FontVariantSmallCaps && !primaryFont( )->isSVGFont()) {
400 UChar32 upperC = toUpper(c); 400 UChar32 upperC = toUpper(c);
401 if (upperC != c) { 401 if (upperC != c) {
402 c = upperC; 402 c = upperC;
403 variant = SmallCapsVariant; 403 variant = SmallCapsVariant;
404 } else { 404 } else {
405 variant = NormalVariant; 405 variant = NormalVariant;
406 } 406 }
407 } else { 407 } else {
408 variant = NormalVariant; 408 variant = NormalVariant;
409 } 409 }
410 } 410 }
411 411
412 if (spaceNormalize && Character::isNormalizedCanvasSpaceCharacter(c))
413 c = space;
414
412 if (mirror) 415 if (mirror)
413 c = mirroredChar(c); 416 c = mirroredChar(c);
414 417
415 unsigned pageNumber = (c / GlyphPage::size); 418 unsigned pageNumber = (c / GlyphPage::size);
416 419
417 GlyphPageTreeNode* node = m_fontFallbackList->getPageNode(pageNumber); 420 GlyphPageTreeNode* node = m_fontFallbackList->getPageNode(pageNumber);
418 if (!node) { 421 if (!node) {
419 node = GlyphPageTreeNode::getRootChild(fontDataAt(0), pageNumber); 422 node = GlyphPageTreeNode::getRootChild(fontDataAt(0), pageNumber);
420 m_fontFallbackList->setPageNode(pageNumber, node); 423 m_fontFallbackList->setPageNode(pageNumber, node);
421 } 424 }
(...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after
559 if (mark.length() < 2) 562 if (mark.length() < 2)
560 return false; 563 return false;
561 564
562 UChar low = mark[1]; 565 UChar low = mark[1];
563 if (!U16_IS_TRAIL(low)) 566 if (!U16_IS_TRAIL(low))
564 return false; 567 return false;
565 568
566 character = U16_GET_SUPPLEMENTARY(character, low); 569 character = U16_GET_SUPPLEMENTARY(character, low);
567 } 570 }
568 571
569 glyphData = glyphDataForCharacter(character, false, EmphasisMarkVariant); 572 glyphData = glyphDataForCharacter(character, false, false, EmphasisMarkVaria nt);
eae 2014/09/16 00:46:33 bool normalizeSpace = false; glyphData = glyphDat
h.joshi 2014/09/16 05:48:11 Done.
570 return true; 573 return true;
571 } 574 }
572 575
573 int Font::emphasisMarkAscent(const AtomicString& mark) const 576 int Font::emphasisMarkAscent(const AtomicString& mark) const
574 { 577 {
575 FontCachePurgePreventer purgePreventer; 578 FontCachePurgePreventer purgePreventer;
576 579
577 GlyphData markGlyphData; 580 GlyphData markGlyphData;
578 if (!getEmphasisMarkGlyphData(mark, markGlyphData)) 581 if (!getEmphasisMarkGlyphData(mark, markGlyphData))
579 return 0; 582 return 0;
(...skipping 276 matching lines...) Expand 10 before | Expand all | Expand 10 after
856 if (delta <= 0) 859 if (delta <= 0)
857 break; 860 break;
858 } 861 }
859 } 862 }
860 } 863 }
861 864
862 return offset; 865 return offset;
863 } 866 }
864 867
865 } // namespace blink 868 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698