Title: [169011] trunk
Revision
169011
Author
[email protected]
Date
2014-05-18 03:51:53 -0700 (Sun, 18 May 2014)

Log Message

REGRESSION (r160259): text-combine glyphs are not rendered
https://bugs.webkit.org/show_bug.cgi?id=127324

Reviewed by Andreas Kling.

Source/WebCore: 
        
The original text gets overwritten by a change that is supposed to affect rendered text only.
Fixed by giving the text update functions well-defined purposes.

Test: fast/text/text-combine-rendering.html

* rendering/RenderCombineText.cpp:
(WebCore::RenderCombineText::styleDidChange):
(WebCore::RenderCombineText::setRenderedText):
(WebCore::RenderCombineText::combineText):
(WebCore::RenderCombineText::setTextInternal): Deleted.
* rendering/RenderCombineText.h:
* rendering/RenderCounter.cpp:
(WebCore::RenderCounter::computePreferredLogicalWidths):
* rendering/RenderText.cpp:
(WebCore::RenderText::setRenderedText):
        
    This function now updates the rendered text but does not change the original.
    Get the original text by calling originalText().

(WebCore::RenderText::setText):
        
    This the only place original text now changes.

(WebCore::RenderText::setTextInternal): Deleted.
        
    Renamed to setRenderedText.

* rendering/RenderText.h:
* rendering/svg/RenderSVGInlineText.cpp:
(WebCore::RenderSVGInlineText::setRenderedText):
(WebCore::RenderSVGInlineText::setTextInternal): Deleted.
* rendering/svg/RenderSVGInlineText.h:

LayoutTests: 

* fast/text/text-combine-rendering-expected.html: Added.
* fast/text/text-combine-rendering.html: Added.

Modified Paths

Added Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (169010 => 169011)


--- trunk/LayoutTests/ChangeLog	2014-05-18 07:57:27 UTC (rev 169010)
+++ trunk/LayoutTests/ChangeLog	2014-05-18 10:51:53 UTC (rev 169011)
@@ -1,3 +1,13 @@
+2014-05-18  Antti Koivisto  <[email protected]>
+
+        REGRESSION (r160259): text-combine glyphs are not rendered
+        https://bugs.webkit.org/show_bug.cgi?id=127324
+
+        Reviewed by Andreas Kling.
+
+        * fast/text/text-combine-rendering-expected.html: Added.
+        * fast/text/text-combine-rendering.html: Added.
+
 2014-05-17  Maciej Stachowiak  <[email protected]>
 
         Don't attempt to update id or name for nodes that are already removed

Added: trunk/LayoutTests/fast/text/text-combine-rendering-expected.html (0 => 169011)


--- trunk/LayoutTests/fast/text/text-combine-rendering-expected.html	                        (rev 0)
+++ trunk/LayoutTests/fast/text/text-combine-rendering-expected.html	2014-05-18 10:51:53 UTC (rev 169011)
@@ -0,0 +1,5 @@
+<link rel="stylesheet" href="" />
+<style>
+body { font-family: myahem; color: green}
+</style>
+x

Added: trunk/LayoutTests/fast/text/text-combine-rendering.html (0 => 169011)


--- trunk/LayoutTests/fast/text/text-combine-rendering.html	                        (rev 0)
+++ trunk/LayoutTests/fast/text/text-combine-rendering.html	2014-05-18 10:51:53 UTC (rev 169011)
@@ -0,0 +1,6 @@
+<link rel="stylesheet" href="" />
+<style>
+body { -webkit-writing-mode: vertical-lr; font-family: myahem; color: green }
+.combine { -webkit-text-combine: horizontal }
+</style>
+<span class="combine">x</span>

Modified: trunk/Source/WebCore/ChangeLog (169010 => 169011)


