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 242 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
253 dirtyLineBoxes(false); | 253 dirtyLineBoxes(false); |
254 setAlwaysCreateLineBoxes(); | 254 setAlwaysCreateLineBoxes(); |
255 } | 255 } |
256 } | 256 } |
257 | 257 |
258 LayoutRect LayoutInline::localCaretRect(InlineBox* inlineBox, int, LayoutUnit* e
xtraWidthToEndOfLine) | 258 LayoutRect LayoutInline::localCaretRect(InlineBox* inlineBox, int, LayoutUnit* e
xtraWidthToEndOfLine) |
259 { | 259 { |
260 if (firstChild()) { | 260 if (firstChild()) { |
261 // This condition is possible if the LayoutInline is at an editing bound
ary, | 261 // This condition is possible if the LayoutInline is at an editing bound
ary, |
262 // i.e. the VisiblePosition is: | 262 // i.e. the VisiblePosition is: |
263 // <LayoutInline editingBoundary=true>|<RenderText> </RenderText></Lay
outInline> | 263 // <LayoutInline editingBoundary=true>|<LayoutText> </LayoutText></Lay
outInline> |
264 // FIXME: need to figure out how to make this return a valid rect, note
that | 264 // FIXME: need to figure out how to make this return a valid rect, note
that |
265 // there are no line boxes created in the above case. | 265 // there are no line boxes created in the above case. |
266 return LayoutRect(); | 266 return LayoutRect(); |
267 } | 267 } |
268 | 268 |
269 ASSERT_UNUSED(inlineBox, !inlineBox); | 269 ASSERT_UNUSED(inlineBox, !inlineBox); |
270 | 270 |
271 if (extraWidthToEndOfLine) | 271 if (extraWidthToEndOfLine) |
272 *extraWidthToEndOfLine = 0; | 272 *extraWidthToEndOfLine = 0; |
273 | 273 |
(...skipping 338 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
612 logicalHeight)); | 612 logicalHeight)); |
613 } else { | 613 } else { |
614 yield(FloatRect(logicalTop, | 614 yield(FloatRect(logicalTop, |
615 childLine->y() - childLine->marginLogicalLeft(), | 615 childLine->y() - childLine->marginLogicalLeft(), |
616 logicalHeight, | 616 logicalHeight, |
617 childLine->logicalWidth() + childLine->marginLogical
Left() + childLine->marginLogicalRight())); | 617 childLine->logicalWidth() + childLine->marginLogical
Left() + childLine->marginLogicalRight())); |
618 } | 618 } |
619 } | 619 } |
620 } | 620 } |
621 } else if (curr->isText()) { | 621 } else if (curr->isText()) { |
622 RenderText* currText = toRenderText(curr); | 622 LayoutText* currText = toLayoutText(curr); |
623 for (InlineTextBox* childText = currText->firstTextBox(); childText;
childText = childText->nextTextBox()) { | 623 for (InlineTextBox* childText = currText->firstTextBox(); childText;
childText = childText->nextTextBox()) { |
624 RootInlineBox& rootBox = childText->root(); | 624 RootInlineBox& rootBox = childText->root(); |
625 int logicalTop = rootBox.logicalTop() + (rootBox.renderer().styl
e(rootBox.isFirstLineStyle())->font().fontMetrics().ascent() - container->style(
rootBox.isFirstLineStyle())->font().fontMetrics().ascent()); | 625 int logicalTop = rootBox.logicalTop() + (rootBox.renderer().styl
e(rootBox.isFirstLineStyle())->font().fontMetrics().ascent() - container->style(
rootBox.isFirstLineStyle())->font().fontMetrics().ascent()); |
626 int logicalHeight = container->style(rootBox.isFirstLineStyle())
->font().fontMetrics().height(); | 626 int logicalHeight = container->style(rootBox.isFirstLineStyle())
->font().fontMetrics().height(); |
627 if (isHorizontal) | 627 if (isHorizontal) |
628 yield(FloatRect(childText->x(), logicalTop, childText->logic
alWidth(), logicalHeight)); | 628 yield(FloatRect(childText->x(), logicalTop, childText->logic
alWidth(), logicalHeight)); |
629 else | 629 else |
630 yield(FloatRect(logicalTop, childText->y(), logicalHeight, c
hildText->logicalWidth())); | 630 yield(FloatRect(logicalTop, childText->y(), logicalHeight, c
hildText->logicalWidth())); |
631 } | 631 } |
632 } | 632 } |
(...skipping 286 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
919 // We want to get the margin box in the inline direction, and then use o
ur font ascent/descent in the block | 919 // We want to get the margin box in the inline direction, and then use o
ur font ascent/descent in the block |
920 // direction (aligned to the root box's baseline). | 920 // direction (aligned to the root box's baseline). |
921 if (curr->isBox()) | 921 if (curr->isBox()) |
922 return toLayoutBox(curr)->inlineBoxWrapper(); | 922 return toLayoutBox(curr)->inlineBoxWrapper(); |
923 if (curr->isLayoutInline()) { | 923 if (curr->isLayoutInline()) { |
924 LayoutInline* currInline = toLayoutInline(curr); | 924 LayoutInline* currInline = toLayoutInline(curr); |
925 InlineBox* result = currInline->firstLineBoxIncludingCulling(); | 925 InlineBox* result = currInline->firstLineBoxIncludingCulling(); |
926 if (result) | 926 if (result) |
927 return result; | 927 return result; |
928 } else if (curr->isText()) { | 928 } else if (curr->isText()) { |
929 RenderText* currText = toRenderText(curr); | 929 LayoutText* currText = toLayoutText(curr); |
930 if (currText->firstTextBox()) | 930 if (currText->firstTextBox()) |
931 return currText->firstTextBox(); | 931 return currText->firstTextBox(); |
932 } | 932 } |
933 } | 933 } |
934 return 0; | 934 return 0; |
935 } | 935 } |
936 | 936 |
937 InlineBox* LayoutInline::culledInlineLastLineBox() const | 937 InlineBox* LayoutInline::culledInlineLastLineBox() const |
938 { | 938 { |
939 for (LayoutObject* curr = lastChild(); curr; curr = curr->previousSibling())
{ | 939 for (LayoutObject* curr = lastChild(); curr; curr = curr->previousSibling())
{ |
940 if (curr->isFloatingOrOutOfFlowPositioned()) | 940 if (curr->isFloatingOrOutOfFlowPositioned()) |
941 continue; | 941 continue; |
942 | 942 |
943 // We want to get the margin box in the inline direction, and then use o
ur font ascent/descent in the block | 943 // We want to get the margin box in the inline direction, and then use o
ur font ascent/descent in the block |
944 // direction (aligned to the root box's baseline). | 944 // direction (aligned to the root box's baseline). |
945 if (curr->isBox()) | 945 if (curr->isBox()) |
946 return toLayoutBox(curr)->inlineBoxWrapper(); | 946 return toLayoutBox(curr)->inlineBoxWrapper(); |
947 if (curr->isLayoutInline()) { | 947 if (curr->isLayoutInline()) { |
948 LayoutInline* currInline = toLayoutInline(curr); | 948 LayoutInline* currInline = toLayoutInline(curr); |
949 InlineBox* result = currInline->lastLineBoxIncludingCulling(); | 949 InlineBox* result = currInline->lastLineBoxIncludingCulling(); |
950 if (result) | 950 if (result) |
951 return result; | 951 return result; |
952 } else if (curr->isText()) { | 952 } else if (curr->isText()) { |
953 RenderText* currText = toRenderText(curr); | 953 LayoutText* currText = toLayoutText(curr); |
954 if (currText->lastTextBox()) | 954 if (currText->lastTextBox()) |
955 return currText->lastTextBox(); | 955 return currText->lastTextBox(); |
956 } | 956 } |
957 } | 957 } |
958 return 0; | 958 return 0; |
959 } | 959 } |
960 | 960 |
961 LayoutRect LayoutInline::culledInlineVisualOverflowBoundingBox() const | 961 LayoutRect LayoutInline::culledInlineVisualOverflowBoundingBox() const |
962 { | 962 { |
963 FloatRect floatResult; | 963 FloatRect floatResult; |
(...skipping 21 matching lines...) Expand all Loading... |
985 } else if (curr->isLayoutInline()) { | 985 } else if (curr->isLayoutInline()) { |
986 // If the child doesn't need line boxes either, then we can recur. | 986 // If the child doesn't need line boxes either, then we can recur. |
987 LayoutInline* currInline = toLayoutInline(curr); | 987 LayoutInline* currInline = toLayoutInline(curr); |
988 if (!currInline->alwaysCreateLineBoxes()) | 988 if (!currInline->alwaysCreateLineBoxes()) |
989 result.uniteIfNonZero(currInline->culledInlineVisualOverflowBoun
dingBox()); | 989 result.uniteIfNonZero(currInline->culledInlineVisualOverflowBoun
dingBox()); |
990 else if (!currInline->hasSelfPaintingLayer()) | 990 else if (!currInline->hasSelfPaintingLayer()) |
991 result.uniteIfNonZero(currInline->linesVisualOverflowBoundingBox
()); | 991 result.uniteIfNonZero(currInline->linesVisualOverflowBoundingBox
()); |
992 } else if (curr->isText()) { | 992 } else if (curr->isText()) { |
993 // FIXME; Overflow from text boxes is lost. We will need to cache th
is information in | 993 // FIXME; Overflow from text boxes is lost. We will need to cache th
is information in |
994 // InlineTextBoxes. | 994 // InlineTextBoxes. |
995 RenderText* currText = toRenderText(curr); | 995 LayoutText* currText = toLayoutText(curr); |
996 result.uniteIfNonZero(currText->linesVisualOverflowBoundingBox()); | 996 result.uniteIfNonZero(currText->linesVisualOverflowBoundingBox()); |
997 } | 997 } |
998 } | 998 } |
999 return result; | 999 return result; |
1000 } | 1000 } |
1001 | 1001 |
1002 LayoutRect LayoutInline::linesVisualOverflowBoundingBox() const | 1002 LayoutRect LayoutInline::linesVisualOverflowBoundingBox() const |
1003 { | 1003 { |
1004 if (!alwaysCreateLineBoxes()) | 1004 if (!alwaysCreateLineBoxes()) |
1005 return culledInlineVisualOverflowBoundingBox(); | 1005 return culledInlineVisualOverflowBoundingBox(); |
(...skipping 275 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1281 if (curr->isBox() && !curr->needsLayout()) { | 1281 if (curr->isBox() && !curr->needsLayout()) { |
1282 LayoutBox* currBox = toLayoutBox(curr); | 1282 LayoutBox* currBox = toLayoutBox(curr); |
1283 if (currBox->inlineBoxWrapper()) | 1283 if (currBox->inlineBoxWrapper()) |
1284 currBox->inlineBoxWrapper()->root().markDirty(); | 1284 currBox->inlineBoxWrapper()->root().markDirty(); |
1285 } else if (!curr->selfNeedsLayout()) { | 1285 } else if (!curr->selfNeedsLayout()) { |
1286 if (curr->isLayoutInline()) { | 1286 if (curr->isLayoutInline()) { |
1287 LayoutInline* currInline = toLayoutInline(curr); | 1287 LayoutInline* currInline = toLayoutInline(curr); |
1288 for (InlineFlowBox* childLine = currInline->firstLineBox();
childLine; childLine = childLine->nextLineBox()) | 1288 for (InlineFlowBox* childLine = currInline->firstLineBox();
childLine; childLine = childLine->nextLineBox()) |
1289 childLine->root().markDirty(); | 1289 childLine->root().markDirty(); |
1290 } else if (curr->isText()) { | 1290 } else if (curr->isText()) { |
1291 RenderText* currText = toRenderText(curr); | 1291 LayoutText* currText = toLayoutText(curr); |
1292 for (InlineTextBox* childText = currText->firstTextBox(); ch
ildText; childText = childText->nextTextBox()) | 1292 for (InlineTextBox* childText = currText->firstTextBox(); ch
ildText; childText = childText->nextTextBox()) |
1293 childText->root().markDirty(); | 1293 childText->root().markDirty(); |
1294 } | 1294 } |
1295 } | 1295 } |
1296 } | 1296 } |
1297 } else { | 1297 } else { |
1298 m_lineBoxes.dirtyLineBoxes(); | 1298 m_lineBoxes.dirtyLineBoxes(); |
1299 } | 1299 } |
1300 } | 1300 } |
1301 | 1301 |
(...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1456 } | 1456 } |
1457 | 1457 |
1458 void LayoutInline::invalidateDisplayItemClients(DisplayItemList* displayItemList
) const | 1458 void LayoutInline::invalidateDisplayItemClients(DisplayItemList* displayItemList
) const |
1459 { | 1459 { |
1460 LayoutBoxModelObject::invalidateDisplayItemClients(displayItemList); | 1460 LayoutBoxModelObject::invalidateDisplayItemClients(displayItemList); |
1461 for (InlineFlowBox* box = firstLineBox(); box; box = box->nextLineBox()) | 1461 for (InlineFlowBox* box = firstLineBox(); box; box = box->nextLineBox()) |
1462 displayItemList->invalidate(box->displayItemClient()); | 1462 displayItemList->invalidate(box->displayItemClient()); |
1463 } | 1463 } |
1464 | 1464 |
1465 } // namespace blink | 1465 } // namespace blink |
OLD | NEW |