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

Unified Diff: Source/core/rendering/RenderText.cpp

Issue 183013005: Remove textDirection parameter from min/maxLogicalWidth (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 6 years, 10 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/core/rendering/RenderText.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/core/rendering/RenderText.cpp
diff --git a/Source/core/rendering/RenderText.cpp b/Source/core/rendering/RenderText.cpp
index 0b8f59757574bf8470200cfad8fc11d238a7186e..f63e0e2f2b9c623089bd0e57bf5b099f5ff5701f 100644
--- a/Source/core/rendering/RenderText.cpp
+++ b/Source/core/rendering/RenderText.cpp
@@ -781,7 +781,7 @@ void RenderText::trimmedPrefWidths(float leadWidth,
stripFrontSpaces = false;
if (m_hasTab || preferredLogicalWidthsDirty())
- computePreferredLogicalWidths(leadWidth, direction);
+ computePreferredLogicalWidths(leadWidth);
hasBreakableStart = !stripFrontSpaces && m_hasBreakableStart;
hasBreakableEnd = m_hasBreakableEnd;
@@ -860,27 +860,27 @@ void RenderText::trimmedPrefWidths(float leadWidth,
}
}
-float RenderText::minLogicalWidth(TextDirection textDirection) const
+float RenderText::minLogicalWidth() const
{
if (preferredLogicalWidthsDirty())
- const_cast<RenderText*>(this)->computePreferredLogicalWidths(0, textDirection);
+ const_cast<RenderText*>(this)->computePreferredLogicalWidths(0);
return m_minWidth;
}
-float RenderText::maxLogicalWidth(TextDirection textDirection) const
+float RenderText::maxLogicalWidth() const
{
if (preferredLogicalWidthsDirty())
- const_cast<RenderText*>(this)->computePreferredLogicalWidths(0, textDirection);
+ const_cast<RenderText*>(this)->computePreferredLogicalWidths(0);
return m_maxWidth;
}
-void RenderText::computePreferredLogicalWidths(float leadWidth, TextDirection textDirection)
+void RenderText::computePreferredLogicalWidths(float leadWidth)
{
HashSet<const SimpleFontData*> fallbackFonts;
GlyphOverflow glyphOverflow;
- computePreferredLogicalWidths(leadWidth, fallbackFonts, glyphOverflow, textDirection);
+ computePreferredLogicalWidths(leadWidth, fallbackFonts, glyphOverflow);
if (fallbackFonts.isEmpty() && !glyphOverflow.left && !glyphOverflow.right && !glyphOverflow.top && !glyphOverflow.bottom)
m_knownToHaveNoOverflowAndNoFallbackFonts = true;
}
@@ -891,7 +891,7 @@ static inline float hyphenWidth(RenderText* renderer, const Font& font, TextDire
return font.width(RenderBlockFlow::constructTextRun(renderer, font, style->hyphenString().string(), style, direction));
}
-void RenderText::computePreferredLogicalWidths(float leadWidth, HashSet<const SimpleFontData*>& fallbackFonts, GlyphOverflow& glyphOverflow, TextDirection textDirection)
+void RenderText::computePreferredLogicalWidths(float leadWidth, HashSet<const SimpleFontData*>& fallbackFonts, GlyphOverflow& glyphOverflow)
{
ASSERT(m_hasTab || preferredLogicalWidthsDirty() || !m_knownToHaveNoOverflowAndNoFallbackFonts);
@@ -924,10 +924,7 @@ void RenderText::computePreferredLogicalWidths(float leadWidth, HashSet<const Si
bool firstLine = true;
int nextBreakable = -1;
int lastWordBoundary = 0;
-
- // Non-zero only when kerning is enabled, in which case we measure words with their trailing
- // space, then subtract its width.
- float wordTrailingSpaceWidth = f.fontDescription().typesettingFeatures() & Kerning ? f.width(RenderBlockFlow::constructTextRun(this, f, &space, 1, styleToUse, textDirection)) + wordSpacing : 0;
+ float cachedWordTrailingSpaceWidth[2] = { 0, 0 }; // LTR, RTL
// If automatic hyphenation is allowed, we keep track of the width of the widest word (or word
// fragment) encountered so far, and only try hyphenating words that are wider.
@@ -1027,6 +1024,17 @@ void RenderText::computePreferredLogicalWidths(float leadWidth, HashSet<const Si
int wordLen = j - i;
if (wordLen) {
bool isSpace = (j < len) && c == ' ';
+
+ // Non-zero only when kerning is enabled, in which case we measure words with their trailing
+ // space, then subtract its width.
+ float wordTrailingSpaceWidth = 0;
+ if (isSpace && (f.fontDescription().typesettingFeatures() & Kerning)) {
+ ASSERT(textDirection >=0 && textDirection <= 1);
+ if (!cachedWordTrailingSpaceWidth[textDirection])
+ cachedWordTrailingSpaceWidth[textDirection] = f.width(RenderBlockFlow::constructTextRun(this, f, &space, 1, styleToUse, textDirection)) + wordSpacing;
+ wordTrailingSpaceWidth = cachedWordTrailingSpaceWidth[textDirection];
+ }
+
float w;
if (wordTrailingSpaceWidth && isSpace)
w = widthFromCache(f, i, wordLen + 1, leadWidth + currMaxWidth, textDirection, &fallbackFonts, &glyphOverflow) - wordTrailingSpaceWidth;
@@ -1495,13 +1503,13 @@ float RenderText::width(unsigned from, unsigned len, const Font& f, float xPos,
if (fallbackFonts) {
ASSERT(glyphOverflow);
if (preferredLogicalWidthsDirty() || !m_knownToHaveNoOverflowAndNoFallbackFonts) {
- const_cast<RenderText*>(this)->computePreferredLogicalWidths(0, *fallbackFonts, *glyphOverflow, textDirection);
+ const_cast<RenderText*>(this)->computePreferredLogicalWidths(0, *fallbackFonts, *glyphOverflow);
if (fallbackFonts->isEmpty() && !glyphOverflow->left && !glyphOverflow->right && !glyphOverflow->top && !glyphOverflow->bottom)
m_knownToHaveNoOverflowAndNoFallbackFonts = true;
}
w = m_maxWidth;
} else {
- w = maxLogicalWidth(textDirection);
+ w = maxLogicalWidth();
}
} else {
w = widthFromCache(f, from, len, xPos, textDirection, fallbackFonts, glyphOverflow);
« no previous file with comments | « Source/core/rendering/RenderText.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698