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 |
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | 11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
12 * Library General Public License for more details. | 12 * Library General Public License for more details. |
13 * | 13 * |
14 * You should have received a copy of the GNU Library General Public License | 14 * You should have received a copy of the GNU Library General Public License |
15 * along with this library; see the file COPYING.LIB. If not, write to | 15 * along with this library; see the file COPYING.LIB. If not, write to |
16 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, | 16 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, |
17 * Boston, MA 02110-1301, USA. | 17 * Boston, MA 02110-1301, USA. |
18 * | 18 * |
19 */ | 19 */ |
20 | 20 |
21 #ifndef InlineFlowBox_h | 21 #ifndef InlineFlowBox_h |
22 #define InlineFlowBox_h | 22 #define InlineFlowBox_h |
23 | 23 |
| 24 #include "core/layout/LayoutObjectInlines.h" |
24 #include "core/layout/line/FloatToLayoutUnit.h" | 25 #include "core/layout/line/FloatToLayoutUnit.h" |
25 #include "core/layout/line/InlineBox.h" | 26 #include "core/layout/line/InlineBox.h" |
26 #include "core/rendering/RenderObjectInlines.h" | |
27 #include "core/rendering/RenderOverflow.h" | 27 #include "core/rendering/RenderOverflow.h" |
28 #include "core/rendering/style/ShadowData.h" | 28 #include "core/rendering/style/ShadowData.h" |
29 | 29 |
30 namespace blink { | 30 namespace blink { |
31 | 31 |
32 class HitTestRequest; | 32 class HitTestRequest; |
33 class HitTestResult; | 33 class HitTestResult; |
34 class InlineTextBox; | 34 class InlineTextBox; |
35 class RenderLineBoxList; | 35 class RenderLineBoxList; |
36 class SimpleFontData; | 36 class SimpleFontData; |
37 class VerticalPositionCache; | 37 class VerticalPositionCache; |
38 | 38 |
39 struct GlyphOverflow; | 39 struct GlyphOverflow; |
40 | 40 |
41 typedef HashMap<const InlineTextBox*, pair<Vector<const SimpleFontData*>, GlyphO
verflow>> GlyphOverflowAndFallbackFontsMap; | 41 typedef HashMap<const InlineTextBox*, pair<Vector<const SimpleFontData*>, GlyphO
verflow>> GlyphOverflowAndFallbackFontsMap; |
42 | 42 |
43 class InlineFlowBox : public InlineBox { | 43 class InlineFlowBox : public InlineBox { |
44 public: | 44 public: |
45 InlineFlowBox(RenderObject& obj) | 45 InlineFlowBox(LayoutObject& obj) |
46 : InlineBox(obj) | 46 : InlineBox(obj) |
47 , m_firstChild(0) | 47 , m_firstChild(0) |
48 , m_lastChild(0) | 48 , m_lastChild(0) |
49 , m_prevLineBox(0) | 49 , m_prevLineBox(0) |
50 , m_nextLineBox(0) | 50 , m_nextLineBox(0) |
51 , m_includeLogicalLeftEdge(false) | 51 , m_includeLogicalLeftEdge(false) |
52 , m_includeLogicalRightEdge(false) | 52 , m_includeLogicalRightEdge(false) |
53 , m_descendantsHaveSameLineHeightAndBaseline(true) | 53 , m_descendantsHaveSameLineHeightAndBaseline(true) |
54 , m_baselineType(AlphabeticBaseline) | 54 , m_baselineType(AlphabeticBaseline) |
55 , m_hasAnnotationsBefore(false) | 55 , m_hasAnnotationsBefore(false) |
(...skipping 13 matching lines...) Expand all Loading... |
69 // is an image, the line is still considered to be immune from the quirk
. | 69 // is an image, the line is still considered to be immune from the quirk
. |
70 m_hasTextChildren = obj.style()->display() == LIST_ITEM; | 70 m_hasTextChildren = obj.style()->display() == LIST_ITEM; |
71 m_hasTextDescendants = m_hasTextChildren; | 71 m_hasTextDescendants = m_hasTextChildren; |
72 } | 72 } |
73 | 73 |
74 #if ENABLE(ASSERT) | 74 #if ENABLE(ASSERT) |
75 virtual ~InlineFlowBox(); | 75 virtual ~InlineFlowBox(); |
76 #endif | 76 #endif |
77 | 77 |
78 #ifndef NDEBUG | 78 #ifndef NDEBUG |
79 virtual void showLineTreeAndMark(const InlineBox* = 0, const char* = 0, cons
t InlineBox* = 0, const char* = 0, const RenderObject* = 0, int = 0) const overr
ide; | 79 virtual void showLineTreeAndMark(const InlineBox* = 0, const char* = 0, cons
t InlineBox* = 0, const char* = 0, const LayoutObject* = 0, int = 0) const overr
ide; |
80 virtual const char* boxName() const override; | 80 virtual const char* boxName() const override; |
81 #endif | 81 #endif |
82 | 82 |
83 InlineFlowBox* prevLineBox() const { return m_prevLineBox; } | 83 InlineFlowBox* prevLineBox() const { return m_prevLineBox; } |
84 InlineFlowBox* nextLineBox() const { return m_nextLineBox; } | 84 InlineFlowBox* nextLineBox() const { return m_nextLineBox; } |
85 void setNextLineBox(InlineFlowBox* n) { m_nextLineBox = n; } | 85 void setNextLineBox(InlineFlowBox* n) { m_nextLineBox = n; } |
86 void setPreviousLineBox(InlineFlowBox* p) { m_prevLineBox = p; } | 86 void setPreviousLineBox(InlineFlowBox* p) { m_prevLineBox = p; } |
87 | 87 |
88 InlineBox* firstChild() const { checkConsistency(); return m_firstChild; } | 88 InlineBox* firstChild() const { checkConsistency(); return m_firstChild; } |
89 InlineBox* lastChild() const { checkConsistency(); return m_lastChild; } | 89 InlineBox* lastChild() const { checkConsistency(); return m_lastChild; } |
(...skipping 12 matching lines...) Expand all Loading... |
102 for (InlineBox* child = firstChild(); child; child = child->nextOnLine()
) | 102 for (InlineBox* child = firstChild(); child; child = child->nextOnLine()
) |
103 child->setConstructed(); | 103 child->setConstructed(); |
104 } | 104 } |
105 | 105 |
106 void addToLine(InlineBox* child); | 106 void addToLine(InlineBox* child); |
107 virtual void deleteLine() override final; | 107 virtual void deleteLine() override final; |
108 virtual void extractLine() override final; | 108 virtual void extractLine() override final; |
109 virtual void attachLine() override final; | 109 virtual void attachLine() override final; |
110 virtual void adjustPosition(FloatWillBeLayoutUnit dx, FloatWillBeLayoutUnit
dy) override; | 110 virtual void adjustPosition(FloatWillBeLayoutUnit dx, FloatWillBeLayoutUnit
dy) override; |
111 | 111 |
112 virtual void extractLineBoxFromRenderObject(); | 112 virtual void extractLineBoxFromLayoutObject(); |
113 virtual void attachLineBoxToRenderObject(); | 113 virtual void attachLineBoxToLayoutObject(); |
114 virtual void removeLineBoxFromRenderObject(); | 114 virtual void removeLineBoxFromLayoutObject(); |
115 | 115 |
116 virtual void clearTruncation() override; | 116 virtual void clearTruncation() override; |
117 | 117 |
118 IntRect roundedFrameRect() const; | 118 IntRect roundedFrameRect() const; |
119 | 119 |
120 virtual void paint(const PaintInfo&, const LayoutPoint&, LayoutUnit lineTop,
LayoutUnit lineBottom) override; | 120 virtual void paint(const PaintInfo&, const LayoutPoint&, LayoutUnit lineTop,
LayoutUnit lineBottom) override; |
121 virtual bool nodeAtPoint(const HitTestRequest&, HitTestResult&, const HitTes
tLocation& locationInContainer, const LayoutPoint& accumulatedOffset, LayoutUnit
lineTop, LayoutUnit lineBottom) override; | 121 virtual bool nodeAtPoint(const HitTestRequest&, HitTestResult&, const HitTes
tLocation& locationInContainer, const LayoutPoint& accumulatedOffset, LayoutUnit
lineTop, LayoutUnit lineBottom) override; |
122 | 122 |
123 bool boxShadowCanBeAppliedToBackground(const FillLayer&) const; | 123 bool boxShadowCanBeAppliedToBackground(const FillLayer&) const; |
124 | 124 |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
166 | 166 |
167 bool includeLogicalLeftEdge() const { return m_includeLogicalLeftEdge; } | 167 bool includeLogicalLeftEdge() const { return m_includeLogicalLeftEdge; } |
168 bool includeLogicalRightEdge() const { return m_includeLogicalRightEdge; } | 168 bool includeLogicalRightEdge() const { return m_includeLogicalRightEdge; } |
169 void setEdges(bool includeLeft, bool includeRight) | 169 void setEdges(bool includeLeft, bool includeRight) |
170 { | 170 { |
171 m_includeLogicalLeftEdge = includeLeft; | 171 m_includeLogicalLeftEdge = includeLeft; |
172 m_includeLogicalRightEdge = includeRight; | 172 m_includeLogicalRightEdge = includeRight; |
173 } | 173 } |
174 | 174 |
175 // Helper functions used during line construction and placement. | 175 // Helper functions used during line construction and placement. |
176 void determineSpacingForFlowBoxes(bool lastLine, bool isLogicallyLastRunWrap
ped, RenderObject* logicallyLastRunRenderer); | 176 void determineSpacingForFlowBoxes(bool lastLine, bool isLogicallyLastRunWrap
ped, LayoutObject* logicallyLastRunRenderer); |
177 LayoutUnit getFlowSpacingLogicalWidth(); | 177 LayoutUnit getFlowSpacingLogicalWidth(); |
178 FloatWillBeLayoutUnit placeBoxesInInlineDirection(FloatWillBeLayoutUnit logi
calLeft, bool& needsWordSpacing); | 178 FloatWillBeLayoutUnit placeBoxesInInlineDirection(FloatWillBeLayoutUnit logi
calLeft, bool& needsWordSpacing); |
179 FloatWillBeLayoutUnit placeBoxRangeInInlineDirection(InlineBox* firstChild,
InlineBox* lastChild, | 179 FloatWillBeLayoutUnit placeBoxRangeInInlineDirection(InlineBox* firstChild,
InlineBox* lastChild, |
180 FloatWillBeLayoutUnit& logicalLeft, FloatWillBeLayoutUnit& minLogicalLef
t, FloatWillBeLayoutUnit& maxLogicalRight, bool& needsWordSpacing); | 180 FloatWillBeLayoutUnit& logicalLeft, FloatWillBeLayoutUnit& minLogicalLef
t, FloatWillBeLayoutUnit& maxLogicalRight, bool& needsWordSpacing); |
181 void beginPlacingBoxRangesInInlineDirection(FloatWillBeLayoutUnit logicalLef
t) { setLogicalLeft(logicalLeft); } | 181 void beginPlacingBoxRangesInInlineDirection(FloatWillBeLayoutUnit logicalLef
t) { setLogicalLeft(logicalLeft); } |
182 void endPlacingBoxRangesInInlineDirection(FloatWillBeLayoutUnit logicalLeft,
FloatWillBeLayoutUnit logicalRight, FloatWillBeLayoutUnit minLogicalLeft, Float
WillBeLayoutUnit maxLogicalRight) | 182 void endPlacingBoxRangesInInlineDirection(FloatWillBeLayoutUnit logicalLeft,
FloatWillBeLayoutUnit logicalRight, FloatWillBeLayoutUnit minLogicalLeft, Float
WillBeLayoutUnit maxLogicalRight) |
183 { | 183 { |
184 setLogicalWidth(logicalRight - logicalLeft); | 184 setLogicalWidth(logicalRight - logicalLeft); |
185 if (knownToHaveNoOverflow() && (minLogicalLeft < logicalLeft || maxLogic
alRight > logicalRight)) | 185 if (knownToHaveNoOverflow() && (minLogicalLeft < logicalLeft || maxLogic
alRight > logicalRight)) |
186 clearKnownToHaveNoOverflow(); | 186 clearKnownToHaveNoOverflow(); |
187 } | 187 } |
188 | 188 |
189 void computeLogicalBoxHeights(RootInlineBox*, LayoutUnit& maxPositionTop, La
youtUnit& maxPositionBottom, int& maxAscent, int& maxDescent, bool& setMaxAscent
, bool& setMaxDescent, bool strictMode, GlyphOverflowAndFallbackFontsMap&, FontB
aseline, VerticalPositionCache&); | 189 void computeLogicalBoxHeights(RootInlineBox*, LayoutUnit& maxPositionTop, La
youtUnit& maxPositionBottom, int& maxAscent, int& maxDescent, bool& setMaxAscent
, bool& setMaxDescent, bool strictMode, GlyphOverflowAndFallbackFontsMap&, FontB
aseline, VerticalPositionCache&); |
190 void adjustMaxAscentAndDescent(int& maxAscent, int& maxDescent, int maxPosit
ionTop, int maxPositionBottom); | 190 void adjustMaxAscentAndDescent(int& maxAscent, int& maxDescent, int maxPosit
ionTop, int maxPositionBottom); |
191 void placeBoxesInBlockDirection(LayoutUnit logicalTop, LayoutUnit maxHeight,
int maxAscent, bool strictMode, LayoutUnit& lineTop, LayoutUnit& lineBottom, La
youtUnit& selectionBottom, bool& setLineTop, LayoutUnit& lineTopIncludingMargins
, LayoutUnit& lineBottomIncludingMargins, bool& hasAnnotationsBefore, bool& hasA
nnotationsAfter, FontBaseline); | 191 void placeBoxesInBlockDirection(LayoutUnit logicalTop, LayoutUnit maxHeight,
int maxAscent, bool strictMode, LayoutUnit& lineTop, LayoutUnit& lineBottom, La
youtUnit& selectionBottom, bool& setLineTop, LayoutUnit& lineTopIncludingMargins
, LayoutUnit& lineBottomIncludingMargins, bool& hasAnnotationsBefore, bool& hasA
nnotationsAfter, FontBaseline); |
192 void flipLinesInBlockDirection(LayoutUnit lineTop, LayoutUnit lineBottom); | 192 void flipLinesInBlockDirection(LayoutUnit lineTop, LayoutUnit lineBottom); |
193 bool requiresIdeographicBaseline(const GlyphOverflowAndFallbackFontsMap&) co
nst; | 193 bool requiresIdeographicBaseline(const GlyphOverflowAndFallbackFontsMap&) co
nst; |
194 | 194 |
195 LayoutUnit computeOverAnnotationAdjustment(LayoutUnit allowedPosition) const
; | 195 LayoutUnit computeOverAnnotationAdjustment(LayoutUnit allowedPosition) const
; |
196 LayoutUnit computeUnderAnnotationAdjustment(LayoutUnit allowedPosition) cons
t; | 196 LayoutUnit computeUnderAnnotationAdjustment(LayoutUnit allowedPosition) cons
t; |
197 | 197 |
198 void computeOverflow(LayoutUnit lineTop, LayoutUnit lineBottom, GlyphOverflo
wAndFallbackFontsMap&); | 198 void computeOverflow(LayoutUnit lineTop, LayoutUnit lineBottom, GlyphOverflo
wAndFallbackFontsMap&); |
199 | 199 |
200 void removeChild(InlineBox* child, MarkLineBoxes); | 200 void removeChild(InlineBox* child, MarkLineBoxes); |
201 | 201 |
202 virtual RenderObject::SelectionState selectionState() const override; | 202 virtual LayoutObject::SelectionState selectionState() const override; |
203 | 203 |
204 virtual bool canAccommodateEllipsis(bool ltr, int blockEdge, int ellipsisWid
th) const override final; | 204 virtual bool canAccommodateEllipsis(bool ltr, int blockEdge, int ellipsisWid
th) const override final; |
205 virtual FloatWillBeLayoutUnit placeEllipsisBox(bool ltr, FloatWillBeLayoutUn
it blockLeftEdge, FloatWillBeLayoutUnit blockRightEdge, FloatWillBeLayoutUnit el
lipsisWidth, FloatWillBeLayoutUnit &truncatedWidth, bool&) override; | 205 virtual FloatWillBeLayoutUnit placeEllipsisBox(bool ltr, FloatWillBeLayoutUn
it blockLeftEdge, FloatWillBeLayoutUnit blockRightEdge, FloatWillBeLayoutUnit el
lipsisWidth, FloatWillBeLayoutUnit &truncatedWidth, bool&) override; |
206 | 206 |
207 bool hasTextChildren() const { return m_hasTextChildren; } | 207 bool hasTextChildren() const { return m_hasTextChildren; } |
208 bool hasTextDescendants() const { return m_hasTextDescendants; } | 208 bool hasTextDescendants() const { return m_hasTextDescendants; } |
209 void setHasTextDescendants() { m_hasTextDescendants = true; } | 209 void setHasTextDescendants() { m_hasTextDescendants = true; } |
210 | 210 |
211 void checkConsistency() const; | 211 void checkConsistency() const; |
212 void setHasBadChildList(); | 212 void setHasBadChildList(); |
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
304 void setVisualOverflow(const LayoutRect&, const LayoutRect&); | 304 void setVisualOverflow(const LayoutRect&, const LayoutRect&); |
305 | 305 |
306 protected: | 306 protected: |
307 OwnPtr<RenderOverflow> m_overflow; | 307 OwnPtr<RenderOverflow> m_overflow; |
308 | 308 |
309 virtual bool isInlineFlowBox() const override final { return true; } | 309 virtual bool isInlineFlowBox() const override final { return true; } |
310 | 310 |
311 InlineBox* m_firstChild; | 311 InlineBox* m_firstChild; |
312 InlineBox* m_lastChild; | 312 InlineBox* m_lastChild; |
313 | 313 |
314 InlineFlowBox* m_prevLineBox; // The previous box that also uses our RenderO
bject | 314 InlineFlowBox* m_prevLineBox; // The previous box that also uses our LayoutO
bject |
315 InlineFlowBox* m_nextLineBox; // The next box that also uses our RenderObjec
t | 315 InlineFlowBox* m_nextLineBox; // The next box that also uses our LayoutObjec
t |
316 | 316 |
317 // Maximum logicalTop among all children of an InlineFlowBox. Used to | 317 // Maximum logicalTop among all children of an InlineFlowBox. Used to |
318 // calculate the offset for TextUnderlinePositionUnder. | 318 // calculate the offset for TextUnderlinePositionUnder. |
319 void computeMaxLogicalTop(FloatWillBeLayoutUnit& maxLogicalTop) const; | 319 void computeMaxLogicalTop(FloatWillBeLayoutUnit& maxLogicalTop) const; |
320 | 320 |
321 private: | 321 private: |
322 unsigned m_includeLogicalLeftEdge : 1; | 322 unsigned m_includeLogicalLeftEdge : 1; |
323 unsigned m_includeLogicalRightEdge : 1; | 323 unsigned m_includeLogicalRightEdge : 1; |
324 unsigned m_hasTextChildren : 1; | 324 unsigned m_hasTextChildren : 1; |
325 unsigned m_hasTextDescendants : 1; | 325 unsigned m_hasTextDescendants : 1; |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
365 } | 365 } |
366 | 366 |
367 } // namespace blink | 367 } // namespace blink |
368 | 368 |
369 #ifndef NDEBUG | 369 #ifndef NDEBUG |
370 // Outside the WebCore namespace for ease of invocation from gdb. | 370 // Outside the WebCore namespace for ease of invocation from gdb. |
371 void showTree(const blink::InlineFlowBox*); | 371 void showTree(const blink::InlineFlowBox*); |
372 #endif | 372 #endif |
373 | 373 |
374 #endif // InlineFlowBox_h | 374 #endif // InlineFlowBox_h |
OLD | NEW |