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 * | 7 * |
8 * This library is free software; you can redistribute it and/or | 8 * This library is free software; you can redistribute it and/or |
9 * modify it under the terms of the GNU Library General Public | 9 * modify it under the terms of the GNU Library General Public |
10 * License as published by the Free Software Foundation; either | 10 * License as published by the Free Software Foundation; either |
(...skipping 4124 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4135 // overflow if we are clipping our own overflow. | 4135 // overflow if we are clipping our own overflow. |
4136 if (child->hasSelfPaintingLayer() || hasOverflowClip()) | 4136 if (child->hasSelfPaintingLayer() || hasOverflowClip()) |
4137 return; | 4137 return; |
4138 LayoutRect childVisualOverflowRect = child->visualOverflowRectForPropagation
(style()); | 4138 LayoutRect childVisualOverflowRect = child->visualOverflowRectForPropagation
(style()); |
4139 childVisualOverflowRect.move(delta); | 4139 childVisualOverflowRect.move(delta); |
4140 addVisualOverflow(childVisualOverflowRect); | 4140 addVisualOverflow(childVisualOverflowRect); |
4141 } | 4141 } |
4142 | 4142 |
4143 void RenderBox::addLayoutOverflow(const LayoutRect& rect) | 4143 void RenderBox::addLayoutOverflow(const LayoutRect& rect) |
4144 { | 4144 { |
4145 LayoutRect clientBox = clientBoxRect(); | 4145 LayoutRect clientBox = noOverflowRect(); |
4146 if (clientBox.contains(rect) || rect.isEmpty()) | 4146 if (clientBox.contains(rect) || rect.isEmpty()) |
4147 return; | 4147 return; |
4148 | 4148 |
4149 // For overflow clip objects, we don't want to propagate overflow into unrea
chable areas. | 4149 // For overflow clip objects, we don't want to propagate overflow into unrea
chable areas. |
4150 LayoutRect overflowRect(rect); | 4150 LayoutRect overflowRect(rect); |
4151 if (hasOverflowClip() || isRenderView()) { | 4151 if (hasOverflowClip() || isRenderView()) { |
4152 // Overflow is in the block's coordinate space and thus is flipped for h
orizontal-bt and vertical-rl | 4152 // Overflow is in the block's coordinate space and thus is flipped for h
orizontal-bt and vertical-rl |
4153 // writing modes. At this stage that is actually a simplification, sinc
e we can treat horizontal-tb/bt as the same | 4153 // writing modes. At this stage that is actually a simplification, sinc
e we can treat horizontal-tb/bt as the same |
4154 // and vertical-lr/rl as the same. | 4154 // and vertical-lr/rl as the same. |
4155 bool hasTopOverflow = !style()->isLeftToRightDirection() && !isHorizonta
lWritingMode(); | 4155 bool hasTopOverflow = !style()->isLeftToRightDirection() && !isHorizonta
lWritingMode(); |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4190 m_overflow->addLayoutOverflow(overflowRect); | 4190 m_overflow->addLayoutOverflow(overflowRect); |
4191 } | 4191 } |
4192 | 4192 |
4193 void RenderBox::addVisualOverflow(const LayoutRect& rect) | 4193 void RenderBox::addVisualOverflow(const LayoutRect& rect) |
4194 { | 4194 { |
4195 LayoutRect borderBox = borderBoxRect(); | 4195 LayoutRect borderBox = borderBoxRect(); |
4196 if (borderBox.contains(rect) || rect.isEmpty()) | 4196 if (borderBox.contains(rect) || rect.isEmpty()) |
4197 return; | 4197 return; |
4198 | 4198 |
4199 if (!m_overflow) | 4199 if (!m_overflow) |
4200 m_overflow = adoptPtr(new RenderOverflow(clientBoxRect(), borderBox)); | 4200 m_overflow = adoptPtr(new RenderOverflow(noOverflowRect(), borderBox)); |
4201 | 4201 |
4202 m_overflow->addVisualOverflow(rect); | 4202 m_overflow->addVisualOverflow(rect); |
4203 } | 4203 } |
4204 | 4204 |
4205 void RenderBox::clearLayoutOverflow() | 4205 void RenderBox::clearLayoutOverflow() |
4206 { | 4206 { |
4207 if (!m_overflow) | 4207 if (!m_overflow) |
4208 return; | 4208 return; |
4209 | 4209 |
4210 if (visualOverflowRect() == borderBoxRect()) { | 4210 if (visualOverflowRect() == borderBoxRect()) { |
(...skipping 173 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4384 // We are putting ourselves into our parent's coordinate space. If there is
a flipped block mismatch | 4384 // We are putting ourselves into our parent's coordinate space. If there is
a flipped block mismatch |
4385 // in a particular axis, then we have to flip the rect along that axis. | 4385 // in a particular axis, then we have to flip the rect along that axis. |
4386 if (style()->writingMode() == RightToLeftWritingMode || parentStyle->writing
Mode() == RightToLeftWritingMode) | 4386 if (style()->writingMode() == RightToLeftWritingMode || parentStyle->writing
Mode() == RightToLeftWritingMode) |
4387 rect.setX(width() - rect.maxX()); | 4387 rect.setX(width() - rect.maxX()); |
4388 else if (style()->writingMode() == BottomToTopWritingMode || parentStyle->wr
itingMode() == BottomToTopWritingMode) | 4388 else if (style()->writingMode() == BottomToTopWritingMode || parentStyle->wr
itingMode() == BottomToTopWritingMode) |
4389 rect.setY(height() - rect.maxY()); | 4389 rect.setY(height() - rect.maxY()); |
4390 | 4390 |
4391 return rect; | 4391 return rect; |
4392 } | 4392 } |
4393 | 4393 |
| 4394 LayoutRect RenderBox::noOverflowRect() const |
| 4395 { |
| 4396 // Because of the special coodinate system used for overflow rectangles (not
quite logical, not |
| 4397 // quite physical), we need to flip the block progression coordinate in vert
ical-rl and |
| 4398 // horizontal-bt writing modes. Apart from that, this method does the same a
s clientBoxRect(). |
| 4399 |
| 4400 LayoutUnit left = borderLeft(); |
| 4401 LayoutUnit top = borderTop(); |
| 4402 LayoutUnit right = borderRight(); |
| 4403 LayoutUnit bottom = borderBottom(); |
| 4404 // Calculate physical padding box. |
| 4405 LayoutRect rect(left, top, width() - left - right, height() - top - bottom); |
| 4406 // Flip block progression axis if writing mode is vertical-rl or horizontal-
bt. |
| 4407 flipForWritingMode(rect); |
| 4408 // Subtract space occupied by scrollbars. They are at their physical edge in
this coordinate |
| 4409 // system, so order is important here: first flip, then subtract scrollbars. |
| 4410 rect.contract(verticalScrollbarWidth(), horizontalScrollbarHeight()); |
| 4411 return rect; |
| 4412 } |
| 4413 |
4394 LayoutRect RenderBox::overflowRectForPaintRejection() const | 4414 LayoutRect RenderBox::overflowRectForPaintRejection() const |
4395 { | 4415 { |
4396 LayoutRect overflowRect = visualOverflowRect(); | 4416 LayoutRect overflowRect = visualOverflowRect(); |
4397 if (!m_overflow || !usesCompositedScrolling()) | 4417 if (!m_overflow || !usesCompositedScrolling()) |
4398 return overflowRect; | 4418 return overflowRect; |
4399 | 4419 |
4400 overflowRect.unite(layoutOverflowRect()); | 4420 overflowRect.unite(layoutOverflowRect()); |
4401 overflowRect.move(-scrolledContentOffset()); | 4421 overflowRect.move(-scrolledContentOffset()); |
4402 return overflowRect; | 4422 return overflowRect; |
4403 } | 4423 } |
(...skipping 177 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4581 | 4601 |
4582 void RenderBox::reportStaticMembersMemoryUsage(MemoryInstrumentation* memoryInst
rumentation) | 4602 void RenderBox::reportStaticMembersMemoryUsage(MemoryInstrumentation* memoryInst
rumentation) |
4583 { | 4603 { |
4584 memoryInstrumentation->addRootObject(gOverrideHeightMap, WebCoreMemoryTypes:
:RenderingStructures); | 4604 memoryInstrumentation->addRootObject(gOverrideHeightMap, WebCoreMemoryTypes:
:RenderingStructures); |
4585 memoryInstrumentation->addRootObject(gOverrideWidthMap, WebCoreMemoryTypes::
RenderingStructures); | 4605 memoryInstrumentation->addRootObject(gOverrideWidthMap, WebCoreMemoryTypes::
RenderingStructures); |
4586 memoryInstrumentation->addRootObject(gOverrideContainingBlockLogicalHeightMa
p, WebCoreMemoryTypes::RenderingStructures); | 4606 memoryInstrumentation->addRootObject(gOverrideContainingBlockLogicalHeightMa
p, WebCoreMemoryTypes::RenderingStructures); |
4587 memoryInstrumentation->addRootObject(gOverrideContainingBlockLogicalWidthMap
, WebCoreMemoryTypes::RenderingStructures); | 4607 memoryInstrumentation->addRootObject(gOverrideContainingBlockLogicalWidthMap
, WebCoreMemoryTypes::RenderingStructures); |
4588 } | 4608 } |
4589 | 4609 |
4590 } // namespace WebCore | 4610 } // namespace WebCore |
OLD | NEW |