Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(30)

Side by Side Diff: Source/core/layout/LayoutBlockFlow.h

Issue 763173003: Convert RenderBlockFlow code to use FloatingObject references (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: more usage of const with floatingObject Created 5 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 * (C) 2007 David Smith (catfish.man@gmail.com) 4 * (C) 2007 David Smith (catfish.man@gmail.com)
5 * Copyright (C) 2003-2013 Apple Inc. All rights reserved. 5 * Copyright (C) 2003-2013 Apple Inc. All rights reserved.
6 * Copyright (C) Research In Motion Limited 2010. All rights reserved. 6 * Copyright (C) Research In Motion Limited 2010. All rights reserved.
7 * Copyright (C) 2013 Google Inc. All rights reserved. 7 * Copyright (C) 2013 Google Inc. All rights reserved.
8 * 8 *
9 * Redistribution and use in source and binary forms, with or without 9 * Redistribution and use in source and binary forms, with or without
10 * modification, are permitted provided that the following conditions are 10 * modification, are permitted provided that the following conditions are
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after
112 bool containsFloat(LayoutBox*) const; 112 bool containsFloat(LayoutBox*) const;
113 113
114 void removeFloatingObjects(); 114 void removeFloatingObjects();
115 115
116 virtual void addChild(LayoutObject* newChild, LayoutObject* beforeChild = 0) override; 116 virtual void addChild(LayoutObject* newChild, LayoutObject* beforeChild = 0) override;
117 117
118 void moveAllChildrenIncludingFloatsTo(LayoutBlock* toBlock, bool fullRemoveI nsert); 118 void moveAllChildrenIncludingFloatsTo(LayoutBlock* toBlock, bool fullRemoveI nsert);
119 119
120 bool generatesLineBoxesForInlineChild(LayoutObject*); 120 bool generatesLineBoxesForInlineChild(LayoutObject*);
121 121
122 LayoutUnit logicalTopForFloat(const FloatingObject* floatingObject) const { return isHorizontalWritingMode() ? floatingObject->y() : floatingObject->x(); } 122 LayoutUnit logicalTopForFloat(const FloatingObject& floatingObject) const { return isHorizontalWritingMode() ? floatingObject.y() : floatingObject.x(); }
123 LayoutUnit logicalBottomForFloat(const FloatingObject* floatingObject) const { return isHorizontalWritingMode() ? floatingObject->maxY() : floatingObject->m axX(); } 123 LayoutUnit logicalBottomForFloat(const FloatingObject& floatingObject) const { return isHorizontalWritingMode() ? floatingObject.maxY() : floatingObject.max X(); }
124 LayoutUnit logicalLeftForFloat(const FloatingObject* floatingObject) const { return isHorizontalWritingMode() ? floatingObject->x() : floatingObject->y(); } 124 LayoutUnit logicalLeftForFloat(const FloatingObject& floatingObject) const { return isHorizontalWritingMode() ? floatingObject.x() : floatingObject.y(); }
125 LayoutUnit logicalRightForFloat(const FloatingObject* floatingObject) const { return isHorizontalWritingMode() ? floatingObject->maxX() : floatingObject->ma xY(); } 125 LayoutUnit logicalRightForFloat(const FloatingObject& floatingObject) const { return isHorizontalWritingMode() ? floatingObject.maxX() : floatingObject.maxY (); }
126 LayoutUnit logicalWidthForFloat(const FloatingObject* floatingObject) const { return isHorizontalWritingMode() ? floatingObject->width() : floatingObject->h eight(); } 126 LayoutUnit logicalWidthForFloat(const FloatingObject& floatingObject) const { return isHorizontalWritingMode() ? floatingObject.width() : floatingObject.hei ght(); }
127 127
128 int pixelSnappedLogicalTopForFloat(const FloatingObject* floatingObject) con st { return isHorizontalWritingMode() ? floatingObject->frameRect().pixelSnapped Y() : floatingObject->frameRect().pixelSnappedX(); } 128 int pixelSnappedLogicalTopForFloat(const FloatingObject& floatingObject) con st { return isHorizontalWritingMode() ? floatingObject.frameRect().pixelSnappedY () : floatingObject.frameRect().pixelSnappedX(); }
129 int pixelSnappedLogicalBottomForFloat(const FloatingObject* floatingObject) const { return isHorizontalWritingMode() ? floatingObject->frameRect().pixelSnap pedMaxY() : floatingObject->frameRect().pixelSnappedMaxX(); } 129 int pixelSnappedLogicalBottomForFloat(const FloatingObject& floatingObject) const { return isHorizontalWritingMode() ? floatingObject.frameRect().pixelSnapp edMaxY() : floatingObject.frameRect().pixelSnappedMaxX(); }
130 130
131 void setLogicalTopForFloat(FloatingObject* floatingObject, LayoutUnit logica lTop) 131 void setLogicalTopForFloat(FloatingObject& floatingObject, LayoutUnit logica lTop)
132 { 132 {
133 if (isHorizontalWritingMode()) 133 if (isHorizontalWritingMode())
134 floatingObject->setY(logicalTop); 134 floatingObject.setY(logicalTop);
135 else 135 else
136 floatingObject->setX(logicalTop); 136 floatingObject.setX(logicalTop);
137 } 137 }
138 void setLogicalLeftForFloat(FloatingObject* floatingObject, LayoutUnit logic alLeft) 138 void setLogicalLeftForFloat(FloatingObject& floatingObject, LayoutUnit logic alLeft)
139 { 139 {
140 if (isHorizontalWritingMode()) 140 if (isHorizontalWritingMode())
141 floatingObject->setX(logicalLeft); 141 floatingObject.setX(logicalLeft);
142 else 142 else
143 floatingObject->setY(logicalLeft); 143 floatingObject.setY(logicalLeft);
144 } 144 }
145 void setLogicalHeightForFloat(FloatingObject* floatingObject, LayoutUnit log icalHeight) 145 void setLogicalHeightForFloat(FloatingObject& floatingObject, LayoutUnit log icalHeight)
146 { 146 {
147 if (isHorizontalWritingMode()) 147 if (isHorizontalWritingMode())
148 floatingObject->setHeight(logicalHeight); 148 floatingObject.setHeight(logicalHeight);
149 else 149 else
150 floatingObject->setWidth(logicalHeight); 150 floatingObject.setWidth(logicalHeight);
151 } 151 }
152 void setLogicalWidthForFloat(FloatingObject* floatingObject, LayoutUnit logi calWidth) 152 void setLogicalWidthForFloat(FloatingObject& floatingObject, LayoutUnit logi calWidth)
153 { 153 {
154 if (isHorizontalWritingMode()) 154 if (isHorizontalWritingMode())
155 floatingObject->setWidth(logicalWidth); 155 floatingObject.setWidth(logicalWidth);
156 else 156 else
157 floatingObject->setHeight(logicalWidth); 157 floatingObject.setHeight(logicalWidth);
158 } 158 }
159 159
160 LayoutUnit startAlignedOffsetForLine(LayoutUnit position, bool shouldIndentT ext); 160 LayoutUnit startAlignedOffsetForLine(LayoutUnit position, bool shouldIndentT ext);
161 161
162 void setStaticInlinePositionForChild(LayoutBox&, LayoutUnit inlinePosition); 162 void setStaticInlinePositionForChild(LayoutBox&, LayoutUnit inlinePosition);
163 void updateStaticInlinePositionForChild(LayoutBox&, LayoutUnit logicalTop); 163 void updateStaticInlinePositionForChild(LayoutBox&, LayoutUnit logicalTop);
164 164
165 static bool shouldSkipCreatingRunsForObject(LayoutObject* obj) 165 static bool shouldSkipCreatingRunsForObject(LayoutObject* obj)
166 { 166 {
167 return obj->isFloating() || (obj->isOutOfFlowPositioned() && !obj->style ()->isOriginalDisplayInlineType() && !obj->container()->isLayoutInline()); 167 return obj->isFloating() || (obj->isOutOfFlowPositioned() && !obj->style ()->isOriginalDisplayInlineType() && !obj->container()->isLayoutInline());
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
201 LayoutUnit paginationStrut() const { return m_rareData ? m_rareData->m_pagin ationStrut : LayoutUnit(); } 201 LayoutUnit paginationStrut() const { return m_rareData ? m_rareData->m_pagin ationStrut : LayoutUnit(); }
202 void setPaginationStrut(LayoutUnit); 202 void setPaginationStrut(LayoutUnit);
203 203
204 void positionSpannerDescendant(LayoutMultiColumnSpannerPlaceholder& child); 204 void positionSpannerDescendant(LayoutMultiColumnSpannerPlaceholder& child);
205 205
206 virtual bool avoidsFloats() const override; 206 virtual bool avoidsFloats() const override;
207 207
208 using LayoutBoxModelObject::moveChildrenTo; 208 using LayoutBoxModelObject::moveChildrenTo;
209 virtual void moveChildrenTo(LayoutBoxModelObject* toBoxModelObject, LayoutOb ject* startChild, LayoutObject* endChild, LayoutObject* beforeChild, bool fullRe moveInsert = false) override; 209 virtual void moveChildrenTo(LayoutBoxModelObject* toBoxModelObject, LayoutOb ject* startChild, LayoutObject* endChild, LayoutObject* beforeChild, bool fullRe moveInsert = false) override;
210 210
211 LayoutUnit xPositionForFloatIncludingMargin(const FloatingObject* child) con st 211 LayoutUnit xPositionForFloatIncludingMargin(const FloatingObject& child) con st
212 { 212 {
213 if (isHorizontalWritingMode()) 213 if (isHorizontalWritingMode())
214 return child->x() + child->layoutObject()->marginLeft(); 214 return child.x() + child.layoutObject()->marginLeft();
215 215
216 return child->x() + marginBeforeForChild(*(child->layoutObject())); 216 return child.x() + marginBeforeForChild(*(child.layoutObject()));
217 } 217 }
218 218
219 LayoutUnit yPositionForFloatIncludingMargin(const FloatingObject* child) con st 219 LayoutUnit yPositionForFloatIncludingMargin(const FloatingObject& child) con st
220 { 220 {
221 if (isHorizontalWritingMode()) 221 if (isHorizontalWritingMode())
222 return child->y() + marginBeforeForChild(*(child->layoutObject())); 222 return child.y() + marginBeforeForChild(*(child.layoutObject()));
223 223
224 return child->y() + child->layoutObject()->marginTop(); 224 return child.y() + child.layoutObject()->marginTop();
225 } 225 }
226 226
227 LayoutSize positionForFloatIncludingMargin(const FloatingObject* child) cons t 227 LayoutSize positionForFloatIncludingMargin(const FloatingObject& child) cons t
228 { 228 {
229 if (isHorizontalWritingMode()) { 229 if (isHorizontalWritingMode()) {
230 return LayoutSize(child->x() + child->layoutObject()->marginLeft(), 230 return LayoutSize(child.x() + child.layoutObject()->marginLeft(),
231 child->y() + marginBeforeForChild(*(child->layoutObject()))); 231 child.y() + marginBeforeForChild(*(child.layoutObject())));
Julien - ping for review 2015/06/10 15:15:44 Same comment about parentheses.
Sunil Ratnu 2015/06/11 05:49:43 Done.
232 } 232 }
233 233
234 return LayoutSize(child->x() + marginBeforeForChild(*(child->layoutObjec t())), 234 return LayoutSize(child.x() + marginBeforeForChild(*(child.layoutObject( ))),
Julien - ping for review 2015/06/10 15:15:44 Ditto.
Sunil Ratnu 2015/06/11 05:49:43 Done.
235 child->y() + child->layoutObject()->marginTop()); 235 child.y() + child.layoutObject()->marginTop());
236 } 236 }
237 237
238 LayoutPoint flipFloatForWritingModeForChild(const FloatingObject*, const Lay outPoint&) const; 238 LayoutPoint flipFloatForWritingModeForChild(const FloatingObject&, const Lay outPoint&) const;
239 239
240 virtual const char* name() const override { return "LayoutBlockFlow"; } 240 virtual const char* name() const override { return "LayoutBlockFlow"; }
241 241
242 protected: 242 protected:
243 void rebuildFloatsFromIntruding(); 243 void rebuildFloatsFromIntruding();
244 void layoutInlineChildren(bool relayoutChildren, LayoutUnit& paintInvalidati onLogicalTop, LayoutUnit& paintInvalidationLogicalBottom, LayoutUnit afterEdge); 244 void layoutInlineChildren(bool relayoutChildren, LayoutUnit& paintInvalidati onLogicalTop, LayoutUnit& paintInvalidationLogicalBottom, LayoutUnit afterEdge);
245 245
246 void createFloatingObjects(); 246 void createFloatingObjects();
247 247
248 virtual void styleWillChange(StyleDifference, const ComputedStyle& newStyle) override; 248 virtual void styleWillChange(StyleDifference, const ComputedStyle& newStyle) override;
(...skipping 20 matching lines...) Expand all
269 void determineLogicalLeftPositionForChild(LayoutBox& child); 269 void determineLogicalLeftPositionForChild(LayoutBox& child);
270 270
271 private: 271 private:
272 bool layoutBlockFlow(bool relayoutChildren, LayoutUnit& pageLogicalHeight, S ubtreeLayoutScope&); 272 bool layoutBlockFlow(bool relayoutChildren, LayoutUnit& pageLogicalHeight, S ubtreeLayoutScope&);
273 void layoutBlockChildren(bool relayoutChildren, SubtreeLayoutScope&, LayoutU nit beforeEdge, LayoutUnit afterEdge); 273 void layoutBlockChildren(bool relayoutChildren, SubtreeLayoutScope&, LayoutU nit beforeEdge, LayoutUnit afterEdge);
274 274
275 void layoutBlockChild(LayoutBox& child, MarginInfo&, LayoutUnit& previousFlo atLogicalBottom); 275 void layoutBlockChild(LayoutBox& child, MarginInfo&, LayoutUnit& previousFlo atLogicalBottom);
276 void adjustPositionedBlock(LayoutBox& child, const MarginInfo&); 276 void adjustPositionedBlock(LayoutBox& child, const MarginInfo&);
277 void adjustFloatingBlock(const MarginInfo&); 277 void adjustFloatingBlock(const MarginInfo&);
278 278
279 LayoutPoint computeLogicalLocationForFloat(const FloatingObject*, LayoutUnit logicalTopOffset) const; 279 LayoutPoint computeLogicalLocationForFloat(const FloatingObject&, LayoutUnit logicalTopOffset) const;
280 280
281 FloatingObject* insertFloatingObject(LayoutBox&); 281 FloatingObject* insertFloatingObject(LayoutBox&);
282 void removeFloatingObject(LayoutBox*); 282 void removeFloatingObject(LayoutBox*);
283 void removeFloatingObjectsBelow(FloatingObject*, int logicalOffset); 283 void removeFloatingObjectsBelow(FloatingObject*, int logicalOffset);
284 284
285 // Called from lineWidth, to position the floats added in the last line. 285 // Called from lineWidth, to position the floats added in the last line.
286 // Returns true if and only if it has positioned any floats. 286 // Returns true if and only if it has positioned any floats.
287 bool positionNewFloats(LineWidth* = 0); 287 bool positionNewFloats(LineWidth* = 0);
288 288
289 LayoutUnit getClearDelta(LayoutBox* child, LayoutUnit yPos); 289 LayoutUnit getClearDelta(LayoutBox* child, LayoutUnit yPos);
(...skipping 218 matching lines...) Expand 10 before | Expand all | Expand 10 after
508 // line layout code is separated from LayoutBlock and LayoutBlockFlow. 508 // line layout code is separated from LayoutBlock and LayoutBlockFlow.
509 // START METHODS DEFINED IN LayoutBlockFlowLine 509 // START METHODS DEFINED IN LayoutBlockFlowLine
510 private: 510 private:
511 InlineFlowBox* createLineBoxes(LayoutObject*, const LineInfo&, InlineBox* ch ildBox); 511 InlineFlowBox* createLineBoxes(LayoutObject*, const LineInfo&, InlineBox* ch ildBox);
512 RootInlineBox* constructLine(BidiRunList<BidiRun>&, const LineInfo&); 512 RootInlineBox* constructLine(BidiRunList<BidiRun>&, const LineInfo&);
513 void setMarginsForRubyRun(BidiRun*, LayoutRubyRun*, LayoutObject*, const Lin eInfo&); 513 void setMarginsForRubyRun(BidiRun*, LayoutRubyRun*, LayoutObject*, const Lin eInfo&);
514 void computeInlineDirectionPositionsForLine(RootInlineBox*, const LineInfo&, BidiRun* firstRun, BidiRun* trailingSpaceRun, bool reachedEnd, GlyphOverflowAnd FallbackFontsMap&, VerticalPositionCache&, WordMeasurements&); 514 void computeInlineDirectionPositionsForLine(RootInlineBox*, const LineInfo&, BidiRun* firstRun, BidiRun* trailingSpaceRun, bool reachedEnd, GlyphOverflowAnd FallbackFontsMap&, VerticalPositionCache&, WordMeasurements&);
515 BidiRun* computeInlineDirectionPositionsForSegment(RootInlineBox*, const Lin eInfo&, ETextAlign, LayoutUnit& logicalLeft, 515 BidiRun* computeInlineDirectionPositionsForSegment(RootInlineBox*, const Lin eInfo&, ETextAlign, LayoutUnit& logicalLeft,
516 LayoutUnit& availableLogicalWidth, BidiRun* firstRun, BidiRun* trailingS paceRun, GlyphOverflowAndFallbackFontsMap& textBoxDataMap, VerticalPositionCache &, WordMeasurements&); 516 LayoutUnit& availableLogicalWidth, BidiRun* firstRun, BidiRun* trailingS paceRun, GlyphOverflowAndFallbackFontsMap& textBoxDataMap, VerticalPositionCache &, WordMeasurements&);
517 void computeBlockDirectionPositionsForLine(RootInlineBox*, BidiRun*, GlyphOv erflowAndFallbackFontsMap&, VerticalPositionCache&); 517 void computeBlockDirectionPositionsForLine(RootInlineBox*, BidiRun*, GlyphOv erflowAndFallbackFontsMap&, VerticalPositionCache&);
518 void appendFloatingObjectToLastLine(FloatingObject*); 518 void appendFloatingObjectToLastLine(FloatingObject&);
519 // Helper function for layoutInlineChildren() 519 // Helper function for layoutInlineChildren()
520 RootInlineBox* createLineBoxesFromBidiRuns(unsigned bidiLevel, BidiRunList<B idiRun>&, const InlineIterator& end, LineInfo&, VerticalPositionCache&, BidiRun* trailingSpaceRun, WordMeasurements&); 520 RootInlineBox* createLineBoxesFromBidiRuns(unsigned bidiLevel, BidiRunList<B idiRun>&, const InlineIterator& end, LineInfo&, VerticalPositionCache&, BidiRun* trailingSpaceRun, WordMeasurements&);
521 void layoutRunsAndFloats(LineLayoutState&); 521 void layoutRunsAndFloats(LineLayoutState&);
522 const InlineIterator& restartLayoutRunsAndFloatsInRange(LayoutUnit oldLogica lHeight, LayoutUnit newLogicalHeight, FloatingObject* lastFloatFromPreviousLine , InlineBidiResolver&, const InlineIterator&); 522 const InlineIterator& restartLayoutRunsAndFloatsInRange(LayoutUnit oldLogica lHeight, LayoutUnit newLogicalHeight, FloatingObject* lastFloatFromPreviousLine , InlineBidiResolver&, const InlineIterator&);
523 void layoutRunsAndFloatsInRange(LineLayoutState&, InlineBidiResolver&, 523 void layoutRunsAndFloatsInRange(LineLayoutState&, InlineBidiResolver&,
524 const InlineIterator& cleanLineStart, const BidiStatus& cleanLineBidiSta tus); 524 const InlineIterator& cleanLineStart, const BidiStatus& cleanLineBidiSta tus);
525 void linkToEndLineIfNeeded(LineLayoutState&); 525 void linkToEndLineIfNeeded(LineLayoutState&);
526 bool appendFloatsToEndOfLine(LineLayoutState&, bool updateFloatIndex); 526 bool appendFloatsToEndOfLine(LineLayoutState&, bool updateFloatIndex);
527 static void markDirtyFloatsForPaintInvalidation(Vector<FloatWithRect>& float s); 527 static void markDirtyFloatsForPaintInvalidation(Vector<FloatWithRect>& float s);
528 void checkFloatsInCleanLine(RootInlineBox*, Vector<FloatWithRect>&, size_t& floatIndex, bool& encounteredNewFloat, bool& dirtiedByFloat); 528 void checkFloatsInCleanLine(RootInlineBox*, Vector<FloatWithRect>&, size_t& floatIndex, bool& encounteredNewFloat, bool& dirtiedByFloat);
529 RootInlineBox* determineStartPosition(LineLayoutState&, InlineBidiResolver&) ; 529 RootInlineBox* determineStartPosition(LineLayoutState&, InlineBidiResolver&) ;
530 void determineEndPosition(LineLayoutState&, RootInlineBox* startBox, InlineI terator& cleanLineStart, BidiStatus& cleanLineBidiStatus); 530 void determineEndPosition(LineLayoutState&, RootInlineBox* startBox, InlineI terator& cleanLineStart, BidiStatus& cleanLineBidiStatus);
531 bool checkPaginationAndFloatsAtEndLine(LineLayoutState&); 531 bool checkPaginationAndFloatsAtEndLine(LineLayoutState&);
532 bool matchedEndLine(LineLayoutState&, const InlineBidiResolver&, const Inlin eIterator& endLineStart, const BidiStatus& endLineStatus); 532 bool matchedEndLine(LineLayoutState&, const InlineBidiResolver&, const Inlin eIterator& endLineStart, const BidiStatus& endLineStatus);
533 void deleteEllipsisLineBoxes(); 533 void deleteEllipsisLineBoxes();
534 void checkLinesForTextOverflow(); 534 void checkLinesForTextOverflow();
535 // Positions new floats and also adjust all floats encountered on the line i f any of them 535 // Positions new floats and also adjust all floats encountered on the line i f any of them
536 // have to move to the next page/column. 536 // have to move to the next page/column.
537 bool positionNewFloatOnLine(FloatingObject* newFloat, FloatingObject* lastFl oatFromPreviousLine, LineInfo&, LineWidth&); 537 bool positionNewFloatOnLine(FloatingObject& newFloat, FloatingObject* lastFl oatFromPreviousLine, LineInfo&, LineWidth&);
538 void positionDialog(); 538 void positionDialog();
539 539
540 // END METHODS DEFINED IN LayoutBlockFlowLine 540 // END METHODS DEFINED IN LayoutBlockFlowLine
541 541
542 }; 542 };
543 543
544 DEFINE_LAYOUT_OBJECT_TYPE_CASTS(LayoutBlockFlow, isLayoutBlockFlow()); 544 DEFINE_LAYOUT_OBJECT_TYPE_CASTS(LayoutBlockFlow, isLayoutBlockFlow());
545 545
546 } // namespace blink 546 } // namespace blink
547 547
548 #endif // LayoutBlockFlow_h 548 #endif // LayoutBlockFlow_h
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698