OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2003, 2004, 2005, 2006, 2007 Apple Inc. All rights reserved. | 2 * Copyright (C) 2003, 2004, 2005, 2006, 2007 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 18 matching lines...) Expand all Loading... |
29 class HitTestResult; | 29 class HitTestResult; |
30 class RenderLineBoxList; | 30 class RenderLineBoxList; |
31 | 31 |
32 class InlineFlowBox : public InlineRunBox { | 32 class InlineFlowBox : public InlineRunBox { |
33 public: | 33 public: |
34 InlineFlowBox(RenderObject* obj) | 34 InlineFlowBox(RenderObject* obj) |
35 : InlineRunBox(obj) | 35 : InlineRunBox(obj) |
36 , m_firstChild(0) | 36 , m_firstChild(0) |
37 , m_lastChild(0) | 37 , m_lastChild(0) |
38 , m_maxHorizontalVisualOverflow(0) | 38 , m_maxHorizontalVisualOverflow(0) |
| 39 , m_includeLeftEdge(false) |
| 40 , m_includeRightEdge(false) |
| 41 , m_hasTextChildren(true) |
39 #ifndef NDEBUG | 42 #ifndef NDEBUG |
40 , m_hasBadChildList(false) | 43 , m_hasBadChildList(false) |
41 #endif | 44 #endif |
42 { | 45 { |
43 // Internet Explorer and Firefox always create a marker for list items,
even when the list-style-type is none. We do not make a marker | 46 // Internet Explorer and Firefox always create a marker for list items,
even when the list-style-type is none. We do not make a marker |
44 // in the list-style-type: none case, since it is wasteful to do so. Ho
wever, in order to match other browsers we have to pretend like | 47 // in the list-style-type: none case, since it is wasteful to do so. Ho
wever, in order to match other browsers we have to pretend like |
45 // an invisible marker exists. The side effect of having an invisible m
arker is that the quirks mode behavior of shrinking lines with no | 48 // an invisible marker exists. The side effect of having an invisible m
arker is that the quirks mode behavior of shrinking lines with no |
46 // text children must not apply. This change also means that gaps will
exist between image bullet list items. Even when the list bullet | 49 // text children must not apply. This change also means that gaps will
exist between image bullet list items. Even when the list bullet |
47 // is an image, the line is still considered to be immune from the quirk
. | 50 // is an image, the line is still considered to be immune from the quirk
. |
48 m_hasTextChildren = obj->style()->display() == LIST_ITEM; | 51 m_hasTextChildren = obj->style()->display() == LIST_ITEM; |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
94 virtual void paintTextDecorations(RenderObject::PaintInfo&, int tx, int ty,
bool paintedChildren = false); | 97 virtual void paintTextDecorations(RenderObject::PaintInfo&, int tx, int ty,
bool paintedChildren = false); |
95 virtual void paint(RenderObject::PaintInfo&, int tx, int ty); | 98 virtual void paint(RenderObject::PaintInfo&, int tx, int ty); |
96 virtual bool nodeAtPoint(const HitTestRequest&, HitTestResult&, int x, int y
, int tx, int ty); | 99 virtual bool nodeAtPoint(const HitTestRequest&, HitTestResult&, int x, int y
, int tx, int ty); |
97 | 100 |
98 virtual RenderLineBoxList* rendererLineBoxes() const; | 101 virtual RenderLineBoxList* rendererLineBoxes() const; |
99 | 102 |
100 int marginBorderPaddingLeft(); | 103 int marginBorderPaddingLeft(); |
101 int marginBorderPaddingRight(); | 104 int marginBorderPaddingRight(); |
102 int marginLeft(); | 105 int marginLeft(); |
103 int marginRight(); | 106 int marginRight(); |
104 int borderLeft() { if (includeLeftEdge()) return renderBox()->borderLeft();
return 0; } | 107 int borderLeft() { if (includeLeftEdge()) return object()->style()->borderLe
ftWidth(); return 0; } |
105 int borderRight() { if (includeRightEdge()) return renderBox()->borderRight(
); return 0; } | 108 int borderRight() { if (includeRightEdge()) return object()->style()->border
RightWidth(); return 0; } |
106 int paddingLeft() { if (includeLeftEdge()) return renderBox()->paddingLeft()
; return 0; } | 109 int paddingLeft() { if (includeLeftEdge()) return boxModelObject()->paddingL
eft(); return 0; } |
107 int paddingRight() { if (includeRightEdge()) return renderBox()->paddingRigh
t(); return 0; } | 110 int paddingRight() { if (includeRightEdge()) return boxModelObject()->paddin
gRight(); return 0; } |
108 | 111 |
109 bool includeLeftEdge() { return m_includeLeftEdge; } | 112 bool includeLeftEdge() { return m_includeLeftEdge; } |
110 bool includeRightEdge() { return m_includeRightEdge; } | 113 bool includeRightEdge() { return m_includeRightEdge; } |
111 void setEdges(bool includeLeft, bool includeRight) | 114 void setEdges(bool includeLeft, bool includeRight) |
112 { | 115 { |
113 m_includeLeftEdge = includeLeft; | 116 m_includeLeftEdge = includeLeft; |
114 m_includeRightEdge = includeRight; | 117 m_includeRightEdge = includeRight; |
115 } | 118 } |
116 | 119 |
117 // Helper functions used during line construction and placement. | 120 // Helper functions used during line construction and placement. |
118 void determineSpacingForFlowBoxes(bool lastLine, RenderObject* endObject); | 121 void determineSpacingForFlowBoxes(bool lastLine, RenderObject* endObject); |
119 int getFlowSpacingWidth(); | 122 int getFlowSpacingWidth(); |
120 bool onEndChain(RenderObject* endObject); | 123 bool onEndChain(RenderObject* endObject); |
121 virtual int placeBoxesHorizontally(int x, int& leftPosition, int& rightPosit
ion, bool& needsWordSpacing); | 124 virtual int placeBoxesHorizontally(int x, int& leftPosition, int& rightPosit
ion, bool& needsWordSpacing); |
122 virtual int verticallyAlignBoxes(int heightOfBlock); | 125 virtual int verticallyAlignBoxes(int heightOfBlock); |
123 void computeLogicalBoxHeights(int& maxPositionTop, int& maxPositionBottom, | 126 void computeLogicalBoxHeights(int& maxPositionTop, int& maxPositionBottom, |
124 int& maxAscent, int& maxDescent, bool strictMo
de); | 127 int& maxAscent, int& maxDescent, bool strictMo
de); |
125 void adjustMaxAscentAndDescent(int& maxAscent, int& maxDescent, | 128 void adjustMaxAscentAndDescent(int& maxAscent, int& maxDescent, |
126 int maxPositionTop, int maxPositionBottom); | 129 int maxPositionTop, int maxPositionBottom); |
127 void placeBoxesVertically(int y, int maxHeight, int maxAscent, bool strictMo
de, | 130 void placeBoxesVertically(int y, int maxHeight, int maxAscent, bool strictMo
de, |
128 int& topPosition, int& bottomPosition, int& select
ionTop, int& selectionBottom); | 131 int& topPosition, int& bottomPosition, int& select
ionTop, int& selectionBottom); |
129 void shrinkBoxesWithNoTextChildren(int topPosition, int bottomPosition); | 132 void shrinkBoxesWithNoTextChildren(int topPosition, int bottomPosition); |
130 | 133 |
131 virtual void setVerticalOverflowPositions(int /*top*/, int /*bottom*/) { } | 134 virtual void setVerticalOverflowPositions(int /*top*/, int /*bottom*/) { } |
132 virtual void setVerticalSelectionPositions(int /*top*/, int /*bottom*/) { } | 135 virtual void setVerticalSelectionPositions(int /*top*/, int /*bottom*/) { } |
133 int maxHorizontalVisualOverflow() const { return m_maxHorizontalVisualOverfl
ow; } | 136 short maxHorizontalVisualOverflow() const { return m_maxHorizontalVisualOver
flow; } |
134 | 137 |
135 void removeChild(InlineBox* child); | 138 void removeChild(InlineBox* child); |
136 | 139 |
137 virtual RenderObject::SelectionState selectionState(); | 140 virtual RenderObject::SelectionState selectionState(); |
138 | 141 |
139 virtual bool canAccommodateEllipsis(bool ltr, int blockEdge, int ellipsisWid
th); | 142 virtual bool canAccommodateEllipsis(bool ltr, int blockEdge, int ellipsisWid
th); |
140 virtual int placeEllipsisBox(bool ltr, int blockEdge, int ellipsisWidth, boo
l&); | 143 virtual int placeEllipsisBox(bool ltr, int blockEdge, int ellipsisWidth, boo
l&); |
141 | 144 |
| 145 bool hasTextChildren() const { return m_hasTextChildren; } |
| 146 |
142 void checkConsistency() const; | 147 void checkConsistency() const; |
143 void setHasBadChildList(); | 148 void setHasBadChildList(); |
144 | 149 |
145 private: | 150 private: |
146 InlineBox* m_firstChild; | 151 InlineBox* m_firstChild; |
147 InlineBox* m_lastChild; | 152 InlineBox* m_lastChild; |
148 int m_maxHorizontalVisualOverflow; | 153 short m_maxHorizontalVisualOverflow; |
| 154 |
| 155 bool m_includeLeftEdge : 1; |
| 156 bool m_includeRightEdge : 1; |
| 157 bool m_hasTextChildren : 1; |
149 | 158 |
150 #ifndef NDEBUG | 159 #ifndef NDEBUG |
151 bool m_hasBadChildList; | 160 bool m_hasBadChildList; |
152 #endif | 161 #endif |
153 }; | 162 }; |
154 | 163 |
155 #ifdef NDEBUG | 164 #ifdef NDEBUG |
156 inline void InlineFlowBox::checkConsistency() const | 165 inline void InlineFlowBox::checkConsistency() const |
157 { | 166 { |
158 } | 167 } |
159 #endif | 168 #endif |
160 | 169 |
161 inline void InlineFlowBox::setHasBadChildList() | 170 inline void InlineFlowBox::setHasBadChildList() |
162 { | 171 { |
163 #ifndef NDEBUG | 172 #ifndef NDEBUG |
164 m_hasBadChildList = true; | 173 m_hasBadChildList = true; |
165 #endif | 174 #endif |
166 } | 175 } |
167 | 176 |
168 } // namespace WebCore | 177 } // namespace WebCore |
169 | 178 |
170 #ifndef NDEBUG | 179 #ifndef NDEBUG |
171 // Outside the WebCore namespace for ease of invocation from gdb. | 180 // Outside the WebCore namespace for ease of invocation from gdb. |
172 void showTree(const WebCore::InlineFlowBox*); | 181 void showTree(const WebCore::InlineFlowBox*); |
173 #endif | 182 #endif |
174 | 183 |
175 #endif // InlineFlowBox_h | 184 #endif // InlineFlowBox_h |
OLD | NEW |