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

Side by Side Diff: Source/core/layout/LayoutBox.cpp

Issue 1033943002: Rename LayoutStyle to papayawhip (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: ensureComputedStyle Created 5 years, 8 months 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « Source/core/layout/LayoutBox.h ('k') | Source/core/layout/LayoutBoxModelObject.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org)
3 * (C) 1999 Antti Koivisto (koivisto@kde.org) 3 * (C) 1999 Antti Koivisto (koivisto@kde.org)
4 * (C) 2005 Allan Sandfeld Jensen (kde@carewolf.com) 4 * (C) 2005 Allan Sandfeld Jensen (kde@carewolf.com)
5 * (C) 2005, 2006 Samuel Weinig (sam.weinig@gmail.com) 5 * (C) 2005, 2006 Samuel Weinig (sam.weinig@gmail.com)
6 * Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010 Apple Inc. All rights reserv ed. 6 * Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010 Apple Inc. All rights reserv ed.
7 * Copyright (C) 2013 Adobe Systems Incorporated. All rights reserved. 7 * Copyright (C) 2013 Adobe Systems Incorporated. All rights reserved.
8 * 8 *
9 * This library is free software; you can redistribute it and/or 9 * This library is free software; you can redistribute it and/or
10 * modify it under the terms of the GNU Library General Public 10 * modify it under the terms of the GNU Library General Public
(...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after
164 if (parentBlockFlow) { 164 if (parentBlockFlow) {
165 parentBlockFlow->markSiblingsWithFloatsForLayout(this); 165 parentBlockFlow->markSiblingsWithFloatsForLayout(this);
166 parentBlockFlow->markAllDescendantsWithFloatsForLayout(this, false); 166 parentBlockFlow->markAllDescendantsWithFloatsForLayout(this, false);
167 } 167 }
168 } 168 }
169 169
170 if (isOutOfFlowPositioned()) 170 if (isOutOfFlowPositioned())
171 LayoutBlock::removePositionedObject(this); 171 LayoutBlock::removePositionedObject(this);
172 } 172 }
173 173
174 void LayoutBox::styleWillChange(StyleDifference diff, const LayoutStyle& newStyl e) 174 void LayoutBox::styleWillChange(StyleDifference diff, const ComputedStyle& newSt yle)
175 { 175 {
176 const LayoutStyle* oldStyle = style(); 176 const ComputedStyle* oldStyle = style();
177 if (oldStyle) { 177 if (oldStyle) {
178 // The background of the root element or the body element could propagat e up to 178 // The background of the root element or the body element could propagat e up to
179 // the canvas. Just dirty the entire canvas when our style changes subst antially. 179 // the canvas. Just dirty the entire canvas when our style changes subst antially.
180 if ((diff.needsPaintInvalidation() || diff.needsLayout()) && node() 180 if ((diff.needsPaintInvalidation() || diff.needsLayout()) && node()
181 && (isHTMLHtmlElement(*node()) || isHTMLBodyElement(*node()))) { 181 && (isHTMLHtmlElement(*node()) || isHTMLBodyElement(*node()))) {
182 view()->setShouldDoFullPaintInvalidation(); 182 view()->setShouldDoFullPaintInvalidation();
183 183
184 if (oldStyle->hasEntirelyFixedBackground() != newStyle.hasEntirelyFi xedBackground()) 184 if (oldStyle->hasEntirelyFixedBackground() != newStyle.hasEntirelyFi xedBackground())
185 view()->compositor()->setNeedsUpdateFixedBackground(); 185 view()->compositor()->setNeedsUpdateFixedBackground();
186 } 186 }
(...skipping 11 matching lines...) Expand all
198 } 198 }
199 // FIXME: This branch runs when !oldStyle, which means that layout was never called 199 // FIXME: This branch runs when !oldStyle, which means that layout was never called
200 // so what's the point in invalidating the whole view that we never painted? 200 // so what's the point in invalidating the whole view that we never painted?
201 } else if (isBody()) { 201 } else if (isBody()) {
202 view()->setShouldDoFullPaintInvalidation(); 202 view()->setShouldDoFullPaintInvalidation();
203 } 203 }
204 204
205 LayoutBoxModelObject::styleWillChange(diff, newStyle); 205 LayoutBoxModelObject::styleWillChange(diff, newStyle);
206 } 206 }
207 207
208 void LayoutBox::styleDidChange(StyleDifference diff, const LayoutStyle* oldStyle ) 208 void LayoutBox::styleDidChange(StyleDifference diff, const ComputedStyle* oldSty le)
209 { 209 {
210 // Horizontal writing mode definition is updated in LayoutBoxModelObject::up dateFromStyle, 210 // Horizontal writing mode definition is updated in LayoutBoxModelObject::up dateFromStyle,
211 // (as part of the LayoutBoxModelObject::styleDidChange call below). So, we can safely cache the horizontal 211 // (as part of the LayoutBoxModelObject::styleDidChange call below). So, we can safely cache the horizontal
212 // writing mode value before style change here. 212 // writing mode value before style change here.
213 bool oldHorizontalWritingMode = isHorizontalWritingMode(); 213 bool oldHorizontalWritingMode = isHorizontalWritingMode();
214 214
215 LayoutBoxModelObject::styleDidChange(diff, oldStyle); 215 LayoutBoxModelObject::styleDidChange(diff, oldStyle);
216 216
217 const LayoutStyle& newStyle = styleRef(); 217 const ComputedStyle& newStyle = styleRef();
218 if (needsLayout() && oldStyle) 218 if (needsLayout() && oldStyle)
219 LayoutBlock::removePercentHeightDescendantIfNeeded(this); 219 LayoutBlock::removePercentHeightDescendantIfNeeded(this);
220 220
221 if (LayoutBlock::hasPercentHeightContainerMap() && slowFirstChild() 221 if (LayoutBlock::hasPercentHeightContainerMap() && slowFirstChild()
222 && oldHorizontalWritingMode != isHorizontalWritingMode()) 222 && oldHorizontalWritingMode != isHorizontalWritingMode())
223 LayoutBlock::clearPercentHeightDescendantsFrom(this); 223 LayoutBlock::clearPercentHeightDescendantsFrom(this);
224 224
225 // If our zoom factor changes and we have a defined scrollLeft/Top, we need to adjust that value into the 225 // If our zoom factor changes and we have a defined scrollLeft/Top, we need to adjust that value into the
226 // new zoomed coordinate space. 226 // new zoomed coordinate space.
227 if (hasOverflowClip() && oldStyle && oldStyle->effectiveZoom() != newStyle.e ffectiveZoom() && layer()) { 227 if (hasOverflowClip() && oldStyle && oldStyle->effectiveZoom() != newStyle.e ffectiveZoom() && layer()) {
(...skipping 20 matching lines...) Expand all
248 document().view()->recalculateScrollbarOverlayStyle(); 248 document().view()->recalculateScrollbarOverlayStyle();
249 document().view()->recalculateCustomScrollbarStyle(); 249 document().view()->recalculateCustomScrollbarStyle();
250 } 250 }
251 updateShapeOutsideInfoAfterStyleChange(*style(), oldStyle); 251 updateShapeOutsideInfoAfterStyleChange(*style(), oldStyle);
252 updateGridPositionAfterStyleChange(oldStyle); 252 updateGridPositionAfterStyleChange(oldStyle);
253 253
254 if (LayoutMultiColumnSpannerPlaceholder* placeholder = this->spannerPlacehol der()) 254 if (LayoutMultiColumnSpannerPlaceholder* placeholder = this->spannerPlacehol der())
255 placeholder->updateMarginProperties(); 255 placeholder->updateMarginProperties();
256 } 256 }
257 257
258 void LayoutBox::updateShapeOutsideInfoAfterStyleChange(const LayoutStyle& style, const LayoutStyle* oldStyle) 258 void LayoutBox::updateShapeOutsideInfoAfterStyleChange(const ComputedStyle& styl e, const ComputedStyle* oldStyle)
259 { 259 {
260 const ShapeValue* shapeOutside = style.shapeOutside(); 260 const ShapeValue* shapeOutside = style.shapeOutside();
261 const ShapeValue* oldShapeOutside = oldStyle ? oldStyle->shapeOutside() : La youtStyle::initialShapeOutside(); 261 const ShapeValue* oldShapeOutside = oldStyle ? oldStyle->shapeOutside() : Co mputedStyle::initialShapeOutside();
262 262
263 Length shapeMargin = style.shapeMargin(); 263 Length shapeMargin = style.shapeMargin();
264 Length oldShapeMargin = oldStyle ? oldStyle->shapeMargin() : LayoutStyle::in itialShapeMargin(); 264 Length oldShapeMargin = oldStyle ? oldStyle->shapeMargin() : ComputedStyle:: initialShapeMargin();
265 265
266 float shapeImageThreshold = style.shapeImageThreshold(); 266 float shapeImageThreshold = style.shapeImageThreshold();
267 float oldShapeImageThreshold = oldStyle ? oldStyle->shapeImageThreshold() : LayoutStyle::initialShapeImageThreshold(); 267 float oldShapeImageThreshold = oldStyle ? oldStyle->shapeImageThreshold() : ComputedStyle::initialShapeImageThreshold();
268 268
269 // FIXME: A future optimization would do a deep comparison for equality. (bu g 100811) 269 // FIXME: A future optimization would do a deep comparison for equality. (bu g 100811)
270 if (shapeOutside == oldShapeOutside && shapeMargin == oldShapeMargin && shap eImageThreshold == oldShapeImageThreshold) 270 if (shapeOutside == oldShapeOutside && shapeMargin == oldShapeMargin && shap eImageThreshold == oldShapeImageThreshold)
271 return; 271 return;
272 272
273 if (!shapeOutside) 273 if (!shapeOutside)
274 ShapeOutsideInfo::removeInfo(*this); 274 ShapeOutsideInfo::removeInfo(*this);
275 else 275 else
276 ShapeOutsideInfo::ensureInfo(*this).markShapeAsDirty(); 276 ShapeOutsideInfo::ensureInfo(*this).markShapeAsDirty();
277 277
278 if (shapeOutside || shapeOutside != oldShapeOutside) 278 if (shapeOutside || shapeOutside != oldShapeOutside)
279 markShapeOutsideDependentsForLayout(); 279 markShapeOutsideDependentsForLayout();
280 } 280 }
281 281
282 void LayoutBox::updateGridPositionAfterStyleChange(const LayoutStyle* oldStyle) 282 void LayoutBox::updateGridPositionAfterStyleChange(const ComputedStyle* oldStyle )
283 { 283 {
284 if (!oldStyle || !parent() || !parent()->isLayoutGrid()) 284 if (!oldStyle || !parent() || !parent()->isLayoutGrid())
285 return; 285 return;
286 286
287 if (oldStyle->gridColumnStart() == style()->gridColumnStart() 287 if (oldStyle->gridColumnStart() == style()->gridColumnStart()
288 && oldStyle->gridColumnEnd() == style()->gridColumnEnd() 288 && oldStyle->gridColumnEnd() == style()->gridColumnEnd()
289 && oldStyle->gridRowStart() == style()->gridRowStart() 289 && oldStyle->gridRowStart() == style()->gridRowStart()
290 && oldStyle->gridRowEnd() == style()->gridRowEnd() 290 && oldStyle->gridRowEnd() == style()->gridRowEnd()
291 && oldStyle->order() == style()->order() 291 && oldStyle->order() == style()->order()
292 && oldStyle->hasOutOfFlowPosition() == style()->hasOutOfFlowPosition()) 292 && oldStyle->hasOutOfFlowPosition() == style()->hasOutOfFlowPosition())
293 return; 293 return;
294 294
295 // It should be possible to not dirty the grid in some cases (like moving an explicitly placed grid item). 295 // It should be possible to not dirty the grid in some cases (like moving an explicitly placed grid item).
296 // For now, it's more simple to just always recompute the grid. 296 // For now, it's more simple to just always recompute the grid.
297 toLayoutGrid(parent())->dirtyGrid(); 297 toLayoutGrid(parent())->dirtyGrid();
298 } 298 }
299 299
300 void LayoutBox::updateFromStyle() 300 void LayoutBox::updateFromStyle()
301 { 301 {
302 LayoutBoxModelObject::updateFromStyle(); 302 LayoutBoxModelObject::updateFromStyle();
303 303
304 const LayoutStyle& styleToUse = styleRef(); 304 const ComputedStyle& styleToUse = styleRef();
305 bool isRootObject = isDocumentElement(); 305 bool isRootObject = isDocumentElement();
306 bool isViewObject = isLayoutView(); 306 bool isViewObject = isLayoutView();
307 bool rootLayerScrolls = document().settings() && document().settings()->root LayerScrolls(); 307 bool rootLayerScrolls = document().settings() && document().settings()->root LayerScrolls();
308 308
309 // The root and the LayoutView always paint their backgrounds/borders. 309 // The root and the LayoutView always paint their backgrounds/borders.
310 if (isRootObject || isViewObject) 310 if (isRootObject || isViewObject)
311 setHasBoxDecorationBackground(true); 311 setHasBoxDecorationBackground(true);
312 312
313 setFloating(!isOutOfFlowPositioned() && styleToUse.isFloating()); 313 setFloating(!isOutOfFlowPositioned() && styleToUse.isFloating());
314 314
(...skipping 256 matching lines...) Expand 10 before | Expand all | Expand 10 after
571 571
572 void LayoutBox::updateLayerTransformAfterLayout() 572 void LayoutBox::updateLayerTransformAfterLayout()
573 { 573 {
574 // Transform-origin depends on box size, so we need to update the layer tran sform after layout. 574 // Transform-origin depends on box size, so we need to update the layer tran sform after layout.
575 if (hasLayer()) 575 if (hasLayer())
576 layer()->updateTransformationMatrix(); 576 layer()->updateTransformationMatrix();
577 } 577 }
578 578
579 LayoutUnit LayoutBox::constrainLogicalWidthByMinMax(LayoutUnit logicalWidth, Lay outUnit availableWidth, LayoutBlock* cb) const 579 LayoutUnit LayoutBox::constrainLogicalWidthByMinMax(LayoutUnit logicalWidth, Lay outUnit availableWidth, LayoutBlock* cb) const
580 { 580 {
581 const LayoutStyle& styleToUse = styleRef(); 581 const ComputedStyle& styleToUse = styleRef();
582 if (!styleToUse.logicalMaxWidth().isMaxSizeNone()) 582 if (!styleToUse.logicalMaxWidth().isMaxSizeNone())
583 logicalWidth = std::min(logicalWidth, computeLogicalWidthUsing(MaxSize, styleToUse.logicalMaxWidth(), availableWidth, cb)); 583 logicalWidth = std::min(logicalWidth, computeLogicalWidthUsing(MaxSize, styleToUse.logicalMaxWidth(), availableWidth, cb));
584 return std::max(logicalWidth, computeLogicalWidthUsing(MinSize, styleToUse.l ogicalMinWidth(), availableWidth, cb)); 584 return std::max(logicalWidth, computeLogicalWidthUsing(MinSize, styleToUse.l ogicalMinWidth(), availableWidth, cb));
585 } 585 }
586 586
587 LayoutUnit LayoutBox::constrainLogicalHeightByMinMax(LayoutUnit logicalHeight, L ayoutUnit intrinsicContentHeight) const 587 LayoutUnit LayoutBox::constrainLogicalHeightByMinMax(LayoutUnit logicalHeight, L ayoutUnit intrinsicContentHeight) const
588 { 588 {
589 const LayoutStyle& styleToUse = styleRef(); 589 const ComputedStyle& styleToUse = styleRef();
590 if (!styleToUse.logicalMaxHeight().isMaxSizeNone()) { 590 if (!styleToUse.logicalMaxHeight().isMaxSizeNone()) {
591 LayoutUnit maxH = computeLogicalHeightUsing(styleToUse.logicalMaxHeight( ), intrinsicContentHeight); 591 LayoutUnit maxH = computeLogicalHeightUsing(styleToUse.logicalMaxHeight( ), intrinsicContentHeight);
592 if (maxH != -1) 592 if (maxH != -1)
593 logicalHeight = std::min(logicalHeight, maxH); 593 logicalHeight = std::min(logicalHeight, maxH);
594 } 594 }
595 return std::max(logicalHeight, computeLogicalHeightUsing(styleToUse.logicalM inHeight(), intrinsicContentHeight)); 595 return std::max(logicalHeight, computeLogicalHeightUsing(styleToUse.logicalM inHeight(), intrinsicContentHeight));
596 } 596 }
597 597
598 LayoutUnit LayoutBox::constrainContentBoxLogicalHeightByMinMax(LayoutUnit logica lHeight, LayoutUnit intrinsicContentHeight) const 598 LayoutUnit LayoutBox::constrainContentBoxLogicalHeightByMinMax(LayoutUnit logica lHeight, LayoutUnit intrinsicContentHeight) const
599 { 599 {
600 const LayoutStyle& styleToUse = styleRef(); 600 const ComputedStyle& styleToUse = styleRef();
601 if (!styleToUse.logicalMaxHeight().isMaxSizeNone()) { 601 if (!styleToUse.logicalMaxHeight().isMaxSizeNone()) {
602 LayoutUnit maxH = computeContentLogicalHeight(styleToUse.logicalMaxHeigh t(), intrinsicContentHeight); 602 LayoutUnit maxH = computeContentLogicalHeight(styleToUse.logicalMaxHeigh t(), intrinsicContentHeight);
603 if (maxH != -1) 603 if (maxH != -1)
604 logicalHeight = std::min(logicalHeight, maxH); 604 logicalHeight = std::min(logicalHeight, maxH);
605 } 605 }
606 return std::max(logicalHeight, computeContentLogicalHeight(styleToUse.logica lMinHeight(), intrinsicContentHeight)); 606 return std::max(logicalHeight, computeContentLogicalHeight(styleToUse.logica lMinHeight(), intrinsicContentHeight));
607 } 607 }
608 608
609 void LayoutBox::setLocationAndUpdateOverflowControlsIfNeeded(const LayoutPoint& location) 609 void LayoutBox::setLocationAndUpdateOverflowControlsIfNeeded(const LayoutPoint& location)
610 { 610 {
(...skipping 634 matching lines...) Expand 10 before | Expand all | Expand 10 after
1245 backgroundRect = contentBoxRect(); 1245 backgroundRect = contentBoxRect();
1246 break; 1246 break;
1247 default: 1247 default:
1248 break; 1248 break;
1249 } 1249 }
1250 return backgroundRect.contains(localRect); 1250 return backgroundRect.contains(localRect);
1251 } 1251 }
1252 1252
1253 static bool isCandidateForOpaquenessTest(const LayoutBox& childBox) 1253 static bool isCandidateForOpaquenessTest(const LayoutBox& childBox)
1254 { 1254 {
1255 const LayoutStyle& childStyle = childBox.styleRef(); 1255 const ComputedStyle& childStyle = childBox.styleRef();
1256 if (childStyle.position() != StaticPosition && childBox.containingBlock() != childBox.parent()) 1256 if (childStyle.position() != StaticPosition && childBox.containingBlock() != childBox.parent())
1257 return false; 1257 return false;
1258 if (childStyle.visibility() != VISIBLE || childStyle.shapeOutside()) 1258 if (childStyle.visibility() != VISIBLE || childStyle.shapeOutside())
1259 return false; 1259 return false;
1260 if (childBox.size().isZero()) 1260 if (childBox.size().isZero())
1261 return false; 1261 return false;
1262 if (DeprecatedPaintLayer* childLayer = childBox.layer()) { 1262 if (DeprecatedPaintLayer* childLayer = childBox.layer()) {
1263 // FIXME: perhaps this could be less conservative? 1263 // FIXME: perhaps this could be less conservative?
1264 if (childLayer->compositingState() != NotComposited) 1264 if (childLayer->compositingState() != NotComposited)
1265 return false; 1265 return false;
(...skipping 287 matching lines...) Expand 10 before | Expand all | Expand 10 after
1553 1553
1554 LayoutUnit LayoutBox::perpendicularContainingBlockLogicalHeight() const 1554 LayoutUnit LayoutBox::perpendicularContainingBlockLogicalHeight() const
1555 { 1555 {
1556 if (hasOverrideContainingBlockLogicalHeight()) 1556 if (hasOverrideContainingBlockLogicalHeight())
1557 return overrideContainingBlockContentLogicalHeight(); 1557 return overrideContainingBlockContentLogicalHeight();
1558 1558
1559 LayoutBlock* cb = containingBlock(); 1559 LayoutBlock* cb = containingBlock();
1560 if (cb->hasOverrideHeight()) 1560 if (cb->hasOverrideHeight())
1561 return cb->overrideLogicalContentHeight(); 1561 return cb->overrideLogicalContentHeight();
1562 1562
1563 const LayoutStyle& containingBlockStyle = cb->styleRef(); 1563 const ComputedStyle& containingBlockStyle = cb->styleRef();
1564 Length logicalHeightLength = containingBlockStyle.logicalHeight(); 1564 Length logicalHeightLength = containingBlockStyle.logicalHeight();
1565 1565
1566 // FIXME: For now just support fixed heights. Eventually should support per centage heights as well. 1566 // FIXME: For now just support fixed heights. Eventually should support per centage heights as well.
1567 if (!logicalHeightLength.isFixed()) { 1567 if (!logicalHeightLength.isFixed()) {
1568 LayoutUnit fillFallbackExtent = containingBlockStyle.isHorizontalWriting Mode() 1568 LayoutUnit fillFallbackExtent = containingBlockStyle.isHorizontalWriting Mode()
1569 ? view()->frameView()->unscaledVisibleContentSize().height() 1569 ? view()->frameView()->unscaledVisibleContentSize().height()
1570 : view()->frameView()->unscaledVisibleContentSize().width(); 1570 : view()->frameView()->unscaledVisibleContentSize().width();
1571 LayoutUnit fillAvailableExtent = containingBlock()->availableLogicalHeig ht(ExcludeMarginBorderPadding); 1571 LayoutUnit fillAvailableExtent = containingBlock()->availableLogicalHeig ht(ExcludeMarginBorderPadding);
1572 return std::min(fillAvailableExtent, fillFallbackExtent); 1572 return std::min(fillAvailableExtent, fillFallbackExtent);
1573 } 1573 }
(...skipping 228 matching lines...) Expand 10 before | Expand all | Expand 10 after
1802 void LayoutBox::mapRectToPaintInvalidationBacking(const LayoutBoxModelObject* pa intInvalidationContainer, LayoutRect& rect, const PaintInvalidationState* paintI nvalidationState) const 1802 void LayoutBox::mapRectToPaintInvalidationBacking(const LayoutBoxModelObject* pa intInvalidationContainer, LayoutRect& rect, const PaintInvalidationState* paintI nvalidationState) const
1803 { 1803 {
1804 // The rect we compute at each step is shifted by our x/y offset in the pare nt container's coordinate space. 1804 // The rect we compute at each step is shifted by our x/y offset in the pare nt container's coordinate space.
1805 // Only when we cross a writing mode boundary will we have to possibly flipF orWritingMode (to convert into a more appropriate 1805 // Only when we cross a writing mode boundary will we have to possibly flipF orWritingMode (to convert into a more appropriate
1806 // offset corner for the enclosing container). This allows for a fully RL or BT document to issue paint invalidations 1806 // offset corner for the enclosing container). This allows for a fully RL or BT document to issue paint invalidations
1807 // properly even during layout, since the rect remains flipped all the way u ntil the end. 1807 // properly even during layout, since the rect remains flipped all the way u ntil the end.
1808 // 1808 //
1809 // LayoutView::computeRectForPaintInvalidation then converts the rect to phy sical coordinates. We also convert to 1809 // LayoutView::computeRectForPaintInvalidation then converts the rect to phy sical coordinates. We also convert to
1810 // physical when we hit a paintInvalidationContainer boundary. Therefore the final rect returned is always in the 1810 // physical when we hit a paintInvalidationContainer boundary. Therefore the final rect returned is always in the
1811 // physical coordinate space of the paintInvalidationContainer. 1811 // physical coordinate space of the paintInvalidationContainer.
1812 const LayoutStyle& styleToUse = styleRef(); 1812 const ComputedStyle& styleToUse = styleRef();
1813 1813
1814 EPosition position = styleToUse.position(); 1814 EPosition position = styleToUse.position();
1815 1815
1816 // We need to inflate the paint invalidation rect before we use paintInvalid ationState, 1816 // We need to inflate the paint invalidation rect before we use paintInvalid ationState,
1817 // else we would forget to inflate it for the current renderer. FIXME: If th ese were 1817 // else we would forget to inflate it for the current renderer. FIXME: If th ese were
1818 // included into the visual overflow for repaint, we wouldn't have this issu e. 1818 // included into the visual overflow for repaint, we wouldn't have this issu e.
1819 inflatePaintInvalidationRectForReflectionAndFilter(rect); 1819 inflatePaintInvalidationRectForReflectionAndFilter(rect);
1820 1820
1821 if (paintInvalidationState && paintInvalidationState->canMapToContainer(pain tInvalidationContainer) && position != FixedPosition) { 1821 if (paintInvalidationState && paintInvalidationState->canMapToContainer(pain tInvalidationContainer) && position != FixedPosition) {
1822 if (layer() && layer()->transform()) 1822 if (layer() && layer()->transform())
(...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after
1978 computedValues.m_extent = overrideLogicalContentWidth() + borderAndPaddi ngLogicalWidth(); 1978 computedValues.m_extent = overrideLogicalContentWidth() + borderAndPaddi ngLogicalWidth();
1979 return; 1979 return;
1980 } 1980 }
1981 1981
1982 // FIXME: Account for writing-mode in flexible boxes. 1982 // FIXME: Account for writing-mode in flexible boxes.
1983 // https://bugs.webkit.org/show_bug.cgi?id=46418 1983 // https://bugs.webkit.org/show_bug.cgi?id=46418
1984 bool inVerticalBox = parent()->isDeprecatedFlexibleBox() && (parent()->style ()->boxOrient() == VERTICAL); 1984 bool inVerticalBox = parent()->isDeprecatedFlexibleBox() && (parent()->style ()->boxOrient() == VERTICAL);
1985 bool stretching = (parent()->style()->boxAlign() == BSTRETCH); 1985 bool stretching = (parent()->style()->boxAlign() == BSTRETCH);
1986 bool treatAsReplaced = shouldComputeSizeAsReplaced() && (!inVerticalBox || ! stretching); 1986 bool treatAsReplaced = shouldComputeSizeAsReplaced() && (!inVerticalBox || ! stretching);
1987 1987
1988 const LayoutStyle& styleToUse = styleRef(); 1988 const ComputedStyle& styleToUse = styleRef();
1989 Length logicalWidthLength = treatAsReplaced ? Length(computeReplacedLogicalW idth(), Fixed) : styleToUse.logicalWidth(); 1989 Length logicalWidthLength = treatAsReplaced ? Length(computeReplacedLogicalW idth(), Fixed) : styleToUse.logicalWidth();
1990 1990
1991 LayoutBlock* cb = containingBlock(); 1991 LayoutBlock* cb = containingBlock();
1992 LayoutUnit containerLogicalWidth = std::max(LayoutUnit(), containingBlockLog icalWidthForContent()); 1992 LayoutUnit containerLogicalWidth = std::max(LayoutUnit(), containingBlockLog icalWidthForContent());
1993 bool hasPerpendicularContainingBlock = cb->isHorizontalWritingMode() != isHo rizontalWritingMode(); 1993 bool hasPerpendicularContainingBlock = cb->isHorizontalWritingMode() != isHo rizontalWritingMode();
1994 1994
1995 if (isInline() && !isInlineBlockOrInlineTable()) { 1995 if (isInline() && !isInlineBlockOrInlineTable()) {
1996 // just calculate margins 1996 // just calculate margins
1997 computedValues.m_margins.m_start = minimumValueForLength(styleToUse.marg inStart(), containerLogicalWidth); 1997 computedValues.m_margins.m_start = minimumValueForLength(styleToUse.marg inStart(), containerLogicalWidth);
1998 computedValues.m_margins.m_end = minimumValueForLength(styleToUse.margin End(), containerLogicalWidth); 1998 computedValues.m_margins.m_end = minimumValueForLength(styleToUse.margin End(), containerLogicalWidth);
(...skipping 212 matching lines...) Expand 10 before | Expand all | Expand 10 after
2211 } 2211 }
2212 2212
2213 // CSS 2.1 (10.3.3): "If 'width' is not 'auto' and 'border-left-width' + 'pa dding-left' + 'width' + 'padding-right' + 'border-right-width' 2213 // CSS 2.1 (10.3.3): "If 'width' is not 'auto' and 'border-left-width' + 'pa dding-left' + 'width' + 'padding-right' + 'border-right-width'
2214 // (plus any of 'margin-left' or 'margin-right' that are not 'auto') is larg er than the width of the containing block, then any 'auto' 2214 // (plus any of 'margin-left' or 'margin-right' that are not 'auto') is larg er than the width of the containing block, then any 'auto'
2215 // values for 'margin-left' or 'margin-right' are, for the following rules, treated as zero. 2215 // values for 'margin-left' or 'margin-right' are, for the following rules, treated as zero.
2216 LayoutUnit marginBoxWidth = childWidth + (!style()->width().isAuto() ? margi nStartWidth + marginEndWidth : LayoutUnit()); 2216 LayoutUnit marginBoxWidth = childWidth + (!style()->width().isAuto() ? margi nStartWidth + marginEndWidth : LayoutUnit());
2217 2217
2218 if (marginBoxWidth < availableWidth) { 2218 if (marginBoxWidth < availableWidth) {
2219 // CSS 2.1: "If both 'margin-left' and 'margin-right' are 'auto', their used values are equal. This horizontally centers the element 2219 // CSS 2.1: "If both 'margin-left' and 'margin-right' are 'auto', their used values are equal. This horizontally centers the element
2220 // with respect to the edges of the containing block." 2220 // with respect to the edges of the containing block."
2221 const LayoutStyle& containingBlockStyle = containingBlock->styleRef(); 2221 const ComputedStyle& containingBlockStyle = containingBlock->styleRef();
2222 if ((marginStartLength.isAuto() && marginEndLength.isAuto()) 2222 if ((marginStartLength.isAuto() && marginEndLength.isAuto())
2223 || (!marginStartLength.isAuto() && !marginEndLength.isAuto() && cont ainingBlockStyle.textAlign() == WEBKIT_CENTER)) { 2223 || (!marginStartLength.isAuto() && !marginEndLength.isAuto() && cont ainingBlockStyle.textAlign() == WEBKIT_CENTER)) {
2224 // Other browsers center the margin box for align=center elements so we match them here. 2224 // Other browsers center the margin box for align=center elements so we match them here.
2225 LayoutUnit centeredMarginBoxStart = std::max(LayoutUnit(), (availabl eWidth - childWidth - marginStartWidth - marginEndWidth) / 2); 2225 LayoutUnit centeredMarginBoxStart = std::max(LayoutUnit(), (availabl eWidth - childWidth - marginStartWidth - marginEndWidth) / 2);
2226 marginStart = centeredMarginBoxStart + marginStartWidth; 2226 marginStart = centeredMarginBoxStart + marginStartWidth;
2227 marginEnd = availableWidth - childWidth - marginStart + marginEndWid th; 2227 marginEnd = availableWidth - childWidth - marginStart + marginEndWid th;
2228 return; 2228 return;
2229 } 2229 }
2230 2230
2231 // Adjust margins for the align attribute 2231 // Adjust margins for the align attribute
(...skipping 214 matching lines...) Expand 10 before | Expand all | Expand 10 after
2446 LayoutUnit rootMarginBorderPaddingHeight = 0; 2446 LayoutUnit rootMarginBorderPaddingHeight = 0;
2447 while (!cb->isLayoutView() && skipContainingBlockForPercentHeightCalculation (cb)) { 2447 while (!cb->isLayoutView() && skipContainingBlockForPercentHeightCalculation (cb)) {
2448 if (cb->isBody() || cb->isDocumentElement()) 2448 if (cb->isBody() || cb->isDocumentElement())
2449 rootMarginBorderPaddingHeight += cb->marginBefore() + cb->marginAfte r() + cb->borderAndPaddingLogicalHeight(); 2449 rootMarginBorderPaddingHeight += cb->marginBefore() + cb->marginAfte r() + cb->borderAndPaddingLogicalHeight();
2450 skippedAutoHeightContainingBlock = true; 2450 skippedAutoHeightContainingBlock = true;
2451 containingBlockChild = cb; 2451 containingBlockChild = cb;
2452 cb = cb->containingBlock(); 2452 cb = cb->containingBlock();
2453 } 2453 }
2454 cb->addPercentHeightDescendant(const_cast<LayoutBox*>(this)); 2454 cb->addPercentHeightDescendant(const_cast<LayoutBox*>(this));
2455 2455
2456 const LayoutStyle& cbstyle = cb->styleRef(); 2456 const ComputedStyle& cbstyle = cb->styleRef();
2457 2457
2458 // A positioned element that specified both top/bottom or that specifies hei ght should be treated as though it has a height 2458 // A positioned element that specified both top/bottom or that specifies hei ght should be treated as though it has a height
2459 // explicitly specified that can be used for any percentage computations. 2459 // explicitly specified that can be used for any percentage computations.
2460 bool isOutOfFlowPositionedWithSpecifiedHeight = cb->isOutOfFlowPositioned() && (!cbstyle.logicalHeight().isAuto() || (!cbstyle.logicalTop().isAuto() && !cbs tyle.logicalBottom().isAuto())); 2460 bool isOutOfFlowPositionedWithSpecifiedHeight = cb->isOutOfFlowPositioned() && (!cbstyle.logicalHeight().isAuto() || (!cbstyle.logicalTop().isAuto() && !cbs tyle.logicalBottom().isAuto()));
2461 2461
2462 bool includeBorderPadding = isTable(); 2462 bool includeBorderPadding = isTable();
2463 2463
2464 if (isHorizontalWritingMode() != cb->isHorizontalWritingMode()) { 2464 if (isHorizontalWritingMode() != cb->isHorizontalWritingMode()) {
2465 availableHeight = containingBlockChild->containingBlockLogicalWidthForCo ntent(); 2465 availableHeight = containingBlockChild->containingBlockLogicalWidthForCo ntent();
2466 } else if (hasOverrideContainingBlockLogicalHeight()) { 2466 } else if (hasOverrideContainingBlockLogicalHeight()) {
(...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after
2588 2588
2589 LayoutUnit LayoutBox::computeReplacedLogicalHeight() const 2589 LayoutUnit LayoutBox::computeReplacedLogicalHeight() const
2590 { 2590 {
2591 return computeReplacedLogicalHeightRespectingMinMaxHeight(computeReplacedLog icalHeightUsing(style()->logicalHeight())); 2591 return computeReplacedLogicalHeightRespectingMinMaxHeight(computeReplacedLog icalHeightUsing(style()->logicalHeight()));
2592 } 2592 }
2593 2593
2594 bool LayoutBox::logicalHeightComputesAsNone(SizeType sizeType) const 2594 bool LayoutBox::logicalHeightComputesAsNone(SizeType sizeType) const
2595 { 2595 {
2596 ASSERT(sizeType == MinSize || sizeType == MaxSize); 2596 ASSERT(sizeType == MinSize || sizeType == MaxSize);
2597 Length logicalHeight = sizeType == MinSize ? style()->logicalMinHeight() : s tyle()->logicalMaxHeight(); 2597 Length logicalHeight = sizeType == MinSize ? style()->logicalMinHeight() : s tyle()->logicalMaxHeight();
2598 Length initialLogicalHeight = sizeType == MinSize ? LayoutStyle::initialMinS ize() : LayoutStyle::initialMaxSize(); 2598 Length initialLogicalHeight = sizeType == MinSize ? ComputedStyle::initialMi nSize() : ComputedStyle::initialMaxSize();
2599 2599
2600 if (logicalHeight == initialLogicalHeight) 2600 if (logicalHeight == initialLogicalHeight)
2601 return true; 2601 return true;
2602 2602
2603 if (LayoutBlock* cb = containingBlockForAutoHeightDetection(logicalHeight)) 2603 if (LayoutBlock* cb = containingBlockForAutoHeightDetection(logicalHeight))
2604 return cb->hasAutoHeightOrContainingBlockWithAutoHeight(); 2604 return cb->hasAutoHeightOrContainingBlockWithAutoHeight();
2605 return false; 2605 return false;
2606 } 2606 }
2607 2607
2608 LayoutUnit LayoutBox::computeReplacedLogicalHeightRespectingMinMaxHeight(LayoutU nit logicalHeight) const 2608 LayoutUnit LayoutBox::computeReplacedLogicalHeightRespectingMinMaxHeight(LayoutU nit logicalHeight) const
(...skipping 603 matching lines...) Expand 10 before | Expand all | Expand 10 after
3212 // <http://www.w3.org/TR/2005/WD-CSS21-20050613/visudet.html#abs-non-replace d-height> 3212 // <http://www.w3.org/TR/2005/WD-CSS21-20050613/visudet.html#abs-non-replace d-height>
3213 // (block-style-comments in this function and in computePositionedLogicalHei ghtUsing() 3213 // (block-style-comments in this function and in computePositionedLogicalHei ghtUsing()
3214 // correspond to text from the spec) 3214 // correspond to text from the spec)
3215 3215
3216 3216
3217 // We don't use containingBlock(), since we may be positioned by an enclosin g relpositioned inline. 3217 // We don't use containingBlock(), since we may be positioned by an enclosin g relpositioned inline.
3218 const LayoutBoxModelObject* containerBlock = toLayoutBoxModelObject(containe r()); 3218 const LayoutBoxModelObject* containerBlock = toLayoutBoxModelObject(containe r());
3219 3219
3220 const LayoutUnit containerLogicalHeight = containingBlockLogicalHeightForPos itioned(containerBlock); 3220 const LayoutUnit containerLogicalHeight = containingBlockLogicalHeightForPos itioned(containerBlock);
3221 3221
3222 const LayoutStyle& styleToUse = styleRef(); 3222 const ComputedStyle& styleToUse = styleRef();
3223 const LayoutUnit bordersPlusPadding = borderAndPaddingLogicalHeight(); 3223 const LayoutUnit bordersPlusPadding = borderAndPaddingLogicalHeight();
3224 const Length marginBefore = styleToUse.marginBefore(); 3224 const Length marginBefore = styleToUse.marginBefore();
3225 const Length marginAfter = styleToUse.marginAfter(); 3225 const Length marginAfter = styleToUse.marginAfter();
3226 Length logicalTopLength = styleToUse.logicalTop(); 3226 Length logicalTopLength = styleToUse.logicalTop();
3227 Length logicalBottomLength = styleToUse.logicalBottom(); 3227 Length logicalBottomLength = styleToUse.logicalBottom();
3228 3228
3229 /*-------------------------------------------------------------------------- -*\ 3229 /*-------------------------------------------------------------------------- -*\
3230 * For the purposes of this section and the next, the term "static position" 3230 * For the purposes of this section and the next, the term "static position"
3231 * (of an element) refers, roughly, to the position an element would have ha d 3231 * (of an element) refers, roughly, to the position an element would have ha d
3232 * in the normal flow. More precisely, the static position for 'top' is the 3232 * in the normal flow. More precisely, the static position for 'top' is the
(...skipping 1124 matching lines...) Expand 10 before | Expand all | Expand 10 after
4357 const LayoutObject* curr = this; 4357 const LayoutObject* curr = this;
4358 while (curr) { 4358 while (curr) {
4359 DeprecatedPaintLayer* layer = curr->hasLayer() && curr->isBox() ? toLayo utBox(curr)->layer() : 0; 4359 DeprecatedPaintLayer* layer = curr->hasLayer() && curr->isBox() ? toLayo utBox(curr)->layer() : 0;
4360 if (layer && layer->isSelfPaintingLayer()) 4360 if (layer && layer->isSelfPaintingLayer())
4361 return layer; 4361 return layer;
4362 curr = curr->parent(); 4362 curr = curr->parent();
4363 } 4363 }
4364 return 0; 4364 return 0;
4365 } 4365 }
4366 4366
4367 LayoutRect LayoutBox::logicalVisualOverflowRectForPropagation(const LayoutStyle& parentStyle) const 4367 LayoutRect LayoutBox::logicalVisualOverflowRectForPropagation(const ComputedStyl e& parentStyle) const
4368 { 4368 {
4369 LayoutRect rect = visualOverflowRectForPropagation(parentStyle); 4369 LayoutRect rect = visualOverflowRectForPropagation(parentStyle);
4370 if (!parentStyle.isHorizontalWritingMode()) 4370 if (!parentStyle.isHorizontalWritingMode())
4371 return rect.transposedRect(); 4371 return rect.transposedRect();
4372 return rect; 4372 return rect;
4373 } 4373 }
4374 4374
4375 LayoutRect LayoutBox::visualOverflowRectForPropagation(const LayoutStyle& parent Style) const 4375 LayoutRect LayoutBox::visualOverflowRectForPropagation(const ComputedStyle& pare ntStyle) const
4376 { 4376 {
4377 // If the writing modes of the child and parent match, then we don't have to 4377 // If the writing modes of the child and parent match, then we don't have to
4378 // do anything fancy. Just return the result. 4378 // do anything fancy. Just return the result.
4379 LayoutRect rect = visualOverflowRect(); 4379 LayoutRect rect = visualOverflowRect();
4380 if (parentStyle.writingMode() == style()->writingMode()) 4380 if (parentStyle.writingMode() == style()->writingMode())
4381 return rect; 4381 return rect;
4382 4382
4383 // We are putting ourselves into our parent's coordinate space. If there is a flipped block mismatch 4383 // We are putting ourselves into our parent's coordinate space. If there is a flipped block mismatch
4384 // in a particular axis, then we have to flip the rect along that axis. 4384 // in a particular axis, then we have to flip the rect along that axis.
4385 if (style()->writingMode() == RightToLeftWritingMode || parentStyle.writingM ode() == RightToLeftWritingMode) 4385 if (style()->writingMode() == RightToLeftWritingMode || parentStyle.writingM ode() == RightToLeftWritingMode)
4386 rect.setX(size().width() - rect.maxX()); 4386 rect.setX(size().width() - rect.maxX());
4387 else if (style()->writingMode() == BottomToTopWritingMode || parentStyle.wri tingMode() == BottomToTopWritingMode) 4387 else if (style()->writingMode() == BottomToTopWritingMode || parentStyle.wri tingMode() == BottomToTopWritingMode)
4388 rect.setY(size().height() - rect.maxY()); 4388 rect.setY(size().height() - rect.maxY());
4389 4389
4390 return rect; 4390 return rect;
4391 } 4391 }
4392 4392
4393 LayoutRect LayoutBox::logicalLayoutOverflowRectForPropagation(const LayoutStyle& parentStyle) const 4393 LayoutRect LayoutBox::logicalLayoutOverflowRectForPropagation(const ComputedStyl e& parentStyle) const
4394 { 4394 {
4395 LayoutRect rect = layoutOverflowRectForPropagation(parentStyle); 4395 LayoutRect rect = layoutOverflowRectForPropagation(parentStyle);
4396 if (!parentStyle.isHorizontalWritingMode()) 4396 if (!parentStyle.isHorizontalWritingMode())
4397 return rect.transposedRect(); 4397 return rect.transposedRect();
4398 return rect; 4398 return rect;
4399 } 4399 }
4400 4400
4401 LayoutRect LayoutBox::layoutOverflowRectForPropagation(const LayoutStyle& parent Style) const 4401 LayoutRect LayoutBox::layoutOverflowRectForPropagation(const ComputedStyle& pare ntStyle) const
4402 { 4402 {
4403 // Only propagate interior layout overflow if we don't clip it. 4403 // Only propagate interior layout overflow if we don't clip it.
4404 LayoutRect rect = borderBoxRect(); 4404 LayoutRect rect = borderBoxRect();
4405 // We want to include the margin, but only when it adds height. Quirky margi ns don't contribute height 4405 // We want to include the margin, but only when it adds height. Quirky margi ns don't contribute height
4406 // nor do the margins of self-collapsing blocks. 4406 // nor do the margins of self-collapsing blocks.
4407 if (!styleRef().hasMarginAfterQuirk() && !isSelfCollapsingBlock()) 4407 if (!styleRef().hasMarginAfterQuirk() && !isSelfCollapsingBlock())
4408 rect.expand(isHorizontalWritingMode() ? LayoutSize(LayoutUnit(), marginA fter()) : LayoutSize(marginAfter(), LayoutUnit())); 4408 rect.expand(isHorizontalWritingMode() ? LayoutSize(LayoutUnit(), marginA fter()) : LayoutSize(marginAfter(), LayoutUnit()));
4409 4409
4410 if (!hasOverflowClip()) 4410 if (!hasOverflowClip())
4411 rect.unite(layoutOverflowRect()); 4411 rect.unite(layoutOverflowRect());
(...skipping 233 matching lines...) Expand 10 before | Expand all | Expand 10 after
4645 computedValues.m_margins.m_end = marginEnd(); 4645 computedValues.m_margins.m_end = marginEnd();
4646 4646
4647 setLogicalTop(oldLogicalTop); 4647 setLogicalTop(oldLogicalTop);
4648 setLogicalWidth(oldLogicalWidth); 4648 setLogicalWidth(oldLogicalWidth);
4649 setLogicalLeft(oldLogicalLeft); 4649 setLogicalLeft(oldLogicalLeft);
4650 setMarginLeft(oldMarginLeft); 4650 setMarginLeft(oldMarginLeft);
4651 setMarginRight(oldMarginRight); 4651 setMarginRight(oldMarginRight);
4652 } 4652 }
4653 4653
4654 } // namespace blink 4654 } // namespace blink
OLDNEW
« no previous file with comments | « Source/core/layout/LayoutBox.h ('k') | Source/core/layout/LayoutBoxModelObject.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698