OLD | NEW |
1 /* | 1 /* |
2 * This file is part of the render object implementation for KHTML. | 2 * This file is part of the render object implementation for KHTML. |
3 * | 3 * |
4 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) | 4 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) |
5 * (C) 1999 Antti Koivisto (koivisto@kde.org) | 5 * (C) 1999 Antti Koivisto (koivisto@kde.org) |
6 * Copyright (C) 2003 Apple Computer, Inc. | 6 * Copyright (C) 2003 Apple Computer, Inc. |
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 16 matching lines...) Expand all Loading... |
27 | 27 |
28 #include "core/frame/UseCounter.h" | 28 #include "core/frame/UseCounter.h" |
29 #include "core/rendering/FastTextAutosizer.h" | 29 #include "core/rendering/FastTextAutosizer.h" |
30 #include "core/rendering/LayoutRepainter.h" | 30 #include "core/rendering/LayoutRepainter.h" |
31 #include "core/rendering/RenderLayer.h" | 31 #include "core/rendering/RenderLayer.h" |
32 #include "core/rendering/RenderView.h" | 32 #include "core/rendering/RenderView.h" |
33 #include "platform/fonts/Font.h" | 33 #include "platform/fonts/Font.h" |
34 #include "wtf/StdLibExtras.h" | 34 #include "wtf/StdLibExtras.h" |
35 #include "wtf/unicode/CharacterNames.h" | 35 #include "wtf/unicode/CharacterNames.h" |
36 | 36 |
37 using namespace std; | |
38 | |
39 namespace WebCore { | 37 namespace WebCore { |
40 | 38 |
41 class FlexBoxIterator { | 39 class FlexBoxIterator { |
42 public: | 40 public: |
43 FlexBoxIterator(RenderDeprecatedFlexibleBox* parent) | 41 FlexBoxIterator(RenderDeprecatedFlexibleBox* parent) |
44 : m_box(parent) | 42 : m_box(parent) |
45 , m_largestOrdinal(1) | 43 , m_largestOrdinal(1) |
46 { | 44 { |
47 if (m_box->style()->boxOrient() == HORIZONTAL && !m_box->style()->isLeft
ToRightDirection()) | 45 if (m_box->style()->boxOrient() == HORIZONTAL && !m_box->style()->isLeft
ToRightDirection()) |
48 m_forward = m_box->style()->boxDirection() != BNORMAL; | 46 m_forward = m_box->style()->boxDirection() != BNORMAL; |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
81 | 79 |
82 if (!m_ordinalIteration) | 80 if (!m_ordinalIteration) |
83 m_currentOrdinal = m_forward ? 1 : m_largestOrdinal; | 81 m_currentOrdinal = m_forward ? 1 : m_largestOrdinal; |
84 else { | 82 else { |
85 if (static_cast<size_t>(m_ordinalIteration) >= m_ordinalValu
es.size() + 1) | 83 if (static_cast<size_t>(m_ordinalIteration) >= m_ordinalValu
es.size() + 1) |
86 return 0; | 84 return 0; |
87 | 85 |
88 // Only copy+sort the values once per layout even if the ite
rator is reset. | 86 // Only copy+sort the values once per layout even if the ite
rator is reset. |
89 if (m_ordinalValues.size() != m_sortedOrdinalValues.size())
{ | 87 if (m_ordinalValues.size() != m_sortedOrdinalValues.size())
{ |
90 copyToVector(m_ordinalValues, m_sortedOrdinalValues); | 88 copyToVector(m_ordinalValues, m_sortedOrdinalValues); |
91 sort(m_sortedOrdinalValues.begin(), m_sortedOrdinalValue
s.end()); | 89 std::sort(m_sortedOrdinalValues.begin(), m_sortedOrdinal
Values.end()); |
92 } | 90 } |
93 m_currentOrdinal = m_forward ? m_sortedOrdinalValues[m_ordin
alIteration - 1] : m_sortedOrdinalValues[m_sortedOrdinalValues.size() - m_ordina
lIteration]; | 91 m_currentOrdinal = m_forward ? m_sortedOrdinalValues[m_ordin
alIteration - 1] : m_sortedOrdinalValues[m_sortedOrdinalValues.size() - m_ordina
lIteration]; |
94 } | 92 } |
95 | 93 |
96 m_currentChild = m_forward ? m_box->firstChildBox() : m_box->las
tChildBox(); | 94 m_currentChild = m_forward ? m_box->firstChildBox() : m_box->las
tChildBox(); |
97 } else | 95 } else |
98 m_currentChild = m_forward ? m_currentChild->nextSiblingBox() :
m_currentChild->previousSiblingBox(); | 96 m_currentChild = m_forward ? m_currentChild->nextSiblingBox() :
m_currentChild->previousSiblingBox(); |
99 | 97 |
100 if (m_currentChild && notFirstOrdinalValue()) | 98 if (m_currentChild && notFirstOrdinalValue()) |
101 m_ordinalValues.add(m_currentChild->style()->boxOrdinalGroup()); | 99 m_ordinalValues.add(m_currentChild->style()->boxOrdinalGroup()); |
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
194 | 192 |
195 void RenderDeprecatedFlexibleBox::computeIntrinsicLogicalWidths(LayoutUnit& minL
ogicalWidth, LayoutUnit& maxLogicalWidth) const | 193 void RenderDeprecatedFlexibleBox::computeIntrinsicLogicalWidths(LayoutUnit& minL
ogicalWidth, LayoutUnit& maxLogicalWidth) const |
196 { | 194 { |
197 if (hasMultipleLines() || isVertical()) { | 195 if (hasMultipleLines() || isVertical()) { |
198 for (RenderBox* child = firstChildBox(); child; child = child->nextSibli
ngBox()) { | 196 for (RenderBox* child = firstChildBox(); child; child = child->nextSibli
ngBox()) { |
199 if (childDoesNotAffectWidthOrFlexing(child)) | 197 if (childDoesNotAffectWidthOrFlexing(child)) |
200 continue; | 198 continue; |
201 | 199 |
202 LayoutUnit margin = marginWidthForChild(child); | 200 LayoutUnit margin = marginWidthForChild(child); |
203 LayoutUnit width = child->minPreferredLogicalWidth() + margin; | 201 LayoutUnit width = child->minPreferredLogicalWidth() + margin; |
204 minLogicalWidth = max(width, minLogicalWidth); | 202 minLogicalWidth = std::max(width, minLogicalWidth); |
205 | 203 |
206 width = child->maxPreferredLogicalWidth() + margin; | 204 width = child->maxPreferredLogicalWidth() + margin; |
207 maxLogicalWidth = max(width, maxLogicalWidth); | 205 maxLogicalWidth = std::max(width, maxLogicalWidth); |
208 } | 206 } |
209 } else { | 207 } else { |
210 for (RenderBox* child = firstChildBox(); child; child = child->nextSibli
ngBox()) { | 208 for (RenderBox* child = firstChildBox(); child; child = child->nextSibli
ngBox()) { |
211 if (childDoesNotAffectWidthOrFlexing(child)) | 209 if (childDoesNotAffectWidthOrFlexing(child)) |
212 continue; | 210 continue; |
213 | 211 |
214 LayoutUnit margin = marginWidthForChild(child); | 212 LayoutUnit margin = marginWidthForChild(child); |
215 minLogicalWidth += child->minPreferredLogicalWidth() + margin; | 213 minLogicalWidth += child->minPreferredLogicalWidth() + margin; |
216 maxLogicalWidth += child->maxPreferredLogicalWidth() + margin; | 214 maxLogicalWidth += child->maxPreferredLogicalWidth() + margin; |
217 } | 215 } |
218 } | 216 } |
219 | 217 |
220 maxLogicalWidth = max(minLogicalWidth, maxLogicalWidth); | 218 maxLogicalWidth = std::max(minLogicalWidth, maxLogicalWidth); |
221 | 219 |
222 LayoutUnit scrollbarWidth = instrinsicScrollbarLogicalWidth(); | 220 LayoutUnit scrollbarWidth = instrinsicScrollbarLogicalWidth(); |
223 maxLogicalWidth += scrollbarWidth; | 221 maxLogicalWidth += scrollbarWidth; |
224 minLogicalWidth += scrollbarWidth; | 222 minLogicalWidth += scrollbarWidth; |
225 } | 223 } |
226 | 224 |
227 void RenderDeprecatedFlexibleBox::computePreferredLogicalWidths() | 225 void RenderDeprecatedFlexibleBox::computePreferredLogicalWidths() |
228 { | 226 { |
229 ASSERT(preferredLogicalWidthsDirty()); | 227 ASSERT(preferredLogicalWidthsDirty()); |
230 | 228 |
231 m_minPreferredLogicalWidth = m_maxPreferredLogicalWidth = 0; | 229 m_minPreferredLogicalWidth = m_maxPreferredLogicalWidth = 0; |
232 RenderStyle* styleToUse = style(); | 230 RenderStyle* styleToUse = style(); |
233 | 231 |
234 if (styleToUse->width().isFixed() && styleToUse->width().value() > 0) | 232 if (styleToUse->width().isFixed() && styleToUse->width().value() > 0) |
235 m_minPreferredLogicalWidth = m_maxPreferredLogicalWidth = adjustContentB
oxLogicalWidthForBoxSizing(styleToUse->width().value()); | 233 m_minPreferredLogicalWidth = m_maxPreferredLogicalWidth = adjustContentB
oxLogicalWidthForBoxSizing(styleToUse->width().value()); |
236 else | 234 else |
237 computeIntrinsicLogicalWidths(m_minPreferredLogicalWidth, m_maxPreferred
LogicalWidth); | 235 computeIntrinsicLogicalWidths(m_minPreferredLogicalWidth, m_maxPreferred
LogicalWidth); |
238 | 236 |
239 if (styleToUse->minWidth().isFixed() && styleToUse->minWidth().value() > 0)
{ | 237 if (styleToUse->minWidth().isFixed() && styleToUse->minWidth().value() > 0)
{ |
240 m_maxPreferredLogicalWidth = max(m_maxPreferredLogicalWidth, adjustConte
ntBoxLogicalWidthForBoxSizing(styleToUse->minWidth().value())); | 238 m_maxPreferredLogicalWidth = std::max(m_maxPreferredLogicalWidth, adjust
ContentBoxLogicalWidthForBoxSizing(styleToUse->minWidth().value())); |
241 m_minPreferredLogicalWidth = max(m_minPreferredLogicalWidth, adjustConte
ntBoxLogicalWidthForBoxSizing(styleToUse->minWidth().value())); | 239 m_minPreferredLogicalWidth = std::max(m_minPreferredLogicalWidth, adjust
ContentBoxLogicalWidthForBoxSizing(styleToUse->minWidth().value())); |
242 } | 240 } |
243 | 241 |
244 if (styleToUse->maxWidth().isFixed()) { | 242 if (styleToUse->maxWidth().isFixed()) { |
245 m_maxPreferredLogicalWidth = min(m_maxPreferredLogicalWidth, adjustConte
ntBoxLogicalWidthForBoxSizing(styleToUse->maxWidth().value())); | 243 m_maxPreferredLogicalWidth = std::min(m_maxPreferredLogicalWidth, adjust
ContentBoxLogicalWidthForBoxSizing(styleToUse->maxWidth().value())); |
246 m_minPreferredLogicalWidth = min(m_minPreferredLogicalWidth, adjustConte
ntBoxLogicalWidthForBoxSizing(styleToUse->maxWidth().value())); | 244 m_minPreferredLogicalWidth = std::min(m_minPreferredLogicalWidth, adjust
ContentBoxLogicalWidthForBoxSizing(styleToUse->maxWidth().value())); |
247 } | 245 } |
248 | 246 |
249 LayoutUnit borderAndPadding = borderAndPaddingLogicalWidth(); | 247 LayoutUnit borderAndPadding = borderAndPaddingLogicalWidth(); |
250 m_minPreferredLogicalWidth += borderAndPadding; | 248 m_minPreferredLogicalWidth += borderAndPadding; |
251 m_maxPreferredLogicalWidth += borderAndPadding; | 249 m_maxPreferredLogicalWidth += borderAndPadding; |
252 | 250 |
253 clearPreferredLogicalWidthsDirty(); | 251 clearPreferredLogicalWidthsDirty(); |
254 } | 252 } |
255 | 253 |
256 void RenderDeprecatedFlexibleBox::layoutBlock(bool relayoutChildren) | 254 void RenderDeprecatedFlexibleBox::layoutBlock(bool relayoutChildren) |
(...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
389 | 387 |
390 // Update our height and overflow height. | 388 // Update our height and overflow height. |
391 if (style()->boxAlign() == BBASELINE) { | 389 if (style()->boxAlign() == BBASELINE) { |
392 LayoutUnit ascent = child->firstLineBoxBaseline(); | 390 LayoutUnit ascent = child->firstLineBoxBaseline(); |
393 if (ascent == -1) | 391 if (ascent == -1) |
394 ascent = child->height() + child->marginBottom(); | 392 ascent = child->height() + child->marginBottom(); |
395 ascent += child->marginTop(); | 393 ascent += child->marginTop(); |
396 LayoutUnit descent = (child->height() + child->marginHeight()) -
ascent; | 394 LayoutUnit descent = (child->height() + child->marginHeight()) -
ascent; |
397 | 395 |
398 // Update our maximum ascent. | 396 // Update our maximum ascent. |
399 maxAscent = max(maxAscent, ascent); | 397 maxAscent = std::max(maxAscent, ascent); |
400 | 398 |
401 // Update our maximum descent. | 399 // Update our maximum descent. |
402 maxDescent = max(maxDescent, descent); | 400 maxDescent = std::max(maxDescent, descent); |
403 | 401 |
404 // Now update our height. | 402 // Now update our height. |
405 setHeight(max(yPos + maxAscent + maxDescent, height())); | 403 setHeight(std::max(yPos + maxAscent + maxDescent, height())); |
| 404 } else { |
| 405 setHeight(std::max(height(), yPos + child->height() + child->mar
ginHeight())); |
406 } | 406 } |
407 else | |
408 setHeight(max(height(), yPos + child->height() + child->marginHe
ight())); | |
409 } | 407 } |
410 | 408 |
411 if (!iterator.first() && hasLineIfEmpty()) | 409 if (!iterator.first() && hasLineIfEmpty()) |
412 setHeight(height() + lineHeight(true, style()->isHorizontalWritingMo
de() ? HorizontalLine : VerticalLine, PositionOfInteriorLineBoxes)); | 410 setHeight(height() + lineHeight(true, style()->isHorizontalWritingMo
de() ? HorizontalLine : VerticalLine, PositionOfInteriorLineBoxes)); |
413 | 411 |
414 setHeight(height() + toAdd); | 412 setHeight(height() + toAdd); |
415 | 413 |
416 oldHeight = height(); | 414 oldHeight = height(); |
417 updateLogicalHeight(); | 415 updateLogicalHeight(); |
418 | 416 |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
455 if (!child->needsLayout()) | 453 if (!child->needsLayout()) |
456 child->markForPaginationRelayoutIfNeeded(layoutScope); | 454 child->markForPaginationRelayoutIfNeeded(layoutScope); |
457 | 455 |
458 child->layoutIfNeeded(); | 456 child->layoutIfNeeded(); |
459 | 457 |
460 // We can place the child now, using our value of box-align. | 458 // We can place the child now, using our value of box-align. |
461 xPos += child->marginLeft(); | 459 xPos += child->marginLeft(); |
462 LayoutUnit childY = yPos; | 460 LayoutUnit childY = yPos; |
463 switch (style()->boxAlign()) { | 461 switch (style()->boxAlign()) { |
464 case BCENTER: | 462 case BCENTER: |
465 childY += child->marginTop() + max<LayoutUnit>(0, (contentHe
ight() - (child->height() + child->marginHeight())) / 2); | 463 childY += child->marginTop() + std::max<LayoutUnit>(0, (cont
entHeight() - (child->height() + child->marginHeight())) / 2); |
466 break; | 464 break; |
467 case BBASELINE: { | 465 case BBASELINE: { |
468 LayoutUnit ascent = child->firstLineBoxBaseline(); | 466 LayoutUnit ascent = child->firstLineBoxBaseline(); |
469 if (ascent == -1) | 467 if (ascent == -1) |
470 ascent = child->height() + child->marginBottom(); | 468 ascent = child->height() + child->marginBottom(); |
471 ascent += child->marginTop(); | 469 ascent += child->marginTop(); |
472 childY += child->marginTop() + (maxAscent - ascent); | 470 childY += child->marginTop() + (maxAscent - ascent); |
473 break; | 471 break; |
474 } | 472 } |
475 case BEND: | 473 case BEND: |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
513 float totalFlex = 0.0f; | 511 float totalFlex = 0.0f; |
514 for (RenderBox* child = iterator.first(); child; child = ite
rator.next()) { | 512 for (RenderBox* child = iterator.first(); child; child = ite
rator.next()) { |
515 if (allowedChildFlex(child, expanding, i)) | 513 if (allowedChildFlex(child, expanding, i)) |
516 totalFlex += child->style()->boxFlex(); | 514 totalFlex += child->style()->boxFlex(); |
517 } | 515 } |
518 LayoutUnit spaceAvailableThisPass = groupRemainingSpace; | 516 LayoutUnit spaceAvailableThisPass = groupRemainingSpace; |
519 for (RenderBox* child = iterator.first(); child; child = ite
rator.next()) { | 517 for (RenderBox* child = iterator.first(); child; child = ite
rator.next()) { |
520 LayoutUnit allowedFlex = allowedChildFlex(child, expandi
ng, i); | 518 LayoutUnit allowedFlex = allowedChildFlex(child, expandi
ng, i); |
521 if (allowedFlex) { | 519 if (allowedFlex) { |
522 LayoutUnit projectedFlex = (allowedFlex == LayoutUni
t::max()) ? allowedFlex : LayoutUnit(allowedFlex * (totalFlex / child->style()->
boxFlex())); | 520 LayoutUnit projectedFlex = (allowedFlex == LayoutUni
t::max()) ? allowedFlex : LayoutUnit(allowedFlex * (totalFlex / child->style()->
boxFlex())); |
523 spaceAvailableThisPass = expanding ? min(spaceAvaila
bleThisPass, projectedFlex) : max(spaceAvailableThisPass, projectedFlex); | 521 spaceAvailableThisPass = expanding ? std::min(spaceA
vailableThisPass, projectedFlex) : std::max(spaceAvailableThisPass, projectedFle
x); |
524 } | 522 } |
525 } | 523 } |
526 | 524 |
527 // The flex groups may not have any flexible objects this ti
me around. | 525 // The flex groups may not have any flexible objects this ti
me around. |
528 if (!spaceAvailableThisPass || totalFlex == 0.0f) { | 526 if (!spaceAvailableThisPass || totalFlex == 0.0f) { |
529 // If we just couldn't grow/shrink any more, then it's t
ime to transition to the next flex group. | 527 // If we just couldn't grow/shrink any more, then it's t
ime to transition to the next flex group. |
530 groupRemainingSpace = 0; | 528 groupRemainingSpace = 0; |
531 continue; | 529 continue; |
532 } | 530 } |
533 | 531 |
(...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
694 child->markForPaginationRelayoutIfNeeded(layoutScope); | 692 child->markForPaginationRelayoutIfNeeded(layoutScope); |
695 | 693 |
696 // Now do a layout. | 694 // Now do a layout. |
697 child->layoutIfNeeded(); | 695 child->layoutIfNeeded(); |
698 | 696 |
699 // We can place the child now, using our value of box-align. | 697 // We can place the child now, using our value of box-align. |
700 LayoutUnit childX = borderLeft() + paddingLeft(); | 698 LayoutUnit childX = borderLeft() + paddingLeft(); |
701 switch (style()->boxAlign()) { | 699 switch (style()->boxAlign()) { |
702 case BCENTER: | 700 case BCENTER: |
703 case BBASELINE: // Baseline just maps to center for vertical box
es | 701 case BBASELINE: // Baseline just maps to center for vertical box
es |
704 childX += child->marginLeft() + max<LayoutUnit>(0, (contentW
idth() - (child->width() + child->marginWidth())) / 2); | 702 childX += child->marginLeft() + std::max<LayoutUnit>(0, (con
tentWidth() - (child->width() + child->marginWidth())) / 2); |
705 break; | 703 break; |
706 case BEND: | 704 case BEND: |
707 if (!style()->isLeftToRightDirection()) | 705 if (!style()->isLeftToRightDirection()) |
708 childX += child->marginLeft(); | 706 childX += child->marginLeft(); |
709 else | 707 else |
710 childX += contentWidth() - child->marginRight() - child-
>width(); | 708 childX += contentWidth() - child->marginRight() - child-
>width(); |
711 break; | 709 break; |
712 default: // BSTART/BSTRETCH | 710 default: // BSTART/BSTRETCH |
713 if (style()->isLeftToRightDirection()) | 711 if (style()->isLeftToRightDirection()) |
714 childX += child->marginLeft(); | 712 childX += child->marginLeft(); |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
767 float totalFlex = 0.0f; | 765 float totalFlex = 0.0f; |
768 for (RenderBox* child = iterator.first(); child; child = ite
rator.next()) { | 766 for (RenderBox* child = iterator.first(); child; child = ite
rator.next()) { |
769 if (allowedChildFlex(child, expanding, i)) | 767 if (allowedChildFlex(child, expanding, i)) |
770 totalFlex += child->style()->boxFlex(); | 768 totalFlex += child->style()->boxFlex(); |
771 } | 769 } |
772 LayoutUnit spaceAvailableThisPass = groupRemainingSpace; | 770 LayoutUnit spaceAvailableThisPass = groupRemainingSpace; |
773 for (RenderBox* child = iterator.first(); child; child = ite
rator.next()) { | 771 for (RenderBox* child = iterator.first(); child; child = ite
rator.next()) { |
774 LayoutUnit allowedFlex = allowedChildFlex(child, expandi
ng, i); | 772 LayoutUnit allowedFlex = allowedChildFlex(child, expandi
ng, i); |
775 if (allowedFlex) { | 773 if (allowedFlex) { |
776 LayoutUnit projectedFlex = (allowedFlex == LayoutUni
t::max()) ? allowedFlex : static_cast<LayoutUnit>(allowedFlex * (totalFlex / chi
ld->style()->boxFlex())); | 774 LayoutUnit projectedFlex = (allowedFlex == LayoutUni
t::max()) ? allowedFlex : static_cast<LayoutUnit>(allowedFlex * (totalFlex / chi
ld->style()->boxFlex())); |
777 spaceAvailableThisPass = expanding ? min(spaceAvaila
bleThisPass, projectedFlex) : max(spaceAvailableThisPass, projectedFlex); | 775 spaceAvailableThisPass = expanding ? std::min(spaceA
vailableThisPass, projectedFlex) : std::max(spaceAvailableThisPass, projectedFle
x); |
778 } | 776 } |
779 } | 777 } |
780 | 778 |
781 // The flex groups may not have any flexible objects this ti
me around. | 779 // The flex groups may not have any flexible objects this ti
me around. |
782 if (!spaceAvailableThisPass || totalFlex == 0.0f) { | 780 if (!spaceAvailableThisPass || totalFlex == 0.0f) { |
783 // If we just couldn't grow/shrink any more, then it's t
ime to transition to the next flex group. | 781 // If we just couldn't grow/shrink any more, then it's t
ime to transition to the next flex group. |
784 groupRemainingSpace = 0; | 782 groupRemainingSpace = 0; |
785 continue; | 783 continue; |
786 } | 784 } |
787 | 785 |
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
893 child->setChildNeedsLayout(MarkOnlyThis); | 891 child->setChildNeedsLayout(MarkOnlyThis); |
894 | 892 |
895 // Dirty all the positioned objects. | 893 // Dirty all the positioned objects. |
896 if (child->isRenderBlock()) { | 894 if (child->isRenderBlock()) { |
897 toRenderBlock(child)->markPositionedObjectsForLayout(); | 895 toRenderBlock(child)->markPositionedObjectsForLayout(); |
898 toRenderBlock(child)->clearTruncation(); | 896 toRenderBlock(child)->clearTruncation(); |
899 } | 897 } |
900 } | 898 } |
901 child->layoutIfNeeded(); | 899 child->layoutIfNeeded(); |
902 if (child->style()->height().isAuto() && child->isRenderBlock()) | 900 if (child->style()->height().isAuto() && child->isRenderBlock()) |
903 maxLineCount = max(maxLineCount, toRenderBlock(child)->lineCount()); | 901 maxLineCount = std::max(maxLineCount, toRenderBlock(child)->lineCoun
t()); |
904 } | 902 } |
905 | 903 |
906 // Get the number of lines and then alter all block flow children with auto
height to use the | 904 // Get the number of lines and then alter all block flow children with auto
height to use the |
907 // specified height. We always try to leave room for at least one line. | 905 // specified height. We always try to leave room for at least one line. |
908 LineClampValue lineClamp = style()->lineClamp(); | 906 LineClampValue lineClamp = style()->lineClamp(); |
909 int numVisibleLines = lineClamp.isPercentage() ? max(1, (maxLineCount + 1) *
lineClamp.value() / 100) : lineClamp.value(); | 907 int numVisibleLines = lineClamp.isPercentage() ? std::max(1, (maxLineCount +
1) * lineClamp.value() / 100) : lineClamp.value(); |
910 if (numVisibleLines >= maxLineCount) | 908 if (numVisibleLines >= maxLineCount) |
911 return; | 909 return; |
912 | 910 |
913 for (RenderBox* child = iterator.first(); child; child = iterator.next()) { | 911 for (RenderBox* child = iterator.first(); child; child = iterator.next()) { |
914 if (childDoesNotAffectWidthOrFlexing(child) || !child->style()->height()
.isAuto() || !child->isRenderBlock()) | 912 if (childDoesNotAffectWidthOrFlexing(child) || !child->style()->height()
.isAuto() || !child->isRenderBlock()) |
915 continue; | 913 continue; |
916 | 914 |
917 RenderBlock* blockChild = toRenderBlock(child); | 915 RenderBlock* blockChild = toRenderBlock(child); |
918 int lineCount = blockChild->lineCount(); | 916 int lineCount = blockChild->lineCount(); |
919 if (lineCount <= numVisibleLines) | 917 if (lineCount <= numVisibleLines) |
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1026 LayoutUnit maxWidth = LayoutUnit::max(); | 1024 LayoutUnit maxWidth = LayoutUnit::max(); |
1027 LayoutUnit width = contentWidthForChild(child); | 1025 LayoutUnit width = contentWidthForChild(child); |
1028 if (!child->style()->maxWidth().isUndefined() && child->style()->max
Width().isFixed()) | 1026 if (!child->style()->maxWidth().isUndefined() && child->style()->max
Width().isFixed()) |
1029 maxWidth = child->style()->maxWidth().value(); | 1027 maxWidth = child->style()->maxWidth().value(); |
1030 else if (child->style()->maxWidth().type() == Intrinsic) | 1028 else if (child->style()->maxWidth().type() == Intrinsic) |
1031 maxWidth = child->maxPreferredLogicalWidth(); | 1029 maxWidth = child->maxPreferredLogicalWidth(); |
1032 else if (child->style()->maxWidth().type() == MinIntrinsic) | 1030 else if (child->style()->maxWidth().type() == MinIntrinsic) |
1033 maxWidth = child->minPreferredLogicalWidth(); | 1031 maxWidth = child->minPreferredLogicalWidth(); |
1034 if (maxWidth == LayoutUnit::max()) | 1032 if (maxWidth == LayoutUnit::max()) |
1035 return maxWidth; | 1033 return maxWidth; |
1036 return max<LayoutUnit>(0, maxWidth - width); | 1034 return std::max<LayoutUnit>(0, maxWidth - width); |
1037 } else { | 1035 } else { |
1038 // FIXME: For now just handle fixed values. | 1036 // FIXME: For now just handle fixed values. |
1039 LayoutUnit maxHeight = LayoutUnit::max(); | 1037 LayoutUnit maxHeight = LayoutUnit::max(); |
1040 LayoutUnit height = contentHeightForChild(child); | 1038 LayoutUnit height = contentHeightForChild(child); |
1041 if (!child->style()->maxHeight().isUndefined() && child->style()->ma
xHeight().isFixed()) | 1039 if (!child->style()->maxHeight().isUndefined() && child->style()->ma
xHeight().isFixed()) |
1042 maxHeight = child->style()->maxHeight().value(); | 1040 maxHeight = child->style()->maxHeight().value(); |
1043 if (maxHeight == LayoutUnit::max()) | 1041 if (maxHeight == LayoutUnit::max()) |
1044 return maxHeight; | 1042 return maxHeight; |
1045 return max<LayoutUnit>(0, maxHeight - height); | 1043 return std::max<LayoutUnit>(0, maxHeight - height); |
1046 } | 1044 } |
1047 } | 1045 } |
1048 | 1046 |
1049 // FIXME: For now just handle fixed values. | 1047 // FIXME: For now just handle fixed values. |
1050 if (isHorizontal()) { | 1048 if (isHorizontal()) { |
1051 LayoutUnit minWidth = child->minPreferredLogicalWidth(); | 1049 LayoutUnit minWidth = child->minPreferredLogicalWidth(); |
1052 LayoutUnit width = contentWidthForChild(child); | 1050 LayoutUnit width = contentWidthForChild(child); |
1053 if (child->style()->minWidth().isFixed()) | 1051 if (child->style()->minWidth().isFixed()) |
1054 minWidth = child->style()->minWidth().value(); | 1052 minWidth = child->style()->minWidth().value(); |
1055 else if (child->style()->minWidth().type() == Intrinsic) | 1053 else if (child->style()->minWidth().type() == Intrinsic) |
1056 minWidth = child->maxPreferredLogicalWidth(); | 1054 minWidth = child->maxPreferredLogicalWidth(); |
1057 else if (child->style()->minWidth().type() == MinIntrinsic) | 1055 else if (child->style()->minWidth().type() == MinIntrinsic) |
1058 minWidth = child->minPreferredLogicalWidth(); | 1056 minWidth = child->minPreferredLogicalWidth(); |
1059 else if (child->style()->minWidth().type() == Auto) | 1057 else if (child->style()->minWidth().type() == Auto) |
1060 minWidth = 0; | 1058 minWidth = 0; |
1061 | 1059 |
1062 LayoutUnit allowedShrinkage = min<LayoutUnit>(0, minWidth - width); | 1060 LayoutUnit allowedShrinkage = std::min<LayoutUnit>(0, minWidth - width); |
1063 return allowedShrinkage; | 1061 return allowedShrinkage; |
1064 } else { | 1062 } else { |
1065 Length minHeight = child->style()->minHeight(); | 1063 Length minHeight = child->style()->minHeight(); |
1066 if (minHeight.isFixed() || minHeight.isAuto()) { | 1064 if (minHeight.isFixed() || minHeight.isAuto()) { |
1067 LayoutUnit minHeight = child->style()->minHeight().value(); | 1065 LayoutUnit minHeight = child->style()->minHeight().value(); |
1068 LayoutUnit height = contentHeightForChild(child); | 1066 LayoutUnit height = contentHeightForChild(child); |
1069 LayoutUnit allowedShrinkage = min<LayoutUnit>(0, minHeight - height)
; | 1067 LayoutUnit allowedShrinkage = std::min<LayoutUnit>(0, minHeight - he
ight); |
1070 return allowedShrinkage; | 1068 return allowedShrinkage; |
1071 } | 1069 } |
1072 } | 1070 } |
1073 | 1071 |
1074 return 0; | 1072 return 0; |
1075 } | 1073 } |
1076 | 1074 |
1077 const char* RenderDeprecatedFlexibleBox::renderName() const | 1075 const char* RenderDeprecatedFlexibleBox::renderName() const |
1078 { | 1076 { |
1079 if (isFloating()) | 1077 if (isFloating()) |
1080 return "RenderDeprecatedFlexibleBox (floating)"; | 1078 return "RenderDeprecatedFlexibleBox (floating)"; |
1081 if (isOutOfFlowPositioned()) | 1079 if (isOutOfFlowPositioned()) |
1082 return "RenderDeprecatedFlexibleBox (positioned)"; | 1080 return "RenderDeprecatedFlexibleBox (positioned)"; |
1083 // FIXME: Temporary hack while the new generated content system is being imp
lemented. | 1081 // FIXME: Temporary hack while the new generated content system is being imp
lemented. |
1084 if (isPseudoElement()) | 1082 if (isPseudoElement()) |
1085 return "RenderDeprecatedFlexibleBox (generated)"; | 1083 return "RenderDeprecatedFlexibleBox (generated)"; |
1086 if (isAnonymous()) | 1084 if (isAnonymous()) |
1087 return "RenderDeprecatedFlexibleBox (generated)"; | 1085 return "RenderDeprecatedFlexibleBox (generated)"; |
1088 if (isRelPositioned()) | 1086 if (isRelPositioned()) |
1089 return "RenderDeprecatedFlexibleBox (relative positioned)"; | 1087 return "RenderDeprecatedFlexibleBox (relative positioned)"; |
1090 return "RenderDeprecatedFlexibleBox"; | 1088 return "RenderDeprecatedFlexibleBox"; |
1091 } | 1089 } |
1092 | 1090 |
1093 } // namespace WebCore | 1091 } // namespace WebCore |
OLD | NEW |