--- trunk/Source/WebCore/ChangeLog	2014-05-18 07:57:27 UTC (rev 169010)
+++ trunk/Source/WebCore/ChangeLog	2014-05-18 10:51:53 UTC (rev 169011)
@@ -1,3 +1,43 @@
+2014-05-18  Antti Koivisto  <[email protected]>
+
+        REGRESSION (r160259): text-combine glyphs are not rendered
+        https://bugs.webkit.org/show_bug.cgi?id=127324
+
+        Reviewed by Andreas Kling.
+        
+        The original text gets overwritten by a change that is supposed to affect rendered text only.
+        Fixed by giving the text update functions well-defined purposes.
+
+        Test: fast/text/text-combine-rendering.html
+
+        * rendering/RenderCombineText.cpp:
+        (WebCore::RenderCombineText::styleDidChange):
+        (WebCore::RenderCombineText::setRenderedText):
+        (WebCore::RenderCombineText::combineText):
+        (WebCore::RenderCombineText::setTextInternal): Deleted.
+        * rendering/RenderCombineText.h:
+        * rendering/RenderCounter.cpp:
+        (WebCore::RenderCounter::computePreferredLogicalWidths):
+        * rendering/RenderText.cpp:
+        (WebCore::RenderText::setRenderedText):
+        
+            This function now updates the rendered text but does not change the original.
+            Get the original text by calling originalText().
+
+        (WebCore::RenderText::setText):
+        
+            This the only place original text now changes.
+
+        (WebCore::RenderText::setTextInternal): Deleted.
+        
+            Renamed to setRenderedText.
+
+        * rendering/RenderText.h:
+        * rendering/svg/RenderSVGInlineText.cpp:
+        (WebCore::RenderSVGInlineText::setRenderedText):
+        (WebCore::RenderSVGInlineText::setTextInternal): Deleted.
+        * rendering/svg/RenderSVGInlineText.h:
+
 2014-05-17  Maciej Stachowiak  <[email protected]>
 
         Don't attempt to update id or name for nodes that are already removed

Modified: trunk/Source/WebCore/rendering/RenderCombineText.cpp (169010 => 169011)


--- trunk/Source/WebCore/rendering/RenderCombineText.cpp	2014-05-18 07:57:27 UTC (rev 169010)
+++ trunk/Source/WebCore/rendering/RenderCombineText.cpp	2014-05-18 10:51:53 UTC (rev 169011)
@@ -44,16 +44,16 @@
     RenderText::styleDidChange(diff, oldStyle);
 
     if (m_isCombined) {
-        RenderText::setTextInternal(originalText()); // This RenderCombineText has been combined once. Restore the original text for the next combineText().
+        RenderText::setRenderedText(originalText()); // This RenderCombineText has been combined once. Restore the original text for the next combineText().
         m_isCombined = false;
     }
 
     m_needsFontUpdate = true;
 }
 
-void RenderCombineText::setTextInternal(const String& text)
+void RenderCombineText::setRenderedText(const String& text)
 {
-    RenderText::setTextInternal(text);
+    RenderText::setRenderedText(text);
 
     m_needsFontUpdate = true;
 }
@@ -137,7 +137,7 @@
 
     if (m_isCombined) {
         DEPRECATED_DEFINE_STATIC_LOCAL(String, objectReplacementCharacterString, (&objectReplacementCharacter, 1));
-        RenderText::setTextInternal(objectReplacementCharacterString.impl());
+        RenderText::setRenderedText(objectReplacementCharacterString.impl());
     }
 }
 

Modified: trunk/Source/WebCore/rendering/RenderCombineText.h (169010 => 169011)


--- trunk/Source/WebCore/rendering/RenderCombineText.h	2014-05-18 07:57:27 UTC (rev 169010)
+++ trunk/Source/WebCore/rendering/RenderCombineText.h	2014-05-18 10:51:53 UTC (rev 169011)
@@ -49,7 +49,7 @@
     virtual float width(unsigned from, unsigned length, const Font&, float xPosition, HashSet<const SimpleFontData*>* fallbackFonts = 0, GlyphOverflow* = 0) const;
     virtual const char* renderName() const { return "RenderCombineText"; }
     virtual void styleDidChange(StyleDifference, const RenderStyle* oldStyle);
-    virtual void setTextInternal(const String&) override;
+    virtual void setRenderedText(const String&) override;
 
     RefPtr<RenderStyle> m_combineFontStyle;
     float m_combinedTextWidth;

Modified: trunk/Source/WebCore/rendering/RenderCounter.cpp (169010 => 169011)


--- trunk/Source/WebCore/rendering/RenderCounter.cpp	2014-05-18 07:57:27 UTC (rev 169010)
+++ trunk/Source/WebCore/rendering/RenderCounter.cpp	2014-05-18 10:51:53 UTC (rev 169011)
@@ -436,7 +436,7 @@
     SetLayoutNeededForbiddenScope layoutForbiddenScope(this, false);
 #endif
 
