Chromium Code Reviews| OLD | NEW |
|---|---|
| 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 1854 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1865 TrackedLayoutBoxListHashSet::const_iterator end = positionedDescendantSe t->end(); | 1865 TrackedLayoutBoxListHashSet::const_iterator end = positionedDescendantSe t->end(); |
| 1866 for (TrackedLayoutBoxListHashSet::const_iterator it = positionedDescenda ntSet->begin(); it != end; ++it) { | 1866 for (TrackedLayoutBoxListHashSet::const_iterator it = positionedDescenda ntSet->begin(); it != end; ++it) { |
| 1867 LayoutBox* currBox = *it; | 1867 LayoutBox* currBox = *it; |
| 1868 ASSERT(!currBox->needsLayout()); | 1868 ASSERT(!currBox->needsLayout()); |
| 1869 } | 1869 } |
| 1870 } | 1870 } |
| 1871 } | 1871 } |
| 1872 | 1872 |
| 1873 #endif | 1873 #endif |
| 1874 | 1874 |
| 1875 LayoutUnit LayoutBlock::availableLogicalHeightForPercentageComputation(const Lay outBlock& block) | |
| 1876 { | |
| 1877 LayoutUnit availableHeight = LayoutUnit(-1); | |
|
svillar
2016/07/20 08:24:00
LayoutUnit availableHeight(-1);
Manuel Rego
2016/07/21 09:46:01
Acknowledged.
| |
| 1878 | |
| 1879 const ComputedStyle& style = block.styleRef(); | |
| 1880 | |
| 1881 // A positioned element that specified both top/bottom or that specifies hei ght should be treated as though it has a height | |
| 1882 // explicitly specified that can be used for any percentage computations. | |
| 1883 bool isOutOfFlowPositionedWithSpecifiedHeight = block.isOutOfFlowPositioned( ) && (!style.logicalHeight().isAuto() || (!style.logicalTop().isAuto() && !style .logicalBottom().isAuto())); | |
| 1884 | |
| 1885 LayoutUnit stretchedFlexHeight(-1); | |
| 1886 if (block.isFlexItem()) | |
| 1887 stretchedFlexHeight = toLayoutFlexibleBox(block.parent())->childLogicalH eightForPercentageResolution(block); | |
| 1888 | |
| 1889 if (stretchedFlexHeight != LayoutUnit(-1)) { | |
| 1890 availableHeight = stretchedFlexHeight; | |
| 1891 } else if (block.isGridItem() && block.hasOverrideLogicalContentHeight()) { | |
| 1892 availableHeight = block.overrideLogicalContentHeight(); | |
| 1893 } else if (style.logicalHeight().isFixed()) { | |
| 1894 LayoutUnit contentBoxHeight = block.adjustContentBoxLogicalHeightForBoxS izing(style.logicalHeight().value()); | |
| 1895 availableHeight = block.constrainContentBoxLogicalHeightByMinMax( | |
| 1896 contentBoxHeight - block.scrollbarLogicalHeight(), LayoutUnit(-1)).c lampNegativeToZero(); | |
| 1897 } else if (style.logicalHeight().hasPercent() && !isOutOfFlowPositionedWithS pecifiedHeight) { | |
| 1898 // We need to recur and compute the percentage height for our containing block. | |
| 1899 LayoutUnit heightWithScrollbar = block.computePercentageLogicalHeight(st yle.logicalHeight()); | |
| 1900 if (heightWithScrollbar != -1) { | |
| 1901 LayoutUnit contentBoxHeightWithScrollbar = block.adjustContentBoxLog icalHeightForBoxSizing(heightWithScrollbar); | |
| 1902 // We need to adjust for min/max height because this method does not | |
| 1903 // handle the min/max of the current block, its caller does. So the | |
| 1904 // return value from the recursive call will not have been adjusted | |
| 1905 // yet. | |
| 1906 LayoutUnit contentBoxHeight = block.constrainContentBoxLogicalHeight ByMinMax(contentBoxHeightWithScrollbar - block.scrollbarLogicalHeight(), LayoutU nit(-1)); | |
| 1907 availableHeight = std::max(LayoutUnit(), contentBoxHeight); | |
| 1908 } | |
| 1909 } else if (isOutOfFlowPositionedWithSpecifiedHeight) { | |
| 1910 // Don't allow this to affect the block' size() member variable, since t his | |
| 1911 // can get called while the block is still laying out its kids. | |
| 1912 LogicalExtentComputedValues computedValues; | |
| 1913 block.computeLogicalHeight(block.logicalHeight(), LayoutUnit(), computed Values); | |
| 1914 availableHeight = computedValues.m_extent - block.borderAndPaddingLogica lHeight() - block.scrollbarLogicalHeight(); | |
| 1915 } else if (block.isLayoutView()) { | |
| 1916 availableHeight = toLayoutView(block).viewLogicalHeightForPercentages(); | |
| 1917 } | |
| 1918 | |
| 1919 return availableHeight; | |
| 1920 } | |
| 1921 | |
| 1922 bool LayoutBlock::hasDefiniteLogicalHeight() const | |
| 1923 { | |
| 1924 return availableLogicalHeightForPercentageComputation(*this) != LayoutUnit(- 1); | |
| 1925 } | |
| 1926 | |
| 1875 } // namespace blink | 1927 } // namespace blink |
| OLD | NEW |