| 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 567 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 578 | 578 |
| 579 bool isHorizontal = style()->isHorizontalWritingMode(); | 579 bool isHorizontal = style()->isHorizontalWritingMode(); |
| 580 | 580 |
| 581 for (LayoutObject* curr = firstChild(); curr; curr = curr->nextSibling()) { | 581 for (LayoutObject* curr = firstChild(); curr; curr = curr->nextSibling()) { |
| 582 if (curr->isFloatingOrOutOfFlowPositioned()) | 582 if (curr->isFloatingOrOutOfFlowPositioned()) |
| 583 continue; | 583 continue; |
| 584 | 584 |
| 585 // We want to get the margin box in the inline direction, and then use o
ur font ascent/descent in the block | 585 // We want to get the margin box in the inline direction, and then use o
ur font ascent/descent in the block |
| 586 // direction (aligned to the root box's baseline). | 586 // direction (aligned to the root box's baseline). |
| 587 if (curr->isBox()) { | 587 if (curr->isBox()) { |
| 588 RenderBox* currBox = toRenderBox(curr); | 588 LayoutBox* currBox = toLayoutBox(curr); |
| 589 if (currBox->inlineBoxWrapper()) { | 589 if (currBox->inlineBoxWrapper()) { |
| 590 RootInlineBox& rootBox = currBox->inlineBoxWrapper()->root(); | 590 RootInlineBox& rootBox = currBox->inlineBoxWrapper()->root(); |
| 591 int logicalTop = rootBox.logicalTop() + (rootBox.renderer().styl
e(rootBox.isFirstLineStyle())->font().fontMetrics().ascent() - container->style(
rootBox.isFirstLineStyle())->font().fontMetrics().ascent()); | 591 int logicalTop = rootBox.logicalTop() + (rootBox.renderer().styl
e(rootBox.isFirstLineStyle())->font().fontMetrics().ascent() - container->style(
rootBox.isFirstLineStyle())->font().fontMetrics().ascent()); |
| 592 int logicalHeight = container->style(rootBox.isFirstLineStyle())
->font().fontMetrics().height(); | 592 int logicalHeight = container->style(rootBox.isFirstLineStyle())
->font().fontMetrics().height(); |
| 593 if (isHorizontal) | 593 if (isHorizontal) |
| 594 yield(FloatRect(currBox->inlineBoxWrapper()->x() - currBox->
marginLeft(), logicalTop, (currBox->size().width() + currBox->marginWidth()).toF
loat(), logicalHeight)); | 594 yield(FloatRect(currBox->inlineBoxWrapper()->x() - currBox->
marginLeft(), logicalTop, (currBox->size().width() + currBox->marginWidth()).toF
loat(), logicalHeight)); |
| 595 else | 595 else |
| 596 yield(FloatRect(logicalTop, currBox->inlineBoxWrapper()->y()
- currBox->marginTop(), logicalHeight, (currBox->size().height() + currBox->mar
ginHeight()).toFloat())); | 596 yield(FloatRect(logicalTop, currBox->inlineBoxWrapper()->y()
- currBox->marginTop(), logicalHeight, (currBox->size().height() + currBox->mar
ginHeight()).toFloat())); |
| 597 } | 597 } |
| 598 } else if (curr->isRenderInline()) { | 598 } else if (curr->isRenderInline()) { |
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 653 | 653 |
| 654 } // unnamed namespace | 654 } // unnamed namespace |
| 655 | 655 |
| 656 void RenderInline::absoluteRects(Vector<IntRect>& rects, const LayoutPoint& accu
mulatedOffset) const | 656 void RenderInline::absoluteRects(Vector<IntRect>& rects, const LayoutPoint& accu
mulatedOffset) const |
| 657 { | 657 { |
| 658 AbsoluteRectsGeneratorContext context(rects, accumulatedOffset); | 658 AbsoluteRectsGeneratorContext context(rects, accumulatedOffset); |
| 659 generateLineBoxRects(context); | 659 generateLineBoxRects(context); |
| 660 | 660 |
| 661 if (continuation()) { | 661 if (continuation()) { |
| 662 if (continuation()->isBox()) { | 662 if (continuation()->isBox()) { |
| 663 RenderBox* box = toRenderBox(continuation()); | 663 LayoutBox* box = toLayoutBox(continuation()); |
| 664 continuation()->absoluteRects(rects, toLayoutPoint(accumulatedOffset
- containingBlock()->location() + box->locationOffset())); | 664 continuation()->absoluteRects(rects, toLayoutPoint(accumulatedOffset
- containingBlock()->location() + box->locationOffset())); |
| 665 } else | 665 } else |
| 666 continuation()->absoluteRects(rects, toLayoutPoint(accumulatedOffset
- containingBlock()->location())); | 666 continuation()->absoluteRects(rects, toLayoutPoint(accumulatedOffset
- containingBlock()->location())); |
| 667 } | 667 } |
| 668 } | 668 } |
| 669 | 669 |
| 670 | 670 |
| 671 namespace { | 671 namespace { |
| 672 | 672 |
| 673 class AbsoluteQuadsGeneratorContext { | 673 class AbsoluteQuadsGeneratorContext { |
| (...skipping 164 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 838 if (firstLineBoxIncludingCulling()) { | 838 if (firstLineBoxIncludingCulling()) { |
| 839 // This inline actually has a line box. We must have clicked in the bor
der/padding of one of these boxes. We | 839 // This inline actually has a line box. We must have clicked in the bor
der/padding of one of these boxes. We |
| 840 // should try to find a result by asking our containing block. | 840 // should try to find a result by asking our containing block. |
| 841 return cb->positionForPoint(point); | 841 return cb->positionForPoint(point); |
| 842 } | 842 } |
| 843 | 843 |
| 844 // Translate the coords from the pre-anonymous block to the post-anonymous b
lock. | 844 // Translate the coords from the pre-anonymous block to the post-anonymous b
lock. |
| 845 LayoutPoint parentBlockPoint = cb->location() + point; | 845 LayoutPoint parentBlockPoint = cb->location() + point; |
| 846 LayoutBoxModelObject* c = continuation(); | 846 LayoutBoxModelObject* c = continuation(); |
| 847 while (c) { | 847 while (c) { |
| 848 RenderBox* contBlock = c->isInline() ? c->containingBlock() : toRenderBl
ock(c); | 848 LayoutBox* contBlock = c->isInline() ? c->containingBlock() : toRenderBl
ock(c); |
| 849 if (c->isInline() || c->slowFirstChild()) | 849 if (c->isInline() || c->slowFirstChild()) |
| 850 return c->positionForPoint(parentBlockPoint - contBlock->locationOff
set()); | 850 return c->positionForPoint(parentBlockPoint - contBlock->locationOff
set()); |
| 851 c = toRenderBlock(c)->inlineElementContinuation(); | 851 c = toRenderBlock(c)->inlineElementContinuation(); |
| 852 } | 852 } |
| 853 | 853 |
| 854 return LayoutBoxModelObject::positionForPoint(point); | 854 return LayoutBoxModelObject::positionForPoint(point); |
| 855 } | 855 } |
| 856 | 856 |
| 857 namespace { | 857 namespace { |
| 858 | 858 |
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 910 | 910 |
| 911 InlineBox* RenderInline::culledInlineFirstLineBox() const | 911 InlineBox* RenderInline::culledInlineFirstLineBox() const |
| 912 { | 912 { |
| 913 for (LayoutObject* curr = firstChild(); curr; curr = curr->nextSibling()) { | 913 for (LayoutObject* curr = firstChild(); curr; curr = curr->nextSibling()) { |
| 914 if (curr->isFloatingOrOutOfFlowPositioned()) | 914 if (curr->isFloatingOrOutOfFlowPositioned()) |
| 915 continue; | 915 continue; |
| 916 | 916 |
| 917 // We want to get the margin box in the inline direction, and then use o
ur font ascent/descent in the block | 917 // We want to get the margin box in the inline direction, and then use o
ur font ascent/descent in the block |
| 918 // direction (aligned to the root box's baseline). | 918 // direction (aligned to the root box's baseline). |
| 919 if (curr->isBox()) | 919 if (curr->isBox()) |
| 920 return toRenderBox(curr)->inlineBoxWrapper(); | 920 return toLayoutBox(curr)->inlineBoxWrapper(); |
| 921 if (curr->isRenderInline()) { | 921 if (curr->isRenderInline()) { |
| 922 RenderInline* currInline = toRenderInline(curr); | 922 RenderInline* currInline = toRenderInline(curr); |
| 923 InlineBox* result = currInline->firstLineBoxIncludingCulling(); | 923 InlineBox* result = currInline->firstLineBoxIncludingCulling(); |
| 924 if (result) | 924 if (result) |
| 925 return result; | 925 return result; |
| 926 } else if (curr->isText()) { | 926 } else if (curr->isText()) { |
| 927 RenderText* currText = toRenderText(curr); | 927 RenderText* currText = toRenderText(curr); |
| 928 if (currText->firstTextBox()) | 928 if (currText->firstTextBox()) |
| 929 return currText->firstTextBox(); | 929 return currText->firstTextBox(); |
| 930 } | 930 } |
| 931 } | 931 } |
| 932 return 0; | 932 return 0; |
| 933 } | 933 } |
| 934 | 934 |
| 935 InlineBox* RenderInline::culledInlineLastLineBox() const | 935 InlineBox* RenderInline::culledInlineLastLineBox() const |
| 936 { | 936 { |
| 937 for (LayoutObject* curr = lastChild(); curr; curr = curr->previousSibling())
{ | 937 for (LayoutObject* curr = lastChild(); curr; curr = curr->previousSibling())
{ |
| 938 if (curr->isFloatingOrOutOfFlowPositioned()) | 938 if (curr->isFloatingOrOutOfFlowPositioned()) |
| 939 continue; | 939 continue; |
| 940 | 940 |
| 941 // We want to get the margin box in the inline direction, and then use o
ur font ascent/descent in the block | 941 // We want to get the margin box in the inline direction, and then use o
ur font ascent/descent in the block |
| 942 // direction (aligned to the root box's baseline). | 942 // direction (aligned to the root box's baseline). |
| 943 if (curr->isBox()) | 943 if (curr->isBox()) |
| 944 return toRenderBox(curr)->inlineBoxWrapper(); | 944 return toLayoutBox(curr)->inlineBoxWrapper(); |
| 945 if (curr->isRenderInline()) { | 945 if (curr->isRenderInline()) { |
| 946 RenderInline* currInline = toRenderInline(curr); | 946 RenderInline* currInline = toRenderInline(curr); |
| 947 InlineBox* result = currInline->lastLineBoxIncludingCulling(); | 947 InlineBox* result = currInline->lastLineBoxIncludingCulling(); |
| 948 if (result) | 948 if (result) |
| 949 return result; | 949 return result; |
| 950 } else if (curr->isText()) { | 950 } else if (curr->isText()) { |
| 951 RenderText* currText = toRenderText(curr); | 951 RenderText* currText = toRenderText(curr); |
| 952 if (currText->lastTextBox()) | 952 if (currText->lastTextBox()) |
| 953 return currText->lastTextBox(); | 953 return currText->lastTextBox(); |
| 954 } | 954 } |
| 955 } | 955 } |
| 956 return 0; | 956 return 0; |
| 957 } | 957 } |
| 958 | 958 |
| 959 LayoutRect RenderInline::culledInlineVisualOverflowBoundingBox() const | 959 LayoutRect RenderInline::culledInlineVisualOverflowBoundingBox() const |
| 960 { | 960 { |
| 961 FloatRect floatResult; | 961 FloatRect floatResult; |
| 962 LinesBoundingBoxGeneratorContext context(floatResult); | 962 LinesBoundingBoxGeneratorContext context(floatResult); |
| 963 generateCulledLineBoxRects(context, this); | 963 generateCulledLineBoxRects(context, this); |
| 964 LayoutRect result(enclosingLayoutRect(floatResult)); | 964 LayoutRect result(enclosingLayoutRect(floatResult)); |
| 965 bool isHorizontal = style()->isHorizontalWritingMode(); | 965 bool isHorizontal = style()->isHorizontalWritingMode(); |
| 966 for (LayoutObject* curr = firstChild(); curr; curr = curr->nextSibling()) { | 966 for (LayoutObject* curr = firstChild(); curr; curr = curr->nextSibling()) { |
| 967 if (curr->isFloatingOrOutOfFlowPositioned()) | 967 if (curr->isFloatingOrOutOfFlowPositioned()) |
| 968 continue; | 968 continue; |
| 969 | 969 |
| 970 // For overflow we just have to propagate by hand and recompute it all. | 970 // For overflow we just have to propagate by hand and recompute it all. |
| 971 if (curr->isBox()) { | 971 if (curr->isBox()) { |
| 972 RenderBox* currBox = toRenderBox(curr); | 972 LayoutBox* currBox = toLayoutBox(curr); |
| 973 if (!currBox->hasSelfPaintingLayer() && currBox->inlineBoxWrapper())
{ | 973 if (!currBox->hasSelfPaintingLayer() && currBox->inlineBoxWrapper())
{ |
| 974 LayoutRect logicalRect = currBox->logicalVisualOverflowRectForPr
opagation(styleRef()); | 974 LayoutRect logicalRect = currBox->logicalVisualOverflowRectForPr
opagation(styleRef()); |
| 975 if (isHorizontal) { | 975 if (isHorizontal) { |
| 976 logicalRect.moveBy(currBox->location()); | 976 logicalRect.moveBy(currBox->location()); |
| 977 result.uniteIfNonZero(logicalRect); | 977 result.uniteIfNonZero(logicalRect); |
| 978 } else { | 978 } else { |
| 979 logicalRect.moveBy(currBox->location()); | 979 logicalRect.moveBy(currBox->location()); |
| 980 result.uniteIfNonZero(logicalRect.transposedRect()); | 980 result.uniteIfNonZero(logicalRect.transposedRect()); |
| 981 } | 981 } |
| 982 } | 982 } |
| (...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1128 // is translated, but the render box isn't, so we need to do this to get
the | 1128 // is translated, but the render box isn't, so we need to do this to get
the |
| 1129 // right dirty rect. Since this is called from LayoutObject::setStyle, t
he relative position | 1129 // right dirty rect. Since this is called from LayoutObject::setStyle, t
he relative position |
| 1130 // flag on the LayoutObject has been cleared, so use the one on the styl
e(). | 1130 // flag on the LayoutObject has been cleared, so use the one on the styl
e(). |
| 1131 topLeft += layer()->offsetForInFlowPosition(); | 1131 topLeft += layer()->offsetForInFlowPosition(); |
| 1132 } | 1132 } |
| 1133 | 1133 |
| 1134 // FIXME: We ignore the lightweight clipping rect that controls use, since i
f |o| is in mid-layout, | 1134 // FIXME: We ignore the lightweight clipping rect that controls use, since i
f |o| is in mid-layout, |
| 1135 // its controlClipRect will be wrong. For overflow clip we use the values ca
ched by the layer. | 1135 // its controlClipRect will be wrong. For overflow clip we use the values ca
ched by the layer. |
| 1136 rect.setLocation(topLeft); | 1136 rect.setLocation(topLeft); |
| 1137 if (o->hasOverflowClip()) { | 1137 if (o->hasOverflowClip()) { |
| 1138 RenderBox* containerBox = toRenderBox(o); | 1138 LayoutBox* containerBox = toLayoutBox(o); |
| 1139 containerBox->applyCachedClipAndScrollOffsetForPaintInvalidation(rect); | 1139 containerBox->applyCachedClipAndScrollOffsetForPaintInvalidation(rect); |
| 1140 if (rect.isEmpty()) | 1140 if (rect.isEmpty()) |
| 1141 return; | 1141 return; |
| 1142 } | 1142 } |
| 1143 | 1143 |
| 1144 if (containerSkipped) { | 1144 if (containerSkipped) { |
| 1145 // If the paintInvalidationContainer is below o, then we need to map the
rect into paintInvalidationContainer's coordinates. | 1145 // If the paintInvalidationContainer is below o, then we need to map the
rect into paintInvalidationContainer's coordinates. |
| 1146 LayoutSize containerOffset = paintInvalidationContainer->offsetFromAnces
torContainer(o); | 1146 LayoutSize containerOffset = paintInvalidationContainer->offsetFromAnces
torContainer(o); |
| 1147 rect.move(-containerOffset); | 1147 rect.move(-containerOffset); |
| 1148 return; | 1148 return; |
| 1149 } | 1149 } |
| 1150 | 1150 |
| 1151 o->mapRectToPaintInvalidationBacking(paintInvalidationContainer, rect, paint
InvalidationState); | 1151 o->mapRectToPaintInvalidationBacking(paintInvalidationContainer, rect, paint
InvalidationState); |
| 1152 } | 1152 } |
| 1153 | 1153 |
| 1154 LayoutSize RenderInline::offsetFromContainer(const LayoutObject* container, cons
t LayoutPoint& point, bool* offsetDependsOnPoint) const | 1154 LayoutSize RenderInline::offsetFromContainer(const LayoutObject* container, cons
t LayoutPoint& point, bool* offsetDependsOnPoint) const |
| 1155 { | 1155 { |
| 1156 ASSERT(container == this->container()); | 1156 ASSERT(container == this->container()); |
| 1157 | 1157 |
| 1158 LayoutSize offset; | 1158 LayoutSize offset; |
| 1159 if (isRelPositioned()) | 1159 if (isRelPositioned()) |
| 1160 offset += offsetForInFlowPosition(); | 1160 offset += offsetForInFlowPosition(); |
| 1161 | 1161 |
| 1162 offset += container->columnOffset(point); | 1162 offset += container->columnOffset(point); |
| 1163 | 1163 |
| 1164 if (container->hasOverflowClip()) | 1164 if (container->hasOverflowClip()) |
| 1165 offset -= toRenderBox(container)->scrolledContentOffset(); | 1165 offset -= toLayoutBox(container)->scrolledContentOffset(); |
| 1166 | 1166 |
| 1167 if (offsetDependsOnPoint) { | 1167 if (offsetDependsOnPoint) { |
| 1168 *offsetDependsOnPoint = container->hasColumns() | 1168 *offsetDependsOnPoint = container->hasColumns() |
| 1169 || (container->isBox() && container->style()->isFlippedBlocksWriting
Mode()) | 1169 || (container->isBox() && container->style()->isFlippedBlocksWriting
Mode()) |
| 1170 || container->isLayoutFlowThread(); | 1170 || container->isLayoutFlowThread(); |
| 1171 } | 1171 } |
| 1172 | 1172 |
| 1173 return offset; | 1173 return offset; |
| 1174 } | 1174 } |
| 1175 | 1175 |
| (...skipping 11 matching lines...) Expand all Loading... |
| 1187 } | 1187 } |
| 1188 | 1188 |
| 1189 bool containerSkipped; | 1189 bool containerSkipped; |
| 1190 LayoutObject* o = container(paintInvalidationContainer, &containerSkipped); | 1190 LayoutObject* o = container(paintInvalidationContainer, &containerSkipped); |
| 1191 if (!o) | 1191 if (!o) |
| 1192 return; | 1192 return; |
| 1193 | 1193 |
| 1194 if (mode & ApplyContainerFlip && o->isBox()) { | 1194 if (mode & ApplyContainerFlip && o->isBox()) { |
| 1195 if (o->style()->isFlippedBlocksWritingMode()) { | 1195 if (o->style()->isFlippedBlocksWritingMode()) { |
| 1196 IntPoint centerPoint = roundedIntPoint(transformState.mappedPoint())
; | 1196 IntPoint centerPoint = roundedIntPoint(transformState.mappedPoint())
; |
| 1197 transformState.move(toRenderBox(o)->flipForWritingModeIncludingColum
ns(centerPoint) - centerPoint); | 1197 transformState.move(toLayoutBox(o)->flipForWritingModeIncludingColum
ns(centerPoint) - centerPoint); |
| 1198 } | 1198 } |
| 1199 mode &= ~ApplyContainerFlip; | 1199 mode &= ~ApplyContainerFlip; |
| 1200 } | 1200 } |
| 1201 | 1201 |
| 1202 LayoutSize containerOffset = offsetFromContainer(o, roundedLayoutPoint(trans
formState.mappedPoint())); | 1202 LayoutSize containerOffset = offsetFromContainer(o, roundedLayoutPoint(trans
formState.mappedPoint())); |
| 1203 | 1203 |
| 1204 bool preserve3D = mode & UseTransforms && (o->style()->preserves3D() || styl
e()->preserves3D()); | 1204 bool preserve3D = mode & UseTransforms && (o->style()->preserves3D() || styl
e()->preserves3D()); |
| 1205 if (mode & UseTransforms && shouldUseTransformFromContainer(o)) { | 1205 if (mode & UseTransforms && shouldUseTransformFromContainer(o)) { |
| 1206 TransformationMatrix t; | 1206 TransformationMatrix t; |
| 1207 getTransformFromContainer(o, containerOffset, t); | 1207 getTransformFromContainer(o, containerOffset, t); |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1245 | 1245 |
| 1246 Node* n = node(); | 1246 Node* n = node(); |
| 1247 LayoutPoint localPoint(point); | 1247 LayoutPoint localPoint(point); |
| 1248 if (n) { | 1248 if (n) { |
| 1249 if (isInlineElementContinuation()) { | 1249 if (isInlineElementContinuation()) { |
| 1250 // We're in the continuation of a split inline. Adjust our local po
int to be in the coordinate space | 1250 // We're in the continuation of a split inline. Adjust our local po
int to be in the coordinate space |
| 1251 // of the principal renderer's containing block. This will end up b
eing the innerNonSharedNode. | 1251 // of the principal renderer's containing block. This will end up b
eing the innerNonSharedNode. |
| 1252 RenderBlock* firstBlock = n->renderer()->containingBlock(); | 1252 RenderBlock* firstBlock = n->renderer()->containingBlock(); |
| 1253 | 1253 |
| 1254 // Get our containing block. | 1254 // Get our containing block. |
| 1255 RenderBox* block = containingBlock(); | 1255 LayoutBox* block = containingBlock(); |
| 1256 localPoint.moveBy(block->location() - firstBlock->locationOffset()); | 1256 localPoint.moveBy(block->location() - firstBlock->locationOffset()); |
| 1257 } | 1257 } |
| 1258 | 1258 |
| 1259 result.setInnerNode(n); | 1259 result.setInnerNode(n); |
| 1260 if (!result.innerNonSharedNode()) | 1260 if (!result.innerNonSharedNode()) |
| 1261 result.setInnerNonSharedNode(n); | 1261 result.setInnerNonSharedNode(n); |
| 1262 result.setLocalPoint(localPoint); | 1262 result.setLocalPoint(localPoint); |
| 1263 } | 1263 } |
| 1264 } | 1264 } |
| 1265 | 1265 |
| 1266 void RenderInline::dirtyLineBoxes(bool fullLayout) | 1266 void RenderInline::dirtyLineBoxes(bool fullLayout) |
| 1267 { | 1267 { |
| 1268 if (fullLayout) { | 1268 if (fullLayout) { |
| 1269 m_lineBoxes.deleteLineBoxes(); | 1269 m_lineBoxes.deleteLineBoxes(); |
| 1270 return; | 1270 return; |
| 1271 } | 1271 } |
| 1272 | 1272 |
| 1273 if (!alwaysCreateLineBoxes()) { | 1273 if (!alwaysCreateLineBoxes()) { |
| 1274 // We have to grovel into our children in order to dirty the appropriate
lines. | 1274 // We have to grovel into our children in order to dirty the appropriate
lines. |
| 1275 for (LayoutObject* curr = firstChild(); curr; curr = curr->nextSibling()
) { | 1275 for (LayoutObject* curr = firstChild(); curr; curr = curr->nextSibling()
) { |
| 1276 if (curr->isFloatingOrOutOfFlowPositioned()) | 1276 if (curr->isFloatingOrOutOfFlowPositioned()) |
| 1277 continue; | 1277 continue; |
| 1278 if (curr->isBox() && !curr->needsLayout()) { | 1278 if (curr->isBox() && !curr->needsLayout()) { |
| 1279 RenderBox* currBox = toRenderBox(curr); | 1279 LayoutBox* currBox = toLayoutBox(curr); |
| 1280 if (currBox->inlineBoxWrapper()) | 1280 if (currBox->inlineBoxWrapper()) |
| 1281 currBox->inlineBoxWrapper()->root().markDirty(); | 1281 currBox->inlineBoxWrapper()->root().markDirty(); |
| 1282 } else if (!curr->selfNeedsLayout()) { | 1282 } else if (!curr->selfNeedsLayout()) { |
| 1283 if (curr->isRenderInline()) { | 1283 if (curr->isRenderInline()) { |
| 1284 RenderInline* currInline = toRenderInline(curr); | 1284 RenderInline* currInline = toRenderInline(curr); |
| 1285 for (InlineFlowBox* childLine = currInline->firstLineBox();
childLine; childLine = childLine->nextLineBox()) | 1285 for (InlineFlowBox* childLine = currInline->firstLineBox();
childLine; childLine = childLine->nextLineBox()) |
| 1286 childLine->root().markDirty(); | 1286 childLine->root().markDirty(); |
| 1287 } else if (curr->isText()) { | 1287 } else if (curr->isText()) { |
| 1288 RenderText* currText = toRenderText(curr); | 1288 RenderText* currText = toRenderText(curr); |
| 1289 for (InlineTextBox* childText = currText->firstTextBox(); ch
ildText; childText = childText->nextTextBox()) | 1289 for (InlineTextBox* childText = currText->firstTextBox(); ch
ildText; childText = childText->nextTextBox()) |
| (...skipping 29 matching lines...) Expand all Loading... |
| 1319 return style()->computedLineHeight(); | 1319 return style()->computedLineHeight(); |
| 1320 } | 1320 } |
| 1321 | 1321 |
| 1322 int RenderInline::baselinePosition(FontBaseline baselineType, bool firstLine, Li
neDirectionMode direction, LinePositionMode linePositionMode) const | 1322 int RenderInline::baselinePosition(FontBaseline baselineType, bool firstLine, Li
neDirectionMode direction, LinePositionMode linePositionMode) const |
| 1323 { | 1323 { |
| 1324 ASSERT(linePositionMode == PositionOnContainingLine); | 1324 ASSERT(linePositionMode == PositionOnContainingLine); |
| 1325 const FontMetrics& fontMetrics = style(firstLine)->fontMetrics(); | 1325 const FontMetrics& fontMetrics = style(firstLine)->fontMetrics(); |
| 1326 return fontMetrics.ascent(baselineType) + (lineHeight(firstLine, direction,
linePositionMode) - fontMetrics.height()) / 2; | 1326 return fontMetrics.ascent(baselineType) + (lineHeight(firstLine, direction,
linePositionMode) - fontMetrics.height()) / 2; |
| 1327 } | 1327 } |
| 1328 | 1328 |
| 1329 LayoutSize RenderInline::offsetForInFlowPositionedInline(const RenderBox& child)
const | 1329 LayoutSize RenderInline::offsetForInFlowPositionedInline(const LayoutBox& child)
const |
| 1330 { | 1330 { |
| 1331 // FIXME: This function isn't right with mixed writing modes. | 1331 // FIXME: This function isn't right with mixed writing modes. |
| 1332 | 1332 |
| 1333 ASSERT(isRelPositioned()); | 1333 ASSERT(isRelPositioned()); |
| 1334 if (!isRelPositioned()) | 1334 if (!isRelPositioned()) |
| 1335 return LayoutSize(); | 1335 return LayoutSize(); |
| 1336 | 1336 |
| 1337 // When we have an enclosing relpositioned inline, we need to add in the off
set of the first line | 1337 // When we have an enclosing relpositioned inline, we need to add in the off
set of the first line |
| 1338 // box from the rest of the content, but only in the cases where we know we'
re positioned | 1338 // box from the rest of the content, but only in the cases where we know we'
re positioned |
| 1339 // relative to the inline itself. | 1339 // relative to the inline itself. |
| (...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1410 { | 1410 { |
| 1411 AbsoluteLayoutRectsIgnoringEmptyRectsGeneratorContext context(rects, additio
nalOffset); | 1411 AbsoluteLayoutRectsIgnoringEmptyRectsGeneratorContext context(rects, additio
nalOffset); |
| 1412 generateLineBoxRects(context); | 1412 generateLineBoxRects(context); |
| 1413 | 1413 |
| 1414 addChildFocusRingRects(rects, additionalOffset); | 1414 addChildFocusRingRects(rects, additionalOffset); |
| 1415 | 1415 |
| 1416 if (continuation()) { | 1416 if (continuation()) { |
| 1417 if (continuation()->isInline()) | 1417 if (continuation()->isInline()) |
| 1418 continuation()->addFocusRingRects(rects, additionalOffset + (continu
ation()->containingBlock()->location() - containingBlock()->location())); | 1418 continuation()->addFocusRingRects(rects, additionalOffset + (continu
ation()->containingBlock()->location() - containingBlock()->location())); |
| 1419 else | 1419 else |
| 1420 continuation()->addFocusRingRects(rects, additionalOffset + (toRende
rBox(continuation())->location() - containingBlock()->location())); | 1420 continuation()->addFocusRingRects(rects, additionalOffset + (toLayou
tBox(continuation())->location() - containingBlock()->location())); |
| 1421 } | 1421 } |
| 1422 } | 1422 } |
| 1423 | 1423 |
| 1424 void RenderInline::computeSelfHitTestRects(Vector<LayoutRect>& rects, const Layo
utPoint& layerOffset) const | 1424 void RenderInline::computeSelfHitTestRects(Vector<LayoutRect>& rects, const Layo
utPoint& layerOffset) const |
| 1425 { | 1425 { |
| 1426 AbsoluteLayoutRectsGeneratorContext context(rects, layerOffset); | 1426 AbsoluteLayoutRectsGeneratorContext context(rects, layerOffset); |
| 1427 generateLineBoxRects(context); | 1427 generateLineBoxRects(context); |
| 1428 } | 1428 } |
| 1429 | 1429 |
| 1430 void RenderInline::addAnnotatedRegions(Vector<AnnotatedRegionValue>& regions) | 1430 void RenderInline::addAnnotatedRegions(Vector<AnnotatedRegionValue>& regions) |
| (...skipping 21 matching lines...) Expand all Loading... |
| 1452 } | 1452 } |
| 1453 | 1453 |
| 1454 void RenderInline::invalidateDisplayItemClients(DisplayItemList* displayItemList
) const | 1454 void RenderInline::invalidateDisplayItemClients(DisplayItemList* displayItemList
) const |
| 1455 { | 1455 { |
| 1456 LayoutBoxModelObject::invalidateDisplayItemClients(displayItemList); | 1456 LayoutBoxModelObject::invalidateDisplayItemClients(displayItemList); |
| 1457 for (InlineFlowBox* box = firstLineBox(); box; box = box->nextLineBox()) | 1457 for (InlineFlowBox* box = firstLineBox(); box; box = box->nextLineBox()) |
| 1458 displayItemList->invalidate(box->displayItemClient()); | 1458 displayItemList->invalidate(box->displayItemClient()); |
| 1459 } | 1459 } |
| 1460 | 1460 |
| 1461 } // namespace blink | 1461 } // namespace blink |
| OLD | NEW |