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 |