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

Side by Side Diff: Source/core/rendering/RenderMultiColumnSet.cpp

Issue 144463015: [New multicol] Avoid 1px tall multicol if percent height is unresolvable. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Created 6 years, 10 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
« no previous file with comments | « LayoutTests/fast/multicol/newmulticol/unresolvable-percent-max-height-expected.html ('k') | no next file » | 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) 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 22 matching lines...) Expand all
33 33
34 using namespace std; 34 using namespace std;
35 35
36 namespace WebCore { 36 namespace WebCore {
37 37
38 RenderMultiColumnSet::RenderMultiColumnSet(RenderFlowThread* flowThread) 38 RenderMultiColumnSet::RenderMultiColumnSet(RenderFlowThread* flowThread)
39 : RenderRegionSet(0, flowThread) 39 : RenderRegionSet(0, flowThread)
40 , m_computedColumnCount(1) 40 , m_computedColumnCount(1)
41 , m_computedColumnWidth(0) 41 , m_computedColumnWidth(0)
42 , m_computedColumnHeight(0) 42 , m_computedColumnHeight(0)
43 , m_maxColumnHeight(LayoutUnit::max()) 43 , m_maxColumnHeight(RenderFlowThread::maxLogicalHeight())
44 , m_minSpaceShortage(LayoutUnit::max()) 44 , m_minSpaceShortage(RenderFlowThread::maxLogicalHeight())
45 , m_minimumColumnHeight(0) 45 , m_minimumColumnHeight(0)
46 { 46 {
47 } 47 }
48 48
49 RenderMultiColumnSet* RenderMultiColumnSet::createAnonymous(RenderFlowThread* fl owThread) 49 RenderMultiColumnSet* RenderMultiColumnSet::createAnonymous(RenderFlowThread* fl owThread)
50 { 50 {
51 Document& document = flowThread->document(); 51 Document& document = flowThread->document();
52 RenderMultiColumnSet* renderer = new RenderMultiColumnSet(flowThread); 52 RenderMultiColumnSet* renderer = new RenderMultiColumnSet(flowThread);
53 renderer->setDocumentForAnonymous(&document); 53 renderer->setDocumentForAnonymous(&document);
54 return renderer; 54 return renderer;
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after
141 if (forcedBreaksCount() > 1 && forcedBreaksCount() >= computedColumnCount()) { 141 if (forcedBreaksCount() > 1 && forcedBreaksCount() >= computedColumnCount()) {
142 // Too many forced breaks to allow any implicit breaks. Initial balancin g should already 142 // Too many forced breaks to allow any implicit breaks. Initial balancin g should already
143 // have set a good height. There's nothing more we should do. 143 // have set a good height. There's nothing more we should do.
144 return m_computedColumnHeight; 144 return m_computedColumnHeight;
145 } 145 }
146 146
147 // If the initial guessed column height wasn't enough, stretch it now. Stret ch by the lowest 147 // If the initial guessed column height wasn't enough, stretch it now. Stret ch by the lowest
148 // amount of space shortage found during layout. 148 // amount of space shortage found during layout.
149 149
150 ASSERT(m_minSpaceShortage > 0); // We should never _shrink_ the height! 150 ASSERT(m_minSpaceShortage > 0); // We should never _shrink_ the height!
151 ASSERT(m_minSpaceShortage != LayoutUnit::max()); // If this happens, we prob ably have a bug. 151 ASSERT(m_minSpaceShortage != RenderFlowThread::maxLogicalHeight()); // If th is happens, we probably have a bug.
152 if (m_minSpaceShortage == LayoutUnit::max()) 152 if (m_minSpaceShortage == RenderFlowThread::maxLogicalHeight())
153 return m_computedColumnHeight; // So bail out rather than looping infini tely. 153 return m_computedColumnHeight; // So bail out rather than looping infini tely.
154 154
155 return m_computedColumnHeight + m_minSpaceShortage; 155 return m_computedColumnHeight + m_minSpaceShortage;
156 } 156 }
157 157
158 void RenderMultiColumnSet::clearForcedBreaks() 158 void RenderMultiColumnSet::clearForcedBreaks()
159 { 159 {
160 m_contentRuns.clear(); 160 m_contentRuns.clear();
161 } 161 }
162 162
(...skipping 21 matching lines...) Expand all
184 184
185 // After having calculated an initial column height, the multicol container typically needs at 185 // After having calculated an initial column height, the multicol container typically needs at
186 // least one more layout pass with a new column height, but if a height was specified, we only 186 // least one more layout pass with a new column height, but if a height was specified, we only
187 // need to do this if we think that we need less space than specified. Conve rsely, if we 187 // need to do this if we think that we need less space than specified. Conve rsely, if we
188 // determined that the columns need to be as tall as the specified height of the container, we 188 // determined that the columns need to be as tall as the specified height of the container, we
189 // have already laid it out correctly, and there's no need for another pass. 189 // have already laid it out correctly, and there's no need for another pass.
190 190
191 if (m_computedColumnHeight == oldColumnHeight) 191 if (m_computedColumnHeight == oldColumnHeight)
192 return false; // No change. We're done. 192 return false; // No change. We're done.
193 193
194 m_minSpaceShortage = LayoutUnit::max(); 194 m_minSpaceShortage = RenderFlowThread::maxLogicalHeight();
195 clearForcedBreaks(); 195 clearForcedBreaks();
196 return true; // Need another pass. 196 return true; // Need another pass.
197 } 197 }
198 198
199 void RenderMultiColumnSet::recordSpaceShortage(LayoutUnit spaceShortage) 199 void RenderMultiColumnSet::recordSpaceShortage(LayoutUnit spaceShortage)
200 { 200 {
201 if (spaceShortage >= m_minSpaceShortage) 201 if (spaceShortage >= m_minSpaceShortage)
202 return; 202 return;
203 203
204 // The space shortage is what we use as our stretch amount. We need a positi ve number here in 204 // The space shortage is what we use as our stretch amount. We need a positi ve number here in
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
237 237
238 // Set box logical top. 238 // Set box logical top.
239 ASSERT(!previousSiblingBox() || !previousSiblingBox()->isRenderMultiColumnSe t()); // FIXME: multiple set not implemented; need to examine previous set to ca lculate the correct logical top. 239 ASSERT(!previousSiblingBox() || !previousSiblingBox()->isRenderMultiColumnSe t()); // FIXME: multiple set not implemented; need to examine previous set to ca lculate the correct logical top.
240 setLogicalTop(multicolBlock->borderBefore() + multicolBlock->paddingBefore() ); 240 setLogicalTop(multicolBlock->borderBefore() + multicolBlock->paddingBefore() );
241 241
242 // Set box width. 242 // Set box width.
243 updateLogicalWidth(); 243 updateLogicalWidth();
244 244
245 if (multicolBlock->requiresBalancing()) { 245 if (multicolBlock->requiresBalancing()) {
246 // Set maximum column height. We will not stretch beyond this. 246 // Set maximum column height. We will not stretch beyond this.
247 m_maxColumnHeight = LayoutUnit::max(); 247 m_maxColumnHeight = RenderFlowThread::maxLogicalHeight();
248 if (!multicolStyle->logicalHeight().isAuto()) 248 if (!multicolStyle->logicalHeight().isAuto()) {
249 m_maxColumnHeight = multicolBlock->computeContentLogicalHeight(multi colStyle->logicalHeight(), -1); 249 m_maxColumnHeight = multicolBlock->computeContentLogicalHeight(multi colStyle->logicalHeight(), -1);
250 if (m_maxColumnHeight == -1)
251 m_maxColumnHeight = RenderFlowThread::maxLogicalHeight();
252 }
250 if (!multicolStyle->logicalMaxHeight().isUndefined()) { 253 if (!multicolStyle->logicalMaxHeight().isUndefined()) {
251 LayoutUnit logicalMaxHeight = multicolBlock->computeContentLogicalHe ight(multicolStyle->logicalMaxHeight(), -1); 254 LayoutUnit logicalMaxHeight = multicolBlock->computeContentLogicalHe ight(multicolStyle->logicalMaxHeight(), -1);
252 if (m_maxColumnHeight > logicalMaxHeight) 255 if (logicalMaxHeight != -1 && m_maxColumnHeight > logicalMaxHeight)
253 m_maxColumnHeight = logicalMaxHeight; 256 m_maxColumnHeight = logicalMaxHeight;
254 } 257 }
255 m_maxColumnHeight = heightAdjustedForSetOffset(m_maxColumnHeight); 258 m_maxColumnHeight = heightAdjustedForSetOffset(m_maxColumnHeight);
256 m_computedColumnHeight = 0; // Restart balancing. 259 m_computedColumnHeight = 0; // Restart balancing.
257 } else { 260 } else {
258 setAndConstrainColumnHeight(heightAdjustedForSetOffset(multicolBlock->co lumnHeightAvailable())); 261 setAndConstrainColumnHeight(heightAdjustedForSetOffset(multicolBlock->co lumnHeightAvailable()));
259 } 262 }
260 263
261 clearForcedBreaks(); 264 clearForcedBreaks();
262 265
(...skipping 318 matching lines...) Expand 10 before | Expand all | Expand 10 after
581 fragments.append(fragment); 584 fragments.append(fragment);
582 } 585 }
583 } 586 }
584 587
585 const char* RenderMultiColumnSet::renderName() const 588 const char* RenderMultiColumnSet::renderName() const
586 { 589 {
587 return "RenderMultiColumnSet"; 590 return "RenderMultiColumnSet";
588 } 591 }
589 592
590 } 593 }
OLDNEW
« no previous file with comments | « LayoutTests/fast/multicol/newmulticol/unresolvable-percent-max-height-expected.html ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698