Make fontToUse() a member function of InlineTextBox
authordbates@webkit.org <dbates@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 26 Sep 2017 23:05:29 +0000 (23:05 +0000)
committerdbates@webkit.org <dbates@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 26 Sep 2017 23:05:29 +0000 (23:05 +0000)
https://bugs.webkit.org/show_bug.cgi?id=177495

Reviewed by Myles C. Maxfield.

Following bug #177493 we can write fontToUse() in terms of InlineTextBox::combinedText().

No functionality changed. So, no new tests.

* rendering/InlineTextBox.cpp:
(WebCore::InlineTextBox::lineFont const): Added; extracted from fontToUse().
(WebCore::InlineTextBox::combinedText const): Mark inline to give a hint to the compiler
that this function is small and seems reasonable to inline.
(WebCore::InlineTextBox::localSelectionRect const): Modified to call lineFont().
(WebCore::InlineTextBox::paint): Ditto.
(WebCore::InlineTextBox::offsetForPosition const): Ditto.
(WebCore::InlineTextBox::positionForOffset const): Ditto. Remove an extraneous
if-statement while I am here.
(WebCore::fontToUse): Deleted; moved logic to InlineTextBox::lineFont().
* rendering/InlineTextBox.h:

git-svn-id: http://svn.webkit.org/repository/webkit/trunk@222532 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/WebCore/ChangeLog
Source/WebCore/rendering/InlineTextBox.cpp
Source/WebCore/rendering/InlineTextBox.h

index 95d3c31..e1ea464 100644 (file)
@@ -1,3 +1,26 @@
+2017-09-26  Daniel Bates  <dabates@apple.com>
+
+        Make fontToUse() a member function of InlineTextBox
+        https://bugs.webkit.org/show_bug.cgi?id=177495
+
+        Reviewed by Myles C. Maxfield.
+
+        Following bug #177493 we can write fontToUse() in terms of InlineTextBox::combinedText().
+
+        No functionality changed. So, no new tests.
+
+        * rendering/InlineTextBox.cpp:
+        (WebCore::InlineTextBox::lineFont const): Added; extracted from fontToUse().
+        (WebCore::InlineTextBox::combinedText const): Mark inline to give a hint to the compiler
+        that this function is small and seems reasonable to inline.
+        (WebCore::InlineTextBox::localSelectionRect const): Modified to call lineFont().
+        (WebCore::InlineTextBox::paint): Ditto.
+        (WebCore::InlineTextBox::offsetForPosition const): Ditto.
+        (WebCore::InlineTextBox::positionForOffset const): Ditto. Remove an extraneous
+        if-statement while I am here.
+        (WebCore::fontToUse): Deleted; moved logic to InlineTextBox::lineFont().
+        * rendering/InlineTextBox.h:
+
 2017-09-26  Said Abou-Hallawa  <sabouhallawa@apple.com>
 
         Followup (r222427): SynchronizedFixedQueue should not have a public constructor
index 26f35c5..5c2b63a 100644 (file)
@@ -185,14 +185,9 @@ RenderObject::SelectionState InlineTextBox::selectionState()
     return state;
 }
 
-static const FontCascade& fontToUse(const RenderStyle& style, const RenderText& renderer)
+inline const FontCascade& InlineTextBox::lineFont() const
 {
-    if (style.hasTextCombine() && is<RenderCombineText>(renderer)) {
-        const auto& textCombineRenderer = downcast<RenderCombineText>(renderer);
-        if (textCombineRenderer.isCombined())
-            return textCombineRenderer.textCombineFont();
-    }
-    return style.fontCascade();
+    return combinedText() ? combinedText()->textCombineFont() : lineStyle().fontCascade();
 }
 
 LayoutRect InlineTextBox::localSelectionRect(unsigned startPos, unsigned endPos) const
@@ -210,7 +205,7 @@ LayoutRect InlineTextBox::localSelectionRect(unsigned startPos, unsigned endPos)
     LayoutUnit selectionTop = this->selectionTop();
     LayoutUnit selectionHeight = this->selectionHeight();
     const RenderStyle& lineStyle = this->lineStyle();
-    const FontCascade& font = fontToUse(lineStyle, renderer());
+    const FontCascade& font = lineFont();
 
     String hyphenatedString;
     bool respectHyphen = ePos == m_len && hasHyphen();
