Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(301)

Unified Diff: Source/WebCore/rendering/RenderDeprecatedFlexibleBox.cpp

Issue 8477022: Merge 98033 (Closed) Base URL: http://svn.webkit.org/repository/webkit/branches/chromium/874/
Patch Set: Created 9 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « LayoutTests/platform/qt/fast/flexbox/021-expected.txt ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/WebCore/rendering/RenderDeprecatedFlexibleBox.cpp
===================================================================
--- Source/WebCore/rendering/RenderDeprecatedFlexibleBox.cpp (revision 99343)
+++ Source/WebCore/rendering/RenderDeprecatedFlexibleBox.cpp (working copy)
@@ -97,7 +97,7 @@
if (m_currentChild && notFirstOrdinalValue())
m_ordinalValues.add(m_currentChild->style()->boxOrdinalGroup());
} while (!m_currentChild || (!m_currentChild->isAnonymous()
- && (m_currentChild->style()->boxOrdinalGroup() != m_currentOrdinal || m_currentChild->style()->visibility() == COLLAPSE)));
+ && m_currentChild->style()->boxOrdinalGroup() != m_currentOrdinal));
return m_currentChild;
}
@@ -144,11 +144,16 @@
return margin;
}
+static bool childDoesNotAffectWidthOrFlexing(RenderObject* child)
+{
+ // Positioned children and collapsed children don't affect the min/max width.
+ return child->isPositioned() || child->style()->visibility() == COLLAPSE;
+}
+
void RenderDeprecatedFlexibleBox::calcHorizontalPrefWidths()
{
for (RenderBox* child = firstChildBox(); child; child = child->nextSiblingBox()) {
- // Positioned children and collapsed children don't affect the min/max width.
- if (child->isPositioned() || child->style()->visibility() == COLLAPSE)
+ if (childDoesNotAffectWidthOrFlexing(child))
continue;
LayoutUnit margin = marginWidthForChild(child);
@@ -160,8 +165,7 @@
void RenderDeprecatedFlexibleBox::calcVerticalPrefWidths()
{
for (RenderBox* child = firstChildBox(); child; child = child->nextSiblingBox()) {
- // Positioned children and collapsed children don't affect the min/max width.
- if (child->isPositioned() || child->style()->visibility() == COLLAPSE)
+ if (childDoesNotAffectWidthOrFlexing(child))
continue;
LayoutUnit margin = marginWidthForChild(child);
@@ -310,7 +314,7 @@
{
for (RenderBox* child = iterator.first(); child; child = iterator.next()) {
// Check to see if this child flexes.
- if (!child->isPositioned() && child->style()->boxFlex() > 0.0f) {
+ if (!childDoesNotAffectWidthOrFlexing(child) && 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->clearOverrideSize();
@@ -422,8 +426,14 @@
child->setChildNeedsLayout(true, false);
}
continue;
+ } else if (child->style()->visibility() == COLLAPSE) {
+ // visibility: collapsed children do not participate in our positioning.
+ // But we need to lay them down.
+ child->layoutIfNeeded();
+ continue;
}
+
// We need to see if this child's height has changed, since we make block elements
// fill the height of a containing box by default.
// Now do a layout.
@@ -513,6 +523,9 @@
// Now distribute the space to objects.
for (RenderBox* child = iterator.first(); child && spaceAvailableThisPass && totalFlex; child = iterator.next()) {
+ if (child->style()->visibility() == COLLAPSE)
+ continue;
+
if (allowedChildFlex(child, expanding, i)) {
LayoutUnit spaceAdd = static_cast<LayoutUnit>(spaceAvailableThisPass * (child->style()->boxFlex() / totalFlex));
if (spaceAdd) {
@@ -562,7 +575,7 @@
// Determine the total number of children.
int totalChildren = 0;
for (RenderBox* child = iterator.first(); child; child = iterator.next()) {
- if (child->isPositioned())
+ if (childDoesNotAffectWidthOrFlexing(child))
continue;
++totalChildren;
}
@@ -573,7 +586,7 @@
--totalChildren;
bool firstChild = true;
for (RenderBox* child = iterator.first(); child; child = iterator.next()) {
- if (child->isPositioned())
+ if (childDoesNotAffectWidthOrFlexing(child))
continue;
if (firstChild) {
@@ -594,7 +607,7 @@
else // END for LTR, START for RTL
offset += remainingSpace;
for (RenderBox* child = iterator.first(); child; child = iterator.next()) {
- if (child->isPositioned())
+ if (childDoesNotAffectWidthOrFlexing(child))
continue;
placeChild(child, child->location() + LayoutSize(offset, 0));
@@ -654,6 +667,11 @@
child->setChildNeedsLayout(true, false);
}
continue;
+ } else if (child->style()->visibility() == COLLAPSE) {
+ // visibility: collapsed children do not participate in our positioning.
+ // But we need to lay them down.
+ child->layoutIfNeeded();
+ continue;
}
// Compute the child's vertical margins.
@@ -805,7 +823,7 @@
// Determine the total number of children.
int totalChildren = 0;
for (RenderBox* child = iterator.first(); child; child = iterator.next()) {
- if (child->isPositioned())
+ if (childDoesNotAffectWidthOrFlexing(child))
continue;
++totalChildren;
@@ -817,7 +835,7 @@
--totalChildren;
bool firstChild = true;
for (RenderBox* child = iterator.first(); child; child = iterator.next()) {
- if (child->isPositioned())
+ if (childDoesNotAffectWidthOrFlexing(child))
continue;
if (firstChild) {
@@ -837,7 +855,7 @@
else // END
offset += remainingSpace;
for (RenderBox* child = iterator.first(); child; child = iterator.next()) {
- if (child->isPositioned())
+ if (childDoesNotAffectWidthOrFlexing(child))
continue;
placeChild(child, child->location() + LayoutSize(0, offset));
}
@@ -854,7 +872,7 @@
{
int maxLineCount = 0;
for (RenderBox* child = iterator.first(); child; child = iterator.next()) {
- if (child->isPositioned())
+ if (childDoesNotAffectWidthOrFlexing(child))
continue;
if (relayoutChildren || (child->isReplaced() && (child->style()->width().isPercent() || child->style()->height().isPercent()))
@@ -880,7 +898,7 @@
return;
for (RenderBox* child = iterator.first(); child; child = iterator.next()) {
- if (child->isPositioned() || !child->style()->height().isAuto() || !child->isBlockFlow())
+ if (childDoesNotAffectWidthOrFlexing(child) || !child->style()->height().isAuto() || !child->isBlockFlow())
continue;
RenderBlock* blockChild = toRenderBlock(child);
@@ -968,7 +986,7 @@
LayoutUnit RenderDeprecatedFlexibleBox::allowedChildFlex(RenderBox* child, bool expanding, unsigned int group)
{
- if (child->isPositioned() || child->style()->boxFlex() == 0.0f || child->style()->boxFlexGroup() != group)
+ if (childDoesNotAffectWidthOrFlexing(child) || child->style()->boxFlex() == 0.0f || child->style()->boxFlexGroup() != group)
return 0;
if (expanding) {
« no previous file with comments | « LayoutTests/platform/qt/fast/flexbox/021-expected.txt ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698