| 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 133 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 144 margin += marginRight.value(); | 144 margin += marginRight.value(); |
| 145 return margin; | 145 return margin; |
| 146 } | 146 } |
| 147 | 147 |
| 148 static bool childDoesNotAffectWidthOrFlexing(RenderObject* child) | 148 static bool childDoesNotAffectWidthOrFlexing(RenderObject* child) |
| 149 { | 149 { |
| 150 // Positioned children and collapsed children don't affect the min/max width
. | 150 // Positioned children and collapsed children don't affect the min/max width
. |
| 151 return child->isOutOfFlowPositioned() || child->style()->visibility() == COL
LAPSE; | 151 return child->isOutOfFlowPositioned() || child->style()->visibility() == COL
LAPSE; |
| 152 } | 152 } |
| 153 | 153 |
| 154 static LayoutUnit contentWidthForChild(RenderBox* child) |
| 155 { |
| 156 if (child->hasOverrideWidth()) |
| 157 return child->overrideLogicalContentWidth(); |
| 158 return child->logicalWidth() - child->borderAndPaddingLogicalWidth(); |
| 159 } |
| 160 |
| 161 static LayoutUnit contentHeightForChild(RenderBox* child) |
| 162 { |
| 163 if (child->hasOverrideHeight()) |
| 164 return child->overrideLogicalContentHeight(); |
| 165 return child->logicalHeight() - child->borderAndPaddingLogicalHeight(); |
| 166 } |
| 167 |
| 154 void RenderDeprecatedFlexibleBox::styleWillChange(StyleDifference diff, const Re
nderStyle* newStyle) | 168 void RenderDeprecatedFlexibleBox::styleWillChange(StyleDifference diff, const Re
nderStyle* newStyle) |
| 155 { | 169 { |
| 156 RenderStyle* oldStyle = style(); | 170 RenderStyle* oldStyle = style(); |
| 157 if (oldStyle && !oldStyle->lineClamp().isNone() && newStyle->lineClamp().isN
one()) | 171 if (oldStyle && !oldStyle->lineClamp().isNone() && newStyle->lineClamp().isN
one()) |
| 158 clearLineClamp(); | 172 clearLineClamp(); |
| 159 | 173 |
| 160 RenderBlock::styleWillChange(diff, newStyle); | 174 RenderBlock::styleWillChange(diff, newStyle); |
| 161 } | 175 } |
| 162 | 176 |
| 163 void RenderDeprecatedFlexibleBox::calcHorizontalPrefWidths() | 177 void RenderDeprecatedFlexibleBox::calcHorizontalPrefWidths() |
| (...skipping 367 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 531 } | 545 } |
| 532 | 546 |
| 533 // Now distribute the space to objects. | 547 // Now distribute the space to objects. |
| 534 for (RenderBox* child = iterator.first(); child && spaceAvai
lableThisPass && totalFlex; child = iterator.next()) { | 548 for (RenderBox* child = iterator.first(); child && spaceAvai
lableThisPass && totalFlex; child = iterator.next()) { |
| 535 if (child->style()->visibility() == COLLAPSE) | 549 if (child->style()->visibility() == COLLAPSE) |
| 536 continue; | 550 continue; |
| 537 | 551 |
| 538 if (allowedChildFlex(child, expanding, i)) { | 552 if (allowedChildFlex(child, expanding, i)) { |
| 539 LayoutUnit spaceAdd = LayoutUnit(spaceAvailableThisP
ass * (child->style()->boxFlex() / totalFlex)); | 553 LayoutUnit spaceAdd = LayoutUnit(spaceAvailableThisP
ass * (child->style()->boxFlex() / totalFlex)); |
| 540 if (spaceAdd) { | 554 if (spaceAdd) { |
| 541 child->setOverrideLogicalContentWidth(child->ove
rrideLogicalContentWidth() + spaceAdd); | 555 child->setOverrideLogicalContentWidth(contentWid
thForChild(child) + spaceAdd); |
| 542 flexingChildren = true; | 556 flexingChildren = true; |
| 543 relayoutChildren = true; | 557 relayoutChildren = true; |
| 544 } | 558 } |
| 545 | 559 |
| 546 spaceAvailableThisPass -= spaceAdd; | 560 spaceAvailableThisPass -= spaceAdd; |
| 547 remainingSpace -= spaceAdd; | 561 remainingSpace -= spaceAdd; |
| 548 groupRemainingSpace -= spaceAdd; | 562 groupRemainingSpace -= spaceAdd; |
| 549 | 563 |
| 550 totalFlex -= child->style()->boxFlex(); | 564 totalFlex -= child->style()->boxFlex(); |
| 551 } | 565 } |
| 552 } | 566 } |
| 553 if (groupRemainingSpace == groupRemainingSpaceAtBeginning) { | 567 if (groupRemainingSpace == groupRemainingSpaceAtBeginning) { |
| 554 // This is not advancing, avoid getting stuck by distrib
uting the remaining pixels. | 568 // This is not advancing, avoid getting stuck by distrib
uting the remaining pixels. |
| 555 LayoutUnit spaceAdd = groupRemainingSpace > 0 ? 1 : -1; | 569 LayoutUnit spaceAdd = groupRemainingSpace > 0 ? 1 : -1; |
| 556 for (RenderBox* child = iterator.first(); child && group
RemainingSpace; child = iterator.next()) { | 570 for (RenderBox* child = iterator.first(); child && group
RemainingSpace; child = iterator.next()) { |
| 557 if (allowedChildFlex(child, expanding, i)) { | 571 if (allowedChildFlex(child, expanding, i)) { |
| 558 child->setOverrideLogicalContentWidth(child->ove
rrideLogicalContentWidth() + spaceAdd); | 572 child->setOverrideLogicalContentWidth(contentWid
thForChild(child) + spaceAdd); |
| 559 flexingChildren = true; | 573 flexingChildren = true; |
| 560 relayoutChildren = true; | 574 relayoutChildren = true; |
| 561 remainingSpace -= spaceAdd; | 575 remainingSpace -= spaceAdd; |
| 562 groupRemainingSpace -= spaceAdd; | 576 groupRemainingSpace -= spaceAdd; |
| 563 } | 577 } |
| 564 } | 578 } |
| 565 } | 579 } |
| 566 } while (absoluteValue(groupRemainingSpace) >= 1); | 580 } while (absoluteValue(groupRemainingSpace) >= 1); |
| 567 } | 581 } |
| 568 | 582 |
| (...skipping 213 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 782 // If we just couldn't grow/shrink any more, then it's t
ime to transition to the next flex group. | 796 // If we just couldn't grow/shrink any more, then it's t
ime to transition to the next flex group. |
| 783 groupRemainingSpace = 0; | 797 groupRemainingSpace = 0; |
| 784 continue; | 798 continue; |
| 785 } | 799 } |
| 786 | 800 |
| 787 // Now distribute the space to objects. | 801 // Now distribute the space to objects. |
| 788 for (RenderBox* child = iterator.first(); child && spaceAvai
lableThisPass && totalFlex; child = iterator.next()) { | 802 for (RenderBox* child = iterator.first(); child && spaceAvai
lableThisPass && totalFlex; child = iterator.next()) { |
| 789 if (allowedChildFlex(child, expanding, i)) { | 803 if (allowedChildFlex(child, expanding, i)) { |
| 790 LayoutUnit spaceAdd = static_cast<LayoutUnit>(spaceA
vailableThisPass * (child->style()->boxFlex() / totalFlex)); | 804 LayoutUnit spaceAdd = static_cast<LayoutUnit>(spaceA
vailableThisPass * (child->style()->boxFlex() / totalFlex)); |
| 791 if (spaceAdd) { | 805 if (spaceAdd) { |
| 792 child->setOverrideLogicalContentHeight(child->ov
errideLogicalContentHeight() + spaceAdd); | 806 child->setOverrideLogicalContentHeight(contentHe
ightForChild(child) + spaceAdd); |
| 793 flexingChildren = true; | 807 flexingChildren = true; |
| 794 relayoutChildren = true; | 808 relayoutChildren = true; |
| 795 } | 809 } |
| 796 | 810 |
| 797 spaceAvailableThisPass -= spaceAdd; | 811 spaceAvailableThisPass -= spaceAdd; |
| 798 remainingSpace -= spaceAdd; | 812 remainingSpace -= spaceAdd; |
| 799 groupRemainingSpace -= spaceAdd; | 813 groupRemainingSpace -= spaceAdd; |
| 800 | 814 |
| 801 totalFlex -= child->style()->boxFlex(); | 815 totalFlex -= child->style()->boxFlex(); |
| 802 } | 816 } |
| 803 } | 817 } |
| 804 if (groupRemainingSpace == groupRemainingSpaceAtBeginning) { | 818 if (groupRemainingSpace == groupRemainingSpaceAtBeginning) { |
| 805 // This is not advancing, avoid getting stuck by distrib
uting the remaining pixels. | 819 // This is not advancing, avoid getting stuck by distrib
uting the remaining pixels. |
| 806 LayoutUnit spaceAdd = groupRemainingSpace > 0 ? 1 : -1; | 820 LayoutUnit spaceAdd = groupRemainingSpace > 0 ? 1 : -1; |
| 807 for (RenderBox* child = iterator.first(); child && group
RemainingSpace; child = iterator.next()) { | 821 for (RenderBox* child = iterator.first(); child && group
RemainingSpace; child = iterator.next()) { |
| 808 if (allowedChildFlex(child, expanding, i)) { | 822 if (allowedChildFlex(child, expanding, i)) { |
| 809 child->setOverrideLogicalContentHeight(child->ov
errideLogicalContentHeight() + spaceAdd); | 823 child->setOverrideLogicalContentHeight(contentHe
ightForChild(child) + spaceAdd); |
| 810 flexingChildren = true; | 824 flexingChildren = true; |
| 811 relayoutChildren = true; | 825 relayoutChildren = true; |
| 812 remainingSpace -= spaceAdd; | 826 remainingSpace -= spaceAdd; |
| 813 groupRemainingSpace -= spaceAdd; | 827 groupRemainingSpace -= spaceAdd; |
| 814 } | 828 } |
| 815 } | 829 } |
| 816 } | 830 } |
| 817 } while (absoluteValue(groupRemainingSpace) >= 1); | 831 } while (absoluteValue(groupRemainingSpace) >= 1); |
| 818 } | 832 } |
| 819 | 833 |
| (...skipping 192 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1012 | 1026 |
| 1013 LayoutUnit RenderDeprecatedFlexibleBox::allowedChildFlex(RenderBox* child, bool
expanding, unsigned int group) | 1027 LayoutUnit RenderDeprecatedFlexibleBox::allowedChildFlex(RenderBox* child, bool
expanding, unsigned int group) |
| 1014 { | 1028 { |
| 1015 if (childDoesNotAffectWidthOrFlexing(child) || child->style()->boxFlex() ==
0.0f || child->style()->boxFlexGroup() != group) | 1029 if (childDoesNotAffectWidthOrFlexing(child) || child->style()->boxFlex() ==
0.0f || child->style()->boxFlexGroup() != group) |
| 1016 return 0; | 1030 return 0; |
| 1017 | 1031 |
| 1018 if (expanding) { | 1032 if (expanding) { |
| 1019 if (isHorizontal()) { | 1033 if (isHorizontal()) { |
| 1020 // FIXME: For now just handle fixed values. | 1034 // FIXME: For now just handle fixed values. |
| 1021 LayoutUnit maxWidth = MAX_LAYOUT_UNIT; | 1035 LayoutUnit maxWidth = MAX_LAYOUT_UNIT; |
| 1022 LayoutUnit width = child->overrideLogicalContentWidth(); | 1036 LayoutUnit width = contentWidthForChild(child); |
| 1023 if (!child->style()->maxWidth().isUndefined() && child->style()->max
Width().isFixed()) | 1037 if (!child->style()->maxWidth().isUndefined() && child->style()->max
Width().isFixed()) |
| 1024 maxWidth = child->style()->maxWidth().value(); | 1038 maxWidth = child->style()->maxWidth().value(); |
| 1025 else if (child->style()->maxWidth().type() == Intrinsic) | 1039 else if (child->style()->maxWidth().type() == Intrinsic) |
| 1026 maxWidth = child->maxPreferredLogicalWidth(); | 1040 maxWidth = child->maxPreferredLogicalWidth(); |
| 1027 else if (child->style()->maxWidth().type() == MinIntrinsic) | 1041 else if (child->style()->maxWidth().type() == MinIntrinsic) |
| 1028 maxWidth = child->minPreferredLogicalWidth(); | 1042 maxWidth = child->minPreferredLogicalWidth(); |
| 1029 if (maxWidth == MAX_LAYOUT_UNIT) | 1043 if (maxWidth == MAX_LAYOUT_UNIT) |
| 1030 return maxWidth; | 1044 return maxWidth; |
| 1031 return max<LayoutUnit>(0, maxWidth - width); | 1045 return max<LayoutUnit>(0, maxWidth - width); |
| 1032 } else { | 1046 } else { |
| 1033 // FIXME: For now just handle fixed values. | 1047 // FIXME: For now just handle fixed values. |
| 1034 LayoutUnit maxHeight = MAX_LAYOUT_UNIT; | 1048 LayoutUnit maxHeight = MAX_LAYOUT_UNIT; |
| 1035 LayoutUnit height = child->overrideLogicalContentHeight(); | 1049 LayoutUnit height = contentHeightForChild(child); |
| 1036 if (!child->style()->maxHeight().isUndefined() && child->style()->ma
xHeight().isFixed()) | 1050 if (!child->style()->maxHeight().isUndefined() && child->style()->ma
xHeight().isFixed()) |
| 1037 maxHeight = child->style()->maxHeight().value(); | 1051 maxHeight = child->style()->maxHeight().value(); |
| 1038 if (maxHeight == MAX_LAYOUT_UNIT) | 1052 if (maxHeight == MAX_LAYOUT_UNIT) |
| 1039 return maxHeight; | 1053 return maxHeight; |
| 1040 return max<LayoutUnit>(0, maxHeight - height); | 1054 return max<LayoutUnit>(0, maxHeight - height); |
| 1041 } | 1055 } |
| 1042 } | 1056 } |
| 1043 | 1057 |
| 1044 // FIXME: For now just handle fixed values. | 1058 // FIXME: For now just handle fixed values. |
| 1045 if (isHorizontal()) { | 1059 if (isHorizontal()) { |
| 1046 LayoutUnit minWidth = child->minPreferredLogicalWidth(); | 1060 LayoutUnit minWidth = child->minPreferredLogicalWidth(); |
| 1047 LayoutUnit width = child->overrideLogicalContentWidth(); | 1061 LayoutUnit width = contentWidthForChild(child); |
| 1048 if (child->style()->minWidth().isFixed()) | 1062 if (child->style()->minWidth().isFixed()) |
| 1049 minWidth = child->style()->minWidth().value(); | 1063 minWidth = child->style()->minWidth().value(); |
| 1050 else if (child->style()->minWidth().type() == Intrinsic) | 1064 else if (child->style()->minWidth().type() == Intrinsic) |
| 1051 minWidth = child->maxPreferredLogicalWidth(); | 1065 minWidth = child->maxPreferredLogicalWidth(); |
| 1052 else if (child->style()->minWidth().type() == MinIntrinsic) | 1066 else if (child->style()->minWidth().type() == MinIntrinsic) |
| 1053 minWidth = child->minPreferredLogicalWidth(); | 1067 minWidth = child->minPreferredLogicalWidth(); |
| 1054 else if (child->style()->minWidth().type() == Auto) | 1068 else if (child->style()->minWidth().type() == Auto) |
| 1055 minWidth = 0; | 1069 minWidth = 0; |
| 1056 | 1070 |
| 1057 LayoutUnit allowedShrinkage = min<LayoutUnit>(0, minWidth - width); | 1071 LayoutUnit allowedShrinkage = min<LayoutUnit>(0, minWidth - width); |
| 1058 return allowedShrinkage; | 1072 return allowedShrinkage; |
| 1059 } else { | 1073 } else { |
| 1060 Length minHeight = child->style()->minHeight(); | 1074 Length minHeight = child->style()->minHeight(); |
| 1061 if (minHeight.isFixed() || minHeight.isAuto()) { | 1075 if (minHeight.isFixed() || minHeight.isAuto()) { |
| 1062 LayoutUnit minHeight = child->style()->minHeight().value(); | 1076 LayoutUnit minHeight = child->style()->minHeight().value(); |
| 1063 LayoutUnit height = child->overrideLogicalContentHeight(); | 1077 LayoutUnit height = contentHeightForChild(child); |
| 1064 LayoutUnit allowedShrinkage = min<LayoutUnit>(0, minHeight - height)
; | 1078 LayoutUnit allowedShrinkage = min<LayoutUnit>(0, minHeight - height)
; |
| 1065 return allowedShrinkage; | 1079 return allowedShrinkage; |
| 1066 } | 1080 } |
| 1067 } | 1081 } |
| 1068 | 1082 |
| 1069 return 0; | 1083 return 0; |
| 1070 } | 1084 } |
| 1071 | 1085 |
| 1072 const char *RenderDeprecatedFlexibleBox::renderName() const | 1086 const char *RenderDeprecatedFlexibleBox::renderName() const |
| 1073 { | 1087 { |
| 1074 if (isFloating()) | 1088 if (isFloating()) |
| 1075 return "RenderDeprecatedFlexibleBox (floating)"; | 1089 return "RenderDeprecatedFlexibleBox (floating)"; |
| 1076 if (isOutOfFlowPositioned()) | 1090 if (isOutOfFlowPositioned()) |
| 1077 return "RenderDeprecatedFlexibleBox (positioned)"; | 1091 return "RenderDeprecatedFlexibleBox (positioned)"; |
| 1078 if (isAnonymous()) | 1092 if (isAnonymous()) |
| 1079 return "RenderDeprecatedFlexibleBox (generated)"; | 1093 return "RenderDeprecatedFlexibleBox (generated)"; |
| 1080 if (isRelPositioned()) | 1094 if (isRelPositioned()) |
| 1081 return "RenderDeprecatedFlexibleBox (relative positioned)"; | 1095 return "RenderDeprecatedFlexibleBox (relative positioned)"; |
| 1082 return "RenderDeprecatedFlexibleBox"; | 1096 return "RenderDeprecatedFlexibleBox"; |
| 1083 } | 1097 } |
| 1084 | 1098 |
| 1085 } // namespace WebCore | 1099 } // namespace WebCore |
| OLD | NEW |