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 846 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
857 void operator()(const LayoutRect& rect) | 857 void operator()(const LayoutRect& rect) |
858 { | 858 { |
859 operator()(FloatRect(rect)); | 859 operator()(FloatRect(rect)); |
860 } | 860 } |
861 private: | 861 private: |
862 FloatRect& m_rect; | 862 FloatRect& m_rect; |
863 }; | 863 }; |
864 | 864 |
865 } // unnamed namespace | 865 } // unnamed namespace |
866 | 866 |
867 IntRect LayoutInline::linesBoundingBox() const | 867 LayoutRect LayoutInline::linesBoundingBox() const |
868 { | 868 { |
869 if (!alwaysCreateLineBoxes()) { | 869 if (!alwaysCreateLineBoxes()) { |
870 ASSERT(!firstLineBox()); | 870 ASSERT(!firstLineBox()); |
871 FloatRect floatResult; | 871 FloatRect floatResult; |
872 LinesBoundingBoxGeneratorContext context(floatResult); | 872 LinesBoundingBoxGeneratorContext context(floatResult); |
873 generateCulledLineBoxRects(context, this); | 873 generateCulledLineBoxRects(context, this); |
874 return enclosingIntRect(floatResult); | 874 return enclosingLayoutRect(floatResult); |
875 } | 875 } |
876 | 876 |
877 IntRect result; | 877 LayoutRect result; |
878 | 878 |
879 // See <rdar://problem/5289721>, for an unknown reason the linked list here
is sometimes inconsistent, first is non-zero and last is zero. We have been | 879 // See <rdar://problem/5289721>, for an unknown reason the linked list here
is sometimes inconsistent, first is non-zero and last is zero. We have been |
880 // unable to reproduce this at all (and consequently unable to figure ot why
this is happening). The assert will hopefully catch the problem in debug | 880 // unable to reproduce this at all (and consequently unable to figure ot why
this is happening). The assert will hopefully catch the problem in debug |
881 // builds and help us someday figure out why. We also put in a redundant ch
eck of lastLineBox() to avoid the crash for now. | 881 // builds and help us someday figure out why. We also put in a redundant ch
eck of lastLineBox() to avoid the crash for now. |
882 ASSERT(!firstLineBox() == !lastLineBox()); // Either both are null or both e
xist. | 882 ASSERT(!firstLineBox() == !lastLineBox()); // Either both are null or both e
xist. |
883 if (firstLineBox() && lastLineBox()) { | 883 if (firstLineBox() && lastLineBox()) { |
884 // Return the width of the minimal left side and the maximal right side. | 884 // Return the width of the minimal left side and the maximal right side. |
885 LayoutUnit logicalLeftSide; | 885 LayoutUnit logicalLeftSide; |
886 LayoutUnit logicalRightSide; | 886 LayoutUnit logicalRightSide; |
887 for (InlineFlowBox* curr = firstLineBox(); curr; curr = curr->nextLineBo
x()) { | 887 for (InlineFlowBox* curr = firstLineBox(); curr; curr = curr->nextLineBo
x()) { |
888 if (curr == firstLineBox() || curr->logicalLeft() < logicalLeftSide) | 888 if (curr == firstLineBox() || curr->logicalLeft() < logicalLeftSide) |
889 logicalLeftSide = curr->logicalLeft(); | 889 logicalLeftSide = curr->logicalLeft(); |
890 if (curr == firstLineBox() || curr->logicalRight() > logicalRightSid
e) | 890 if (curr == firstLineBox() || curr->logicalRight() > logicalRightSid
e) |
891 logicalRightSide = curr->logicalRight(); | 891 logicalRightSide = curr->logicalRight(); |
892 } | 892 } |
893 | 893 |
894 bool isHorizontal = style()->isHorizontalWritingMode(); | 894 bool isHorizontal = style()->isHorizontalWritingMode(); |
895 | 895 |
896 LayoutUnit x = isHorizontal ? logicalLeftSide : firstLineBox()->x(); | 896 LayoutUnit x = isHorizontal ? logicalLeftSide : firstLineBox()->x(); |
897 LayoutUnit y = isHorizontal ? firstLineBox()->y() : logicalLeftSide; | 897 LayoutUnit y = isHorizontal ? firstLineBox()->y() : logicalLeftSide; |
898 LayoutUnit width = isHorizontal ? logicalRightSide - logicalLeftSide : l
astLineBox()->logicalBottom() - x; | 898 LayoutUnit width = isHorizontal ? logicalRightSide - logicalLeftSide : l
astLineBox()->logicalBottom() - x; |
899 LayoutUnit height = isHorizontal ? lastLineBox()->logicalBottom() - y :
logicalRightSide - logicalLeftSide; | 899 LayoutUnit height = isHorizontal ? lastLineBox()->logicalBottom() - y :
logicalRightSide - logicalLeftSide; |
900 result = enclosingIntRect(LayoutRect(x, y, width, height)); | 900 result = LayoutRect(x, y, width, height); |
901 } | 901 } |
902 | 902 |
903 return result; | 903 return result; |
904 } | 904 } |
905 | 905 |
906 InlineBox* LayoutInline::culledInlineFirstLineBox() const | 906 InlineBox* LayoutInline::culledInlineFirstLineBox() const |
907 { | 907 { |
908 for (LayoutObject* curr = firstChild(); curr; curr = curr->nextSibling()) { | 908 for (LayoutObject* curr = firstChild(); curr; curr = curr->nextSibling()) { |
909 if (curr->isFloatingOrOutOfFlowPositioned()) | 909 if (curr->isFloatingOrOutOfFlowPositioned()) |
910 continue; | 910 continue; |
(...skipping 455 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1366 | 1366 |
1367 void LayoutInline::invalidateDisplayItemClients(const LayoutBoxModelObject& pain
tInvalidationContainer, PaintInvalidationReason invalidationReason) const | 1367 void LayoutInline::invalidateDisplayItemClients(const LayoutBoxModelObject& pain
tInvalidationContainer, PaintInvalidationReason invalidationReason) const |
1368 { | 1368 { |
1369 LayoutBoxModelObject::invalidateDisplayItemClients(paintInvalidationContaine
r, invalidationReason); | 1369 LayoutBoxModelObject::invalidateDisplayItemClients(paintInvalidationContaine
r, invalidationReason); |
1370 | 1370 |
1371 for (InlineFlowBox* box = firstLineBox(); box; box = box->nextLineBox()) | 1371 for (InlineFlowBox* box = firstLineBox(); box; box = box->nextLineBox()) |
1372 paintInvalidationContainer.invalidateDisplayItemClientOnBacking(*box, in
validationReason); | 1372 paintInvalidationContainer.invalidateDisplayItemClientOnBacking(*box, in
validationReason); |
1373 } | 1373 } |
1374 | 1374 |
1375 } // namespace blink | 1375 } // namespace blink |
OLD | NEW |