| 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 * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights
reserved. | 4 * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights
reserved. |
| 5 * | 5 * |
| 6 * This library is free software; you can redistribute it and/or | 6 * This library is free software; you can redistribute it and/or |
| 7 * modify it under the terms of the GNU Library General Public | 7 * modify it under the terms of the GNU Library General Public |
| 8 * License as published by the Free Software Foundation; either | 8 * License as published by the Free Software Foundation; either |
| 9 * version 2 of the License, or (at your option) any later version. | 9 * version 2 of the License, or (at your option) any later version. |
| 10 * | 10 * |
| (...skipping 1029 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1040 | 1040 |
| 1041 LayoutRect LayoutInline::clippedOverflowRect(const LayoutBoxModelObject* paintIn
validationContainer, const PaintInvalidationState* paintInvalidationState) const | 1041 LayoutRect LayoutInline::clippedOverflowRect(const LayoutBoxModelObject* paintIn
validationContainer, const PaintInvalidationState* paintInvalidationState) const |
| 1042 { | 1042 { |
| 1043 if (style()->visibility() != VISIBLE) | 1043 if (style()->visibility() != VISIBLE) |
| 1044 return LayoutRect(); | 1044 return LayoutRect(); |
| 1045 | 1045 |
| 1046 LayoutRect overflowRect(visualOverflowRect()); | 1046 LayoutRect overflowRect(visualOverflowRect()); |
| 1047 if (overflowRect.isEmpty()) | 1047 if (overflowRect.isEmpty()) |
| 1048 return overflowRect; | 1048 return overflowRect; |
| 1049 | 1049 |
| 1050 mapRectToPaintInvalidationBacking(paintInvalidationContainer, overflowRect,
paintInvalidationState); | 1050 mapToVisibleRectInContainerSpace(paintInvalidationContainer, overflowRect, p
aintInvalidationState); |
| 1051 return overflowRect; | 1051 return overflowRect; |
| 1052 } | 1052 } |
| 1053 | 1053 |
| 1054 LayoutRect LayoutInline::visualOverflowRect() const | 1054 LayoutRect LayoutInline::visualOverflowRect() const |
| 1055 { | 1055 { |
| 1056 LayoutRect overflowRect = linesVisualOverflowBoundingBox(); | 1056 LayoutRect overflowRect = linesVisualOverflowBoundingBox(); |
| 1057 LayoutUnit outlineOutset = style()->outlineOutsetExtent(); | 1057 LayoutUnit outlineOutset = style()->outlineOutsetExtent(); |
| 1058 if (outlineOutset) { | 1058 if (outlineOutset) { |
| 1059 Vector<LayoutRect> rects; | 1059 Vector<LayoutRect> rects; |
| 1060 // We have already included outline extents of line boxes in linesVisual
OverflowBoundingBox(), | 1060 // We have already included outline extents of line boxes in linesVisual
OverflowBoundingBox(), |
| 1061 // so the following just add outline rects for children and continuation
s. | 1061 // so the following just add outline rects for children and continuation
s. |
| 1062 addOutlineRectsForChildrenAndContinuations(rects, LayoutPoint(), outline
RectsShouldIncludeBlockVisualOverflow()); | 1062 addOutlineRectsForChildrenAndContinuations(rects, LayoutPoint(), outline
RectsShouldIncludeBlockVisualOverflow()); |
| 1063 if (!rects.isEmpty()) { | 1063 if (!rects.isEmpty()) { |
| 1064 LayoutRect outlineRect = unionRectEvenIfEmpty(rects); | 1064 LayoutRect outlineRect = unionRectEvenIfEmpty(rects); |
| 1065 outlineRect.inflate(outlineOutset); | 1065 outlineRect.inflate(outlineOutset); |
| 1066 overflowRect.unite(outlineRect); | 1066 overflowRect.unite(outlineRect); |
| 1067 } | 1067 } |
| 1068 } | 1068 } |
| 1069 return overflowRect; | 1069 return overflowRect; |
| 1070 } | 1070 } |
| 1071 | 1071 |
| 1072 void LayoutInline::mapRectToPaintInvalidationBacking(const LayoutBoxModelObject*
paintInvalidationContainer, LayoutRect& rect, const PaintInvalidationState* pai
ntInvalidationState) const | 1072 void LayoutInline::mapToVisibleRectInContainerSpace(const LayoutBoxModelObject*
paintInvalidationContainer, LayoutRect& rect, const PaintInvalidationState* pain
tInvalidationState) const |
| 1073 { | 1073 { |
| 1074 if (paintInvalidationState && paintInvalidationState->canMapToContainer(pain
tInvalidationContainer)) { | 1074 if (paintInvalidationState && paintInvalidationState->canMapToContainer(pain
tInvalidationContainer)) { |
| 1075 if (style()->hasInFlowPosition() && layer()) | 1075 if (style()->hasInFlowPosition() && layer()) |
| 1076 rect.move(layer()->offsetForInFlowPosition()); | 1076 rect.move(layer()->offsetForInFlowPosition()); |
| 1077 rect.move(paintInvalidationState->paintOffset()); | 1077 rect.move(paintInvalidationState->paintOffset()); |
| 1078 if (paintInvalidationState->isClipped()) | 1078 if (paintInvalidationState->isClipped()) |
| 1079 rect.intersect(paintInvalidationState->clipRect()); | 1079 rect.intersect(paintInvalidationState->clipRect()); |
| 1080 return; | 1080 return; |
| 1081 } | 1081 } |
| 1082 | 1082 |
| (...skipping 13 matching lines...) Expand all Loading... |
| 1096 // right dirty rect. Since this is called from LayoutObject::setStyle, t
he relative position | 1096 // right dirty rect. Since this is called from LayoutObject::setStyle, t
he relative position |
| 1097 // flag on the LayoutObject has been cleared, so use the one on the styl
e(). | 1097 // flag on the LayoutObject has been cleared, so use the one on the styl
e(). |
| 1098 topLeft += layer()->offsetForInFlowPosition(); | 1098 topLeft += layer()->offsetForInFlowPosition(); |
| 1099 } | 1099 } |
| 1100 | 1100 |
| 1101 // FIXME: We ignore the lightweight clipping rect that controls use, since i
f |o| is in mid-layout, | 1101 // FIXME: We ignore the lightweight clipping rect that controls use, since i
f |o| is in mid-layout, |
| 1102 // its controlClipRect will be wrong. For overflow clip we use the values ca
ched by the layer. | 1102 // its controlClipRect will be wrong. For overflow clip we use the values ca
ched by the layer. |
| 1103 rect.setLocation(topLeft); | 1103 rect.setLocation(topLeft); |
| 1104 if (o->hasOverflowClip()) { | 1104 if (o->hasOverflowClip()) { |
| 1105 LayoutBox* containerBox = toLayoutBox(o); | 1105 LayoutBox* containerBox = toLayoutBox(o); |
| 1106 containerBox->applyCachedClipAndScrollOffsetForPaintInvalidation(rect); | 1106 if (o == paintInvalidationContainer) |
| 1107 containerBox->applyCachedScrollOffsetForPaintInvalidation(rect); |
| 1108 else |
| 1109 containerBox->applyCachedClipAndScrollOffsetForPaintInvalidation(rec
t); |
| 1107 if (rect.isEmpty()) | 1110 if (rect.isEmpty()) |
| 1108 return; | 1111 return; |
| 1109 } | 1112 } |
| 1110 | 1113 |
| 1111 if (containerSkipped) { | 1114 if (containerSkipped) { |
| 1112 // If the paintInvalidationContainer is below o, then we need to map the
rect into paintInvalidationContainer's coordinates. | 1115 // If the paintInvalidationContainer is below o, then we need to map the
rect into paintInvalidationContainer's coordinates. |
| 1113 LayoutSize containerOffset = paintInvalidationContainer->offsetFromAnces
torContainer(o); | 1116 LayoutSize containerOffset = paintInvalidationContainer->offsetFromAnces
torContainer(o); |
| 1114 rect.move(-containerOffset); | 1117 rect.move(-containerOffset); |
| 1115 return; | 1118 return; |
| 1116 } | 1119 } |
| 1117 | 1120 |
| 1118 o->mapRectToPaintInvalidationBacking(paintInvalidationContainer, rect, paint
InvalidationState); | 1121 o->mapToVisibleRectInContainerSpace(paintInvalidationContainer, rect, paintI
nvalidationState); |
| 1119 } | 1122 } |
| 1120 | 1123 |
| 1121 LayoutSize LayoutInline::offsetFromContainer(const LayoutObject* container, cons
t LayoutPoint& point, bool* offsetDependsOnPoint) const | 1124 LayoutSize LayoutInline::offsetFromContainer(const LayoutObject* container, cons
t LayoutPoint& point, bool* offsetDependsOnPoint) const |
| 1122 { | 1125 { |
| 1123 ASSERT(container == this->container()); | 1126 ASSERT(container == this->container()); |
| 1124 | 1127 |
| 1125 LayoutSize offset; | 1128 LayoutSize offset; |
| 1126 if (isInFlowPositioned()) | 1129 if (isInFlowPositioned()) |
| 1127 offset += offsetForInFlowPosition(); | 1130 offset += offsetForInFlowPosition(); |
| 1128 | 1131 |
| (...skipping 289 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1418 { | 1421 { |
| 1419 LayoutBoxModelObject::invalidateDisplayItemClients(paintInvalidationContaine
r, invalidationReason, paintInvalidationRect); | 1422 LayoutBoxModelObject::invalidateDisplayItemClients(paintInvalidationContaine
r, invalidationReason, paintInvalidationRect); |
| 1420 | 1423 |
| 1421 // Use the paintInvalidationRect of LayoutInline for inline boxes, which sav
es the cost to calculate paint invalidation rect | 1424 // Use the paintInvalidationRect of LayoutInline for inline boxes, which sav
es the cost to calculate paint invalidation rect |
| 1422 // for every inline box. This won't cause more rasterization invalidations b
ecause the whole LayoutInline is being invalidated. | 1425 // for every inline box. This won't cause more rasterization invalidations b
ecause the whole LayoutInline is being invalidated. |
| 1423 for (InlineFlowBox* box = firstLineBox(); box; box = box->nextLineBox()) | 1426 for (InlineFlowBox* box = firstLineBox(); box; box = box->nextLineBox()) |
| 1424 paintInvalidationContainer.invalidateDisplayItemClientOnBacking(*box, in
validationReason, paintInvalidationRect); | 1427 paintInvalidationContainer.invalidateDisplayItemClientOnBacking(*box, in
validationReason, paintInvalidationRect); |
| 1425 } | 1428 } |
| 1426 | 1429 |
| 1427 } // namespace blink | 1430 } // namespace blink |
| OLD | NEW |