| 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 |