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

Unified Diff: Source/platform/fonts/Font.cpp

Issue 642863005: Consolidate Font::codePath kerning & ligatures exceptions (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: review comments Created 6 years, 2 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « Source/platform/fonts/Font.h ('k') | Source/platform/text/TextPath.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/platform/fonts/Font.cpp
diff --git a/Source/platform/fonts/Font.cpp b/Source/platform/fonts/Font.cpp
index e2ccfba1a003a2602ba31caaea166e73ec7850db..2aca587e3924ba04b548f1afc031d91c538b9dfa 100644
--- a/Source/platform/fonts/Font.cpp
+++ b/Source/platform/fonts/Font.cpp
@@ -50,8 +50,6 @@ using namespace Unicode;
namespace blink {
-CodePath Font::s_codePath = AutoPath;
-
Font::Font()
{
}
@@ -110,12 +108,7 @@ float Font::drawText(GraphicsContext* context, const TextRunPaintInfo& runInfo,
if (shouldSkipDrawing() && customFontNotReadyAction == DoNotPaintIfFontNotReady)
return 0;
- CodePath codePathToUse = codePath(runInfo.run);
- // FIXME: Use the fast code path once it handles partial runs with kerning and ligatures. See http://webkit.org/b/100050
- if (codePathToUse != ComplexPath && fontDescription().typesettingFeatures() && (runInfo.from || runInfo.to != runInfo.run.length()))
- codePathToUse = ComplexPath;
-
- if (codePathToUse != ComplexPath)
+ if (codePath(runInfo) != ComplexPath)
return drawSimpleText(context, runInfo, point);
return drawComplexText(context, runInfo, point);
@@ -126,12 +119,7 @@ void Font::drawEmphasisMarks(GraphicsContext* context, const TextRunPaintInfo& r
if (shouldSkipDrawing())
return;
- CodePath codePathToUse = codePath(runInfo.run);
- // FIXME: Use the fast code path once it handles partial runs with kerning and ligatures. See http://webkit.org/b/100050
- if (codePathToUse != ComplexPath && fontDescription().typesettingFeatures() && (runInfo.from || runInfo.to != runInfo.run.length()))
- codePathToUse = ComplexPath;
-
- if (codePathToUse != ComplexPath)
+ if (codePath(runInfo) != ComplexPath)
drawEmphasisMarksForSimpleText(context, runInfo, mark, point);
else
drawEmphasisMarksForComplexText(context, runInfo, mark, point);
@@ -150,7 +138,7 @@ static inline void updateGlyphOverflowFromBounds(const IntRectExtent& glyphBound
float Font::width(const TextRun& run, HashSet<const SimpleFontData*>* fallbackFonts, GlyphOverflow* glyphOverflow) const
{
- CodePath codePathToUse = codePath(run);
+ CodePath codePathToUse = codePath(TextRunPaintInfo(run));
if (codePathToUse != ComplexPath) {
// The simple path can optimize the case where glyph overflow is not observable.
if (codePathToUse != SimpleWithGlyphOverflowPath && (glyphOverflow && !glyphOverflow->computeBounds))
@@ -211,12 +199,7 @@ PassTextBlobPtr Font::buildTextBlob(const TextRunPaintInfo& runInfo, const Float
if (shouldSkipDrawing() && customFontNotReadyAction == DoNotPaintIfFontNotReady)
return nullptr;
- CodePath codePathToUse = codePath(runInfo.run);
- // FIXME: Use the fast code path once it handles partial runs with kerning and ligatures. See http://webkit.org/b/100050
- if (codePathToUse != ComplexPath && fontDescription().typesettingFeatures() && (runInfo.from || runInfo.to != runInfo.run.length()))
- codePathToUse = ComplexPath;
-
- if (codePathToUse != ComplexPath)
+ if (codePath(runInfo) != ComplexPath)
return buildTextBlobForSimpleText(runInfo, textOrigin, couldUseLCDRenderedText);
return nullptr;
@@ -297,12 +280,11 @@ FloatRect Font::selectionRectForText(const TextRun& run, const FloatPoint& point
{
to = (to == -1 ? run.length() : to);
- CodePath codePathToUse = codePath(run);
- // FIXME: Use the fast code path once it handles partial runs with kerning and ligatures. See http://webkit.org/b/100050
- if (codePathToUse != ComplexPath && fontDescription().typesettingFeatures() && (from || to != run.length()))
- codePathToUse = ComplexPath;
+ TextRunPaintInfo runInfo(run);
+ runInfo.from = from;
+ runInfo.to = to;
- if (codePathToUse != ComplexPath)
+ if (codePath(runInfo) != ComplexPath)
return selectionRectForSimpleText(run, point, h, from, to, accountForGlyphBounds);
return selectionRectForComplexText(run, point, h, from, to);
@@ -310,27 +292,18 @@ FloatRect Font::selectionRectForText(const TextRun& run, const FloatPoint& point
int Font::offsetForPosition(const TextRun& run, float x, bool includePartialGlyphs) const
{
- // FIXME: Use the fast code path once it handles partial runs with kerning and ligatures. See http://webkit.org/b/100050
- if (codePath(run) != ComplexPath && !fontDescription().typesettingFeatures())
+ if (codePath(TextRunPaintInfo(run)) != ComplexPath && !fontDescription().typesettingFeatures())
return offsetForPositionForSimpleText(run, x, includePartialGlyphs);
return offsetForPositionForComplexText(run, x, includePartialGlyphs);
}
-void Font::setCodePath(CodePath p)
-{
- s_codePath = p;
-}
-
-CodePath Font::codePath()
+CodePath Font::codePath(const TextRunPaintInfo& runInfo) const
{
- return s_codePath;
-}
+ const TextRun& run = runInfo.run;
-CodePath Font::codePath(const TextRun& run) const
-{
- if (s_codePath != AutoPath)
- return s_codePath;
+ if (fontDescription().typesettingFeatures() && (runInfo.from || runInfo.to != run.length()))
+ return ComplexPath;
#if ENABLE(SVG_FONTS)
if (run.renderingContext())
« no previous file with comments | « Source/platform/fonts/Font.h ('k') | Source/platform/text/TextPath.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698