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 1228 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1239 { | 1239 { |
1240 if (!maxDepthToTest) | 1240 if (!maxDepthToTest) |
1241 return false; | 1241 return false; |
1242 for (LayoutObject* child = slowFirstChild(); child; child = child->nextSibli
ng()) { | 1242 for (LayoutObject* child = slowFirstChild(); child; child = child->nextSibli
ng()) { |
1243 if (!child->isBox()) | 1243 if (!child->isBox()) |
1244 continue; | 1244 continue; |
1245 LayoutBox* childBox = toLayoutBox(child); | 1245 LayoutBox* childBox = toLayoutBox(child); |
1246 if (!isCandidateForOpaquenessTest(*childBox)) | 1246 if (!isCandidateForOpaquenessTest(*childBox)) |
1247 continue; | 1247 continue; |
1248 LayoutPoint childLocation = childBox->location(); | 1248 LayoutPoint childLocation = childBox->location(); |
1249 if (childBox->isRelPositioned()) | 1249 if (childBox->isInFlowPositioned()) |
1250 childLocation.move(childBox->relativePositionOffset()); | 1250 childLocation.move(childBox->offsetForInFlowPosition()); |
1251 LayoutRect childLocalRect = localRect; | 1251 LayoutRect childLocalRect = localRect; |
1252 childLocalRect.moveBy(-childLocation); | 1252 childLocalRect.moveBy(-childLocation); |
1253 if (childLocalRect.y() < 0 || childLocalRect.x() < 0) { | 1253 if (childLocalRect.y() < 0 || childLocalRect.x() < 0) { |
1254 // If there is unobscured area above/left of a static positioned box
then the rect is probably not covered. | 1254 // If there is unobscured area above/left of a static positioned box
then the rect is probably not covered. |
1255 if (childBox->style()->position() == StaticPosition) | 1255 if (childBox->style()->position() == StaticPosition) |
1256 return false; | 1256 return false; |
1257 continue; | 1257 continue; |
1258 } | 1258 } |
1259 if (childLocalRect.maxY() > childBox->size().height() || childLocalRect.
maxX() > childBox->size().width()) | 1259 if (childLocalRect.maxY() > childBox->size().height() || childLocalRect.
maxX() > childBox->size().width()) |
1260 continue; | 1260 continue; |
(...skipping 346 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1607 } | 1607 } |
1608 | 1608 |
1609 LayoutBoxModelObject::mapAbsoluteToLocalPoint(mode, transformState); | 1609 LayoutBoxModelObject::mapAbsoluteToLocalPoint(mode, transformState); |
1610 } | 1610 } |
1611 | 1611 |
1612 LayoutSize LayoutBox::offsetFromContainer(const LayoutObject* o, const LayoutPoi
nt& point, bool* offsetDependsOnPoint) const | 1612 LayoutSize LayoutBox::offsetFromContainer(const LayoutObject* o, const LayoutPoi
nt& point, bool* offsetDependsOnPoint) const |
1613 { | 1613 { |
1614 ASSERT(o == container()); | 1614 ASSERT(o == container()); |
1615 | 1615 |
1616 LayoutSize offset; | 1616 LayoutSize offset; |
1617 if (isRelPositioned()) | 1617 if (isInFlowPositioned()) |
1618 offset += offsetForInFlowPosition(); | 1618 offset += offsetForInFlowPosition(); |
1619 | 1619 |
1620 if (!isInline() || isReplaced()) { | 1620 if (!isInline() || isReplaced()) { |
1621 offset += topLeftLocationOffset(); | 1621 offset += topLeftLocationOffset(); |
1622 if (o->isLayoutFlowThread()) { | 1622 if (o->isLayoutFlowThread()) { |
1623 // So far the point has been in flow thread coordinates (i.e. as if
everything in | 1623 // So far the point has been in flow thread coordinates (i.e. as if
everything in |
1624 // the fragmentation context lived in one tall single column). Conve
rt it to a | 1624 // the fragmentation context lived in one tall single column). Conve
rt it to a |
1625 // visual point now. | 1625 // visual point now. |
1626 LayoutPoint pointInContainer = point + offset; | 1626 LayoutPoint pointInContainer = point + offset; |
1627 offset += o->columnOffset(pointInContainer); | 1627 offset += o->columnOffset(pointInContainer); |
1628 if (offsetDependsOnPoint) | 1628 if (offsetDependsOnPoint) |
1629 *offsetDependsOnPoint = true; | 1629 *offsetDependsOnPoint = true; |
1630 } | 1630 } |
1631 } | 1631 } |
1632 | 1632 |
1633 if (o->hasOverflowClip()) | 1633 if (o->hasOverflowClip()) |
1634 offset -= toLayoutBox(o)->scrolledContentOffset(); | 1634 offset -= toLayoutBox(o)->scrolledContentOffset(); |
1635 | 1635 |
1636 if (style()->position() == AbsolutePosition && o->isRelPositioned() && o->is
LayoutInline()) | 1636 if (style()->position() == AbsolutePosition && o->isInFlowPositioned() && o-
>isLayoutInline()) |
1637 offset += toLayoutInline(o)->offsetForInFlowPositionedInline(*this); | 1637 offset += toLayoutInline(o)->offsetForInFlowPositionedInline(*this); |
1638 | 1638 |
1639 return offset; | 1639 return offset; |
1640 } | 1640 } |
1641 | 1641 |
1642 InlineBox* LayoutBox::createInlineBox() | 1642 InlineBox* LayoutBox::createInlineBox() |
1643 { | 1643 { |
1644 return new InlineBox(*this); | 1644 return new InlineBox(*this); |
1645 } | 1645 } |
1646 | 1646 |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1685 } else if (isReplaced()) { | 1685 } else if (isReplaced()) { |
1686 // FIXME: the call to roundedLayoutPoint() below is temporary and should
be removed once | 1686 // FIXME: the call to roundedLayoutPoint() below is temporary and should
be removed once |
1687 // the transition to LayoutUnit-based types is complete (crbug.com/32123
7) | 1687 // the transition to LayoutUnit-based types is complete (crbug.com/32123
7) |
1688 setLocationAndUpdateOverflowControlsIfNeeded(box->topLeft()); | 1688 setLocationAndUpdateOverflowControlsIfNeeded(box->topLeft()); |
1689 setInlineBoxWrapper(box); | 1689 setInlineBoxWrapper(box); |
1690 } | 1690 } |
1691 } | 1691 } |
1692 | 1692 |
1693 void LayoutBox::moveWithEdgeOfInlineContainerIfNecessary(bool isHorizontal) | 1693 void LayoutBox::moveWithEdgeOfInlineContainerIfNecessary(bool isHorizontal) |
1694 { | 1694 { |
1695 ASSERT(isOutOfFlowPositioned() && container()->isLayoutInline() && container
()->isRelPositioned()); | 1695 ASSERT(isOutOfFlowPositioned() && container()->isLayoutInline() && container
()->isInFlowPositioned()); |
1696 // If this object is inside a relative positioned inline and its inline posi
tion is an explicit offset from the edge of its container | 1696 // If this object is inside a relative positioned inline and its inline posi
tion is an explicit offset from the edge of its container |
1697 // then it will need to move if its inline container has changed width. We d
o not track if the width has changed | 1697 // then it will need to move if its inline container has changed width. We d
o not track if the width has changed |
1698 // but if we are here then we are laying out lines inside it, so it probably
has - mark our object for layout so that it can | 1698 // but if we are here then we are laying out lines inside it, so it probably
has - mark our object for layout so that it can |
1699 // move to the new offset created by the new width. | 1699 // move to the new offset created by the new width. |
1700 if (!normalChildNeedsLayout() && !style()->hasStaticInlinePosition(isHorizon
tal)) | 1700 if (!normalChildNeedsLayout() && !style()->hasStaticInlinePosition(isHorizon
tal)) |
1701 setChildNeedsLayout(MarkOnlyThis); | 1701 setChildNeedsLayout(MarkOnlyThis); |
1702 } | 1702 } |
1703 | 1703 |
1704 void LayoutBox::deleteLineBoxWrapper() | 1704 void LayoutBox::deleteLineBoxWrapper() |
1705 { | 1705 { |
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1791 topLeft.move(locationOffset()); | 1791 topLeft.move(locationOffset()); |
1792 | 1792 |
1793 // We are now in our parent container's coordinate space. Apply our transfo
rm to obtain a bounding box | 1793 // We are now in our parent container's coordinate space. Apply our transfo
rm to obtain a bounding box |
1794 // in the parent's coordinate space that encloses us. | 1794 // in the parent's coordinate space that encloses us. |
1795 if (hasLayer() && layer()->transform()) { | 1795 if (hasLayer() && layer()->transform()) { |
1796 rect = LayoutRect(layer()->transform()->mapRect(pixelSnappedIntRect(rect
))); | 1796 rect = LayoutRect(layer()->transform()->mapRect(pixelSnappedIntRect(rect
))); |
1797 topLeft = rect.location(); | 1797 topLeft = rect.location(); |
1798 topLeft.move(locationOffset()); | 1798 topLeft.move(locationOffset()); |
1799 } | 1799 } |
1800 | 1800 |
1801 if (position == AbsolutePosition && o->isRelPositioned() && o->isLayoutInlin
e()) { | 1801 if (position == AbsolutePosition && o->isInFlowPositioned() && o->isLayoutIn
line()) { |
1802 topLeft += toLayoutInline(o)->offsetForInFlowPositionedInline(*this); | 1802 topLeft += toLayoutInline(o)->offsetForInFlowPositionedInline(*this); |
1803 } else if (styleToUse.hasInFlowPosition() && layer()) { | 1803 } else if (styleToUse.hasInFlowPosition() && layer()) { |
1804 // Apply the relative position offset when invalidating a rectangle. Th
e layer | 1804 // Apply the relative position offset when invalidating a rectangle. Th
e layer |
1805 // is translated, but the layout box isn't, so we need to do this to get
the | 1805 // is translated, but the layout box isn't, so we need to do this to get
the |
1806 // right dirty rect. Since this is called from LayoutObject::setStyle,
the relative position | 1806 // right dirty rect. Since this is called from LayoutObject::setStyle,
the relative position |
1807 // flag on the LayoutObject has been cleared, so use the one on the styl
e(). | 1807 // flag on the LayoutObject has been cleared, so use the one on the styl
e(). |
1808 topLeft += layer()->offsetForInFlowPosition(); | 1808 topLeft += layer()->offsetForInFlowPosition(); |
1809 } | 1809 } |
1810 | 1810 |
1811 // FIXME: We ignore the lightweight clipping rect that controls use, since i
f |o| is in mid-layout, | 1811 // FIXME: We ignore the lightweight clipping rect that controls use, since i
f |o| is in mid-layout, |
(...skipping 901 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2713 return containingBlock->isHorizontalWritingMode() ? viewportRect.wid
th() : viewportRect.height(); | 2713 return containingBlock->isHorizontalWritingMode() ? viewportRect.wid
th() : viewportRect.height(); |
2714 } | 2714 } |
2715 } | 2715 } |
2716 | 2716 |
2717 if (hasOverrideContainingBlockLogicalWidth()) | 2717 if (hasOverrideContainingBlockLogicalWidth()) |
2718 return overrideContainingBlockContentLogicalWidth(); | 2718 return overrideContainingBlockContentLogicalWidth(); |
2719 | 2719 |
2720 if (containingBlock->isBox()) | 2720 if (containingBlock->isBox()) |
2721 return toLayoutBox(containingBlock)->clientLogicalWidth(); | 2721 return toLayoutBox(containingBlock)->clientLogicalWidth(); |
2722 | 2722 |
2723 ASSERT(containingBlock->isLayoutInline() && containingBlock->isRelPositioned
()); | 2723 ASSERT(containingBlock->isLayoutInline() && containingBlock->isInFlowPositio
ned()); |
2724 | 2724 |
2725 const LayoutInline* flow = toLayoutInline(containingBlock); | 2725 const LayoutInline* flow = toLayoutInline(containingBlock); |
2726 InlineFlowBox* first = flow->firstLineBox(); | 2726 InlineFlowBox* first = flow->firstLineBox(); |
2727 InlineFlowBox* last = flow->lastLineBox(); | 2727 InlineFlowBox* last = flow->lastLineBox(); |
2728 | 2728 |
2729 // If the containing block is empty, return a width of 0. | 2729 // If the containing block is empty, return a width of 0. |
2730 if (!first || !last) | 2730 if (!first || !last) |
2731 return LayoutUnit(); | 2731 return LayoutUnit(); |
2732 | 2732 |
2733 LayoutUnit fromLeft; | 2733 LayoutUnit fromLeft; |
(...skipping 25 matching lines...) Expand all Loading... |
2759 | 2759 |
2760 if (hasOverrideContainingBlockLogicalHeight()) | 2760 if (hasOverrideContainingBlockLogicalHeight()) |
2761 return overrideContainingBlockContentLogicalHeight(); | 2761 return overrideContainingBlockContentLogicalHeight(); |
2762 | 2762 |
2763 if (containingBlock->isBox()) { | 2763 if (containingBlock->isBox()) { |
2764 const LayoutBlock* cb = containingBlock->isLayoutBlock() ? | 2764 const LayoutBlock* cb = containingBlock->isLayoutBlock() ? |
2765 toLayoutBlock(containingBlock) : containingBlock->containingBlock(); | 2765 toLayoutBlock(containingBlock) : containingBlock->containingBlock(); |
2766 return cb->clientLogicalHeight(); | 2766 return cb->clientLogicalHeight(); |
2767 } | 2767 } |
2768 | 2768 |
2769 ASSERT(containingBlock->isLayoutInline() && containingBlock->isRelPositioned
()); | 2769 ASSERT(containingBlock->isLayoutInline() && containingBlock->isInFlowPositio
ned()); |
2770 | 2770 |
2771 const LayoutInline* flow = toLayoutInline(containingBlock); | 2771 const LayoutInline* flow = toLayoutInline(containingBlock); |
2772 InlineFlowBox* first = flow->firstLineBox(); | 2772 InlineFlowBox* first = flow->firstLineBox(); |
2773 InlineFlowBox* last = flow->lastLineBox(); | 2773 InlineFlowBox* last = flow->lastLineBox(); |
2774 | 2774 |
2775 // If the containing block is empty, return a height of 0. | 2775 // If the containing block is empty, return a height of 0. |
2776 if (!first || !last) | 2776 if (!first || !last) |
2777 return LayoutUnit(); | 2777 return LayoutUnit(); |
2778 | 2778 |
2779 LayoutUnit heightResult; | 2779 LayoutUnit heightResult; |
(...skipping 10 matching lines...) Expand all Loading... |
2790 { | 2790 { |
2791 if (!logicalLeft.isAuto() || !logicalRight.isAuto()) | 2791 if (!logicalLeft.isAuto() || !logicalRight.isAuto()) |
2792 return; | 2792 return; |
2793 | 2793 |
2794 // FIXME: The static distance computation has not been patched for mixed wri
ting modes yet. | 2794 // FIXME: The static distance computation has not been patched for mixed wri
ting modes yet. |
2795 if (child->parent()->style()->direction() == LTR) { | 2795 if (child->parent()->style()->direction() == LTR) { |
2796 LayoutUnit staticPosition = child->layer()->staticInlinePosition() - con
tainerBlock->borderLogicalLeft(); | 2796 LayoutUnit staticPosition = child->layer()->staticInlinePosition() - con
tainerBlock->borderLogicalLeft(); |
2797 for (LayoutObject* curr = child->parent(); curr && curr != containerBloc
k; curr = curr->container()) { | 2797 for (LayoutObject* curr = child->parent(); curr && curr != containerBloc
k; curr = curr->container()) { |
2798 if (curr->isBox()) { | 2798 if (curr->isBox()) { |
2799 staticPosition += toLayoutBox(curr)->logicalLeft(); | 2799 staticPosition += toLayoutBox(curr)->logicalLeft(); |
2800 if (toLayoutBox(curr)->isRelPositioned()) | 2800 if (toLayoutBox(curr)->isInFlowPositioned()) |
2801 staticPosition += toLayoutBox(curr)->relativePositionOffset(
).width(); | 2801 staticPosition += toLayoutBox(curr)->offsetForInFlowPosition
().width(); |
2802 } else if (curr->isInline()) { | 2802 } else if (curr->isInline()) { |
2803 if (curr->isRelPositioned()) { | 2803 if (curr->isInFlowPositioned()) { |
2804 if (!curr->style()->logicalLeft().isAuto()) | 2804 if (!curr->style()->logicalLeft().isAuto()) |
2805 staticPosition += valueForLength(curr->style()->logicalL
eft(), curr->containingBlock()->availableWidth()); | 2805 staticPosition += valueForLength(curr->style()->logicalL
eft(), curr->containingBlock()->availableWidth()); |
2806 else | 2806 else |
2807 staticPosition -= valueForLength(curr->style()->logicalR
ight(), curr->containingBlock()->availableWidth()); | 2807 staticPosition -= valueForLength(curr->style()->logicalR
ight(), curr->containingBlock()->availableWidth()); |
2808 } | 2808 } |
2809 } | 2809 } |
2810 } | 2810 } |
2811 logicalLeft.setValue(Fixed, staticPosition); | 2811 logicalLeft.setValue(Fixed, staticPosition); |
2812 } else { | 2812 } else { |
2813 LayoutBox* enclosingBox = child->parent()->enclosingBox(); | 2813 LayoutBox* enclosingBox = child->parent()->enclosingBox(); |
2814 LayoutUnit staticPosition = child->layer()->staticInlinePosition() + con
tainerLogicalWidth + containerBlock->borderLogicalLeft(); | 2814 LayoutUnit staticPosition = child->layer()->staticInlinePosition() + con
tainerLogicalWidth + containerBlock->borderLogicalLeft(); |
2815 for (LayoutObject* curr = child->parent(); curr; curr = curr->container(
)) { | 2815 for (LayoutObject* curr = child->parent(); curr; curr = curr->container(
)) { |
2816 if (curr->isBox()) { | 2816 if (curr->isBox()) { |
2817 if (curr != containerBlock) { | 2817 if (curr != containerBlock) { |
2818 staticPosition -= toLayoutBox(curr)->logicalLeft(); | 2818 staticPosition -= toLayoutBox(curr)->logicalLeft(); |
2819 if (toLayoutBox(curr)->isRelPositioned()) | 2819 if (toLayoutBox(curr)->isInFlowPositioned()) |
2820 staticPosition -= toLayoutBox(curr)->relativePositionOff
set().width(); | 2820 staticPosition -= toLayoutBox(curr)->offsetForInFlowPosi
tion().width(); |
2821 } | 2821 } |
2822 if (curr == enclosingBox) | 2822 if (curr == enclosingBox) |
2823 staticPosition -= enclosingBox->logicalWidth(); | 2823 staticPosition -= enclosingBox->logicalWidth(); |
2824 } else if (curr->isInline()) { | 2824 } else if (curr->isInline()) { |
2825 if (curr->isRelPositioned()) { | 2825 if (curr->isInFlowPositioned()) { |
2826 if (!curr->style()->logicalLeft().isAuto()) | 2826 if (!curr->style()->logicalLeft().isAuto()) |
2827 staticPosition -= valueForLength(curr->style()->logicalL
eft(), curr->containingBlock()->availableWidth()); | 2827 staticPosition -= valueForLength(curr->style()->logicalL
eft(), curr->containingBlock()->availableWidth()); |
2828 else | 2828 else |
2829 staticPosition += valueForLength(curr->style()->logicalR
ight(), curr->containingBlock()->availableWidth()); | 2829 staticPosition += valueForLength(curr->style()->logicalR
ight(), curr->containingBlock()->availableWidth()); |
2830 } | 2830 } |
2831 } | 2831 } |
2832 if (curr == containerBlock) | 2832 if (curr == containerBlock) |
2833 break; | 2833 break; |
2834 } | 2834 } |
2835 logicalRight.setValue(Fixed, staticPosition); | 2835 logicalRight.setValue(Fixed, staticPosition); |
(...skipping 1560 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4396 LayoutRect rect = borderBoxRect(); | 4396 LayoutRect rect = borderBoxRect(); |
4397 // We want to include the margin, but only when it adds height. Quirky margi
ns don't contribute height | 4397 // We want to include the margin, but only when it adds height. Quirky margi
ns don't contribute height |
4398 // nor do the margins of self-collapsing blocks. | 4398 // nor do the margins of self-collapsing blocks. |
4399 if (!styleRef().hasMarginAfterQuirk() && !isSelfCollapsingBlock()) | 4399 if (!styleRef().hasMarginAfterQuirk() && !isSelfCollapsingBlock()) |
4400 rect.expand(isHorizontalWritingMode() ? LayoutSize(LayoutUnit(), marginA
fter()) : LayoutSize(marginAfter(), LayoutUnit())); | 4400 rect.expand(isHorizontalWritingMode() ? LayoutSize(LayoutUnit(), marginA
fter()) : LayoutSize(marginAfter(), LayoutUnit())); |
4401 | 4401 |
4402 if (!hasOverflowClip()) | 4402 if (!hasOverflowClip()) |
4403 rect.unite(layoutOverflowRect()); | 4403 rect.unite(layoutOverflowRect()); |
4404 | 4404 |
4405 bool hasTransform = hasLayer() && layer()->transform(); | 4405 bool hasTransform = hasLayer() && layer()->transform(); |
4406 if (isRelPositioned() || hasTransform) { | 4406 if (isInFlowPositioned() || hasTransform) { |
4407 // If we are relatively positioned or if we have a transform, then we ha
ve to convert | 4407 // If we are relatively positioned or if we have a transform, then we ha
ve to convert |
4408 // this rectangle into physical coordinates, apply relative positioning
and transforms | 4408 // this rectangle into physical coordinates, apply relative positioning
and transforms |
4409 // to it, and then convert it back. | 4409 // to it, and then convert it back. |
4410 flipForWritingMode(rect); | 4410 flipForWritingMode(rect); |
4411 | 4411 |
4412 if (hasTransform) | 4412 if (hasTransform) |
4413 rect = layer()->currentTransform().mapRect(rect); | 4413 rect = layer()->currentTransform().mapRect(rect); |
4414 | 4414 |
4415 if (isRelPositioned()) | 4415 if (isInFlowPositioned()) |
4416 rect.move(offsetForInFlowPosition()); | 4416 rect.move(offsetForInFlowPosition()); |
4417 | 4417 |
4418 // Now we need to flip back. | 4418 // Now we need to flip back. |
4419 flipForWritingMode(rect); | 4419 flipForWritingMode(rect); |
4420 } | 4420 } |
4421 | 4421 |
4422 // If the writing modes of the child and parent match, then we don't have to | 4422 // If the writing modes of the child and parent match, then we don't have to |
4423 // do anything fancy. Just return the result. | 4423 // do anything fancy. Just return the result. |
4424 if (parentStyle.writingMode() == style()->writingMode()) | 4424 if (parentStyle.writingMode() == style()->writingMode()) |
4425 return rect; | 4425 return rect; |
(...skipping 322 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4748 bool LayoutBox::canRenderBorderImage() const | 4748 bool LayoutBox::canRenderBorderImage() const |
4749 { | 4749 { |
4750 if (!style()->hasBorderDecoration()) | 4750 if (!style()->hasBorderDecoration()) |
4751 return false; | 4751 return false; |
4752 | 4752 |
4753 StyleImage* borderImage = style()->borderImage().image(); | 4753 StyleImage* borderImage = style()->borderImage().image(); |
4754 return borderImage && borderImage->canRender(*this, style()->effectiveZoom()
) && borderImage->isLoaded(); | 4754 return borderImage && borderImage->canRender(*this, style()->effectiveZoom()
) && borderImage->isLoaded(); |
4755 } | 4755 } |
4756 | 4756 |
4757 } // namespace blink | 4757 } // namespace blink |
OLD | NEW |