Title: [156199] trunk/Source/WebCore
Revision
156199
Author
[email protected]
Date
2013-09-20 14:17:43 -0700 (Fri, 20 Sep 2013)

Log Message

Refactoring LineBreaker and RenderTextInfo out of RenderBlock.h
https://bugs.webkit.org/show_bug.cgi?id=121707

Reviewed by David Hyatt.

LineBreaker and RenderTextInfo are defined in RenderBlock.h, but only used in RenderBlockLineLayout.cpp.
Moving them there (LineBreaker needs to be a friend class of RenderBlock) in the first step in the process
of refactoring LineBreaker::NextSegmentBreak into more manageable chunks.

This change was reviewed and landed in Blink:
https://src.chromium.org/viewvc/blink?revision=157402&view=revision

No new tests.

* rendering/RenderBlock.h:
* rendering/RenderBlockLineLayout.cpp:
(WebCore::LineBreaker::LineBreaker):
(WebCore::LineBreaker::lineWasHyphenated):
(WebCore::LineBreaker::positionedObjects):
(WebCore::LineBreaker::clear):
(WebCore::RenderTextInfo::RenderTextInfo):
(WebCore::RenderTextInfo::~RenderTextInfo):
(WebCore::LineBreaker::skipTrailingWhitespace):
(WebCore::LineBreaker::skipLeadingWhitespace):
(WebCore::LineBreaker::reset):
(WebCore::LineBreaker::nextLineBreak):
(WebCore::LineBreaker::nextSegmentBreak):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (156198 => 156199)


--- trunk/Source/WebCore/ChangeLog	2013-09-20 21:17:31 UTC (rev 156198)
+++ trunk/Source/WebCore/ChangeLog	2013-09-20 21:17:43 UTC (rev 156199)
@@ -1,5 +1,35 @@
 2013-09-20  Zoltan Horvath  <[email protected]>
 
+        Refactoring LineBreaker and RenderTextInfo out of RenderBlock.h
+        https://bugs.webkit.org/show_bug.cgi?id=121707
+
+        Reviewed by David Hyatt.
+
+        LineBreaker and RenderTextInfo are defined in RenderBlock.h, but only used in RenderBlockLineLayout.cpp.
+        Moving them there (LineBreaker needs to be a friend class of RenderBlock) in the first step in the process
+        of refactoring LineBreaker::NextSegmentBreak into more manageable chunks.
+
+        This change was reviewed and landed in Blink:
+        https://src.chromium.org/viewvc/blink?revision=157402&view=revision
+
+        No new tests.
+
+        * rendering/RenderBlock.h:
+        * rendering/RenderBlockLineLayout.cpp:
+        (WebCore::LineBreaker::LineBreaker):
+        (WebCore::LineBreaker::lineWasHyphenated):
+        (WebCore::LineBreaker::positionedObjects):
+        (WebCore::LineBreaker::clear):
+        (WebCore::RenderTextInfo::RenderTextInfo):
+        (WebCore::RenderTextInfo::~RenderTextInfo):
+        (WebCore::LineBreaker::skipTrailingWhitespace):
+        (WebCore::LineBreaker::skipLeadingWhitespace):
+        (WebCore::LineBreaker::reset):
+        (WebCore::LineBreaker::nextLineBreak):
+        (WebCore::LineBreaker::nextSegmentBreak):
+
+2013-09-20  Zoltan Horvath  <[email protected]>
+
         Move logicalHeightForLine out of LineWidth.h
         https://bugs.webkit.org/show_bug.cgi?id=121575
 

Modified: trunk/Source/WebCore/rendering/RenderBlock.h (156198 => 156199)


--- trunk/Source/WebCore/rendering/RenderBlock.h	2013-09-20 21:17:31 UTC (rev 156198)
+++ trunk/Source/WebCore/rendering/RenderBlock.h	2013-09-20 21:17:43 UTC (rev 156199)
@@ -53,6 +53,7 @@
 
 struct BidiRun;
 struct PaintInfo;
+class LineBreaker;
 class LineInfo;
 class RenderRubyRun;
 #if ENABLE(CSS_SHAPES)
@@ -636,44 +637,6 @@
 
     LayoutPoint computeLogicalLocationForFloat(const FloatingObject*, LayoutUnit logicalTopOffset) const;
 
