Change RenderBlock to user RenderBox/RenderInline writing mode logic
authoreae@chromium.org <eae@chromium.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 22 May 2012 11:16:16 +0000 (11:16 +0000)
committereae@chromium.org <eae@chromium.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 22 May 2012 11:16:16 +0000 (11:16 +0000)
https://bugs.webkit.org/show_bug.cgi?id=87040

Reviewed by Eric Seidel.

Remove unnecessary writing mode logic in RenderBlock and use the
implementation in RenderBox and RenderInline instead.

No new tests, no change in functionality.

* rendering/RenderBlock.cpp:
(WebCore):
* rendering/RenderBlock.h:
(WebCore::RenderBlock::marginBeforeForChild):
(WebCore::RenderBlock::marginAfterForChild):
(WebCore::RenderBlock::marginStartForChild):
(WebCore::RenderBlock::marginEndForChild):
(WebCore::RenderBlock::setMarginStartForChild):
(WebCore::RenderBlock::setMarginEndForChild):
(WebCore::RenderBlock::setMarginBeforeForChild):
(WebCore::RenderBlock::setMarginAfterForChild):
* rendering/RenderBox.cpp:
(WebCore::RenderBox::marginBefore):
(WebCore::RenderBox::marginAfter):
(WebCore::RenderBox::marginStart):
(WebCore::RenderBox::marginEnd):
(WebCore::RenderBox::setMarginStart):
(WebCore::RenderBox::setMarginEnd):
(WebCore::RenderBox::setMarginBefore):
(WebCore::RenderBox::setMarginAfter):
* rendering/RenderBox.h:
(RenderBox):
* rendering/RenderBoxModelObject.h:
(RenderBoxModelObject):
* rendering/RenderInline.cpp:
(WebCore::RenderInline::marginStart):
(WebCore::RenderInline::marginEnd):
(WebCore::RenderInline::marginBefore):
(WebCore::RenderInline::marginAfter):
* rendering/RenderInline.h:
(RenderInline):

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

Source/WebCore/ChangeLog
Source/WebCore/rendering/RenderBlock.cpp
Source/WebCore/rendering/RenderBlock.h
Source/WebCore/rendering/RenderBox.cpp
Source/WebCore/rendering/RenderBox.h
Source/WebCore/rendering/RenderBoxModelObject.h
Source/WebCore/rendering/RenderInline.cpp
Source/WebCore/rendering/RenderInline.h

index 8143507..7dccac5 100644 (file)
@@ -1,3 +1,47 @@
+2012-05-22  Emil A Eklund  <eae@chromium.org>
+
+        Change RenderBlock to user RenderBox/RenderInline writing mode logic
+        https://bugs.webkit.org/show_bug.cgi?id=87040
+
+        Reviewed by Eric Seidel.
+
+        Remove unnecessary writing mode logic in RenderBlock and use the
+        implementation in RenderBox and RenderInline instead.
+
+        No new tests, no change in functionality.
+
+        * rendering/RenderBlock.cpp:
+        (WebCore):
+        * rendering/RenderBlock.h:
+        (WebCore::RenderBlock::marginBeforeForChild):
+        (WebCore::RenderBlock::marginAfterForChild):
+        (WebCore::RenderBlock::marginStartForChild):
+        (WebCore::RenderBlock::marginEndForChild):
+        (WebCore::RenderBlock::setMarginStartForChild):
+        (WebCore::RenderBlock::setMarginEndForChild):
+        (WebCore::RenderBlock::setMarginBeforeForChild):
+        (WebCore::RenderBlock::setMarginAfterForChild):
+        * rendering/RenderBox.cpp:
+        (WebCore::RenderBox::marginBefore):
+        (WebCore::RenderBox::marginAfter):
+        (WebCore::RenderBox::marginStart):
+        (WebCore::RenderBox::marginEnd):
+        (WebCore::RenderBox::setMarginStart):
+        (WebCore::RenderBox::setMarginEnd):
+        (WebCore::RenderBox::setMarginBefore):
+        (WebCore::RenderBox::setMarginAfter):
+        * rendering/RenderBox.h:
+        (RenderBox):
+        * rendering/RenderBoxModelObject.h:
+        (RenderBoxModelObject):
+        * rendering/RenderInline.cpp:
+        (WebCore::RenderInline::marginStart):
+        (WebCore::RenderInline::marginEnd):
+        (WebCore::RenderInline::marginBefore):
+        (WebCore::RenderInline::marginAfter):
+        * rendering/RenderInline.h:
+        (RenderInline):
+
 2012-05-22  Li Yin  <li.yin@intel.com>
 
         [WebSocket] WebSocket object should fire a simple event named error when it is required to fail the websocket connection.
