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

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

Issue 1106533002: Formatting contexts should always expand to enclose floats (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Updated 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 | Annotate | Revision Log
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, 2011 Apple Inc. All rights reserved. 5 * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 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 * 7 *
8 * This library is free software; you can redistribute it and/or 8 * This library is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU Library General Public 9 * modify it under the terms of the GNU Library General Public
10 * License as published by the Free Software Foundation; either 10 * License as published by the Free Software Foundation; either
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
80 80
81 #if ENABLE(ASSERT) 81 #if ENABLE(ASSERT)
82 bool isInPlacedTree() const { return m_isInPlacedTree; } 82 bool isInPlacedTree() const { return m_isInPlacedTree; }
83 void setIsInPlacedTree(bool value) { m_isInPlacedTree = value; } 83 void setIsInPlacedTree(bool value) { m_isInPlacedTree = value; }
84 #endif 84 #endif
85 85
86 bool shouldPaint() const { return m_shouldPaint; } 86 bool shouldPaint() const { return m_shouldPaint; }
87 void setShouldPaint(bool shouldPaint) { m_shouldPaint = shouldPaint; } 87 void setShouldPaint(bool shouldPaint) { m_shouldPaint = shouldPaint; }
88 bool isDescendant() const { return m_isDescendant; } 88 bool isDescendant() const { return m_isDescendant; }
89 void setIsDescendant(bool isDescendant) { m_isDescendant = isDescendant; } 89 void setIsDescendant(bool isDescendant) { m_isDescendant = isDescendant; }
90 bool isLowestNonOverhangingFloatInChild() const { return m_isLowestNonOverha ngingFloatInChild; }
91 void setIsLowestNonOverhangingFloatInChild(bool isLowestNonOverhangingFloatI nChild) { m_isLowestNonOverhangingFloatInChild = isLowestNonOverhangingFloatInCh ild; }
90 92
91 // FIXME: Callers of these methods are dangerous and should be whitelisted e xplicitly or removed. 93 // FIXME: Callers of these methods are dangerous and should be whitelisted e xplicitly or removed.
92 RootInlineBox* originatingLine() const { return m_originatingLine; } 94 RootInlineBox* originatingLine() const { return m_originatingLine; }
93 void setOriginatingLine(RootInlineBox* line) { m_originatingLine = line; } 95 void setOriginatingLine(RootInlineBox* line) { m_originatingLine = line; }
94 96
95 private: 97 private:
96 explicit FloatingObject(LayoutBox*); 98 explicit FloatingObject(LayoutBox*);
97 FloatingObject(LayoutBox*, Type, const LayoutRect&, bool shouldPaint, bool i sDescendant); 99 FloatingObject(LayoutBox*, Type, const LayoutRect&, bool shouldPaint, bool i sDescendant, bool isLowestNonOverhangingFloatInChild);
leviw_travelin_and_unemployed 2015/06/02 23:05:41 It makes me a bit sad this adds an additional bool
98 100
99 LayoutBox* m_layoutObject; 101 LayoutBox* m_layoutObject;
100 RootInlineBox* m_originatingLine; 102 RootInlineBox* m_originatingLine;
101 LayoutRect m_frameRect; 103 LayoutRect m_frameRect;
102 int m_paginationStrut; // FIXME: Is this class size-sensitive? Does this nee d 32-bits? 104 int m_paginationStrut; // FIXME: Is this class size-sensitive? Does this nee d 32-bits?
103 105
104 unsigned m_type : 2; // Type (left or right aligned) 106 unsigned m_type : 2; // Type (left or right aligned)
105 unsigned m_shouldPaint : 1; 107 unsigned m_shouldPaint : 1;
106 unsigned m_isDescendant : 1; 108 unsigned m_isDescendant : 1;
107 unsigned m_isPlaced : 1; 109 unsigned m_isPlaced : 1;
110 unsigned m_isLowestNonOverhangingFloatInChild : 1;
108 #if ENABLE(ASSERT) 111 #if ENABLE(ASSERT)
109 unsigned m_isInPlacedTree : 1; 112 unsigned m_isInPlacedTree : 1;
110 #endif 113 #endif
111 }; 114 };
112 115
113 struct FloatingObjectHashFunctions { 116 struct FloatingObjectHashFunctions {
114 static unsigned hash(FloatingObject* key) { return DefaultHash<LayoutBox*>:: Hash::hash(key->layoutObject()); } 117 static unsigned hash(FloatingObject* key) { return DefaultHash<LayoutBox*>:: Hash::hash(key->layoutObject()); }
115 static unsigned hash(const OwnPtr<FloatingObject>& key) { return hash(key.ge t()); } 118 static unsigned hash(const OwnPtr<FloatingObject>& key) { return hash(key.ge t()); }
116 static unsigned hash(const PassOwnPtr<FloatingObject>& key) { return hash(ke y.get()); } 119 static unsigned hash(const PassOwnPtr<FloatingObject>& key) { return hash(ke y.get()); }
117 static bool equal(OwnPtr<FloatingObject>& a, FloatingObject* b) { return a-> layoutObject() == b->layoutObject(); } 120 static bool equal(OwnPtr<FloatingObject>& a, FloatingObject* b) { return a-> layoutObject() == b->layoutObject(); }
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
151 const FloatingObjectSet& set() const { return m_set; } 154 const FloatingObjectSet& set() const { return m_set; }
152 void clearLineBoxTreePointers(); 155 void clearLineBoxTreePointers();
153 156
154 LayoutUnit logicalLeftOffset(LayoutUnit fixedOffset, LayoutUnit logicalTop, LayoutUnit logicalHeight); 157 LayoutUnit logicalLeftOffset(LayoutUnit fixedOffset, LayoutUnit logicalTop, LayoutUnit logicalHeight);
155 LayoutUnit logicalRightOffset(LayoutUnit fixedOffset, LayoutUnit logicalTop, LayoutUnit logicalHeight); 158 LayoutUnit logicalRightOffset(LayoutUnit fixedOffset, LayoutUnit logicalTop, LayoutUnit logicalHeight);
156 159
157 LayoutUnit logicalLeftOffsetForPositioningFloat(LayoutUnit fixedOffset, Layo utUnit logicalTop, LayoutUnit* heightRemaining); 160 LayoutUnit logicalLeftOffsetForPositioningFloat(LayoutUnit fixedOffset, Layo utUnit logicalTop, LayoutUnit* heightRemaining);
158 LayoutUnit logicalRightOffsetForPositioningFloat(LayoutUnit fixedOffset, Lay outUnit logicalTop, LayoutUnit* heightRemaining); 161 LayoutUnit logicalRightOffsetForPositioningFloat(LayoutUnit fixedOffset, Lay outUnit logicalTop, LayoutUnit* heightRemaining);
159 162
160 LayoutUnit lowestFloatLogicalBottom(FloatingObject::Type); 163 LayoutUnit lowestFloatLogicalBottom(FloatingObject::Type);
164 FloatingObject* lowestFloatingObject() const;
161 165
162 private: 166 private:
163 bool hasLowestFloatLogicalBottomCached(bool isHorizontal, FloatingObject::Ty pe floatType) const; 167 bool hasLowestFloatLogicalBottomCached(bool isHorizontal, FloatingObject::Ty pe floatType) const;
164 LayoutUnit getCachedlowestFloatLogicalBottom(FloatingObject::Type floatType) const; 168 LayoutUnit getCachedlowestFloatLogicalBottom(FloatingObject::Type floatType) const;
165 void setCachedLowestFloatLogicalBottom(bool isHorizontal, FloatingObject::Ty pe floatType, LayoutUnit value); 169 void setCachedLowestFloatLogicalBottom(bool isHorizontal, FloatingObject::Ty pe floatType, FloatingObject*);
166 void markLowestFloatLogicalBottomCacheAsDirty(); 170 void markLowestFloatLogicalBottomCacheAsDirty();
167 171
168 void computePlacedFloatsTree(); 172 void computePlacedFloatsTree();
169 const FloatingObjectTree& placedFloatsTree() 173 const FloatingObjectTree& placedFloatsTree()
170 { 174 {
171 if (!m_placedFloatsTree.isInitialized()) 175 if (!m_placedFloatsTree.isInitialized())
172 computePlacedFloatsTree(); 176 computePlacedFloatsTree();
173 return m_placedFloatsTree; 177 return m_placedFloatsTree;
174 } 178 }
175 void increaseObjectsCount(FloatingObject::Type); 179 void increaseObjectsCount(FloatingObject::Type);
176 void decreaseObjectsCount(FloatingObject::Type); 180 void decreaseObjectsCount(FloatingObject::Type);
177 FloatingObjectInterval intervalForFloatingObject(FloatingObject*); 181 FloatingObjectInterval intervalForFloatingObject(FloatingObject*);
178 182
179 FloatingObjectSet m_set; 183 FloatingObjectSet m_set;
180 FloatingObjectTree m_placedFloatsTree; 184 FloatingObjectTree m_placedFloatsTree;
181 unsigned m_leftObjectsCount; 185 unsigned m_leftObjectsCount;
182 unsigned m_rightObjectsCount; 186 unsigned m_rightObjectsCount;
183 bool m_horizontalWritingMode; 187 bool m_horizontalWritingMode;
184 const LayoutBlockFlow* m_layoutObject; 188 const LayoutBlockFlow* m_layoutObject;
185 189
186 struct FloatBottomCachedValue { 190 struct FloatBottomCachedValue {
187 FloatBottomCachedValue(); 191 FloatBottomCachedValue();
188 LayoutUnit value; 192 FloatingObject* floatingObject;
189 bool dirty; 193 bool dirty;
190 }; 194 };
191 FloatBottomCachedValue m_lowestFloatBottomCache[2]; 195 FloatBottomCachedValue m_lowestFloatBottomCache[2];
192 bool m_cachedHorizontalWritingMode; 196 bool m_cachedHorizontalWritingMode;
193 }; 197 };
194 198
195 #ifndef NDEBUG 199 #ifndef NDEBUG
196 // These structures are used by PODIntervalTree for debugging purposes. 200 // These structures are used by PODIntervalTree for debugging purposes.
197 template <> struct ValueToString<int> { 201 template <> struct ValueToString<int> {
198 static String string(const int value); 202 static String string(const int value);
199 }; 203 };
200 template<> struct ValueToString<FloatingObject*> { 204 template<> struct ValueToString<FloatingObject*> {
201 static String string(const FloatingObject*); 205 static String string(const FloatingObject*);
202 }; 206 };
203 #endif 207 #endif
204 208
205 } // namespace blink 209 } // namespace blink
206 210
207 #endif // FloatingObjects_h 211 #endif // FloatingObjects_h
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698