-    // The following functions' implementations are in RenderBlockLineLayout.cpp.
-    struct RenderTextInfo {
-        // Destruction of m_layout requires TextLayout to be a complete type, so the constructor and destructor are made non-inline to avoid compilation errors.
-        RenderTextInfo();
-        ~RenderTextInfo();
-
-        RenderText* m_text;
-        OwnPtr<TextLayout> m_layout;
-        LazyLineBreakIterator m_lineBreakIterator;
-        const Font* m_font;
-    };
-
-    class LineBreaker {
-    public:
-        LineBreaker(RenderBlock* block)
-            : m_block(block)
-        {
-            reset();
-        }
-
-        InlineIterator nextLineBreak(InlineBidiResolver&, LineInfo&, RenderTextInfo&, FloatingObject* lastFloatFromPreviousLine, unsigned consecutiveHyphenatedLines, WordMeasurements&);
-
-        bool lineWasHyphenated() { return m_hyphenated; }
-        const Vector<RenderBox*>& positionedObjects() { return m_positionedObjects; }
-        EClear clear() { return m_clear; }
-    private:
-        void reset();
-        
-        InlineIterator nextSegmentBreak(InlineBidiResolver&, LineInfo&, RenderTextInfo&, FloatingObject* lastFloatFromPreviousLine, unsigned consecutiveHyphenatedLines, WordMeasurements&);
-        void skipTrailingWhitespace(InlineIterator&, const LineInfo&);
-        void skipLeadingWhitespace(InlineBidiResolver&, LineInfo&, FloatingObject* lastFloatFromPreviousLine, LineWidth&);
-        
-        RenderBlock* m_block;
-        bool m_hyphenated;
-        EClear m_clear;
-        Vector<RenderBox*> m_positionedObjects;
-    };
-
     void checkFloatsInCleanLine(RootInlineBox*, Vector<FloatWithRect>&, size_t& floatIndex, bool& encounteredNewFloat, bool& dirtiedByFloat);
     RootInlineBox* determineStartPosition(LineLayoutState&, InlineBidiResolver&);
     void determineEndPosition(LineLayoutState&, RootInlineBox* startBox, InlineIterator& cleanLineStart, BidiStatus& cleanLineBidiStatus);
@@ -933,6 +896,7 @@
     // RenderRubyBase objects need to be able to split and merge, moving their children around
     // (calling moveChildTo, moveAllChildrenTo, and makeChildrenNonInline).
     friend class RenderRubyBase;
+    friend class LineBreaker;
     friend class LineWidth; // Needs to know FloatingObject
 
 private:

Modified: trunk/Source/WebCore/rendering/RenderBlockLineLayout.cpp (156198 => 156199)


--- trunk/Source/WebCore/rendering/RenderBlockLineLayout.cpp	2013-09-20 21:17:31 UTC (rev 156198)
+++ trunk/Source/WebCore/rendering/RenderBlockLineLayout.cpp	2013-09-20 21:17:43 UTC (rev 156199)
@@ -69,6 +69,43 @@
 // We don't let our line box tree for a single line get any deeper than this.
 const unsigned cMaxLineDepth = 200;
 
+struct RenderTextInfo {
+    // Destruction of m_layout requires TextLayout to be a complete type, so the constructor and destructor are made non-inline to avoid compilation errors.
+    RenderTextInfo();
+    ~RenderTextInfo();
+
+    RenderText* m_text;
+    OwnPtr<TextLayout> m_layout;
+    LazyLineBreakIterator m_lineBreakIterator;
+    const Font* m_font;
+};
+
+class LineBreaker {
+public:
+    LineBreaker(RenderBlock* block)
+        : m_block(block)
+    {
+        reset();
+    }
+
+    InlineIterator nextLineBreak(InlineBidiResolver&, LineInfo&, RenderTextInfo&, FloatingObject* lastFloatFromPreviousLine, unsigned consecutiveHyphenatedLines, WordMeasurements&);
+
+    bool lineWasHyphenated() { return m_hyphenated; }
+    const Vector<RenderBox*>& positionedObjects() { return m_positionedObjects; }
+    EClear clear() { return m_clear; }
+private:
+    void reset();
+
+    InlineIterator nextSegmentBreak(InlineBidiResolver&, LineInfo&, RenderTextInfo&, FloatingObject* lastFloatFromPreviousLine, unsigned consecutiveHyphenatedLines, WordMeasurements&);
+    void skipTrailingWhitespace(InlineIterator&, const LineInfo&);
+    void skipLeadingWhitespace(InlineBidiResolver&, LineInfo&, FloatingObject* lastFloatFromPreviousLine, LineWidth&);
+
+    RenderBlock* m_block;
+    bool m_hyphenated;
+    EClear m_clear;
+    Vector<RenderBox*> m_positionedObjects;
+};
+
 #if ENABLE(CSS_SHAPES)
 ShapeInsideInfo* RenderBlock::layoutShapeInsideInfo() const
 {
@@ -1279,13 +1316,13 @@
     repaintDirtyFloats(layoutState.floats());
 }
 
