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

Side by Side Diff: Source/core/rendering/RenderBlock.h

Issue 143323014: *** DO NOT LAND *** Attempt to understand Regions complexity Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 6 years, 11 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 | Annotate | Revision Log
« no previous file with comments | « Source/core/rendering/RegionOversetState.h ('k') | Source/core/rendering/RenderBlock.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Apple Inc. All r ights reserved. 5 * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Apple Inc. All r ights reserved.
6 * 6 *
7 * This library is free software; you can redistribute it and/or 7 * This library is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU Library General Public 8 * modify it under the terms of the GNU Library General Public
9 * License as published by the Free Software Foundation; either 9 * License as published by the Free Software Foundation; either
10 * version 2 of the License, or (at your option) any later version. 10 * version 2 of the License, or (at your option) any later version.
(...skipping 229 matching lines...) Expand 10 before | Expand all | Expand 10 after
240 void setMarginEndForChild(RenderBox* child, LayoutUnit value) const { child- >setMarginEnd(value, style()); } 240 void setMarginEndForChild(RenderBox* child, LayoutUnit value) const { child- >setMarginEnd(value, style()); }
241 void setMarginBeforeForChild(RenderBox* child, LayoutUnit value) const { chi ld->setMarginBefore(value, style()); } 241 void setMarginBeforeForChild(RenderBox* child, LayoutUnit value) const { chi ld->setMarginBefore(value, style()); }
242 void setMarginAfterForChild(RenderBox* child, LayoutUnit value) const { chil d->setMarginAfter(value, style()); } 242 void setMarginAfterForChild(RenderBox* child, LayoutUnit value) const { chil d->setMarginAfter(value, style()); }
243 LayoutUnit collapsedMarginBeforeForChild(const RenderBox* child) const; 243 LayoutUnit collapsedMarginBeforeForChild(const RenderBox* child) const;
244 LayoutUnit collapsedMarginAfterForChild(const RenderBox* child) const; 244 LayoutUnit collapsedMarginAfterForChild(const RenderBox* child) const;
245 245
246 virtual void updateFirstLetter(); 246 virtual void updateFirstLetter();
247 247
248 virtual void scrollbarsChanged(bool /*horizontalScrollbarChanged*/, bool /*v erticalScrollbarChanged*/) { }; 248 virtual void scrollbarsChanged(bool /*horizontalScrollbarChanged*/, bool /*v erticalScrollbarChanged*/) { };
249 249
250 LayoutUnit logicalLeftOffsetForContent(RenderRegion*) const; 250 LayoutUnit availableLogicalWidthForContent() const
251 LayoutUnit logicalRightOffsetForContent(RenderRegion*) const;
252 LayoutUnit availableLogicalWidthForContent(RenderRegion* region) const
253 { 251 {
254 return max<LayoutUnit>(0, logicalRightOffsetForContent(region) - logical LeftOffsetForContent(region)); 252 return max<LayoutUnit>(0, logicalRightOffsetForContent() - logicalLeftOf fsetForContent());
255 }
256 LayoutUnit startOffsetForContent(RenderRegion* region) const
257 {
258 return style()->isLeftToRightDirection() ? logicalLeftOffsetForContent(r egion) : logicalWidth() - logicalRightOffsetForContent(region);
259 }
260 LayoutUnit endOffsetForContent(RenderRegion* region) const
261 {
262 return !style()->isLeftToRightDirection() ? logicalLeftOffsetForContent( region) : logicalWidth() - logicalRightOffsetForContent(region);
263 }
264 LayoutUnit logicalLeftOffsetForContent(LayoutUnit blockOffset) const
265 {
266 return logicalLeftOffsetForContent(regionAtBlockOffset(blockOffset));
267 }
268 LayoutUnit logicalRightOffsetForContent(LayoutUnit blockOffset) const
269 {
270 return logicalRightOffsetForContent(regionAtBlockOffset(blockOffset));
271 }
272 LayoutUnit availableLogicalWidthForContent(LayoutUnit blockOffset) const
273 {
274 return availableLogicalWidthForContent(regionAtBlockOffset(blockOffset)) ;
275 }
276 LayoutUnit startOffsetForContent(LayoutUnit blockOffset) const
277 {
278 return startOffsetForContent(regionAtBlockOffset(blockOffset));
279 }
280 LayoutUnit endOffsetForContent(LayoutUnit blockOffset) const
281 {
282 return endOffsetForContent(regionAtBlockOffset(blockOffset));
283 } 253 }
284 LayoutUnit logicalLeftOffsetForContent() const { return isHorizontalWritingM ode() ? borderLeft() + paddingLeft() : borderTop() + paddingTop(); } 254 LayoutUnit logicalLeftOffsetForContent() const { return isHorizontalWritingM ode() ? borderLeft() + paddingLeft() : borderTop() + paddingTop(); }
285 LayoutUnit logicalRightOffsetForContent() const { return logicalLeftOffsetFo rContent() + availableLogicalWidth(); } 255 LayoutUnit logicalRightOffsetForContent() const { return logicalLeftOffsetFo rContent() + availableLogicalWidth(); }
286 LayoutUnit startOffsetForContent() const { return style()->isLeftToRightDire ction() ? logicalLeftOffsetForContent() : logicalWidth() - logicalRightOffsetFor Content(); } 256 LayoutUnit startOffsetForContent() const { return style()->isLeftToRightDire ction() ? logicalLeftOffsetForContent() : logicalWidth() - logicalRightOffsetFor Content(); }
287 LayoutUnit endOffsetForContent() const { return !style()->isLeftToRightDirec tion() ? logicalLeftOffsetForContent() : logicalWidth() - logicalRightOffsetForC ontent(); } 257 LayoutUnit endOffsetForContent() const { return !style()->isLeftToRightDirec tion() ? logicalLeftOffsetForContent() : logicalWidth() - logicalRightOffsetForC ontent(); }
288 258
289 #ifndef NDEBUG 259 #ifndef NDEBUG
290 void checkPositionedObjectsNeedLayout(); 260 void checkPositionedObjectsNeedLayout();
291 void showLineTreeAndMark(const InlineBox* = 0, const char* = 0, const Inline Box* = 0, const char* = 0, const RenderObject* = 0) const; 261 void showLineTreeAndMark(const InlineBox* = 0, const char* = 0, const Inline Box* = 0, const char* = 0, const RenderObject* = 0) const;
292 #endif 262 #endif
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
378 protected: 348 protected:
379 virtual void addOverflowFromChildren(); 349 virtual void addOverflowFromChildren();
380 void addOverflowFromPositionedObjects(); 350 void addOverflowFromPositionedObjects();
381 void addOverflowFromBlockChildren(); 351 void addOverflowFromBlockChildren();
382 void addVisualOverflowFromTheme(); 352 void addVisualOverflowFromTheme();
383 353
384 virtual void addFocusRingRects(Vector<IntRect>&, const LayoutPoint& addition alOffset, const RenderLayerModelObject* paintContainer = 0) OVERRIDE; 354 virtual void addFocusRingRects(Vector<IntRect>&, const LayoutPoint& addition alOffset, const RenderLayerModelObject* paintContainer = 0) OVERRIDE;
385 355
386 virtual void computeSelfHitTestRects(Vector<LayoutRect>&, const LayoutPoint& layerOffset) const OVERRIDE; 356 virtual void computeSelfHitTestRects(Vector<LayoutRect>&, const LayoutPoint& layerOffset) const OVERRIDE;
387 357
388 bool updateRegionsAndShapesLogicalSize(RenderFlowThread*);
389 void computeRegionRangeForBlock(RenderFlowThread*);
390
391 void updateBlockChildDirtyBitsBeforeLayout(bool relayoutChildren, RenderBox* ); 358 void updateBlockChildDirtyBitsBeforeLayout(bool relayoutChildren, RenderBox* );
392 359
393 virtual void checkForPaginationLogicalHeightChange(LayoutUnit& pageLogicalHe ight, bool& pageLogicalHeightChanged, bool& hasSpecifiedPageLogicalHeight); 360 virtual void checkForPaginationLogicalHeightChange(LayoutUnit& pageLogicalHe ight, bool& pageLogicalHeightChanged, bool& hasSpecifiedPageLogicalHeight);
394 361
395 virtual bool isInlineBlockOrInlineTable() const OVERRIDE FINAL { return isIn line() && isReplaced(); } 362 virtual bool isInlineBlockOrInlineTable() const OVERRIDE FINAL { return isIn line() && isReplaced(); }
396 363
397 private: 364 private:
398 void computeShapeSize(); 365 void computeShapeSize();
399 void updateRegionsAndShapesAfterChildLayout(RenderFlowThread*, bool);
400 void updateShapeInsideInfoAfterStyleChange(const ShapeValue*, const ShapeVal ue* oldShape); 366 void updateShapeInsideInfoAfterStyleChange(const ShapeValue*, const ShapeVal ue* oldShape);
401 void relayoutShapeDescendantIfMoved(RenderBlock* child, LayoutSize offset); 367 void relayoutShapeDescendantIfMoved(RenderBlock* child, LayoutSize offset);
402 368
403 virtual RenderObjectChildList* virtualChildren() OVERRIDE FINAL { return chi ldren(); } 369 virtual RenderObjectChildList* virtualChildren() OVERRIDE FINAL { return chi ldren(); }
404 virtual const RenderObjectChildList* virtualChildren() const OVERRIDE FINAL { return children(); } 370 virtual const RenderObjectChildList* virtualChildren() const OVERRIDE FINAL { return children(); }
405 371
406 virtual const char* renderName() const OVERRIDE; 372 virtual const char* renderName() const OVERRIDE;
407 373
408 virtual bool isRenderBlock() const OVERRIDE FINAL { return true; } 374 virtual bool isRenderBlock() const OVERRIDE FINAL { return true; }
409 375
(...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after
548 514
549 // A page break is required at some offset due to space shortage in the curr ent fragmentainer. 515 // A page break is required at some offset due to space shortage in the curr ent fragmentainer.
550 void setPageBreak(LayoutUnit offset, LayoutUnit spaceShortage); 516 void setPageBreak(LayoutUnit offset, LayoutUnit spaceShortage);
551 517
552 // Update minimum page height required to avoid fragmentation where it shoul dn't occur (inside 518 // Update minimum page height required to avoid fragmentation where it shoul dn't occur (inside
553 // unbreakable content, between orphans and widows, etc.). This will be used as a hint to the 519 // unbreakable content, between orphans and widows, etc.). This will be used as a hint to the
554 // column balancer to help set a good minimum column height. 520 // column balancer to help set a good minimum column height.
555 void updateMinimumPageHeight(LayoutUnit offset, LayoutUnit minHeight); 521 void updateMinimumPageHeight(LayoutUnit offset, LayoutUnit minHeight);
556 522
557 LayoutUnit adjustForUnsplittableChild(RenderBox* child, LayoutUnit logicalOf fset, bool includeMargins = false); // If the child is unsplittable and can't fi t on the current page, return the top of the next page/column. 523 LayoutUnit adjustForUnsplittableChild(RenderBox* child, LayoutUnit logicalOf fset, bool includeMargins = false); // If the child is unsplittable and can't fi t on the current page, return the top of the next page/column.
558 void adjustLinePositionForPagination(RootInlineBox*, LayoutUnit& deltaOffset , RenderFlowThread*); // Computes a deltaOffset value that put a line at the top of the next page if it doesn't fit on the current page. 524 void adjustLinePositionForPagination(RootInlineBox*, LayoutUnit& deltaOffset ); // Computes a deltaOffset value that put a line at the top of the next page i f it doesn't fit on the current page.
559 void updateRegionForLine(RootInlineBox*) const;
560 525
561 // Adjust from painting offsets to the local coords of this renderer 526 // Adjust from painting offsets to the local coords of this renderer
562 void offsetForContents(LayoutPoint&) const; 527 void offsetForContents(LayoutPoint&) const;
563 528
564 // This function is called to test a line box that has moved in the block di rection to see if it has ended up in a new 529 // This function is called to test a line box that has moved in the block di rection to see if it has ended up in a new
565 // region/page/column that has a different available line width than the old one. Used to know when you have to dirty a 530 // region/page/column that has a different available line width than the old one. Used to know when you have to dirty a
566 // line, i.e., that it can't be re-used. 531 // line, i.e., that it can't be re-used.
567 bool lineWidthForPaginatedLineChanged(RootInlineBox*, LayoutUnit lineDelta, RenderFlowThread*) const; 532 bool lineWidthForPaginatedLineChanged(RootInlineBox*, LayoutUnit lineDelta) const;
568
569 bool logicalWidthChangedInRegions(RenderFlowThread*) const;
570 533
571 virtual bool requiresColumns(int desiredColumnCount) const; 534 virtual bool requiresColumns(int desiredColumnCount) const;
572 535
573 virtual bool updateLogicalWidthAndColumnWidth(); 536 virtual bool updateLogicalWidthAndColumnWidth();
574 537
575 virtual bool canCollapseAnonymousBlockChild() const { return true; } 538 virtual bool canCollapseAnonymousBlockChild() const { return true; }
576 539
577 public: 540 public:
578 virtual LayoutUnit offsetFromLogicalTopOfFirstPage() const OVERRIDE FINAL; 541 virtual LayoutUnit offsetFromLogicalTopOfFirstPage() const OVERRIDE FINAL;
579 RenderRegion* regionAtBlockOffset(LayoutUnit) const;
580 RenderRegion* clampToStartAndEndRegions(RenderRegion*) const;
581 542
582 public: 543 public:
583 544
584 // Allocated only when some of these fields have non-default values 545 // Allocated only when some of these fields have non-default values
585 struct RenderBlockRareData { 546 struct RenderBlockRareData {
586 WTF_MAKE_NONCOPYABLE(RenderBlockRareData); WTF_MAKE_FAST_ALLOCATED; 547 WTF_MAKE_NONCOPYABLE(RenderBlockRareData); WTF_MAKE_FAST_ALLOCATED;
587 public: 548 public:
588 RenderBlockRareData() 549 RenderBlockRareData()
589 : m_paginationStrut(0) 550 : m_paginationStrut(0)
590 , m_pageLogicalOffset(0) 551 , m_pageLogicalOffset(0)
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
624 // FIXME: This is temporary as we move code that accesses block flow 585 // FIXME: This is temporary as we move code that accesses block flow
625 // member variables out of RenderBlock and into RenderBlockFlow. 586 // member variables out of RenderBlock and into RenderBlockFlow.
626 friend class RenderBlockFlow; 587 friend class RenderBlockFlow;
627 }; 588 };
628 589
629 590
630 inline bool RenderBlock::allowsShapeInsideInfoSharing(const RenderBlock* other) const 591 inline bool RenderBlock::allowsShapeInsideInfoSharing(const RenderBlock* other) const
631 { 592 {
632 if (!other) 593 if (!other)
633 return false; 594 return false;
634 for (const RenderBlock* current = this; current && current != other && !curr ent->isRenderFlowThread(); current = current->containingBlock()) { 595 for (const RenderBlock* current = this; current && current != other; current = current->containingBlock()) {
635 if (current->isInline() || current->isFloating()) 596 if (current->isInline() || current->isFloating())
636 return false; 597 return false;
637 if (current->parent() != current->containingBlock()) 598 if (current->parent() != current->containingBlock())
638 return false; 599 return false;
639 } 600 }
640 return true; 601 return true;
641 } 602 }
642 603
643 DEFINE_RENDER_OBJECT_TYPE_CASTS(RenderBlock, isRenderBlock()); 604 DEFINE_RENDER_OBJECT_TYPE_CASTS(RenderBlock, isRenderBlock());
644 605
645 } // namespace WebCore 606 } // namespace WebCore
646 607
647 #endif // RenderBlock_h 608 #endif // RenderBlock_h
OLDNEW
« no previous file with comments | « Source/core/rendering/RegionOversetState.h ('k') | Source/core/rendering/RenderBlock.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698