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

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

Issue 1558963003: Recalculate column heights as part of column set layout. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 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) 2012 Apple Inc. All rights reserved. 2 * Copyright (C) 2012 Apple Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions 5 * modification, are permitted provided that the following conditions
6 * are met: 6 * are met:
7 * 1. Redistributions of source code must retain the above copyright 7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer. 8 * notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright 9 * 2. Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the 10 * notice, this list of conditions and the following disclaimer in the
(...skipping 165 matching lines...) Expand 10 before | Expand all | Expand 10 after
176 176
177 LayoutMultiColumnSet* columnSetAtBlockOffset(LayoutUnit) const final; 177 LayoutMultiColumnSet* columnSetAtBlockOffset(LayoutUnit) const final;
178 178
179 void layoutColumns(SubtreeLayoutScope&); 179 void layoutColumns(SubtreeLayoutScope&);
180 180
181 // Skip past a column spanner during flow thread layout. Spanners are not la id out inside the 181 // Skip past a column spanner during flow thread layout. Spanners are not la id out inside the
182 // flow thread, since the flow thread is not in a spanner's containing block chain (since the 182 // flow thread, since the flow thread is not in a spanner's containing block chain (since the
183 // containing block is the multicol container). 183 // containing block is the multicol container).
184 void skipColumnSpanner(LayoutBox*, LayoutUnit logicalTopInFlowThread); 184 void skipColumnSpanner(LayoutBox*, LayoutUnit logicalTopInFlowThread);
185 185
186 bool recalculateColumnHeights(); 186 // Returns true if at least one column got a new height after flow thread la yout (during column
187 // set layout), in which case we need another layout pass. Column heights ma y change after flow
188 // thread layout because of balancing. We may have to do multiple layout pas ses, depending on
189 // how the contents is fitted to the changed column heights. In most cases, laying out again
190 // twice or even just once will suffice. Sometimes we need more passes than that, though, but
191 // the number of retries should not exceed the number of columns, unless we have a bug.
192 bool columnHeightsChanged() const { return m_columnHeightsChanged; }
193 void setColumnHeightsChanged() { m_columnHeightsChanged = true; }
187 194
188 void columnRuleStyleDidChange(); 195 void columnRuleStyleDidChange();
189 196
190 // Remove the spanner placeholder and return true if the specified object is no longer a valid spanner. 197 // Remove the spanner placeholder and return true if the specified object is no longer a valid spanner.
191 bool removeSpannerPlaceholderIfNoLongerValid(LayoutBox* spannerObjectInFlowT hread); 198 bool removeSpannerPlaceholderIfNoLongerValid(LayoutBox* spannerObjectInFlowT hread);
192 199
193 LayoutMultiColumnFlowThread* enclosingFlowThread() const; 200 LayoutMultiColumnFlowThread* enclosingFlowThread() const;
194 FragmentationContext* enclosingFragmentationContext() const; 201 FragmentationContext* enclosingFragmentationContext() const;
195 LayoutUnit blockOffsetInEnclosingFragmentationContext() const { ASSERT(enclo singFragmentationContext()); return m_blockOffsetInEnclosingFragmentationContext ; } 202 LayoutUnit blockOffsetInEnclosingFragmentationContext() const { ASSERT(enclo singFragmentationContext()); return m_blockOffsetInEnclosingFragmentationContext ; }
196 203
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
236 // top location estimates (due to e.g. margin collapsing), and possibly for other reasons. 243 // top location estimates (due to e.g. margin collapsing), and possibly for other reasons.
237 LayoutMultiColumnSet* m_lastSetWorkedOn; 244 LayoutMultiColumnSet* m_lastSetWorkedOn;
238 245
239 unsigned m_columnCount; // The used value of column-count 246 unsigned m_columnCount; // The used value of column-count
240 LayoutUnit m_columnHeightAvailable; // Total height available to columns, or 0 if auto. 247 LayoutUnit m_columnHeightAvailable; // Total height available to columns, or 0 if auto.
241 248
242 // Cached block offset from this flow thread to the enclosing fragmentation context, if any. In 249 // Cached block offset from this flow thread to the enclosing fragmentation context, if any. In
243 // the coordinate space of the enclosing fragmentation context. 250 // the coordinate space of the enclosing fragmentation context.
244 LayoutUnit m_blockOffsetInEnclosingFragmentationContext; 251 LayoutUnit m_blockOffsetInEnclosingFragmentationContext;
245 252
246 bool m_inBalancingPass; // Set when relayouting for column balancing. 253 bool m_columnHeightsChanged; // Set when column heights are out of sync with actual layout.
247 bool m_needsColumnHeightsRecalculation; // Set when we need to recalculate t he column set heights after layout.
248 bool m_progressionIsInline; // Always true for regular multicol. False for p aged-y overflow. 254 bool m_progressionIsInline; // Always true for regular multicol. False for p aged-y overflow.
249 bool m_isBeingEvacuated; 255 bool m_isBeingEvacuated;
250 }; 256 };
251 257
252 // Cannot use DEFINE_LAYOUT_OBJECT_TYPE_CASTS here, because isMultiColumnFlowThr ead() is defined in 258 // Cannot use DEFINE_LAYOUT_OBJECT_TYPE_CASTS here, because isMultiColumnFlowThr ead() is defined in
253 // LayoutFlowThread, not in LayoutObject. 259 // LayoutFlowThread, not in LayoutObject.
254 DEFINE_TYPE_CASTS(LayoutMultiColumnFlowThread, LayoutFlowThread, object, object- >isLayoutMultiColumnFlowThread(), object.isLayoutMultiColumnFlowThread()); 260 DEFINE_TYPE_CASTS(LayoutMultiColumnFlowThread, LayoutFlowThread, object, object- >isLayoutMultiColumnFlowThread(), object.isLayoutMultiColumnFlowThread());
255 261
256 } // namespace blink 262 } // namespace blink
257 263
258 #endif // LayoutMultiColumnFlowThread_h 264 #endif // LayoutMultiColumnFlowThread_h
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698