-    setTextInternal(originalText());
+    setRenderedText(originalText());
 
     RenderText::computePreferredLogicalWidths(lead);
 }

Modified: trunk/Source/WebCore/rendering/RenderText.cpp (169010 => 169011)


--- trunk/Source/WebCore/rendering/RenderText.cpp	2014-05-18 07:57:27 UTC (rev 169010)
+++ trunk/Source/WebCore/rendering/RenderText.cpp	2014-05-18 10:51:53 UTC (rev 169011)
@@ -1017,15 +1017,11 @@
     }
 }
 
-void RenderText::setTextInternal(const String& text)
+void RenderText::setRenderedText(const String& text)
 {
     ASSERT(!text.isNull());
 
-    if (m_originalTextDiffersFromRendered) {
-        originalTextMap().remove(this);
-        m_originalTextDiffersFromRendered = false;
-    }
-    String originalText = text;
+    String originalText = this->originalText();
 
     m_text = text;
 
@@ -1069,8 +1065,11 @@
     m_canUseSimpleFontCodePath = computeCanUseSimpleFontCodePath();
 
     if (m_text != originalText) {
-        originalTextMap().add(this, originalText);
+        originalTextMap().set(this, originalText);
         m_originalTextDiffersFromRendered = true;
+    } else if (m_originalTextDiffersFromRendered) {
+        originalTextMap().remove(this);
+        m_originalTextDiffersFromRendered = false;
     }
 }
 
@@ -1103,7 +1102,14 @@
     if (!force && text == originalText())
         return;
 
-    setTextInternal(text);
+    m_text = text;
+    if (m_originalTextDiffersFromRendered) {
+        originalTextMap().remove(this);
+        m_originalTextDiffersFromRendered = false;
+    }
+
+    setRenderedText(text);
+
     setNeedsLayoutAndPrefWidthsRecalc();
     m_knownToHaveNoOverflowAndNoFallbackFonts = false;
 

Modified: trunk/Source/WebCore/rendering/RenderText.h (169010 => 169011)


--- trunk/Source/WebCore/rendering/RenderText.h	2014-05-18 07:57:27 UTC (rev 169010)
+++ trunk/Source/WebCore/rendering/RenderText.h	2014-05-18 10:51:53 UTC (rev 169011)
@@ -158,7 +158,7 @@
     virtual void computePreferredLogicalWidths(float leadWidth);
     virtual void willBeDestroyed() override;
 
-    virtual void setTextInternal(const String&);
+    virtual void setRenderedText(const String&);
     virtual UChar previousCharacter() const;
 
 private:

Modified: trunk/Source/WebCore/rendering/svg/RenderSVGInlineText.cpp (169010 => 169011)


--- trunk/Source/WebCore/rendering/svg/RenderSVGInlineText.cpp	2014-05-18 07:57:27 UTC (rev 169010)
+++ trunk/Source/WebCore/rendering/svg/RenderSVGInlineText.cpp	2014-05-18 10:51:53 UTC (rev 169011)
@@ -77,9 +77,9 @@
     return textNode().data();
 }
 
-void RenderSVGInlineText::setTextInternal(const String& text)
+void RenderSVGInlineText::setRenderedText(const String& text)
 {
-    RenderText::setTextInternal(text);
+    RenderText::setRenderedText(text);
     if (auto* textAncestor = RenderSVGText::locateRenderSVGTextAncestor(*this))
         textAncestor->subtreeTextDidChange(this);
 }

Modified: trunk/Source/WebCore/rendering/svg/RenderSVGInlineText.h (169010 => 169011)


--- trunk/Source/WebCore/rendering/svg/RenderSVGInlineText.h	2014-05-18 07:57:27 UTC (rev 169010)
+++ trunk/Source/WebCore/rendering/svg/RenderSVGInlineText.h	2014-05-18 10:51:53 UTC (rev 169011)
@@ -52,7 +52,7 @@
     virtual const char* renderName() const override { return "RenderSVGInlineText"; }
 
     virtual String originalText() const override;
-    virtual void setTextInternal(const String&) override;
+    virtual void setRenderedText(const String&) override;
     virtual void styleDidChange(StyleDifference, const RenderStyle*) override;
 
     virtual FloatRect objectBoundingBox() const override { return floatLinesBoundingBox(); }
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to