index f67294d..db953d3 100755 (executable)
@@ -7038,118 +7038,6 @@ LayoutUnit RenderBlock::collapsedMarginAfterForChild(const  RenderBox* child) co
     return marginAfterForChild(child);
 }
 
-LayoutUnit RenderBlock::marginBeforeForChild(const RenderBoxModelObject* child) const
-{
-    switch (style()->writingMode()) {
-    case TopToBottomWritingMode:
-        return child->marginTop();
-    case BottomToTopWritingMode:
-        return child->marginBottom();
-    case LeftToRightWritingMode:
-        return child->marginLeft();
-    case RightToLeftWritingMode:
-        return child->marginRight();
-    }
-    ASSERT_NOT_REACHED();
-    return child->marginTop();
-}
-
-LayoutUnit RenderBlock::marginAfterForChild(const RenderBoxModelObject* child) const
-{
-    switch (style()->writingMode()) {
-    case TopToBottomWritingMode:
-        return child->marginBottom();
-    case BottomToTopWritingMode:
-        return child->marginTop();
-    case LeftToRightWritingMode:
-        return child->marginRight();
-    case RightToLeftWritingMode:
-        return child->marginLeft();
-    }
-    ASSERT_NOT_REACHED();
-    return child->marginBottom();
-}
-
-LayoutUnit RenderBlock::marginStartForChild(const RenderBoxModelObject* child) const
-{
-    if (isHorizontalWritingMode())
-        return style()->isLeftToRightDirection() ? child->marginLeft() : child->marginRight();
-    return style()->isLeftToRightDirection() ? child->marginTop() : child->marginBottom();
-}
-
-LayoutUnit RenderBlock::marginEndForChild(const RenderBoxModelObject* child) const
-{
-    if (isHorizontalWritingMode())
-        return style()->isLeftToRightDirection() ? child->marginRight() : child->marginLeft();
-    return style()->isLeftToRightDirection() ? child->marginBottom() : child->marginTop();
-}
-
-void RenderBlock::setMarginStartForChild(RenderBox* child, LayoutUnit margin)
-{
-    if (isHorizontalWritingMode()) {
-        if (style()->isLeftToRightDirection())
-            child->setMarginLeft(margin);
-        else
-            child->setMarginRight(margin);
-    } else {
-        if (style()->isLeftToRightDirection())
-            child->setMarginTop(margin);
-        else
-            child->setMarginBottom(margin);
-    }
-}
-
-void RenderBlock::setMarginEndForChild(RenderBox* child, LayoutUnit margin)
-{
-    if (isHorizontalWritingMode()) {
-        if (style()->isLeftToRightDirection())
-            child->setMarginRight(margin);
-        else
-            child->setMarginLeft(margin);
-    } else {
-        if (style()->isLeftToRightDirection())
-            child->setMarginBottom(margin);
-        else
-            child->setMarginTop(margin);
-    }
-}
-
-void RenderBlock::setMarginBeforeForChild(RenderBox* child, LayoutUnit margin)
-{
-    switch (style()->writingMode()) {
-    case TopToBottomWritingMode:
-        child->setMarginTop(margin);
-        break;
-    case BottomToTopWritingMode:
-        child->setMarginBottom(margin);
-        break;
-    case LeftToRightWritingMode:
-        child->setMarginLeft(margin);
-        break;
-    case RightToLeftWritingMode:
-        child->setMarginRight(margin);
-        break;
-    }
-}
-
-void RenderBlock::setMarginAfterForChild(RenderBox* child, LayoutUnit margin)
-{
-    switch (style()->writingMode()) {
-    case TopToBottomWritingMode:
-        child->setMarginBottom(margin);
-        break;
-    case BottomToTopWritingMode:
-        child->setMarginTop(margin);
-        break;
-    case LeftToRightWritingMode:
-        child->setMarginRight(margin);
-        break;
-    case RightToLeftWritingMode:
-        child->setMarginLeft(margin);
-        break;
-    }
-}
-
 RenderBlock::MarginValues RenderBlock::marginValuesForChild(RenderBox* child)
 {
     LayoutUnit childBeforePositive = 0;
index de37bd3..92c7195 100644 (file)
@@ -284,14 +284,14 @@ public:
     LayoutUnit logicalTopForChild(const RenderBox* child) { return isHorizontalWritingMode() ? child->y() : child->x(); }
     void setLogicalLeftForChild(RenderBox* child, LayoutUnit logicalLeft, ApplyLayoutDeltaMode = DoNotApplyLayoutDelta);
     void setLogicalTopForChild(RenderBox* child, LayoutUnit logicalTop, ApplyLayoutDeltaMode = DoNotApplyLayoutDelta);
-    LayoutUnit marginBeforeForChild(const RenderBoxModelObject* child) const;
-    LayoutUnit marginAfterForChild(const RenderBoxModelObject* child) const;
-    LayoutUnit marginStartForChild(const RenderBoxModelObject* child) const;
-    LayoutUnit marginEndForChild(const RenderBoxModelObject* child) const;
-    void setMarginStartForChild(RenderBox* child, LayoutUnit);
-    void setMarginEndForChild(RenderBox* child, LayoutUnit);
-    void setMarginBeforeForChild(RenderBox* child, LayoutUnit);
-    void setMarginAfterForChild(RenderBox* child, LayoutUnit);
+    LayoutUnit marginBeforeForChild(const RenderBoxModelObject* child) const { return child->marginBefore(style()); }
+    LayoutUnit marginAfterForChild(const RenderBoxModelObject* child) const { return child->marginAfter(style()); }
+    LayoutUnit marginStartForChild(const RenderBoxModelObject* child) const { return child->marginStart(style()); }
+    LayoutUnit marginEndForChild(const RenderBoxModelObject* child) const { return child->marginEnd(style()); }
+    void setMarginStartForChild(RenderBox* child, LayoutUnit value) { child->setMarginStart(value, style()); }
+    void setMarginEndForChild(RenderBox* child, LayoutUnit value) { child->setMarginEnd(value, style()); }
+    void setMarginBeforeForChild(RenderBox* child, LayoutUnit value) { child->setMarginBefore(value, style()); }
+    void setMarginAfterForChild(RenderBox* child, LayoutUnit value) { child->setMarginAfter(value, style()); }
     LayoutUnit collapsedMarginBeforeForChild(const RenderBox* child) const;
     LayoutUnit collapsedMarginAfterForChild(const RenderBox* child) const;
 
index bd8c2da..2ba50ac 100644 (file)
@@ -86,9 +86,9 @@ RenderBox::~RenderBox()
 {
 }
 
-LayoutUnit RenderBox::marginBefore() const
+LayoutUnit RenderBox::marginBefore(const RenderStyle* overrideStyle) const
 {
-    switch (style()->writingMode()) {
+    switch (overrideStyle ? overrideStyle->writingMode() : style()->writingMode()) {
     case TopToBottomWritingMode:
         return m_marginTop;
     case BottomToTopWritingMode:
@@ -102,9 +102,9 @@ LayoutUnit RenderBox::marginBefore() const
     return m_marginTop;
 }
 
-LayoutUnit RenderBox::marginAfter() const
+LayoutUnit RenderBox::marginAfter(const RenderStyle* overrideStyle) const
 {
-    switch (style()->writingMode()) {
+    switch (overrideStyle ? overrideStyle->writingMode() : style()->writingMode()) {
     case TopToBottomWritingMode:
         return m_marginBottom;
     case BottomToTopWritingMode:
@@ -118,53 +118,57 @@ LayoutUnit RenderBox::marginAfter() const
     return m_marginBottom;
 }
 
-LayoutUnit RenderBox::marginStart() const
+LayoutUnit RenderBox::marginStart(const RenderStyle* overrideStyle) const
 {
-    if (isHorizontalWritingMode())
-        return style()->isLeftToRightDirection() ? m_marginLeft : m_marginRight;
-    return style()->isLeftToRightDirection() ? m_marginTop : m_marginBottom;
+    const RenderStyle* styleToUse = overrideStyle ? overrideStyle : style();
+    if (styleToUse->isHorizontalWritingMode())
+        return styleToUse->isLeftToRightDirection() ? m_marginLeft : m_marginRight;
+    return styleToUse->isLeftToRightDirection() ? m_marginTop : m_marginBottom;
 }
 
-LayoutUnit RenderBox::marginEnd() const
+LayoutUnit RenderBox::marginEnd(const RenderStyle* overrideStyle) const
 {
-    if (isHorizontalWritingMode())
-        return style()->isLeftToRightDirection() ? m_marginRight : m_marginLeft;
-    return style()->isLeftToRightDirection() ? m_marginBottom : m_marginTop;
+    const RenderStyle* styleToUse = overrideStyle ? overrideStyle : style();
+    if (styleToUse->isHorizontalWritingMode())
+        return styleToUse->isLeftToRightDirection() ? m_marginRight : m_marginLeft;
+    return styleToUse->isLeftToRightDirection() ? m_marginBottom : m_marginTop;
 }
 
-void RenderBox::setMarginStart(LayoutUnit margin)
+void RenderBox::setMarginStart(LayoutUnit margin, const RenderStyle* overrideStyle)
 {
-    if (isHorizontalWritingMode()) {
-        if (style()->isLeftToRightDirection())
+    const RenderStyle* styleToUse = overrideStyle ? overrideStyle : style();
+    if (styleToUse->isHorizontalWritingMode()) {
+        if (styleToUse->isLeftToRightDirection())
             m_marginLeft = margin;
         else
             m_marginRight = margin;
     } else {
-        if (style()->isLeftToRightDirection())
+        if (styleToUse->isLeftToRightDirection())
             m_marginTop = margin;
         else
             m_marginBottom = margin;
     }
 }
 
-void RenderBox::setMarginEnd(LayoutUnit margin)
+void RenderBox::setMarginEnd(LayoutUnit margin, const RenderStyle* overrideStyle)
 {
-    if (isHorizontalWritingMode()) {
-        if (style()->isLeftToRightDirection())
+    const RenderStyle* styleToUse = overrideStyle ? overrideStyle : style();
+    if (styleToUse->isHorizontalWritingMode()) {
+        if (styleToUse->isLeftToRightDirection())
             m_marginRight = margin;
         else
             m_marginLeft = margin;
     } else {
-        if (style()->isLeftToRightDirection())
+        if (styleToUse->isLeftToRightDirection())
             m_marginBottom = margin;
         else
             m_marginTop = margin;
     }
 }
 
-void RenderBox::setMarginBefore(LayoutUnit margin)
+void RenderBox::setMarginBefore(LayoutUnit margin, const RenderStyle* overrideStyle)
 {
-    switch (style()->writingMode()) {
+    switch (overrideStyle ? overrideStyle->writingMode() : style()->writingMode()) {
     case TopToBottomWritingMode:
         m_marginTop = margin;
         break;
@@ -180,9 +184,9 @@ void RenderBox::setMarginBefore(LayoutUnit margin)
     }
 }
 
-void RenderBox::setMarginAfter(LayoutUnit margin)
+void RenderBox::setMarginAfter(LayoutUnit margin, const RenderStyle* overrideStyle)
 {
-    switch (style()->writingMode()) {
+    switch (overrideStyle ? overrideStyle->writingMode() : style()->writingMode()) {
     case TopToBottomWritingMode:
         m_marginBottom = margin;
         break;
index 3819df5..0b56f3e 100644 (file)
@@ -229,14 +229,14 @@ public:
     void setMarginBottom(LayoutUnit margin) { m_marginBottom = margin; }
     void setMarginLeft(LayoutUnit margin) { m_marginLeft = margin; }
     void setMarginRight(LayoutUnit margin) { m_marginRight = margin; }
-    virtual LayoutUnit marginBefore() const;
-    virtual LayoutUnit marginAfter() const;
-    virtual LayoutUnit marginStart() const;
-    virtual LayoutUnit marginEnd() const;
-    void setMarginStart(LayoutUnit);
-    void setMarginEnd(LayoutUnit);
-    void setMarginBefore(LayoutUnit);
-    void setMarginAfter(LayoutUnit);
+    virtual LayoutUnit marginBefore(const RenderStyle* overrideStyle = 0) const;
+    virtual LayoutUnit marginAfter(const RenderStyle* overrideStyle = 0) const;
+    virtual LayoutUnit marginStart(const RenderStyle* overrideStyle = 0) const;
+    virtual LayoutUnit marginEnd(const RenderStyle* overrideStyle = 0) const;
+    void setMarginStart(LayoutUnit, const RenderStyle* overrideStyle = 0);
+    void setMarginEnd(LayoutUnit, const RenderStyle* overrideStyle = 0);
+    void setMarginBefore(LayoutUnit, const RenderStyle* overrideStyle = 0);
+    void setMarginAfter(LayoutUnit, const RenderStyle* overrideStyle = 0);
 
     // The following five functions are used to implement collapsing margins.
     // All objects know their maximal positive and negative margins.  The
index d0883a5..b145e6f 100644 (file)
@@ -130,10 +130,10 @@ public:
     virtual LayoutUnit marginBottom() const = 0;
     virtual LayoutUnit marginLeft() const = 0;
     virtual LayoutUnit marginRight() const = 0;
-    virtual LayoutUnit marginBefore() const = 0;
-    virtual LayoutUnit marginAfter() const = 0;
-    virtual LayoutUnit marginStart() const = 0;
-    virtual LayoutUnit marginEnd() const = 0;
+    virtual LayoutUnit marginBefore(const RenderStyle* otherStyle = 0) const = 0;
+    virtual LayoutUnit marginAfter(const RenderStyle* otherStyle = 0) const = 0;
+    virtual LayoutUnit marginStart(const RenderStyle* otherStyle = 0) const = 0;
+    virtual LayoutUnit marginEnd(const RenderStyle* otherStyle = 0) const = 0;
     LayoutUnit marginHeight() const { return marginTop() + marginBottom(); }
     LayoutUnit marginWidth() const { return marginLeft() + marginRight(); }
 
index 5f1a137..d3520a7 100644 (file)
@@ -694,24 +694,24 @@ LayoutUnit RenderInline::marginBottom() const
     return computeMargin(this, style()->marginBottom());
 }
 
-LayoutUnit RenderInline::marginStart() const
+LayoutUnit RenderInline::marginStart(const RenderStyle* otherStyle) const
 {
-    return computeMargin(this, style()->marginStart());
+    return computeMargin(this, style()->marginStartUsing(otherStyle ? otherStyle : style()));
 }
 
-LayoutUnit RenderInline::marginEnd() const
+LayoutUnit RenderInline::marginEnd(const RenderStyle* otherStyle) const
 {
-    return computeMargin(this, style()->marginEnd());
+    return computeMargin(this, style()->marginEndUsing(otherStyle ? otherStyle : style()));
 }
 
-LayoutUnit RenderInline::marginBefore() const
+LayoutUnit RenderInline::marginBefore(const RenderStyle* otherStyle) const
 {
-    return computeMargin(this, style()->marginBefore());
+    return computeMargin(this, style()->marginBeforeUsing(otherStyle ? otherStyle : style()));
 }
 
-LayoutUnit RenderInline::marginAfter() const
+LayoutUnit RenderInline::marginAfter(const RenderStyle* otherStyle) const
 {
-    return computeMargin(this, style()->marginAfter());
+    return computeMargin(this, style()->marginAfterUsing(otherStyle ? otherStyle : style()));
 }
 
 const char* RenderInline::renderName() const
index 0868b8a..2363f0b 100644 (file)
@@ -41,10 +41,10 @@ public:
     virtual LayoutUnit marginRight() const;
     virtual LayoutUnit marginTop() const;
     virtual LayoutUnit marginBottom() const;
-    virtual LayoutUnit marginBefore() const;
-    virtual LayoutUnit marginAfter() const;
-    virtual LayoutUnit marginStart() const;
-    virtual LayoutUnit marginEnd() const;
+    virtual LayoutUnit marginBefore(const RenderStyle* otherStyle = 0) const;
+    virtual LayoutUnit marginAfter(const RenderStyle* otherStyle = 0) const;
+    virtual LayoutUnit marginStart(const RenderStyle* otherStyle = 0) const;
+    virtual LayoutUnit marginEnd(const RenderStyle* otherStyle = 0) const;
 
     virtual void absoluteRects(Vector<IntRect>&, const LayoutPoint& accumulatedOffset) const;
     virtual void absoluteQuads(Vector<FloatQuad>&, bool* wasFixed) const;