@@ -483,7 +478,7 @@ void InlineTextBox::paint(PaintInfo& paintInfo, const LayoutPoint& paintOffset,
     TextPaintStyle selectionPaintStyle = haveSelection && !useCustomUnderlines ? computeTextSelectionPaintStyle(textPaintStyle, renderer(), lineStyle, paintInfo, paintSelectedTextOnly, paintSelectedTextSeparately, paintNonSelectedTextOnly, selectionShadow) : textPaintStyle;
 
     // Set our font.
-    const FontCascade& font = fontToUse(lineStyle, renderer());
+    const FontCascade& font = lineFont();
     // 1. Paint backgrounds behind text if needed. Examples of such backgrounds include selection
     // and composition underlines.
     if (paintInfo.phase != PaintPhaseSelection && paintInfo.phase != PaintPhaseTextClip && !isPrinting) {
@@ -1051,15 +1046,11 @@ int InlineTextBox::offsetForPosition(float lineOffset, bool includePartialGlyphs
 {
     if (isLineBreak())
         return 0;
-
     if (lineOffset - logicalLeft() > logicalWidth())
         return isLeftToRightDirection() ? len() : 0;
     if (lineOffset - logicalLeft() < 0)
         return isLeftToRightDirection() ? 0 : len();
-
-    const RenderStyle& lineStyle = this->lineStyle();
-    const FontCascade& font = fontToUse(lineStyle, renderer());
-    return font.offsetForPosition(constructTextRun(lineStyle), lineOffset - logicalLeft(), includePartialGlyphs);
+    return lineFont().offsetForPosition(constructTextRun(lineStyle()), lineOffset - logicalLeft(), includePartialGlyphs);
 }
 
 float InlineTextBox::positionForOffset(unsigned offset) const
@@ -1070,15 +1061,21 @@ float InlineTextBox::positionForOffset(unsigned offset) const
     if (isLineBreak())
         return logicalLeft();
 
-    const RenderStyle& lineStyle = this->lineStyle();
-    const FontCascade& font = fontToUse(lineStyle, renderer());
-    unsigned from = !isLeftToRightDirection() ? clampedOffset(offset) : 0;
-    unsigned to = !isLeftToRightDirection() ? m_len : clampedOffset(offset);
+    unsigned startOffset;
+    unsigned endOffset;
+    if (isLeftToRightDirection()) {
+        startOffset = 0;
+        endOffset = clampedOffset(offset);
+    } else {
+        startOffset = clampedOffset(offset);
+        endOffset = m_len;
+    }
+
     // FIXME: Do we need to add rightBearing here?
     LayoutRect selectionRect = LayoutRect(logicalLeft(), 0, 0, 0);
-    TextRun run = constructTextRun(lineStyle);
-    font.adjustSelectionRectForText(run, selectionRect, from, to);
-    return snapRectToDevicePixelsWithWritingDirection(selectionRect, renderer().document().deviceScaleFactor(), run.ltr()).maxX();
+    TextRun textRun = constructTextRun(lineStyle());
+    lineFont().adjustSelectionRectForText(textRun, selectionRect, startOffset, endOffset);
+    return snapRectToDevicePixelsWithWritingDirection(selectionRect, renderer().document().deviceScaleFactor(), textRun.ltr()).maxX();
 }
 
 StringView InlineTextBox::substringToRender(std::optional<unsigned> overridingLength) const
@@ -1112,7 +1109,7 @@ TextRun InlineTextBox::constructTextRun(const RenderStyle& style, StringView str
     return run;
 }
 
-const RenderCombineText* InlineTextBox::combinedText() const
+inline const RenderCombineText* InlineTextBox::combinedText() const
 {
     return lineStyle().hasTextCombine() && is<RenderCombineText>(renderer()) && downcast<RenderCombineText>(renderer()).isCombined() ? &downcast<RenderCombineText>(renderer()) : nullptr;
 }
index 8f43208..a6b5176 100644 (file)
@@ -169,6 +169,7 @@ private:
     void paintTextSubrangeBackground(GraphicsContext&, const FloatPoint& boxOrigin, const FontCascade&, const Color&, unsigned startOffset, unsigned endOffset);
 
     const RenderCombineText* combinedText() const;
+    const FontCascade& lineFont() const;
 
     ExpansionBehavior expansionBehavior() const;