| 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 369 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1630 } | 1630 } |
| 1631 | 1631 |
| 1632 LayoutBoxModelObject::mapAbsoluteToLocalPoint(mode, transformState); | 1632 LayoutBoxModelObject::mapAbsoluteToLocalPoint(mode, transformState); |
| 1633 } | 1633 } |
| 1634 | 1634 |
| 1635 LayoutSize LayoutBox::offsetFromContainer(const LayoutObject* o, const LayoutPoi
nt& point, bool* offsetDependsOnPoint) const | 1635 LayoutSize LayoutBox::offsetFromContainer(const LayoutObject* o, const LayoutPoi
nt& point, bool* offsetDependsOnPoint) const |
| 1636 { | 1636 { |
| 1637 ASSERT(o == container()); | 1637 ASSERT(o == container()); |
| 1638 | 1638 |
| 1639 LayoutSize offset; | 1639 LayoutSize offset; |
| 1640 if (isRelPositioned()) | 1640 if (isInFlowPositioned()) |
| 1641 offset += offsetForInFlowPosition(); | 1641 offset += offsetForInFlowPosition(); |
| 1642 | 1642 |
| 1643 if (!isInline() || isReplaced()) { | 1643 if (!isInline() || isReplaced()) { |
| 1644 offset += topLeftLocationOffset(); | 1644 offset += topLeftLocationOffset(); |
| 1645 if (o->isLayoutFlowThread()) { | 1645 if (o->isLayoutFlowThread()) { |
| 1646 // So far the point has been in flow thread coordinates (i.e. as if
everything in | 1646 // So far the point has been in flow thread coordinates (i.e. as if
everything in |
| 1647 // the fragmentation context lived in one tall single column). Conve
rt it to a | 1647 // the fragmentation context lived in one tall single column). Conve
rt it to a |
| 1648 // visual point now. | 1648 // visual point now. |
| 1649 LayoutPoint pointInContainer = point + offset; | 1649 LayoutPoint pointInContainer = point + offset; |
| 1650 offset += o->columnOffset(pointInContainer); | 1650 offset += o->columnOffset(pointInContainer); |
| 1651 if (offsetDependsOnPoint) | 1651 if (offsetDependsOnPoint) |
| 1652 *offsetDependsOnPoint = true; | 1652 *offsetDependsOnPoint = true; |
| 1653 } | 1653 } |
| 1654 } | 1654 } |
| 1655 | 1655 |
| 1656 if (o->hasOverflowClip()) | 1656 if (o->hasOverflowClip()) |
| 1657 offset -= toLayoutBox(o)->scrolledContentOffset(); | 1657 offset -= toLayoutBox(o)->scrolledContentOffset(); |
| 1658 | 1658 |
| 1659 if (style()->position() == AbsolutePosition && o->isRelPositioned() && o->is
LayoutInline()) | 1659 if (style()->position() == AbsolutePosition && o->isInFlowPositioned() && o-
>isLayoutInline()) |
| 1660 offset += toLayoutInline(o)->offsetForInFlowPositionedInline(*this); | 1660 offset += toLayoutInline(o)->offsetForInFlowPositionedInline(*this); |
| 1661 | 1661 |
| 1662 return offset; | 1662 return offset; |
| 1663 } | 1663 } |
| 1664 | 1664 |
| 1665 InlineBox* LayoutBox::createInlineBox() | 1665 InlineBox* LayoutBox::createInlineBox() |
| 1666 { | 1666 { |
| 1667 return new InlineBox(*this); | 1667 return new InlineBox(*this); |
| 1668 } | 1668 } |
| 1669 | 1669 |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1708 } else if (isReplaced()) { | 1708 } else if (isReplaced()) { |
| 1709 // FIXME: the call to roundedLayoutPoint() below is temporary and should
be removed once | 1709 // FIXME: the call to roundedLayoutPoint() below is temporary and should
be removed once |
| 1710 // the transition to LayoutUnit-based types is complete (crbug.com/32123
7) | 1710 // the transition to LayoutUnit-based types is complete (crbug.com/32123
7) |
| 1711 setLocationAndUpdateOverflowControlsIfNeeded(box->topLeft()); | 1711 setLocationAndUpdateOverflowControlsIfNeeded(box->topLeft()); |
| 1712 setInlineBoxWrapper(box); | 1712 setInlineBoxWrapper(box); |
| 1713 } | 1713 } |
| 1714 } | 1714 } |
| 1715 | 1715 |
| 1716 void LayoutBox::moveWithEdgeOfInlineContainerIfNecessary(bool isHorizontal) | 1716 void LayoutBox::moveWithEdgeOfInlineContainerIfNecessary(bool isHorizontal) |
| 1717 { | 1717 { |
| 1718 ASSERT(isOutOfFlowPositioned() && container()->isLayoutInline() && container
()->isRelPositioned()); | 1718 ASSERT(isOutOfFlowPositioned() && container()->isLayoutInline() && container
()->isInFlowPositioned()); |
| 1719 // If this object is inside a relative positioned inline and its inline posi
tion is an explicit offset from the edge of its container | 1719 // If this object is inside a relative positioned inline and its inline posi
tion is an explicit offset from the edge of its container |
| 1720 // then it will need to move if its inline container has changed width. We d
o not track if the width has changed | 1720 // then it will need to move if its inline container has changed width. We d
o not track if the width has changed |
| 1721 // 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 | 1721 // 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 |
| 1722 // move to the new offset created by the new width. | 1722 // move to the new offset created by the new width. |
| 1723 if (!normalChildNeedsLayout() && !style()->hasStaticInlinePosition(isHorizon
tal)) | 1723 if (!normalChildNeedsLayout() && !style()->hasStaticInlinePosition(isHorizon
tal)) |
| 1724 setChildNeedsLayout(MarkOnlyThis); | 1724 setChildNeedsLayout(MarkOnlyThis); |
| 1725 } | 1725 } |
| 1726 | 1726 |
| 1727 void LayoutBox::deleteLineBoxWrapper() | 1727 void LayoutBox::deleteLineBoxWrapper() |
| 1728 { | 1728 { |
| (...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1814 topLeft.move(locationOffset()); | 1814 topLeft.move(locationOffset()); |
| 1815 | 1815 |
| 1816 // We are now in our parent container's coordinate space. Apply our transfo
rm to obtain a bounding box | 1816 // We are now in our parent container's coordinate space. Apply our transfo
rm to obtain a bounding box |
| 1817 // in the parent's coordinate space that encloses us. | 1817 // in the parent's coordinate space that encloses us. |
| 1818 if (hasLayer() && layer()->transform()) { | 1818 if (hasLayer() && layer()->transform()) { |
| 1819 rect = LayoutRect(layer()->transform()->mapRect(pixelSnappedIntRect(rect
))); | 1819 rect = LayoutRect(layer()->transform()->mapRect(pixelSnappedIntRect(rect
))); |
| 1820 topLeft = rect.location(); | 1820 topLeft = rect.location(); |
| 1821 topLeft.move(locationOffset()); | 1821 topLeft.move(locationOffset()); |
| 1822 } | 1822 } |
| 1823 | 1823 |
| 1824 if (position == AbsolutePosition && o->isRelPositioned() && o->isLayoutInlin
e()) { | 1824 if (position == AbsolutePosition && o->isInFlowPositioned() && o->isLayoutIn
line()) { |
| 1825 topLeft += toLayoutInline(o)->offsetForInFlowPositionedInline(*this); | 1825 topLeft += toLayoutInline(o)->offsetForInFlowPositionedInline(*this); |
| 1826 } else if (styleToUse.hasInFlowPosition() && layer()) { | 1826 } else if (styleToUse.hasInFlowPosition() && layer()) { |
| 1827 // Apply the relative position offset when invalidating a rectangle. Th
e layer | 1827 // Apply the relative position offset when invalidating a rectangle. Th
e layer |
| 1828 // is translated, but the layout box isn't, so we need to do this to get
the | 1828 // is translated, but the layout box isn't, so we need to do this to get
the |
| 1829 // right dirty rect. Since this is called from LayoutObject::setStyle,
the relative position | 1829 // right dirty rect. Since this is called from LayoutObject::setStyle,
the relative position |
| 1830 // flag on the LayoutObject has been cleared, so use the one on the styl
e(). | 1830 // flag on the LayoutObject has been cleared, so use the one on the styl
e(). |
| 1831 topLeft += layer()->offsetForInFlowPosition(); | 1831 topLeft += layer()->offsetForInFlowPosition(); |
| 1832 } | 1832 } |
| 1833 | 1833 |
| 1834 // FIXME: We ignore the lightweight clipping rect that controls use, since i
f |o| is in mid-layout, | 1834 // 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... |
| 2736 return containingBlock->isHorizontalWritingMode() ? viewportRect.wid
th() : viewportRect.height(); | 2736 return containingBlock->isHorizontalWritingMode() ? viewportRect.wid
th() : viewportRect.height(); |
| 2737 } | 2737 } |
| 2738 } | 2738 } |
| 2739 | 2739 |
| 2740 if (hasOverrideContainingBlockLogicalWidth()) | 2740 if (hasOverrideContainingBlockLogicalWidth()) |
| 2741 return overrideContainingBlockContentLogicalWidth(); | 2741 return overrideContainingBlockContentLogicalWidth(); |
| 2742 | 2742 |
| 2743 if (containingBlock->isBox()) | 2743 if (containingBlock->isBox()) |
| 2744 return toLayoutBox(containingBlock)->clientLogicalWidth(); | 2744 return toLayoutBox(containingBlock)->clientLogicalWidth(); |
| 2745 | 2745 |
| 2746 ASSERT(containingBlock->isLayoutInline() && containingBlock->isRelPositioned
()); | 2746 ASSERT(containingBlock->isLayoutInline() && containingBlock->isInFlowPositio
ned()); |
| 2747 | 2747 |
| 2748 const LayoutInline* flow = toLayoutInline(containingBlock); | 2748 const LayoutInline* flow = toLayoutInline(containingBlock); |
| 2749 InlineFlowBox* first = flow->firstLineBox(); | 2749 InlineFlowBox* first = flow->firstLineBox(); |
| 2750 InlineFlowBox* last = flow->lastLineBox(); | 2750 InlineFlowBox* last = flow->lastLineBox(); |
| 2751 | 2751 |
| 2752 // If the containing block is empty, return a width of 0. | 2752 // If the containing block is empty, return a width of 0. |
| 2753 if (!first || !last) | 2753 if (!first || !last) |
| 2754 return LayoutUnit(); | 2754 return LayoutUnit(); |
| 2755 | 2755 |
| 2756 LayoutUnit fromLeft; | 2756 LayoutUnit fromLeft; |
| (...skipping 25 matching lines...) Expand all Loading... |
| 2782 | 2782 |
| 2783 if (hasOverrideContainingBlockLogicalHeight()) | 2783 if (hasOverrideContainingBlockLogicalHeight()) |
| 2784 return overrideContainingBlockContentLogicalHeight(); | 2784 return overrideContainingBlockContentLogicalHeight(); |
| 2785 | 2785 |
| 2786 if (containingBlock->isBox()) { | 2786 if (containingBlock->isBox()) { |
| 2787 const LayoutBlock* cb = containingBlock->isLayoutBlock() ? | 2787 const LayoutBlock* cb = containingBlock->isLayoutBlock() ? |
| 2788 toLayoutBlock(containingBlock) : containingBlock->containingBlock(); | 2788 toLayoutBlock(containingBlock) : containingBlock->containingBlock(); |
| 2789 return cb->clientLogicalHeight(); | 2789 return cb->clientLogicalHeight(); |
| 2790 } | 2790 } |
| 2791 | 2791 |
| 2792 ASSERT(containingBlock->isLayoutInline() && containingBlock->isRelPositioned
()); | 2792 ASSERT(containingBlock->isLayoutInline() && containingBlock->isInFlowPositio
ned()); |
| 2793 | 2793 |
| 2794 const LayoutInline* flow = toLayoutInline(containingBlock); | 2794 const LayoutInline* flow = toLayoutInline(containingBlock); |
| 2795 InlineFlowBox* first = flow->firstLineBox(); | 2795 InlineFlowBox* first = flow->firstLineBox(); |
| 2796 InlineFlowBox* last = flow->lastLineBox(); | 2796 InlineFlowBox* last = flow->lastLineBox(); |
| 2797 | 2797 |
| 2798 // If the containing block is empty, return a height of 0. | 2798 // If the containing block is empty, return a height of 0. |
| 2799 if (!first || !last) | 2799 if (!first || !last) |
| 2800 return LayoutUnit(); | 2800 return LayoutUnit(); |
| 2801 | 2801 |
| 2802 LayoutUnit heightResult; | 2802 LayoutUnit heightResult; |
| (...skipping 10 matching lines...) Expand all Loading... |
| 2813 { | 2813 { |
| 2814 if (!logicalLeft.isAuto() || !logicalRight.isAuto()) | 2814 if (!logicalLeft.isAuto() || !logicalRight.isAuto()) |
| 2815 return; | 2815 return; |
| 2816 | 2816 |
| 2817 // FIXME: The static distance computation has not been patched for mixed wri
ting modes yet. | 2817 // FIXME: The static distance computation has not been patched for mixed wri
ting modes yet. |
| 2818 if (child->parent()->style()->direction() == LTR) { | 2818 if (child->parent()->style()->direction() == LTR) { |
| 2819 LayoutUnit staticPosition = child->layer()->staticInlinePosition() - con
tainerBlock->borderLogicalLeft(); | 2819 LayoutUnit staticPosition = child->layer()->staticInlinePosition() - con
tainerBlock->borderLogicalLeft(); |
| 2820 for (LayoutObject* curr = child->parent(); curr && curr != containerBloc
k; curr = curr->container()) { | 2820 for (LayoutObject* curr = child->parent(); curr && curr != containerBloc
k; curr = curr->container()) { |
| 2821 if (curr->isBox()) { | 2821 if (curr->isBox()) { |
| 2822 staticPosition += toLayoutBox(curr)->logicalLeft(); | 2822 staticPosition += toLayoutBox(curr)->logicalLeft(); |
| 2823 if (toLayoutBox(curr)->isRelPositioned()) | 2823 if (toLayoutBox(curr)->isInFlowPositioned()) |
| 2824 staticPosition += toLayoutBox(curr)->relativePositionOffset(
).width(); | 2824 staticPosition += toLayoutBox(curr)->offsetForInFlowPosition
().width(); |
| 2825 } else if (curr->isInline()) { | 2825 } else if (curr->isInline()) { |
| 2826 if (curr->isRelPositioned()) { | 2826 if (curr->isInFlowPositioned()) { |
| 2827 if (!curr->style()->logicalLeft().isAuto()) | 2827 if (!curr->style()->logicalLeft().isAuto()) |
| 2828 staticPosition += valueForLength(curr->style()->logicalL
eft(), curr->containingBlock()->availableWidth()); | 2828 staticPosition += valueForLength(curr->style()->logicalL
eft(), curr->containingBlock()->availableWidth()); |
| 2829 else | 2829 else |
| 2830 staticPosition -= valueForLength(curr->style()->logicalR
ight(), curr->containingBlock()->availableWidth()); | 2830 staticPosition -= valueForLength(curr->style()->logicalR
ight(), curr->containingBlock()->availableWidth()); |
| 2831 } | 2831 } |
| 2832 } | 2832 } |
| 2833 } | 2833 } |
| 2834 logicalLeft.setValue(Fixed, staticPosition); | 2834 logicalLeft.setValue(Fixed, staticPosition); |
| 2835 } else { | 2835 } else { |
| 2836 LayoutBox* enclosingBox = child->parent()->enclosingBox(); | 2836 LayoutBox* enclosingBox = child->parent()->enclosingBox(); |
| 2837 LayoutUnit staticPosition = child->layer()->staticInlinePosition() + con
tainerLogicalWidth + containerBlock->borderLogicalLeft(); | 2837 LayoutUnit staticPosition = child->layer()->staticInlinePosition() + con
tainerLogicalWidth + containerBlock->borderLogicalLeft(); |
| 2838 for (LayoutObject* curr = child->parent(); curr; curr = curr->container(
)) { | 2838 for (LayoutObject* curr = child->parent(); curr; curr = curr->container(
)) { |
| 2839 if (curr->isBox()) { | 2839 if (curr->isBox()) { |
| 2840 if (curr != containerBlock) { | 2840 if (curr != containerBlock) { |
| 2841 staticPosition -= toLayoutBox(curr)->logicalLeft(); | 2841 staticPosition -= toLayoutBox(curr)->logicalLeft(); |
| 2842 if (toLayoutBox(curr)->isRelPositioned()) | 2842 if (toLayoutBox(curr)->isInFlowPositioned()) |
| 2843 staticPosition -= toLayoutBox(curr)->relativePositionOff
set().width(); | 2843 staticPosition -= toLayoutBox(curr)->offsetForInFlowPosi
tion().width(); |
| 2844 } | 2844 } |
| 2845 if (curr == enclosingBox) | 2845 if (curr == enclosingBox) |
| 2846 staticPosition -= enclosingBox->logicalWidth(); | 2846 staticPosition -= enclosingBox->logicalWidth(); |
| 2847 } else if (curr->isInline()) { | 2847 } else if (curr->isInline()) { |
| 2848 if (curr->isRelPositioned()) { | 2848 if (curr->isInFlowPositioned()) { |
| 2849 if (!curr->style()->logicalLeft().isAuto()) | 2849 if (!curr->style()->logicalLeft().isAuto()) |
| 2850 staticPosition -= valueForLength(curr->style()->logicalL
eft(), curr->containingBlock()->availableWidth()); | 2850 staticPosition -= valueForLength(curr->style()->logicalL
eft(), curr->containingBlock()->availableWidth()); |
| 2851 else | 2851 else |
| 2852 staticPosition += valueForLength(curr->style()->logicalR
ight(), curr->containingBlock()->availableWidth()); | 2852 staticPosition += valueForLength(curr->style()->logicalR
ight(), curr->containingBlock()->availableWidth()); |
| 2853 } | 2853 } |
| 2854 } | 2854 } |
| 2855 if (curr == containerBlock) | 2855 if (curr == containerBlock) |
| 2856 break; | 2856 break; |
| 2857 } | 2857 } |
| 2858 logicalRight.setValue(Fixed, staticPosition); | 2858 logicalRight.setValue(Fixed, staticPosition); |
| (...skipping 1560 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4419 LayoutRect rect = borderBoxRect(); | 4419 LayoutRect rect = borderBoxRect(); |
| 4420 // We want to include the margin, but only when it adds height. Quirky margi
ns don't contribute height | 4420 // We want to include the margin, but only when it adds height. Quirky margi
ns don't contribute height |
| 4421 // nor do the margins of self-collapsing blocks. | 4421 // nor do the margins of self-collapsing blocks. |
| 4422 if (!styleRef().hasMarginAfterQuirk() && !isSelfCollapsingBlock()) | 4422 if (!styleRef().hasMarginAfterQuirk() && !isSelfCollapsingBlock()) |
| 4423 rect.expand(isHorizontalWritingMode() ? LayoutSize(LayoutUnit(), marginA
fter()) : LayoutSize(marginAfter(), LayoutUnit())); | 4423 rect.expand(isHorizontalWritingMode() ? LayoutSize(LayoutUnit(), marginA
fter()) : LayoutSize(marginAfter(), LayoutUnit())); |
| 4424 | 4424 |
| 4425 if (!hasOverflowClip()) | 4425 if (!hasOverflowClip()) |
| 4426 rect.unite(layoutOverflowRect()); | 4426 rect.unite(layoutOverflowRect()); |
| 4427 | 4427 |
| 4428 bool hasTransform = hasLayer() && layer()->transform(); | 4428 bool hasTransform = hasLayer() && layer()->transform(); |
| 4429 if (isRelPositioned() || hasTransform) { | 4429 if (isInFlowPositioned() || hasTransform) { |
| 4430 // If we are relatively positioned or if we have a transform, then we ha
ve to convert | 4430 // If we are relatively positioned or if we have a transform, then we ha
ve to convert |
| 4431 // this rectangle into physical coordinates, apply relative positioning
and transforms | 4431 // this rectangle into physical coordinates, apply relative positioning
and transforms |
| 4432 // to it, and then convert it back. | 4432 // to it, and then convert it back. |
| 4433 flipForWritingMode(rect); | 4433 flipForWritingMode(rect); |
| 4434 | 4434 |
| 4435 if (hasTransform) | 4435 if (hasTransform) |
| 4436 rect = layer()->currentTransform().mapRect(rect); | 4436 rect = layer()->currentTransform().mapRect(rect); |
| 4437 | 4437 |
| 4438 if (isRelPositioned()) | 4438 if (isInFlowPositioned()) |
| 4439 rect.move(offsetForInFlowPosition()); | 4439 rect.move(offsetForInFlowPosition()); |
| 4440 | 4440 |
| 4441 // Now we need to flip back. | 4441 // Now we need to flip back. |
| 4442 flipForWritingMode(rect); | 4442 flipForWritingMode(rect); |
| 4443 } | 4443 } |
| 4444 | 4444 |
| 4445 // If the writing modes of the child and parent match, then we don't have to | 4445 // If the writing modes of the child and parent match, then we don't have to |
| 4446 // do anything fancy. Just return the result. | 4446 // do anything fancy. Just return the result. |
| 4447 if (parentStyle.writingMode() == style()->writingMode()) | 4447 if (parentStyle.writingMode() == style()->writingMode()) |
| 4448 return rect; | 4448 return rect; |
| (...skipping 322 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4771 bool LayoutBox::canRenderBorderImage() const | 4771 bool LayoutBox::canRenderBorderImage() const |
| 4772 { | 4772 { |
| 4773 if (!style()->hasBorderDecoration()) | 4773 if (!style()->hasBorderDecoration()) |
| 4774 return false; | 4774 return false; |
| 4775 | 4775 |
| 4776 StyleImage* borderImage = style()->borderImage().image(); | 4776 StyleImage* borderImage = style()->borderImage().image(); |
| 4777 return borderImage && borderImage->canRender(*this, style()->effectiveZoom()
) && borderImage->isLoaded(); | 4777 return borderImage && borderImage->canRender(*this, style()->effectiveZoom()
) && borderImage->isLoaded(); |
| 4778 } | 4778 } |
| 4779 | 4779 |
| 4780 } // namespace blink | 4780 } // namespace blink |
| OLD | NEW |