OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2003, 2006, 2008 Apple Inc. All rights reserved. | 2 * Copyright (C) 2003, 2006, 2008 Apple Inc. All rights reserved. |
3 * | 3 * |
4 * This library is free software; you can redistribute it and/or | 4 * This library is free software; you can redistribute it and/or |
5 * modify it under the terms of the GNU Library General Public | 5 * modify it under the terms of the GNU Library General Public |
6 * License as published by the Free Software Foundation; either | 6 * License as published by the Free Software Foundation; either |
7 * version 2 of the License, or (at your option) any later version. | 7 * version 2 of the License, or (at your option) any later version. |
8 * | 8 * |
9 * This library is distributed in the hope that it will be useful, | 9 * This library is distributed in the hope that it will be useful, |
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of | 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
(...skipping 13 matching lines...) Expand all Loading... |
24 #include "core/page/Chrome.h" | 24 #include "core/page/Chrome.h" |
25 #include "core/page/ChromeClient.h" | 25 #include "core/page/ChromeClient.h" |
26 #include "core/page/Frame.h" | 26 #include "core/page/Frame.h" |
27 #include "core/page/Page.h" | 27 #include "core/page/Page.h" |
28 #include "core/platform/graphics/GraphicsContext.h" | 28 #include "core/platform/graphics/GraphicsContext.h" |
29 #include "core/platform/text/BidiResolver.h" | 29 #include "core/platform/text/BidiResolver.h" |
30 #include "core/rendering/EllipsisBox.h" | 30 #include "core/rendering/EllipsisBox.h" |
31 #include "core/rendering/HitTestResult.h" | 31 #include "core/rendering/HitTestResult.h" |
32 #include "core/rendering/InlineTextBox.h" | 32 #include "core/rendering/InlineTextBox.h" |
33 #include "core/rendering/PaintInfo.h" | 33 #include "core/rendering/PaintInfo.h" |
34 #include "core/rendering/RenderArena.h" | |
35 #include "core/rendering/RenderBlock.h" | 34 #include "core/rendering/RenderBlock.h" |
36 #include "core/rendering/RenderFlowThread.h" | 35 #include "core/rendering/RenderFlowThread.h" |
37 #include "core/rendering/RenderView.h" | 36 #include "core/rendering/RenderView.h" |
38 #include "core/rendering/VerticalPositionCache.h" | 37 #include "core/rendering/VerticalPositionCache.h" |
39 #include "wtf/unicode/Unicode.h" | 38 #include "wtf/unicode/Unicode.h" |
40 | 39 |
41 using namespace std; | 40 using namespace std; |
42 | 41 |
43 namespace WebCore { | 42 namespace WebCore { |
44 | 43 |
(...skipping 13 matching lines...) Expand all Loading... |
58 , m_lineBreakObj(0) | 57 , m_lineBreakObj(0) |
59 , m_lineTop(0) | 58 , m_lineTop(0) |
60 , m_lineBottom(0) | 59 , m_lineBottom(0) |
61 , m_lineTopWithLeading(0) | 60 , m_lineTopWithLeading(0) |
62 , m_lineBottomWithLeading(0) | 61 , m_lineBottomWithLeading(0) |
63 { | 62 { |
64 setIsHorizontal(block->isHorizontalWritingMode()); | 63 setIsHorizontal(block->isHorizontalWritingMode()); |
65 } | 64 } |
66 | 65 |
67 | 66 |
68 void RootInlineBox::destroy(RenderArena* arena) | 67 void RootInlineBox::destroy() |
69 { | 68 { |
70 detachEllipsisBox(arena); | 69 detachEllipsisBox(); |
71 InlineFlowBox::destroy(arena); | 70 InlineFlowBox::destroy(); |
72 } | 71 } |
73 | 72 |
74 void RootInlineBox::detachEllipsisBox(RenderArena* arena) | 73 void RootInlineBox::detachEllipsisBox() |
75 { | 74 { |
76 if (hasEllipsisBox()) { | 75 if (hasEllipsisBox()) { |
77 EllipsisBox* box = gEllipsisBoxMap->take(this); | 76 EllipsisBox* box = gEllipsisBoxMap->take(this); |
78 box->setParent(0); | 77 box->setParent(0); |
79 box->destroy(arena); | 78 box->destroy(); |
80 setHasEllipsisBox(false); | 79 setHasEllipsisBox(false); |
81 } | 80 } |
82 } | 81 } |
83 | 82 |
84 RenderLineBoxList* RootInlineBox::rendererLineBoxes() const | 83 RenderLineBoxList* RootInlineBox::rendererLineBoxes() const |
85 { | 84 { |
86 return block()->lineBoxes(); | 85 return block()->lineBoxes(); |
87 } | 86 } |
88 | 87 |
89 void RootInlineBox::clearTruncation() | 88 void RootInlineBox::clearTruncation() |
90 { | 89 { |
91 if (hasEllipsisBox()) { | 90 if (hasEllipsisBox()) { |
92 detachEllipsisBox(renderer()->renderArena()); | 91 detachEllipsisBox(); |
93 InlineFlowBox::clearTruncation(); | 92 InlineFlowBox::clearTruncation(); |
94 } | 93 } |
95 } | 94 } |
96 | 95 |
97 bool RootInlineBox::isHyphenated() const | 96 bool RootInlineBox::isHyphenated() const |
98 { | 97 { |
99 for (InlineBox* box = firstLeafChild(); box; box = box->nextLeafChild()) { | 98 for (InlineBox* box = firstLeafChild(); box; box = box->nextLeafChild()) { |
100 if (box->isInlineTextBox()) { | 99 if (box->isInlineTextBox()) { |
101 if (toInlineTextBox(box)->hasHyphen()) | 100 if (toInlineTextBox(box)->hasHyphen()) |
102 return true; | 101 return true; |
(...skipping 22 matching lines...) Expand all Loading... |
125 | 124 |
126 // Next iterate over all the line boxes on the line. If we find a replaced
element that intersects | 125 // Next iterate over all the line boxes on the line. If we find a replaced
element that intersects |
127 // then we refuse to accommodate the ellipsis. Otherwise we're ok. | 126 // then we refuse to accommodate the ellipsis. Otherwise we're ok. |
128 return InlineFlowBox::canAccommodateEllipsis(ltr, blockEdge, ellipsisWidth); | 127 return InlineFlowBox::canAccommodateEllipsis(ltr, blockEdge, ellipsisWidth); |
129 } | 128 } |
130 | 129 |
131 float RootInlineBox::placeEllipsis(const AtomicString& ellipsisStr, bool ltr, f
loat blockLeftEdge, float blockRightEdge, float ellipsisWidth, | 130 float RootInlineBox::placeEllipsis(const AtomicString& ellipsisStr, bool ltr, f
loat blockLeftEdge, float blockRightEdge, float ellipsisWidth, |
132 InlineBox* markupBox) | 131 InlineBox* markupBox) |
133 { | 132 { |
134 // Create an ellipsis box. | 133 // Create an ellipsis box. |
135 EllipsisBox* ellipsisBox = new (renderer()->renderArena()) EllipsisBox(rende
rer(), ellipsisStr, this, | 134 EllipsisBox* ellipsisBox = new EllipsisBox(renderer(), ellipsisStr, this, |
136 ellipsisWidth - (m
arkupBox ? markupBox->logicalWidth() : 0), logicalHeight(), | 135 ellipsisWidth - (markupBox ? markupBox->logicalWidth() : 0), logicalHeig
ht(), |
137 y(), !prevRootBox(
), isHorizontal(), markupBox); | 136 y(), !prevRootBox(), isHorizontal(), markupBox); |
138 | 137 |
139 if (!gEllipsisBoxMap) | 138 if (!gEllipsisBoxMap) |
140 gEllipsisBoxMap = new EllipsisBoxMap(); | 139 gEllipsisBoxMap = new EllipsisBoxMap(); |
141 gEllipsisBoxMap->add(this, ellipsisBox); | 140 gEllipsisBoxMap->add(this, ellipsisBox); |
142 setHasEllipsisBox(true); | 141 setHasEllipsisBox(true); |
143 | 142 |
144 // FIXME: Do we need an RTL version of this? | 143 // FIXME: Do we need an RTL version of this? |
145 if (ltr && (x() + logicalWidth() + ellipsisWidth) <= blockRightEdge) { | 144 if (ltr && (x() + logicalWidth() + ellipsisWidth) <= blockRightEdge) { |
146 ellipsisBox->setX(x() + logicalWidth()); | 145 ellipsisBox->setX(x() + logicalWidth()); |
147 return logicalWidth() + ellipsisWidth; | 146 return logicalWidth() + ellipsisWidth; |
(...skipping 842 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
990 } | 989 } |
991 | 990 |
992 #ifndef NDEBUG | 991 #ifndef NDEBUG |
993 const char* RootInlineBox::boxName() const | 992 const char* RootInlineBox::boxName() const |
994 { | 993 { |
995 return "RootInlineBox"; | 994 return "RootInlineBox"; |
996 } | 995 } |
997 #endif | 996 #endif |
998 | 997 |
999 } // namespace WebCore | 998 } // namespace WebCore |
OLD | NEW |