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

Side by Side Diff: third_party/WebKit/Source/core/layout/LayoutObject.h

Issue 2575423003: Fix geometry mapping issues for float under inline (Closed)
Patch Set: SVG floating Created 3 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
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2000 Lars Knoll (knoll@kde.org) 2 * Copyright (C) 2000 Lars Knoll (knoll@kde.org)
3 * (C) 2000 Antti Koivisto (koivisto@kde.org) 3 * (C) 2000 Antti Koivisto (koivisto@kde.org)
4 * (C) 2000 Dirk Mueller (mueller@kde.org) 4 * (C) 2000 Dirk Mueller (mueller@kde.org)
5 * (C) 2004 Allan Sandfeld Jensen (kde@carewolf.com) 5 * (C) 2004 Allan Sandfeld Jensen (kde@carewolf.com)
6 * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2012 Apple Inc. 6 * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2012 Apple Inc.
7 * All rights reserved. 7 * All rights reserved.
8 * Copyright (C) 2009 Google Inc. All rights reserved. 8 * Copyright (C) 2009 Google Inc. All rights reserved.
9 * 9 *
10 * This library is free software; you can redistribute it and/or 10 * This library is free software; you can redistribute it and/or
(...skipping 881 matching lines...) Expand 10 before | Expand all | Expand 10 after
892 bool behavesLikeBlockContainer() const { 892 bool behavesLikeBlockContainer() const {
893 return isLayoutBlockFlow() || isLayoutButton(); 893 return isLayoutBlockFlow() || isLayoutButton();
894 } 894 }
895 895
896 // This function returns the containing block of the object. 896 // This function returns the containing block of the object.
897 // Due to CSS being inconsistent, a containing block can be a relatively 897 // Due to CSS being inconsistent, a containing block can be a relatively
898 // positioned inline, thus we can't return a LayoutBlock from this function. 898 // positioned inline, thus we can't return a LayoutBlock from this function.
899 // 899 //
900 // This method is extremely similar to containingBlock(), but with a few 900 // This method is extremely similar to containingBlock(), but with a few
901 // notable exceptions. 901 // notable exceptions.
902 // (1) It can be used on orphaned subtrees, i.e., it can be called safely 902 // (1) For normal flow elements, it just returns the parent.
903 // even when the object is not part of the primary document subtree yet. 903 // (2) For absolute positioned elements, it will return a relative
904 // (2) For normal flow elements, it just returns the parent.
905 // (3) For absolute positioned elements, it will return a relative
906 // positioned inline. containingBlock() simply skips relpositioned inlines 904 // positioned inline. containingBlock() simply skips relpositioned inlines
907 // and lets an enclosing block handle the layout of the positioned object. 905 // and lets an enclosing block handle the layout of the positioned object.
908 // This does mean that computePositionedLogicalWidth and 906 // This does mean that computePositionedLogicalWidth and
909 // computePositionedLogicalHeight have to use container(). 907 // computePositionedLogicalHeight have to use container().
910 // 908 //
909 // Note that floating objects don't belong to either of the above exceptions.
910 //
911 // This function should be used for any invalidation as it would correctly 911 // This function should be used for any invalidation as it would correctly
912 // walk the containing block chain. See e.g. markContainerChainForLayout. 912 // walk the containing block chain. See e.g. markContainerChainForLayout.
913 // It is also used for correctly sizing absolutely positioned elements 913 // It is also used for correctly sizing absolutely positioned elements
914 // (point 3 above). 914 // (point 3 above).
915 // 915 //
916 // If |ancestor| and |ancestorSkipped| are not null, on return 916 // If |ancestor| and |ancestorSkipped| are not null, on return
917 // *ancestorSkipped is true if the layoutObject returned is an ancestor of 917 // *ancestorSkipped is true if the layoutObject returned is an ancestor of
918 // |ancestor|. 918 // |ancestor|.
919 LayoutObject* container(const LayoutBoxModelObject* ancestor = nullptr, 919 LayoutObject* container(const LayoutBoxModelObject* ancestor = nullptr,
920 bool* ancestorSkipped = nullptr, 920 bool* ancestorSkipped = nullptr,
921 bool* filterSkipped = nullptr) const; 921 bool* filterSkipped = nullptr) const;
922 // Finds the container as if this object is fixed-position. 922 // Finds the container as if this object is fixed-position.
923 LayoutBlock* containerForFixedPosition( 923 LayoutBlock* containerForFixedPosition(
924 const LayoutBoxModelObject* ancestor = nullptr, 924 const LayoutBoxModelObject* ancestor = nullptr,
925 bool* ancestorSkipped = nullptr, 925 bool* ancestorSkipped = nullptr,
926 bool* filterSkipped = nullptr) const; 926 bool* filterSkipped = nullptr) const;
927 // Finds the containing block as if this object is absolute-position. 927 // Finds the containing block as if this object is absolute-position.
928 LayoutBlock* containingBlockForAbsolutePosition() const; 928 LayoutBlock* containingBlockForAbsolutePosition(
929 const LayoutBoxModelObject* ancestor = nullptr,
930 bool* ancestorSkipped = nullptr,
931 bool* filterSkipped = nullptr) const;
929 932
930 virtual LayoutObject* hoverAncestor() const { return parent(); } 933 virtual LayoutObject* hoverAncestor() const { return parent(); }
931 934
932 Element* offsetParent(const Element* = nullptr) const; 935 Element* offsetParent(const Element* = nullptr) const;
933 936
934 void markContainerChainForLayout(bool scheduleRelayout = true, 937 void markContainerChainForLayout(bool scheduleRelayout = true,
935 SubtreeLayoutScope* = nullptr); 938 SubtreeLayoutScope* = nullptr);
936 void setNeedsLayout(LayoutInvalidationReasonForTracing, 939 void setNeedsLayout(LayoutInvalidationReasonForTracing,
937 MarkingBehavior = MarkContainerChain, 940 MarkingBehavior = MarkContainerChain,
938 SubtreeLayoutScope* = nullptr); 941 SubtreeLayoutScope* = nullptr);
(...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after
1107 // non-anonymous LayoutBlock. 1110 // non-anonymous LayoutBlock.
1108 // Note that in the previous examples, the returned LayoutBlock has no 1111 // Note that in the previous examples, the returned LayoutBlock has no
1109 // logical relationship to the original element. 1112 // logical relationship to the original element.
1110 // 1113 //
1111 // LayoutBlocks are the one that handle laying out positioned elements, 1114 // LayoutBlocks are the one that handle laying out positioned elements,
1112 // thus this function is important during layout, to insert the positioned 1115 // thus this function is important during layout, to insert the positioned
1113 // elements into the correct LayoutBlock. 1116 // elements into the correct LayoutBlock.
1114 // 1117 //
1115 // See container() for the function that returns the containing block. 1118 // See container() for the function that returns the containing block.
1116 // See LayoutBlock.h for some extra explanations on containing blocks. 1119 // See LayoutBlock.h for some extra explanations on containing blocks.
1117 LayoutBlock* containingBlock() const; 1120 LayoutBlock* containingBlock(const LayoutBoxModelObject* ancestor = nullptr,
mstensho (USE GERRIT) 2017/01/05 10:31:30 How about a struct that holds these three variable
Xianzhu 2017/01/06 00:42:35 Sounds good. Would like to address this in a follo
1121 bool* ancestorSkipped = nullptr,
1122 bool* filterSkipped = nullptr) const;
1118 1123
1119 bool canContainAbsolutePositionObjects() const { 1124 bool canContainAbsolutePositionObjects() const {
1120 return m_style->canContainAbsolutePositionObjects() || 1125 return m_style->canContainAbsolutePositionObjects() ||
1121 canContainFixedPositionObjects(); 1126 canContainFixedPositionObjects();
1122 } 1127 }
1123 bool canContainFixedPositionObjects() const { 1128 bool canContainFixedPositionObjects() const {
1124 return isLayoutView() || isSVGForeignObject() || 1129 return isLayoutView() || isSVGForeignObject() ||
1125 (isLayoutBlock() && m_style->canContainFixedPositionObjects()); 1130 (isLayoutBlock() && m_style->canContainFixedPositionObjects());
1126 } 1131 }
1127 1132
(...skipping 1543 matching lines...) Expand 10 before | Expand all | Expand 10 after
2671 CORE_EXPORT void showLineTree(const blink::LayoutObject*); 2676 CORE_EXPORT void showLineTree(const blink::LayoutObject*);
2672 CORE_EXPORT void showLayoutTree(const blink::LayoutObject* object1); 2677 CORE_EXPORT void showLayoutTree(const blink::LayoutObject* object1);
2673 // We don't make object2 an optional parameter so that showLayoutTree 2678 // We don't make object2 an optional parameter so that showLayoutTree
2674 // can be called from gdb easily. 2679 // can be called from gdb easily.
2675 CORE_EXPORT void showLayoutTree(const blink::LayoutObject* object1, 2680 CORE_EXPORT void showLayoutTree(const blink::LayoutObject* object1,
2676 const blink::LayoutObject* object2); 2681 const blink::LayoutObject* object2);
2677 2682
2678 #endif 2683 #endif
2679 2684
2680 #endif // LayoutObject_h 2685 #endif // LayoutObject_h
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698