OLD | NEW |
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 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
78 static const int autoscrollBeltSize = 20; | 78 static const int autoscrollBeltSize = 20; |
79 static const unsigned backgroundObscurationTestMaxDepth = 4; | 79 static const unsigned backgroundObscurationTestMaxDepth = 4; |
80 | 80 |
81 bool RenderBox::s_hadOverflowClip = false; | 81 bool RenderBox::s_hadOverflowClip = false; |
82 | 82 |
83 static bool skipBodyBackground(const RenderBox* bodyElementRenderer) | 83 static bool skipBodyBackground(const RenderBox* bodyElementRenderer) |
84 { | 84 { |
85 ASSERT(bodyElementRenderer->isBody()); | 85 ASSERT(bodyElementRenderer->isBody()); |
86 // The <body> only paints its background if the root element has defined a b
ackground independent of the body, | 86 // The <body> only paints its background if the root element has defined a b
ackground independent of the body, |
87 // or if the <body>'s parent is not the document element's renderer (e.g. in
side SVG foreignObject). | 87 // or if the <body>'s parent is not the document element's renderer (e.g. in
side SVG foreignObject). |
88 RenderObject* documentElementRenderer = bodyElementRenderer->document()->doc
umentElement()->renderer(); | 88 RenderObject* documentElementRenderer = bodyElementRenderer->document().docu
mentElement()->renderer(); |
89 return documentElementRenderer | 89 return documentElementRenderer |
90 && !documentElementRenderer->hasBackground() | 90 && !documentElementRenderer->hasBackground() |
91 && (documentElementRenderer == bodyElementRenderer->parent()); | 91 && (documentElementRenderer == bodyElementRenderer->parent()); |
92 } | 92 } |
93 | 93 |
94 RenderBox::RenderBox(ContainerNode* node) | 94 RenderBox::RenderBox(ContainerNode* node) |
95 : RenderBoxModelObject(node) | 95 : RenderBoxModelObject(node) |
96 , m_minPreferredLogicalWidth(-1) | 96 , m_minPreferredLogicalWidth(-1) |
97 , m_maxPreferredLogicalWidth(-1) | 97 , m_maxPreferredLogicalWidth(-1) |
98 , m_intrinsicContentLogicalHeight(-1) | 98 , m_intrinsicContentLogicalHeight(-1) |
(...skipping 177 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
276 } | 276 } |
277 } | 277 } |
278 | 278 |
279 bool isBodyRenderer = isBody(); | 279 bool isBodyRenderer = isBody(); |
280 bool isRootRenderer = isRoot(); | 280 bool isRootRenderer = isRoot(); |
281 | 281 |
282 if (isRootRenderer || isBodyRenderer) { | 282 if (isRootRenderer || isBodyRenderer) { |
283 // Propagate the new writing mode and direction up to the RenderView. | 283 // Propagate the new writing mode and direction up to the RenderView. |
284 RenderView* viewRenderer = view(); | 284 RenderView* viewRenderer = view(); |
285 RenderStyle* viewStyle = viewRenderer->style(); | 285 RenderStyle* viewStyle = viewRenderer->style(); |
286 if (viewStyle->direction() != newStyle->direction() && (isRootRenderer |
| !document()->directionSetOnDocumentElement())) { | 286 if (viewStyle->direction() != newStyle->direction() && (isRootRenderer |
| !document().directionSetOnDocumentElement())) { |
287 viewStyle->setDirection(newStyle->direction()); | 287 viewStyle->setDirection(newStyle->direction()); |
288 if (isBodyRenderer) | 288 if (isBodyRenderer) |
289 document()->documentElement()->renderer()->style()->setDirection
(newStyle->direction()); | 289 document().documentElement()->renderer()->style()->setDirection(
newStyle->direction()); |
290 setNeedsLayoutAndPrefWidthsRecalc(); | 290 setNeedsLayoutAndPrefWidthsRecalc(); |
291 } | 291 } |
292 | 292 |
293 if (viewStyle->writingMode() != newStyle->writingMode() && (isRootRender
er || !document()->writingModeSetOnDocumentElement())) { | 293 if (viewStyle->writingMode() != newStyle->writingMode() && (isRootRender
er || !document().writingModeSetOnDocumentElement())) { |
294 viewStyle->setWritingMode(newStyle->writingMode()); | 294 viewStyle->setWritingMode(newStyle->writingMode()); |
295 viewRenderer->setHorizontalWritingMode(newStyle->isHorizontalWriting
Mode()); | 295 viewRenderer->setHorizontalWritingMode(newStyle->isHorizontalWriting
Mode()); |
296 viewRenderer->markAllDescendantsWithFloatsForLayout(); | 296 viewRenderer->markAllDescendantsWithFloatsForLayout(); |
297 if (isBodyRenderer) { | 297 if (isBodyRenderer) { |
298 document()->documentElement()->renderer()->style()->setWritingMo
de(newStyle->writingMode()); | 298 document().documentElement()->renderer()->style()->setWritingMod
e(newStyle->writingMode()); |
299 document()->documentElement()->renderer()->setHorizontalWritingM
ode(newStyle->isHorizontalWritingMode()); | 299 document().documentElement()->renderer()->setHorizontalWritingMo
de(newStyle->isHorizontalWritingMode()); |
300 } | 300 } |
301 setNeedsLayoutAndPrefWidthsRecalc(); | 301 setNeedsLayoutAndPrefWidthsRecalc(); |
302 } | 302 } |
303 | 303 |
304 frame()->view()->recalculateScrollbarOverlayStyle(); | 304 frame()->view()->recalculateScrollbarOverlayStyle(); |
305 } | 305 } |
306 | 306 |
307 updateShapeOutsideInfoAfterStyleChange(style()->shapeOutside(), oldStyle ? o
ldStyle->shapeOutside() : 0); | 307 updateShapeOutsideInfoAfterStyleChange(style()->shapeOutside(), oldStyle ? o
ldStyle->shapeOutside() : 0); |
308 updateGridPositionAfterStyleChange(oldStyle); | 308 updateGridPositionAfterStyleChange(oldStyle); |
309 } | 309 } |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
354 setFloating(!isOutOfFlowPositioned() && styleToUse->isFloating()); | 354 setFloating(!isOutOfFlowPositioned() && styleToUse->isFloating()); |
355 | 355 |
356 // We also handle <body> and <html>, whose overflow applies to the viewport. | 356 // We also handle <body> and <html>, whose overflow applies to the viewport. |
357 if (styleToUse->overflowX() != OVISIBLE && !isRootObject && isRenderBlock())
{ | 357 if (styleToUse->overflowX() != OVISIBLE && !isRootObject && isRenderBlock())
{ |
358 bool boxHasOverflowClip = true; | 358 bool boxHasOverflowClip = true; |
359 if (isBody()) { | 359 if (isBody()) { |
360 // Overflow on the body can propagate to the viewport under the foll
owing conditions. | 360 // Overflow on the body can propagate to the viewport under the foll
owing conditions. |
361 // (1) The root element is <html>. | 361 // (1) The root element is <html>. |
362 // (2) We are the primary <body> (can be checked by looking at docum
ent.body). | 362 // (2) We are the primary <body> (can be checked by looking at docum
ent.body). |
363 // (3) The root element has visible overflow. | 363 // (3) The root element has visible overflow. |
364 if (isHTMLHtmlElement(document()->documentElement()) | 364 if (isHTMLHtmlElement(document().documentElement()) |
365 && document()->body() == node() | 365 && document().body() == node() |
366 && document()->documentElement()->renderer()->style()->overflowX
() == OVISIBLE) | 366 && document().documentElement()->renderer()->style()->overflowX(
) == OVISIBLE) |
367 boxHasOverflowClip = false; | 367 boxHasOverflowClip = false; |
368 } | 368 } |
369 | 369 |
370 // Check for overflow clip. | 370 // Check for overflow clip. |
371 // It's sufficient to just check one direction, since it's illegal to ha
ve visible on only one overflow value. | 371 // It's sufficient to just check one direction, since it's illegal to ha
ve visible on only one overflow value. |
372 if (boxHasOverflowClip) { | 372 if (boxHasOverflowClip) { |
373 if (!s_hadOverflowClip) | 373 if (!s_hadOverflowClip) |
374 // Erase the overflow | 374 // Erase the overflow |
375 repaint(); | 375 repaint(); |
376 setHasOverflowClip(); | 376 setHasOverflowClip(); |
(...skipping 398 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
775 } | 775 } |
776 | 776 |
777 // There are two kinds of renderer that can autoscroll. | 777 // There are two kinds of renderer that can autoscroll. |
778 bool RenderBox::canAutoscroll() const | 778 bool RenderBox::canAutoscroll() const |
779 { | 779 { |
780 // Check for a box that can be scrolled in its own right. | 780 // Check for a box that can be scrolled in its own right. |
781 if (canBeScrolledAndHasScrollableArea()) | 781 if (canBeScrolledAndHasScrollableArea()) |
782 return true; | 782 return true; |
783 | 783 |
784 // Check for a box that represents the top level of a web page. | 784 // Check for a box that represents the top level of a web page. |
785 if (node() != document()) | 785 if (node() != &document()) |
786 return false; | 786 return false; |
787 Frame* frame = this->frame(); | 787 Frame* frame = this->frame(); |
788 if (!frame) | 788 if (!frame) |
789 return false; | 789 return false; |
790 Page* page = frame->page(); | 790 Page* page = frame->page(); |
791 return page && page->mainFrame() == frame && frame->view()->isScrollable(); | 791 return page && page->mainFrame() == frame && frame->view()->isScrollable(); |
792 } | 792 } |
793 | 793 |
794 // If specified point is in border belt, returned offset denotes direction of | 794 // If specified point is in border belt, returned offset denotes direction of |
795 // scrolling. | 795 // scrolling. |
(...skipping 20 matching lines...) Expand all Loading... |
816 if (point.y() < box.y() + autoscrollBeltSize) | 816 if (point.y() < box.y() + autoscrollBeltSize) |
817 point.move(0, -autoscrollBeltSize); | 817 point.move(0, -autoscrollBeltSize); |
818 else if (point.y() > box.maxY() - autoscrollBeltSize) | 818 else if (point.y() > box.maxY() - autoscrollBeltSize) |
819 point.move(0, autoscrollBeltSize); | 819 point.move(0, autoscrollBeltSize); |
820 return frameView->contentsToWindow(point) - windowPoint; | 820 return frameView->contentsToWindow(point) - windowPoint; |
821 } | 821 } |
822 | 822 |
823 RenderBox* RenderBox::findAutoscrollable(RenderObject* renderer) | 823 RenderBox* RenderBox::findAutoscrollable(RenderObject* renderer) |
824 { | 824 { |
825 while (renderer && !(renderer->isBox() && toRenderBox(renderer)->canAutoscro
ll())) { | 825 while (renderer && !(renderer->isBox() && toRenderBox(renderer)->canAutoscro
ll())) { |
826 if (!renderer->parent() && renderer->node() == renderer->document() && r
enderer->document()->ownerElement()) | 826 if (!renderer->parent() && renderer->node() == &renderer->document() &&
renderer->document().ownerElement()) |
827 renderer = renderer->document()->ownerElement()->renderer(); | 827 renderer = renderer->document().ownerElement()->renderer(); |
828 else | 828 else |
829 renderer = renderer->parent(); | 829 renderer = renderer->parent(); |
830 } | 830 } |
831 | 831 |
832 return renderer && renderer->isBox() ? toRenderBox(renderer) : 0; | 832 return renderer && renderer->isBox() ? toRenderBox(renderer) : 0; |
833 } | 833 } |
834 | 834 |
835 void RenderBox::panScroll(const IntPoint& source) | 835 void RenderBox::panScroll(const IntPoint& source) |
836 { | 836 { |
837 if (layer()) | 837 if (layer()) |
(...skipping 637 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1475 bool RenderBox::repaintLayerRectsForImage(WrappedImagePtr image, const FillLayer
* layers, bool drawingBackground) | 1475 bool RenderBox::repaintLayerRectsForImage(WrappedImagePtr image, const FillLayer
* layers, bool drawingBackground) |
1476 { | 1476 { |
1477 LayoutRect rendererRect; | 1477 LayoutRect rendererRect; |
1478 RenderBox* layerRenderer = 0; | 1478 RenderBox* layerRenderer = 0; |
1479 | 1479 |
1480 for (const FillLayer* curLayer = layers; curLayer; curLayer = curLayer->next
()) { | 1480 for (const FillLayer* curLayer = layers; curLayer; curLayer = curLayer->next
()) { |
1481 if (curLayer->image() && image == curLayer->image()->data() && curLayer-
>image()->canRender(this, style()->effectiveZoom())) { | 1481 if (curLayer->image() && image == curLayer->image()->data() && curLayer-
>image()->canRender(this, style()->effectiveZoom())) { |
1482 // Now that we know this image is being used, compute the renderer a
nd the rect | 1482 // Now that we know this image is being used, compute the renderer a
nd the rect |
1483 // if we haven't already | 1483 // if we haven't already |
1484 if (!layerRenderer) { | 1484 if (!layerRenderer) { |
1485 bool drawingRootBackground = drawingBackground && (isRoot() || (
isBody() && !document()->documentElement()->renderer()->hasBackground())); | 1485 bool drawingRootBackground = drawingBackground && (isRoot() || (
isBody() && !document().documentElement()->renderer()->hasBackground())); |
1486 if (drawingRootBackground) { | 1486 if (drawingRootBackground) { |
1487 layerRenderer = view(); | 1487 layerRenderer = view(); |
1488 | 1488 |
1489 LayoutUnit rw; | 1489 LayoutUnit rw; |
1490 LayoutUnit rh; | 1490 LayoutUnit rh; |
1491 | 1491 |
1492 if (FrameView* frameView = toRenderView(layerRenderer)->fram
eView()) { | 1492 if (FrameView* frameView = toRenderView(layerRenderer)->fram
eView()) { |
1493 rw = frameView->contentsWidth(); | 1493 rw = frameView->contentsWidth(); |
1494 rh = frameView->contentsHeight(); | 1494 rh = frameView->contentsHeight(); |
1495 } else { | 1495 } else { |
(...skipping 1093 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2589 shouldFlipBeforeAfter ? computedValues.m_margins.m_after : c
omputedValues.m_margins.m_before, | 2589 shouldFlipBeforeAfter ? computedValues.m_margins.m_after : c
omputedValues.m_margins.m_before, |
2590 shouldFlipBeforeAfter ? computedValues.m_margins.m_before :
computedValues.m_margins.m_after); | 2590 shouldFlipBeforeAfter ? computedValues.m_margins.m_before :
computedValues.m_margins.m_after); |
2591 } | 2591 } |
2592 } | 2592 } |
2593 | 2593 |
2594 // WinIE quirk: The <html> block always fills the entire canvas in quirks mo
de. The <body> always fills the | 2594 // WinIE quirk: The <html> block always fills the entire canvas in quirks mo
de. The <body> always fills the |
2595 // <html> block in quirks mode. Only apply this quirk if the block is norma
l flow and no height | 2595 // <html> block in quirks mode. Only apply this quirk if the block is norma
l flow and no height |
2596 // is specified. When we're printing, we also need this quirk if the body or
root has a percentage | 2596 // is specified. When we're printing, we also need this quirk if the body or
root has a percentage |
2597 // height since we don't set a height in RenderView when we're printing. So
without this quirk, the | 2597 // height since we don't set a height in RenderView when we're printing. So
without this quirk, the |
2598 // height has nothing to be a percentage of, and it ends up being 0. That is
bad. | 2598 // height has nothing to be a percentage of, and it ends up being 0. That is
bad. |
2599 bool paginatedContentNeedsBaseHeight = document()->printing() && h.isPercent
() | 2599 bool paginatedContentNeedsBaseHeight = document().printing() && h.isPercent(
) |
2600 && (isRoot() || (isBody() && document()->documentElement()->renderer()->
style()->logicalHeight().isPercent())) && !isInline(); | 2600 && (isRoot() || (isBody() && document().documentElement()->renderer()->s
tyle()->logicalHeight().isPercent())) && !isInline(); |
2601 if (stretchesToViewport() || paginatedContentNeedsBaseHeight) { | 2601 if (stretchesToViewport() || paginatedContentNeedsBaseHeight) { |
2602 LayoutUnit margins = collapsedMarginBefore() + collapsedMarginAfter(); | 2602 LayoutUnit margins = collapsedMarginBefore() + collapsedMarginAfter(); |
2603 LayoutUnit visibleHeight = viewLogicalHeightForPercentages(); | 2603 LayoutUnit visibleHeight = viewLogicalHeightForPercentages(); |
2604 if (isRoot()) | 2604 if (isRoot()) |
2605 computedValues.m_extent = max(computedValues.m_extent, visibleHeight
- margins); | 2605 computedValues.m_extent = max(computedValues.m_extent, visibleHeight
- margins); |
2606 else { | 2606 else { |
2607 LayoutUnit marginsBordersPadding = margins + parentBox()->marginBefo
re() + parentBox()->marginAfter() + parentBox()->borderAndPaddingLogicalHeight()
; | 2607 LayoutUnit marginsBordersPadding = margins + parentBox()->marginBefo
re() + parentBox()->marginAfter() + parentBox()->borderAndPaddingLogicalHeight()
; |
2608 computedValues.m_extent = max(computedValues.m_extent, visibleHeight
- marginsBordersPadding); | 2608 computedValues.m_extent = max(computedValues.m_extent, visibleHeight
- marginsBordersPadding); |
2609 } | 2609 } |
2610 } | 2610 } |
2611 } | 2611 } |
2612 | 2612 |
2613 LayoutUnit RenderBox::viewLogicalHeightForPercentages() const | 2613 LayoutUnit RenderBox::viewLogicalHeightForPercentages() const |
2614 { | 2614 { |
2615 if (document()->printing()) | 2615 if (document().printing()) |
2616 return static_cast<LayoutUnit>(view()->pageLogicalHeight()); | 2616 return static_cast<LayoutUnit>(view()->pageLogicalHeight()); |
2617 return view()->viewLogicalHeight(); | 2617 return view()->viewLogicalHeight(); |
2618 } | 2618 } |
2619 | 2619 |
2620 LayoutUnit RenderBox::computeLogicalHeightUsing(const Length& height, LayoutUnit
intrinsicContentHeight) const | 2620 LayoutUnit RenderBox::computeLogicalHeightUsing(const Length& height, LayoutUnit
intrinsicContentHeight) const |
2621 { | 2621 { |
2622 LayoutUnit logicalHeight = computeContentAndScrollbarLogicalHeightUsing(heig
ht, intrinsicContentHeight); | 2622 LayoutUnit logicalHeight = computeContentAndScrollbarLogicalHeightUsing(heig
ht, intrinsicContentHeight); |
2623 if (logicalHeight != -1) | 2623 if (logicalHeight != -1) |
2624 logicalHeight = adjustBorderBoxLogicalHeightForBoxSizing(logicalHeight); | 2624 logicalHeight = adjustBorderBoxLogicalHeightForBoxSizing(logicalHeight); |
2625 return logicalHeight; | 2625 return logicalHeight; |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2665 return computePercentageLogicalHeight(height); | 2665 return computePercentageLogicalHeight(height); |
2666 if (height.isViewportPercentage()) | 2666 if (height.isViewportPercentage()) |
2667 return valueForLength(height, 0, view()); | 2667 return valueForLength(height, 0, view()); |
2668 return -1; | 2668 return -1; |
2669 } | 2669 } |
2670 | 2670 |
2671 bool RenderBox::skipContainingBlockForPercentHeightCalculation(const RenderBox*
containingBlock) const | 2671 bool RenderBox::skipContainingBlockForPercentHeightCalculation(const RenderBox*
containingBlock) const |
2672 { | 2672 { |
2673 // For quirks mode and anonymous blocks, we skip auto-height containingBlock
s when computing percentages. | 2673 // For quirks mode and anonymous blocks, we skip auto-height containingBlock
s when computing percentages. |
2674 // For standards mode, we treat the percentage as auto if it has an auto-hei
ght containing block. | 2674 // For standards mode, we treat the percentage as auto if it has an auto-hei
ght containing block. |
2675 if (!document()->inQuirksMode() && !containingBlock->isAnonymousBlock()) | 2675 if (!document().inQuirksMode() && !containingBlock->isAnonymousBlock()) |
2676 return false; | 2676 return false; |
2677 return !containingBlock->isTableCell() && !containingBlock->isOutOfFlowPosit
ioned() && containingBlock->style()->logicalHeight().isAuto() && isHorizontalWri
tingMode() == containingBlock->isHorizontalWritingMode(); | 2677 return !containingBlock->isTableCell() && !containingBlock->isOutOfFlowPosit
ioned() && containingBlock->style()->logicalHeight().isAuto() && isHorizontalWri
tingMode() == containingBlock->isHorizontalWritingMode(); |
2678 } | 2678 } |
2679 | 2679 |
2680 LayoutUnit RenderBox::computePercentageLogicalHeight(const Length& height) const | 2680 LayoutUnit RenderBox::computePercentageLogicalHeight(const Length& height) const |
2681 { | 2681 { |
2682 LayoutUnit availableHeight = -1; | 2682 LayoutUnit availableHeight = -1; |
2683 | 2683 |
2684 bool skippedAutoHeightContainingBlock = false; | 2684 bool skippedAutoHeightContainingBlock = false; |
2685 RenderBlock* cb = containingBlock(); | 2685 RenderBlock* cb = containingBlock(); |
(...skipping 1679 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4365 } | 4365 } |
4366 | 4366 |
4367 bool RenderBox::percentageLogicalHeightIsResolvableFromBlock(const RenderBlock*
containingBlock, bool isOutOfFlowPositioned) | 4367 bool RenderBox::percentageLogicalHeightIsResolvableFromBlock(const RenderBlock*
containingBlock, bool isOutOfFlowPositioned) |
4368 { | 4368 { |
4369 // In quirks mode, blocks with auto height are skipped, and we keep looking
for an enclosing | 4369 // In quirks mode, blocks with auto height are skipped, and we keep looking
for an enclosing |
4370 // block that may have a specified height and then use it. In strict mode, t
his violates the | 4370 // block that may have a specified height and then use it. In strict mode, t
his violates the |
4371 // specification, which states that percentage heights just revert to auto i
f the containing | 4371 // specification, which states that percentage heights just revert to auto i
f the containing |
4372 // block has an auto height. We still skip anonymous containing blocks in bo
th modes, though, and look | 4372 // block has an auto height. We still skip anonymous containing blocks in bo
th modes, though, and look |
4373 // only at explicit containers. | 4373 // only at explicit containers. |
4374 const RenderBlock* cb = containingBlock; | 4374 const RenderBlock* cb = containingBlock; |
4375 bool inQuirksMode = cb->document()->inQuirksMode(); | 4375 bool inQuirksMode = cb->document().inQuirksMode(); |
4376 while (!cb->isRenderView() && !cb->isBody() && !cb->isTableCell() && !cb->is
OutOfFlowPositioned() && cb->style()->logicalHeight().isAuto()) { | 4376 while (!cb->isRenderView() && !cb->isBody() && !cb->isTableCell() && !cb->is
OutOfFlowPositioned() && cb->style()->logicalHeight().isAuto()) { |
4377 if (!inQuirksMode && !cb->isAnonymousBlock()) | 4377 if (!inQuirksMode && !cb->isAnonymousBlock()) |
4378 break; | 4378 break; |
4379 cb = cb->containingBlock(); | 4379 cb = cb->containingBlock(); |
4380 } | 4380 } |
4381 | 4381 |
4382 // A positioned element that specified both top/bottom or that specifies hei
ght should be treated as though it has a height | 4382 // A positioned element that specified both top/bottom or that specifies hei
ght should be treated as though it has a height |
4383 // explicitly specified that can be used for any percentage computations. | 4383 // explicitly specified that can be used for any percentage computations. |
4384 // FIXME: We can't just check top/bottom here. | 4384 // FIXME: We can't just check top/bottom here. |
4385 // https://bugs.webkit.org/show_bug.cgi?id=46500 | 4385 // https://bugs.webkit.org/show_bug.cgi?id=46500 |
(...skipping 348 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4734 } | 4734 } |
4735 | 4735 |
4736 if (didSplitParentAnonymousBoxes) | 4736 if (didSplitParentAnonymousBoxes) |
4737 markBoxForRelayoutAfterSplit(this); | 4737 markBoxForRelayoutAfterSplit(this); |
4738 | 4738 |
4739 ASSERT(beforeChild->parent() == this); | 4739 ASSERT(beforeChild->parent() == this); |
4740 return beforeChild; | 4740 return beforeChild; |
4741 } | 4741 } |
4742 | 4742 |
4743 } // namespace WebCore | 4743 } // namespace WebCore |
OLD | NEW |