| 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 1975 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1986 // A region "has" boxes inside it without being their container. | 1986 // A region "has" boxes inside it without being their container. |
| 1987 // FIXME: change container() / containingBlock() to count for boxes being po
sitioned relative to the region, not the | 1987 // FIXME: change container() / containingBlock() to count for boxes being po
sitioned relative to the region, not the |
| 1988 // FlowThread. This requires a separate patch as a simple test with such a c
hange in container() causes 129 out of | 1988 // FlowThread. This requires a separate patch as a simple test with such a c
hange in container() causes 129 out of |
| 1989 // 337 regions tests to fail. | 1989 // 337 regions tests to fail. |
| 1990 ASSERT(o == container() || o->isRenderRegion()); | 1990 ASSERT(o == container() || o->isRenderRegion()); |
| 1991 | 1991 |
| 1992 LayoutSize offset; | 1992 LayoutSize offset; |
| 1993 if (isInFlowPositioned()) | 1993 if (isInFlowPositioned()) |
| 1994 offset += offsetForInFlowPosition(); | 1994 offset += offsetForInFlowPosition(); |
| 1995 | 1995 |
| 1996 if (!isInline() || isReplaced()) { | 1996 if (!isInline() || isReplaced()) |
| 1997 if (!style()->hasOutOfFlowPosition() && o->hasColumns()) { | 1997 offset += topLeftLocationOffset(); |
| 1998 RenderBlock* block = toRenderBlock(o); | |
| 1999 LayoutRect columnRect(frameRect()); | |
| 2000 block->adjustStartEdgeForWritingModeIncludingColumns(columnRect); | |
| 2001 offset += toSize(columnRect.location()); | |
| 2002 LayoutPoint columnPoint = block->flipForWritingModeIncludingColumns(
point + offset); | |
| 2003 offset = toLayoutSize(block->flipForWritingModeIncludingColumns(toLa
youtPoint(offset))); | |
| 2004 o->adjustForColumns(offset, columnPoint); | |
| 2005 offset = block->flipForWritingMode(offset); | |
| 2006 | |
| 2007 if (offsetDependsOnPoint) | |
| 2008 *offsetDependsOnPoint = true; | |
| 2009 } else | |
| 2010 offset += topLeftLocationOffset(); | |
| 2011 } | |
| 2012 | 1998 |
| 2013 if (o->hasOverflowClip()) | 1999 if (o->hasOverflowClip()) |
| 2014 offset -= toRenderBox(o)->scrolledContentOffset(); | 2000 offset -= toRenderBox(o)->scrolledContentOffset(); |
| 2015 | 2001 |
| 2016 if (style()->position() == AbsolutePosition && o->isInFlowPositioned() && o-
>isRenderInline()) | 2002 if (style()->position() == AbsolutePosition && o->isInFlowPositioned() && o-
>isRenderInline()) |
| 2017 offset += toRenderInline(o)->offsetForInFlowPositionedInline(this); | 2003 offset += toRenderInline(o)->offsetForInFlowPositionedInline(this); |
| 2018 | 2004 |
| 2019 if (offsetDependsOnPoint) | 2005 if (offsetDependsOnPoint) |
| 2020 *offsetDependsOnPoint |= o->isRenderFlowThread(); | 2006 *offsetDependsOnPoint |= o->isRenderFlowThread(); |
| 2021 | 2007 |
| (...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2173 if (position == AbsolutePosition && o->isInFlowPositioned() && o->isRenderIn
line()) { | 2159 if (position == AbsolutePosition && o->isInFlowPositioned() && o->isRenderIn
line()) { |
| 2174 topLeft += toRenderInline(o)->offsetForInFlowPositionedInline(this); | 2160 topLeft += toRenderInline(o)->offsetForInFlowPositionedInline(this); |
| 2175 } else if (styleToUse->hasInFlowPosition() && layer()) { | 2161 } else if (styleToUse->hasInFlowPosition() && layer()) { |
| 2176 // Apply the relative position offset when invalidating a rectangle. Th
e layer | 2162 // Apply the relative position offset when invalidating a rectangle. Th
e layer |
| 2177 // is translated, but the render box isn't, so we need to do this to get
the | 2163 // is translated, but the render box isn't, so we need to do this to get
the |
| 2178 // right dirty rect. Since this is called from RenderObject::setStyle,
the relative position | 2164 // right dirty rect. Since this is called from RenderObject::setStyle,
the relative position |
| 2179 // flag on the RenderObject has been cleared, so use the one on the styl
e(). | 2165 // flag on the RenderObject has been cleared, so use the one on the styl
e(). |
| 2180 topLeft += layer()->offsetForInFlowPosition(); | 2166 topLeft += layer()->offsetForInFlowPosition(); |
| 2181 } | 2167 } |
| 2182 | 2168 |
| 2183 if (position != AbsolutePosition && position != FixedPosition && o->hasColum
ns() && o->isRenderBlockFlow()) { | 2169 if (position != AbsolutePosition && position != FixedPosition && o->isRender
BlockFlow()) { |
| 2184 LayoutRect repaintRect(topLeft, rect.size()); | 2170 LayoutRect repaintRect(topLeft, rect.size()); |
| 2185 toRenderBlock(o)->adjustRectForColumns(repaintRect); | |
| 2186 topLeft = repaintRect.location(); | 2171 topLeft = repaintRect.location(); |
| 2187 rect = repaintRect; | 2172 rect = repaintRect; |
| 2188 } | 2173 } |
| 2189 | 2174 |
| 2190 // FIXME: We ignore the lightweight clipping rect that controls use, since i
f |o| is in mid-layout, | 2175 // FIXME: We ignore the lightweight clipping rect that controls use, since i
f |o| is in mid-layout, |
| 2191 // its controlClipRect will be wrong. For overflow clip we use the values ca
ched by the layer. | 2176 // its controlClipRect will be wrong. For overflow clip we use the values ca
ched by the layer. |
| 2192 rect.setLocation(topLeft); | 2177 rect.setLocation(topLeft); |
| 2193 if (o->hasOverflowClip()) { | 2178 if (o->hasOverflowClip()) { |
| 2194 RenderBox* containerBox = toRenderBox(o); | 2179 RenderBox* containerBox = toRenderBox(o); |
| 2195 containerBox->applyCachedClipAndScrollOffsetForRepaint(rect); | 2180 containerBox->applyCachedClipAndScrollOffsetForRepaint(rect); |
| (...skipping 2264 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4460 bool hasTopOverflow = !style()->isLeftToRightDirection() && !isHorizonta
lWritingMode(); | 4445 bool hasTopOverflow = !style()->isLeftToRightDirection() && !isHorizonta
lWritingMode(); |
| 4461 bool hasLeftOverflow = !style()->isLeftToRightDirection() && isHorizonta
lWritingMode(); | 4446 bool hasLeftOverflow = !style()->isLeftToRightDirection() && isHorizonta
lWritingMode(); |
| 4462 if (isFlexibleBox() && style()->isReverseFlexDirection()) { | 4447 if (isFlexibleBox() && style()->isReverseFlexDirection()) { |
| 4463 RenderFlexibleBox* flexibleBox = toRenderFlexibleBox(this); | 4448 RenderFlexibleBox* flexibleBox = toRenderFlexibleBox(this); |
| 4464 if (flexibleBox->isHorizontalFlow()) | 4449 if (flexibleBox->isHorizontalFlow()) |
| 4465 hasLeftOverflow = true; | 4450 hasLeftOverflow = true; |
| 4466 else | 4451 else |
| 4467 hasTopOverflow = true; | 4452 hasTopOverflow = true; |
| 4468 } | 4453 } |
| 4469 | 4454 |
| 4470 if (hasColumns() && style()->columnProgression() == ReverseColumnProgres
sion) { | |
| 4471 if (isHorizontalWritingMode() ^ !style()->hasInlineColumnAxis()) | |
| 4472 hasLeftOverflow = !hasLeftOverflow; | |
| 4473 else | |
| 4474 hasTopOverflow = !hasTopOverflow; | |
| 4475 } | |
| 4476 | |
| 4477 if (!hasTopOverflow) | 4455 if (!hasTopOverflow) |
| 4478 overflowRect.shiftYEdgeTo(max(overflowRect.y(), clientBox.y())); | 4456 overflowRect.shiftYEdgeTo(max(overflowRect.y(), clientBox.y())); |
| 4479 else | 4457 else |
| 4480 overflowRect.shiftMaxYEdgeTo(min(overflowRect.maxY(), clientBox.maxY
())); | 4458 overflowRect.shiftMaxYEdgeTo(min(overflowRect.maxY(), clientBox.maxY
())); |
| 4481 if (!hasLeftOverflow) | 4459 if (!hasLeftOverflow) |
| 4482 overflowRect.shiftXEdgeTo(max(overflowRect.x(), clientBox.x())); | 4460 overflowRect.shiftXEdgeTo(max(overflowRect.x(), clientBox.x())); |
| 4483 else | 4461 else |
| 4484 overflowRect.shiftMaxXEdgeTo(min(overflowRect.maxX(), clientBox.maxX
())); | 4462 overflowRect.shiftMaxXEdgeTo(min(overflowRect.maxX(), clientBox.maxX
())); |
| 4485 | 4463 |
| 4486 // Now re-test with the adjusted rectangle and see if it has become unre
achable or fully | 4464 // Now re-test with the adjusted rectangle and see if it has become unre
achable or fully |
| (...skipping 308 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4795 return logicalHeight() - position; | 4773 return logicalHeight() - position; |
| 4796 } | 4774 } |
| 4797 | 4775 |
| 4798 LayoutPoint RenderBox::flipForWritingMode(const LayoutPoint& position) const | 4776 LayoutPoint RenderBox::flipForWritingMode(const LayoutPoint& position) const |
| 4799 { | 4777 { |
| 4800 if (!style()->isFlippedBlocksWritingMode()) | 4778 if (!style()->isFlippedBlocksWritingMode()) |
| 4801 return position; | 4779 return position; |
| 4802 return isHorizontalWritingMode() ? LayoutPoint(position.x(), height() - posi
tion.y()) : LayoutPoint(width() - position.x(), position.y()); | 4780 return isHorizontalWritingMode() ? LayoutPoint(position.x(), height() - posi
tion.y()) : LayoutPoint(width() - position.x(), position.y()); |
| 4803 } | 4781 } |
| 4804 | 4782 |
| 4805 LayoutPoint RenderBox::flipForWritingModeIncludingColumns(const LayoutPoint& poi
nt) const | |
| 4806 { | |
| 4807 if (!hasColumns() || !style()->isFlippedBlocksWritingMode()) | |
| 4808 return flipForWritingMode(point); | |
| 4809 return toRenderBlock(this)->flipForWritingModeIncludingColumns(point); | |
| 4810 } | |
| 4811 | |
| 4812 LayoutSize RenderBox::flipForWritingMode(const LayoutSize& offset) const | 4783 LayoutSize RenderBox::flipForWritingMode(const LayoutSize& offset) const |
| 4813 { | 4784 { |
| 4814 if (!style()->isFlippedBlocksWritingMode()) | 4785 if (!style()->isFlippedBlocksWritingMode()) |
| 4815 return offset; | 4786 return offset; |
| 4816 return isHorizontalWritingMode() ? LayoutSize(offset.width(), height() - off
set.height()) : LayoutSize(width() - offset.width(), offset.height()); | 4787 return isHorizontalWritingMode() ? LayoutSize(offset.width(), height() - off
set.height()) : LayoutSize(width() - offset.width(), offset.height()); |
| 4817 } | 4788 } |
| 4818 | 4789 |
| 4819 FloatPoint RenderBox::flipForWritingMode(const FloatPoint& position) const | 4790 FloatPoint RenderBox::flipForWritingMode(const FloatPoint& position) const |
| 4820 { | 4791 { |
| 4821 if (!style()->isFlippedBlocksWritingMode()) | 4792 if (!style()->isFlippedBlocksWritingMode()) |
| (...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4917 return 0; | 4888 return 0; |
| 4918 | 4889 |
| 4919 if (!layoutState && !flowThreadContainingBlock()) | 4890 if (!layoutState && !flowThreadContainingBlock()) |
| 4920 return 0; | 4891 return 0; |
| 4921 | 4892 |
| 4922 RenderBlock* containerBlock = containingBlock(); | 4893 RenderBlock* containerBlock = containingBlock(); |
| 4923 return containerBlock->offsetFromLogicalTopOfFirstPage() + logicalTop(); | 4894 return containerBlock->offsetFromLogicalTopOfFirstPage() + logicalTop(); |
| 4924 } | 4895 } |
| 4925 | 4896 |
| 4926 } // namespace WebCore | 4897 } // namespace WebCore |
| OLD | NEW |