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

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

Issue 789433006: [New Multicolumn] Let a spanner's containing block be the multicol container. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Compiling release: paint invalidation state is cleared in the super class anyway. Created 6 years 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
« no previous file with comments | « Source/core/rendering/RenderBlockFlow.cpp ('k') | Source/core/rendering/RenderBox.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 * Copyright (C) 2003, 2006, 2007 Apple Inc. All rights reserved. 4 * Copyright (C) 2003, 2006, 2007 Apple Inc. All rights reserved.
5 * 5 *
6 * This library is free software; you can redistribute it and/or 6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Library General Public 7 * modify it under the terms of the GNU Library General Public
8 * License as published by the Free Software Foundation; either 8 * License as published by the Free Software Foundation; either
9 * version 2 of the License, or (at your option) any later version. 9 * version 2 of the License, or (at your option) any later version.
10 * 10 *
(...skipping 12 matching lines...) Expand all
23 #ifndef RenderBox_h 23 #ifndef RenderBox_h
24 #define RenderBox_h 24 #define RenderBox_h
25 25
26 #include "core/rendering/RenderBoxModelObject.h" 26 #include "core/rendering/RenderBoxModelObject.h"
27 #include "core/rendering/RenderOverflow.h" 27 #include "core/rendering/RenderOverflow.h"
28 #include "core/rendering/shapes/ShapeOutsideInfo.h" 28 #include "core/rendering/shapes/ShapeOutsideInfo.h"
29 #include "platform/scroll/ScrollTypes.h" 29 #include "platform/scroll/ScrollTypes.h"
30 30
31 namespace blink { 31 namespace blink {
32 32
33 class RenderMultiColumnSpannerPlaceholder;
34
33 struct PaintInfo; 35 struct PaintInfo;
34 36
35 enum SizeType { MainOrPreferredSize, MinSize, MaxSize }; 37 enum SizeType { MainOrPreferredSize, MinSize, MaxSize };
36 enum AvailableLogicalHeightType { ExcludeMarginBorderPadding, IncludeMarginBorde rPadding }; 38 enum AvailableLogicalHeightType { ExcludeMarginBorderPadding, IncludeMarginBorde rPadding };
37 enum OverlayScrollbarSizeRelevancy { IgnoreOverlayScrollbarSize, IncludeOverlayS crollbarSize }; 39 enum OverlayScrollbarSizeRelevancy { IgnoreOverlayScrollbarSize, IncludeOverlayS crollbarSize };
38 enum MarginDirection { BlockDirection, InlineDirection }; 40 enum MarginDirection { BlockDirection, InlineDirection };
39 41
40 enum ShouldComputePreferred { ComputeActual, ComputePreferred }; 42 enum ShouldComputePreferred { ComputeActual, ComputePreferred };
41 43
42 enum ScrollOffsetClamping { 44 enum ScrollOffsetClamping {
43 ScrollOffsetUnclamped, 45 ScrollOffsetUnclamped,
44 ScrollOffsetClamped 46 ScrollOffsetClamped
45 }; 47 };
46 48
47 struct RenderBoxRareData { 49 struct RenderBoxRareData {
48 WTF_MAKE_NONCOPYABLE(RenderBoxRareData); WTF_MAKE_FAST_ALLOCATED; 50 WTF_MAKE_NONCOPYABLE(RenderBoxRareData); WTF_MAKE_FAST_ALLOCATED;
49 public: 51 public:
50 RenderBoxRareData() 52 RenderBoxRareData()
51 : m_inlineBoxWrapper(0) 53 : m_inlineBoxWrapper(0)
54 , m_spannerPlaceholder(0)
52 , m_overrideLogicalContentHeight(-1) 55 , m_overrideLogicalContentHeight(-1)
53 , m_overrideLogicalContentWidth(-1) 56 , m_overrideLogicalContentWidth(-1)
54 , m_previousBorderBoxSize(-1, -1) 57 , m_previousBorderBoxSize(-1, -1)
55 { 58 {
56 } 59 }
57 60
58 // For inline replaced elements, the inline box that owns us. 61 // For inline replaced elements, the inline box that owns us.
59 InlineBox* m_inlineBoxWrapper; 62 InlineBox* m_inlineBoxWrapper;
60 63
64 // For spanners, the spanner placeholder that lays us out within the multico l container.
65 RenderMultiColumnSpannerPlaceholder* m_spannerPlaceholder;
66
61 LayoutUnit m_overrideLogicalContentHeight; 67 LayoutUnit m_overrideLogicalContentHeight;
62 LayoutUnit m_overrideLogicalContentWidth; 68 LayoutUnit m_overrideLogicalContentWidth;
63 69
64 // Set by RenderBox::updatePreviousBorderBoxSizeIfNeeded(). 70 // Set by RenderBox::updatePreviousBorderBoxSizeIfNeeded().
65 LayoutSize m_previousBorderBoxSize; 71 LayoutSize m_previousBorderBoxSize;
66 }; 72 };
67 73
68 class RenderBox : public RenderBoxModelObject { 74 class RenderBox : public RenderBoxModelObject {
69 public: 75 public:
70 explicit RenderBox(ContainerNode*); 76 explicit RenderBox(ContainerNode*);
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after
180 // does include the intrinsic padding in the content box as this is what som e callers expect (like getComputedStyle). 186 // does include the intrinsic padding in the content box as this is what som e callers expect (like getComputedStyle).
181 LayoutRect computedCSSContentBoxRect() const { return LayoutRect(borderLeft( ) + computedCSSPaddingLeft(), borderTop() + computedCSSPaddingTop(), clientWidth () - computedCSSPaddingLeft() - computedCSSPaddingRight(), clientHeight() - comp utedCSSPaddingTop() - computedCSSPaddingBottom()); } 187 LayoutRect computedCSSContentBoxRect() const { return LayoutRect(borderLeft( ) + computedCSSPaddingLeft(), borderTop() + computedCSSPaddingTop(), clientWidth () - computedCSSPaddingLeft() - computedCSSPaddingRight(), clientHeight() - comp utedCSSPaddingTop() - computedCSSPaddingBottom()); }
182 188
183 virtual void addFocusRingRects(Vector<LayoutRect>&, const LayoutPoint& addit ionalOffset) const override; 189 virtual void addFocusRingRects(Vector<LayoutRect>&, const LayoutPoint& addit ionalOffset) const override;
184 190
185 // Use this with caution! No type checking is done! 191 // Use this with caution! No type checking is done!
186 RenderBox* previousSiblingBox() const; 192 RenderBox* previousSiblingBox() const;
187 RenderBox* nextSiblingBox() const; 193 RenderBox* nextSiblingBox() const;
188 RenderBox* parentBox() const; 194 RenderBox* parentBox() const;
189 195
196 // Return the previous sibling column set or spanner placeholder. Only to be used on multicol container children.
197 RenderBox* previousSiblingMultiColumnBox() const;
198 // Return the next sibling column set or spanner placeholder. Only to be use d on multicol container children.
199 RenderBox* nextSiblingMultiColumnBox() const;
200
190 bool canResize() const; 201 bool canResize() const;
191 202
192 // Visual and layout overflow are in the coordinate space of the box. This means that they aren't purely physical directions. 203 // Visual and layout overflow are in the coordinate space of the box. This means that they aren't purely physical directions.
193 // For horizontal-tb and vertical-lr they will match physical directions, bu t for horizontal-bt and vertical-rl, the top/bottom and left/right 204 // For horizontal-tb and vertical-lr they will match physical directions, bu t for horizontal-bt and vertical-rl, the top/bottom and left/right
194 // respectively are flipped when compared to their physical counterparts. F or example minX is on the left in vertical-lr, 205 // respectively are flipped when compared to their physical counterparts. F or example minX is on the left in vertical-lr,
195 // but it is on the right in vertical-rl. 206 // but it is on the right in vertical-rl.
196 LayoutRect noOverflowRect() const; 207 LayoutRect noOverflowRect() const;
197 LayoutRect layoutOverflowRect() const { return m_overflow ? m_overflow->layo utOverflowRect() : noOverflowRect(); } 208 LayoutRect layoutOverflowRect() const { return m_overflow ? m_overflow->layo utOverflowRect() : noOverflowRect(); }
198 IntRect pixelSnappedLayoutOverflowRect() const { return pixelSnappedIntRect( layoutOverflowRect()); } 209 IntRect pixelSnappedLayoutOverflowRect() const { return pixelSnappedIntRect( layoutOverflowRect()); }
199 LayoutSize maxLayoutOverflow() const { return LayoutSize(layoutOverflowRect( ).maxX(), layoutOverflowRect().maxY()); } 210 LayoutSize maxLayoutOverflow() const { return LayoutSize(layoutOverflowRect( ).maxX(), layoutOverflowRect().maxY()); }
(...skipping 189 matching lines...) Expand 10 before | Expand all | Expand 10 after
389 virtual InlineBox* createInlineBox(); 400 virtual InlineBox* createInlineBox();
390 void dirtyLineBoxes(bool fullLayout); 401 void dirtyLineBoxes(bool fullLayout);
391 402
392 // For inline replaced elements, this function returns the inline box that o wns us. Enables 403 // For inline replaced elements, this function returns the inline box that o wns us. Enables
393 // the replaced RenderObject to quickly determine what line it is contained on and to easily 404 // the replaced RenderObject to quickly determine what line it is contained on and to easily
394 // iterate over structures on the line. 405 // iterate over structures on the line.
395 InlineBox* inlineBoxWrapper() const { return m_rareData ? m_rareData->m_inli neBoxWrapper : 0; } 406 InlineBox* inlineBoxWrapper() const { return m_rareData ? m_rareData->m_inli neBoxWrapper : 0; }
396 void setInlineBoxWrapper(InlineBox*); 407 void setInlineBoxWrapper(InlineBox*);
397 void deleteLineBoxWrapper(); 408 void deleteLineBoxWrapper();
398 409
410 void setSpannerPlaceholder(RenderMultiColumnSpannerPlaceholder&);
411 void clearSpannerPlaceholder();
412 virtual RenderMultiColumnSpannerPlaceholder* spannerPlaceholder() const fina l { return m_rareData ? m_rareData->m_spannerPlaceholder : 0; }
413
399 virtual LayoutRect clippedOverflowRectForPaintInvalidation(const RenderLayer ModelObject* paintInvalidationContainer, const PaintInvalidationState* = 0) cons t override; 414 virtual LayoutRect clippedOverflowRectForPaintInvalidation(const RenderLayer ModelObject* paintInvalidationContainer, const PaintInvalidationState* = 0) cons t override;
400 virtual void mapRectToPaintInvalidationBacking(const RenderLayerModelObject* paintInvalidationContainer, LayoutRect&, const PaintInvalidationState*) const o verride; 415 virtual void mapRectToPaintInvalidationBacking(const RenderLayerModelObject* paintInvalidationContainer, LayoutRect&, const PaintInvalidationState*) const o verride;
401 virtual void invalidatePaintForOverhangingFloats(bool paintAllDescendants); 416 virtual void invalidatePaintForOverhangingFloats(bool paintAllDescendants);
402 417
403 virtual LayoutUnit containingBlockLogicalWidthForContent() const override; 418 virtual LayoutUnit containingBlockLogicalWidthForContent() const override;
404 LayoutUnit containingBlockLogicalHeightForContent(AvailableLogicalHeightType ) const; 419 LayoutUnit containingBlockLogicalHeightForContent(AvailableLogicalHeightType ) const;
405 420
406 LayoutUnit containingBlockAvailableLineWidth() const; 421 LayoutUnit containingBlockAvailableLineWidth() const;
407 LayoutUnit perpendicularContainingBlockLogicalHeight() const; 422 LayoutUnit perpendicularContainingBlockLogicalHeight() const;
408 423
(...skipping 237 matching lines...) Expand 10 before | Expand all | Expand 10 after
646 void markShapeOutsideDependentsForLayout() 661 void markShapeOutsideDependentsForLayout()
647 { 662 {
648 if (isFloating()) 663 if (isFloating())
649 removeFloatingOrPositionedChildFromBlockLists(); 664 removeFloatingOrPositionedChildFromBlockLists();
650 } 665 }
651 666
652 bool backgroundHasOpaqueTopLayer() const; 667 bool backgroundHasOpaqueTopLayer() const;
653 668
654 void setIntrinsicContentLogicalHeight(LayoutUnit intrinsicContentLogicalHeig ht) const { m_intrinsicContentLogicalHeight = intrinsicContentLogicalHeight; } 669 void setIntrinsicContentLogicalHeight(LayoutUnit intrinsicContentLogicalHeig ht) const { m_intrinsicContentLogicalHeight = intrinsicContentLogicalHeight; }
655 protected: 670 protected:
671 virtual void willBeRemovedFromTree() override;
656 virtual void willBeDestroyed() override; 672 virtual void willBeDestroyed() override;
657 673
658
659 virtual void styleWillChange(StyleDifference, const RenderStyle& newStyle) o verride; 674 virtual void styleWillChange(StyleDifference, const RenderStyle& newStyle) o verride;
660 virtual void styleDidChange(StyleDifference, const RenderStyle* oldStyle) ov erride; 675 virtual void styleDidChange(StyleDifference, const RenderStyle* oldStyle) ov erride;
661 virtual void updateFromStyle() override; 676 virtual void updateFromStyle() override;
662 677
663 // Returns false if it could not cheaply compute the extent (e.g. fixed back ground), in which case the returned rect may be incorrect. 678 // Returns false if it could not cheaply compute the extent (e.g. fixed back ground), in which case the returned rect may be incorrect.
664 // FIXME: make this a const method once the RenderBox reference in BoxPainte r is const. 679 // FIXME: make this a const method once the RenderBox reference in BoxPainte r is const.
665 bool getBackgroundPaintedExtent(LayoutRect&); 680 bool getBackgroundPaintedExtent(LayoutRect&);
666 virtual bool foregroundIsKnownToBeOpaqueInRect(const LayoutRect& localRect, unsigned maxDepthToTest) const; 681 virtual bool foregroundIsKnownToBeOpaqueInRect(const LayoutRect& localRect, unsigned maxDepthToTest) const;
667 virtual bool computeBackgroundIsKnownToBeObscured() override; 682 virtual bool computeBackgroundIsKnownToBeObscured() override;
668 683
(...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after
795 inline RenderBox* RenderBox::firstChildBox() const 810 inline RenderBox* RenderBox::firstChildBox() const
796 { 811 {
797 return toRenderBox(slowFirstChild()); 812 return toRenderBox(slowFirstChild());
798 } 813 }
799 814
800 inline RenderBox* RenderBox::lastChildBox() const 815 inline RenderBox* RenderBox::lastChildBox() const
801 { 816 {
802 return toRenderBox(slowLastChild()); 817 return toRenderBox(slowLastChild());
803 } 818 }
804 819
820 inline RenderBox* RenderBox::previousSiblingMultiColumnBox() const
821 {
822 ASSERT(isRenderMultiColumnSpannerPlaceholder() || isRenderMultiColumnSet());
823 RenderBox* previousBox = previousSiblingBox();
824 if (previousBox->isRenderFlowThread())
825 return 0;
826 return previousBox;
827 }
828
829 inline RenderBox* RenderBox::nextSiblingMultiColumnBox() const
830 {
831 ASSERT(isRenderMultiColumnSpannerPlaceholder() || isRenderMultiColumnSet());
832 return nextSiblingBox();
833 }
834
805 inline void RenderBox::setInlineBoxWrapper(InlineBox* boxWrapper) 835 inline void RenderBox::setInlineBoxWrapper(InlineBox* boxWrapper)
806 { 836 {
807 if (boxWrapper) { 837 if (boxWrapper) {
808 ASSERT(!inlineBoxWrapper()); 838 ASSERT(!inlineBoxWrapper());
809 // m_inlineBoxWrapper should already be 0. Deleting it is a safeguard ag ainst security issues. 839 // m_inlineBoxWrapper should already be 0. Deleting it is a safeguard ag ainst security issues.
810 // Otherwise, there will two line box wrappers keeping the reference to this renderer, and 840 // Otherwise, there will two line box wrappers keeping the reference to this renderer, and
811 // only one will be notified when the renderer is getting destroyed. The second line box wrapper 841 // only one will be notified when the renderer is getting destroyed. The second line box wrapper
812 // will keep a stale reference. 842 // will keep a stale reference.
813 if (UNLIKELY(inlineBoxWrapper() != 0)) 843 if (UNLIKELY(inlineBoxWrapper() != 0))
814 deleteLineBoxWrapper(); 844 deleteLineBoxWrapper();
815 } 845 }
816 846
817 ensureRareData().m_inlineBoxWrapper = boxWrapper; 847 ensureRareData().m_inlineBoxWrapper = boxWrapper;
818 } 848 }
819 849
820 } // namespace blink 850 } // namespace blink
821 851
822 #endif // RenderBox_h 852 #endif // RenderBox_h
OLDNEW
« no previous file with comments | « Source/core/rendering/RenderBlockFlow.cpp ('k') | Source/core/rendering/RenderBox.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698