Diff
Modified: trunk/Source/WebCore/ChangeLog (90667 => 90668)
--- trunk/Source/WebCore/ChangeLog 2011-07-08 22:01:17 UTC (rev 90667)
+++ trunk/Source/WebCore/ChangeLog 2011-07-08 22:15:14 UTC (rev 90668)
@@ -1,3 +1,41 @@
+2011-07-08 Tony Chang <[email protected]>
+
+ Refactor override size to be a size rather than just an int
+ https://bugs.webkit.org/show_bug.cgi?id=64195
+
+ Reviewed by David Hyatt.
+
+ Also convert to LayoutSize and LayoutUnit.
+
+ Covered by existing tests.
+
+ * rendering/RenderBox.cpp:
+ (WebCore::RenderBox::overrideSize): Pass in a LayoutSize.
+ (WebCore::RenderBox::setOverrideSize):
+ (WebCore::RenderBox::clearOverrideSize): New method for clearing the
+ override size (previous we would pass in -1)
+ (WebCore::RenderBox::overrideWidth):
+ (WebCore::RenderBox::overrideHeight):
+ (WebCore::RenderBox::computeLogicalWidth):
+ (WebCore::RenderBox::computeLogicalHeight):
+ (WebCore::RenderBox::computePercentageLogicalHeight):
+ (WebCore::RenderBox::availableLogicalHeightUsing):
+ * rendering/RenderBox.h:
+ * rendering/RenderDeprecatedFlexibleBox.cpp:
+ (WebCore::gatherFlexChildrenInfo):
+ (WebCore::RenderDeprecatedFlexibleBox::layoutHorizontalBox):
+ (WebCore::RenderDeprecatedFlexibleBox::layoutVerticalBox):
+ (WebCore::RenderDeprecatedFlexibleBox::applyLineClamp):
+ * rendering/RenderTableCell.cpp:
+ (WebCore::RenderTableCell::setOverrideSizeFromRowHeight):
+ * rendering/RenderTableCell.h: Remove setOverrideSize since it was
+ only called in one place to clear the override size. Inline this
+ logic instead.
+ * rendering/RenderTableSection.cpp:
+ (WebCore::RenderTableSection::calcRowLogicalHeight):
+ * rendering/RenderWidget.cpp:
+ (WebCore::RenderWidget::destroy):
+
2011-07-08 Emil A Eklund <[email protected]>
Switch pointInContainer and accumulatedOffset to to new layout types
Modified: trunk/Source/WebCore/rendering/RenderBox.cpp (90667 => 90668)
--- trunk/Source/WebCore/rendering/RenderBox.cpp 2011-07-08 22:01:17 UTC (rev 90667)
+++ trunk/Source/WebCore/rendering/RenderBox.cpp 2011-07-08 22:15:14 UTC (rev 90668)
@@ -58,8 +58,8 @@
using namespace HTMLNames;
-// Used by flexible boxes when flexing this element.
-typedef WTF::HashMap<const RenderBox*, int> OverrideSizeMap;
+// Used by flexible boxes when flexing this element and by table cells.
+typedef WTF::HashMap<const RenderBox*, LayoutSize> OverrideSizeMap;
static OverrideSizeMap* gOverrideSizeMap = 0;
bool RenderBox::s_hadOverflowClip = false;
@@ -686,38 +686,39 @@
return m_maxPreferredLogicalWidth;
}
-int RenderBox::overrideSize() const
+LayoutSize RenderBox::overrideSize() const
{
if (!hasOverrideSize())
- return -1;
+ return LayoutSize(-1, -1);
return gOverrideSizeMap->get(this);
}
-void RenderBox::setOverrideSize(int s)
+void RenderBox::setOverrideSize(const LayoutSize& size)
{
- if (s == -1) {
- if (hasOverrideSize()) {
- setHasOverrideSize(false);
- gOverrideSizeMap->remove(this);
- }
- } else {
- if (!gOverrideSizeMap)
- gOverrideSizeMap = new OverrideSizeMap();
- setHasOverrideSize(true);
- gOverrideSizeMap->set(this, s);
- }
+ if (!gOverrideSizeMap)
+ gOverrideSizeMap = new OverrideSizeMap();
+ setHasOverrideSize(true);
+ gOverrideSizeMap->set(this, size);
}
-int RenderBox::overrideWidth() const
+void RenderBox::clearOverrideSize()
{
- return hasOverrideSize() ? overrideSize() : width();
+ if (!hasOverrideSize())
+ return;
+ setHasOverrideSize(false);
+ gOverrideSizeMap->remove(this);
}
-int RenderBox::overrideHeight() const
+LayoutUnit RenderBox::overrideWidth() const
{
- return hasOverrideSize() ? overrideSize() : height();
+ return hasOverrideSize() ? overrideSize().width() : width();
}
+LayoutUnit RenderBox::overrideHeight() const
+{
+ return hasOverrideSize() ? overrideSize().height() : height();
+}
+
LayoutUnit RenderBox::computeBorderBoxLogicalWidth(LayoutUnit width) const
{
LayoutUnit bordersPlusPadding = borderAndPaddingLogicalWidth();
@@ -1554,7 +1555,7 @@
// https://bugs.webkit.org/show_bug.cgi?id=46418
if (hasOverrideSize() && parent()->style()->boxOrient() == HORIZONTAL
&& parent()->isFlexibleBox() && parent()->isFlexingChildren()) {
- setLogicalWidth(overrideSize());
+ setLogicalWidth(overrideWidth());
return;
}
@@ -1768,7 +1769,7 @@
// https://bugs.webkit.org/show_bug.cgi?id=46418
if (hasOverrideSize() && parent()->isFlexibleBox() && parent()->style()->boxOrient() == VERTICAL
&& parent()->isFlexingChildren())
- h = Length(overrideSize() - borderAndPaddingLogicalHeight(), Fixed);
+ h = Length(overrideHeight() - borderAndPaddingLogicalHeight(), Fixed);
else if (treatAsReplaced)
h = Length(computeReplacedLogicalHeight(), Fixed);
else {
@@ -1886,8 +1887,7 @@
// be a percentage of the cell's current content height.
if (cb->isTableCell()) {
if (!skippedAutoHeightContainingBlock) {
- result = cb->overrideSize();
- if (result == -1) {
+ if (!cb->hasOverrideSize()) {
// Normally we would let the cell size intrinsically, but scrolling overflow has to be
// treated differently, since WinIE lets scrolled overflow regions shrink as needed.
// While we can't get all cases right, we can at least detect when the cell has a specified
@@ -1900,6 +1900,7 @@
return 0;
return -1;
}
+ result = cb->overrideHeight();
includeBorderPadding = true;
}
}
@@ -2052,7 +2053,7 @@
// artificially. We're going to rely on this cell getting expanded to some new
// height, and then when we lay out again we'll use the calculation below.
if (isTableCell() && (h.isAuto() || h.isPercent()))
- return overrideSize() - borderAndPaddingLogicalWidth();
+ return overrideHeight() - borderAndPaddingLogicalWidth();
if (h.isPercent())
return computeContentBoxLogicalHeight(h.calcValue(containingBlock()->availableLogicalHeight()));
Modified: trunk/Source/WebCore/rendering/RenderBox.h (90667 => 90668)
--- trunk/Source/WebCore/rendering/RenderBox.h 2011-07-08 22:01:17 UTC (rev 90667)
+++ trunk/Source/WebCore/rendering/RenderBox.h 2011-07-08 22:15:14 UTC (rev 90668)
@@ -244,10 +244,11 @@
virtual int minPreferredLogicalWidth() const;
virtual int maxPreferredLogicalWidth() const;
- int overrideSize() const;
- int overrideWidth() const;
- int overrideHeight() const;
- virtual void setOverrideSize(int);
+ LayoutSize overrideSize() const;
+ LayoutUnit overrideWidth() const;
+ LayoutUnit overrideHeight() const;
+ void setOverrideSize(const LayoutSize&);
+ void clearOverrideSize();
virtual LayoutSize offsetFromContainer(RenderObject*, const LayoutPoint&) const;
Modified: trunk/Source/WebCore/rendering/RenderDeprecatedFlexibleBox.cpp (90667 => 90668)
--- trunk/Source/WebCore/rendering/RenderDeprecatedFlexibleBox.cpp 2011-07-08 22:01:17 UTC (rev 90667)
+++ trunk/Source/WebCore/rendering/RenderDeprecatedFlexibleBox.cpp 2011-07-08 22:15:14 UTC (rev 90668)
@@ -293,7 +293,7 @@
if (!child->isPositioned() && child->style()->boxFlex() > 0.0f) {
// We always have to lay out flexible objects again, since the flex distribution
// may have changed, and we need to reallocate space.
- child->setOverrideSize(-1);
+ child->clearOverrideSize();
if (!relayoutChildren)
child->setChildNeedsLayout(true, false);
haveFlex = true;
@@ -496,7 +496,7 @@
if (allowedChildFlex(child, expanding, i)) {
int spaceAdd = (int)(spaceAvailableThisPass * (child->style()->boxFlex()/totalFlex));
if (spaceAdd) {
- child->setOverrideSize(child->overrideWidth() + spaceAdd);
+ child->setOverrideSize(LayoutSize(child->overrideWidth() + spaceAdd, 0));
m_flexingChildren = true;
relayoutChildren = true;
}
@@ -513,7 +513,7 @@
int spaceAdd = groupRemainingSpace > 0 ? 1 : -1;
for (RenderBox* child = iterator.first(); child && groupRemainingSpace; child = iterator.next()) {
if (allowedChildFlex(child, expanding, i)) {
- child->setOverrideSize(child->overrideWidth() + spaceAdd);
+ child->setOverrideSize(LayoutSize(child->overrideWidth() + spaceAdd, 0));
m_flexingChildren = true;
relayoutChildren = true;
remainingSpace -= spaceAdd;
@@ -742,7 +742,7 @@
if (allowedChildFlex(child, expanding, i)) {
int spaceAdd = (int)(spaceAvailableThisPass * (child->style()->boxFlex()/totalFlex));
if (spaceAdd) {
- child->setOverrideSize(child->overrideHeight() + spaceAdd);
+ child->setOverrideSize(LayoutSize(0, child->overrideHeight() + spaceAdd));
m_flexingChildren = true;
relayoutChildren = true;
}
@@ -759,7 +759,7 @@
int spaceAdd = groupRemainingSpace > 0 ? 1 : -1;
for (RenderBox* child = iterator.first(); child && groupRemainingSpace; child = iterator.next()) {
if (allowedChildFlex(child, expanding, i)) {
- child->setOverrideSize(child->overrideHeight() + spaceAdd);
+ child->setOverrideSize(LayoutSize(0, child->overrideHeight() + spaceAdd));
m_flexingChildren = true;
relayoutChildren = true;
remainingSpace -= spaceAdd;
@@ -873,11 +873,11 @@
continue;
child->setChildNeedsLayout(true, false);
- child->setOverrideSize(newHeight);
+ child->setOverrideSize(LayoutSize(0, newHeight));
m_flexingChildren = true;
child->layoutIfNeeded();
m_flexingChildren = false;
- child->setOverrideSize(-1);
+ child->clearOverrideSize();
// FIXME: For now don't support RTL.
if (style()->direction() != LTR)
Modified: trunk/Source/WebCore/rendering/RenderTableCell.cpp (90667 => 90668)
--- trunk/Source/WebCore/rendering/RenderTableCell.cpp 2011-07-08 22:01:17 UTC (rev 90667)
+++ trunk/Source/WebCore/rendering/RenderTableCell.cpp 2011-07-08 22:15:14 UTC (rev 90668)
@@ -212,16 +212,10 @@
return result + intrinsicPaddingAfter();
}
-void RenderTableCell::setOverrideSize(int size)
-{
- clearIntrinsicPadding();
- RenderBlock::setOverrideSize(size);
-}
-
void RenderTableCell::setOverrideSizeFromRowHeight(int rowHeight)
{
clearIntrinsicPadding();
- RenderBlock::setOverrideSize(max(0, rowHeight - borderBefore() - paddingBefore() - borderAfter() - paddingAfter()));
+ RenderBlock::setOverrideSize(LayoutSize(0, max(0, rowHeight - borderBefore() - paddingBefore() - borderAfter() - paddingAfter())));
}
LayoutSize RenderTableCell::offsetFromContainer(RenderObject* o, const LayoutPoint& point) const
Modified: trunk/Source/WebCore/rendering/RenderTableCell.h (90667 => 90668)
--- trunk/Source/WebCore/rendering/RenderTableCell.h 2011-07-08 22:01:17 UTC (rev 90667)
+++ trunk/Source/WebCore/rendering/RenderTableCell.h 2011-07-08 22:15:14 UTC (rev 90668)
@@ -119,7 +119,6 @@
virtual int paddingBefore(bool includeIntrinsicPadding = true) const;
virtual int paddingAfter(bool includeIntrinsicPadding = true) const;
- virtual void setOverrideSize(int);
void setOverrideSizeFromRowHeight(int);
bool hasVisualOverflow() const { return m_overflow && !borderBoxRect().contains(m_overflow->visualOverflowRect()); }
Modified: trunk/Source/WebCore/rendering/RenderTableSection.cpp (90667 => 90668)
--- trunk/Source/WebCore/rendering/RenderTableSection.cpp 2011-07-08 22:01:17 UTC (rev 90667)
+++ trunk/Source/WebCore/rendering/RenderTableSection.cpp 2011-07-08 22:15:14 UTC (rev 90668)
@@ -335,13 +335,14 @@
int indx = max(r - cell->rowSpan() + 1, 0);
- if (cell->overrideSize() != -1) {
+ if (cell->hasOverrideSize()) {
if (!statePusher.didPush()) {
// Technically, we should also push state for the row, but since
// rows don't push a coordinate transform, that's not necessary.
statePusher.push(this, IntSize(x(), y()));
}
- cell->setOverrideSize(-1);
+ cell->clearIntrinsicPadding();
+ cell->clearOverrideSize();
cell->setChildNeedsLayout(true, false);
cell->layoutIfNeeded();
}
Modified: trunk/Source/WebCore/rendering/RenderWidget.cpp (90667 => 90668)
--- trunk/Source/WebCore/rendering/RenderWidget.cpp 2011-07-08 22:01:17 UTC (rev 90667)
+++ trunk/Source/WebCore/rendering/RenderWidget.cpp 2011-07-08 22:15:14 UTC (rev 90668)
@@ -139,7 +139,7 @@
// removes from override size map
if (hasOverrideSize())
- setOverrideSize(-1);
+ clearOverrideSize();
if (style() && (style()->logicalHeight().isPercent() || style()->logicalMinHeight().isPercent() || style()->logicalMaxHeight().isPercent()))
RenderBlock::removePercentHeightDescendant(this);