OLD | NEW |
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 240 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
251 return false; | 251 return false; |
252 } | 252 } |
253 | 253 |
254 // So, there's not enough room in the last fragmentainer group. However, | 254 // So, there's not enough room in the last fragmentainer group. However, |
255 // there can only ever be one fragmentainer group per column set if we're not | 255 // there can only ever be one fragmentainer group per column set if we're not |
256 // nested inside another fragmentation context. We'll just create overflowing | 256 // nested inside another fragmentation context. We'll just create overflowing |
257 // columns if the fragmentainer group cannot hold all the content. | 257 // columns if the fragmentainer group cannot hold all the content. |
258 if (!multiColumnFlowThread()->enclosingFragmentationContext()) | 258 if (!multiColumnFlowThread()->enclosingFragmentationContext()) |
259 return false; | 259 return false; |
260 | 260 |
| 261 // If we have reached the limits of what a LayoutUnit can hold, we better |
| 262 // stop, or we'd end up with zero-height columns. |
| 263 if (offsetInFlowThread.mightBeSaturated()) |
| 264 return false; |
| 265 |
261 // We're in a nested fragmentation context, and the last fragmentainer group | 266 // We're in a nested fragmentation context, and the last fragmentainer group |
262 // cannot hold content at the specified offset without overflowing. This | 267 // cannot hold content at the specified offset without overflowing. This |
263 // usually warrants a new fragmentainer group; however, this will not be the | 268 // usually warrants a new fragmentainer group; however, this will not be the |
264 // case if we have already allocated all available block space in this | 269 // case if we have already allocated all available block space in this |
265 // multicol container. When setting up a new fragmentainer group, we always | 270 // multicol container. When setting up a new fragmentainer group, we always |
266 // constrain against the remaining portion of any specified | 271 // constrain against the remaining portion of any specified |
267 // height/max-height. This means that we shouldn't allow creation of | 272 // height/max-height. This means that we shouldn't allow creation of |
268 // fragmentainer groups below the bottom of the multicol container, or we'd | 273 // fragmentainer groups below the bottom of the multicol container, or we'd |
269 // end up with zero-height fragmentainer groups (or actually 1px; see | 274 // end up with zero-height fragmentainer groups (or actually 1px; see |
270 // heightAdjustedForRowOffset() in MultiColumnFragmentainerGroup, which | 275 // heightAdjustedForRowOffset() in MultiColumnFragmentainerGroup, which |
(...skipping 339 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
610 // Now add in column rule bounds, if present. | 615 // Now add in column rule bounds, if present. |
611 Vector<LayoutRect> columnRuleBounds; | 616 Vector<LayoutRect> columnRuleBounds; |
612 if (computeColumnRuleBounds(LayoutPoint(), columnRuleBounds)) { | 617 if (computeColumnRuleBounds(LayoutPoint(), columnRuleBounds)) { |
613 for (auto& bound : columnRuleBounds) | 618 for (auto& bound : columnRuleBounds) |
614 blockFlowBounds.unite(bound); | 619 blockFlowBounds.unite(bound); |
615 } | 620 } |
616 return blockFlowBounds; | 621 return blockFlowBounds; |
617 } | 622 } |
618 | 623 |
619 } // namespace blink | 624 } // namespace blink |
OLD | NEW |