-RenderBlock::RenderTextInfo::RenderTextInfo()
+RenderTextInfo::RenderTextInfo()
     : m_text(0)
     , m_font(0)
 {
 }
 
-RenderBlock::RenderTextInfo::~RenderTextInfo()
+RenderTextInfo::~RenderTextInfo()
 {
 }
 
@@ -2243,7 +2280,7 @@
 // object iteration process.
 // NB. this function will insert any floating elements that would otherwise
 // be skipped but it will not position them.
-void RenderBlock::LineBreaker::skipTrailingWhitespace(InlineIterator& iterator, const LineInfo& lineInfo)
+void LineBreaker::skipTrailingWhitespace(InlineIterator& iterator, const LineInfo& lineInfo)
 {
     while (!iterator.atEnd() && !requiresLineBox(iterator, lineInfo, TrailingWhitespace)) {
         RenderObject* object = iterator.m_obj;
@@ -2255,7 +2292,7 @@
     }
 }
 
-void RenderBlock::LineBreaker::skipLeadingWhitespace(InlineBidiResolver& resolver, LineInfo& lineInfo,
+void LineBreaker::skipLeadingWhitespace(InlineBidiResolver& resolver, LineInfo& lineInfo,
                                                      FloatingObject* lastFloatFromPreviousLine, LineWidth& width)
 {
     while (!resolver.position().atEnd() && !requiresLineBox(resolver.position(), lineInfo, LeadingWhitespace)) {
@@ -2471,14 +2508,14 @@
     }
 }
 
-void RenderBlock::LineBreaker::reset()
+void LineBreaker::reset()
 {
     m_positionedObjects.clear();
     m_hyphenated = false;
     m_clear = CNONE;
 }
 
-InlineIterator RenderBlock::LineBreaker::nextLineBreak(InlineBidiResolver& resolver, LineInfo& lineInfo, RenderTextInfo& renderTextInfo, FloatingObject* lastFloatFromPreviousLine, unsigned consecutiveHyphenatedLines, WordMeasurements& wordMeasurements)
+InlineIterator LineBreaker::nextLineBreak(InlineBidiResolver& resolver, LineInfo& lineInfo, RenderTextInfo& renderTextInfo, FloatingObject* lastFloatFromPreviousLine, unsigned consecutiveHyphenatedLines, WordMeasurements& wordMeasurements)
 {
 #if !ENABLE(CSS_SHAPES)
     return nextSegmentBreak(resolver, lineInfo, renderTextInfo, lastFloatFromPreviousLine, consecutiveHyphenatedLines, wordMeasurements);
@@ -2618,7 +2655,7 @@
 }
 #endif
 
-InlineIterator RenderBlock::LineBreaker::nextSegmentBreak(InlineBidiResolver& resolver, LineInfo& lineInfo, RenderTextInfo& renderTextInfo, FloatingObject* lastFloatFromPreviousLine, unsigned consecutiveHyphenatedLines, WordMeasurements& wordMeasurements)
+InlineIterator LineBreaker::nextSegmentBreak(InlineBidiResolver& resolver, LineInfo& lineInfo, RenderTextInfo& renderTextInfo, FloatingObject* lastFloatFromPreviousLine, unsigned consecutiveHyphenatedLines, WordMeasurements& wordMeasurements)
 {
     reset();
 
@@ -2900,7 +2937,7 @@
             // Non-zero only when kerning is enabled and TextLayout isn't used, in which case we measure
             // words with their trailing space, then subtract its width.
             HashSet<const SimpleFontData*> fallbackFonts;
-            float wordTrailingSpaceWidth = (f.typesettingFeatures() & Kerning) && !textLayout ? f.width(constructTextRun(t, f, &space, 1, style), &fallbackFonts) + wordSpacing : 0;
+            float wordTrailingSpaceWidth = (f.typesettingFeatures() & Kerning) && !textLayout ? f.width(RenderBlock::constructTextRun(t, f, &space, 1, style), &fallbackFonts) + wordSpacing : 0;
 
             UChar lastCharacter = renderTextInfo.m_lineBreakIterator.lastCharacter();
             UChar secondToLastCharacter = renderTextInfo.m_lineBreakIterator.secondToLastCharacter();
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to