Changeset 295001 in webkit
- Timestamp:
- May 28, 2022, 9:31:20 AM (3 years ago)
- Location:
- trunk/Source/WebCore/layout/formattingContexts/flex
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/layout/formattingContexts/flex/FlexFormattingContext.cpp
r295000 r295001 120 120 } 121 121 122 static inline std::optional<LayoutUnit> availableLogicalVerticalSpace(const ContainerBox& root, const ConstraintsForFlexContent& flexConstraints) 123 { 124 auto flexDirection = root.style().flexDirection(); 125 auto flexDirectionIsInlineAxis = flexDirection == FlexDirection::Row || flexDirection == FlexDirection::RowReverse; 126 return { flexDirectionIsInlineAxis ? flexConstraints.availableVerticalSpace() : std::make_optional(flexConstraints.horizontal().logicalWidth) }; 127 } 128 129 static inline std::optional<LayoutUnit> availableLogicalHorizontalSpace(const ContainerBox& root, const ConstraintsForFlexContent& flexConstraints) 130 { 131 auto flexDirection = root.style().flexDirection(); 132 auto flexDirectionIsInlineAxis = flexDirection == FlexDirection::Row || flexDirection == FlexDirection::RowReverse; 133 return { flexDirectionIsInlineAxis ? std::make_optional(flexConstraints.horizontal().logicalWidth) : flexConstraints.availableVerticalSpace() }; 134 } 135 122 136 FlexFormattingContext::LogicalFlexItems FlexFormattingContext::convertFlexItemsToLogicalSpace() 123 137 { … … 198 212 } 199 213 flexItemGeometry.setLogicalTopLeft(topLeft); 200 if (direction == FlexDirection::Row || direction == FlexDirection::RowReverse) 214 if (direction == FlexDirection::Row || direction == FlexDirection::RowReverse) { 201 215 flexItemGeometry.setContentBoxWidth(logicalFlexItem.rect.width() - flexItemGeometry.horizontalMarginBorderAndPadding()); 202 else 216 flexItemGeometry.setContentBoxHeight(logicalFlexItem.rect.height() - flexItemGeometry.verticalMarginBorderAndPadding()); 217 } else { 218 flexItemGeometry.setContentBoxWidth(logicalFlexItem.rect.height() - flexItemGeometry.horizontalMarginBorderAndPadding()); 203 219 flexItemGeometry.setContentBoxHeight(logicalFlexItem.rect.width() - flexItemGeometry.verticalMarginBorderAndPadding()); 220 } 204 221 } 205 222 } … … 346 363 void FlexFormattingContext::computeLogicalWidthForFlexItems(LogicalFlexItems& logicalFlexItemList, const ConstraintsForFlexContent& flexConstraints) 347 364 { 348 auto flexDirection = root().style().flexDirection(); 349 auto flexDirectionIsInlineAxis = flexDirection == FlexDirection::Row || flexDirection == FlexDirection::RowReverse; 350 auto availableSpace = std::optional<LayoutUnit> { flexDirectionIsInlineAxis ? std::make_optional(flexConstraints.horizontal().logicalWidth) : flexConstraints.availableVerticalSpace() }; 365 auto availableSpace = availableLogicalHorizontalSpace(root(), flexConstraints); 351 366 auto contentLogicalWidth = [&] { 352 367 auto logicalWidth = LayoutUnit { }; … … 364 379 } 365 380 381 void FlexFormattingContext::computeLogicalHeightForFlexItems(LogicalFlexItems& logicalFlexItemList, const ConstraintsForFlexContent& flexConstraints) 382 { 383 auto availableSpace = availableLogicalVerticalSpace(root(), flexConstraints); 384 auto alignItems = root().style().alignItems(); 385 for (auto& logicalFlexItem : logicalFlexItemList) { 386 auto& height = logicalFlexItem.layoutBox->style().height(); 387 if (!height.isAuto()) 388 continue; 389 switch (alignItems.position()) { 390 case ItemPosition::Normal: 391 case ItemPosition::Stretch: 392 logicalFlexItem.rect.setHeight(*availableSpace); 393 break; 394 default: 395 ASSERT_NOT_IMPLEMENTED_YET(); 396 break; 397 } 398 } 399 } 400 366 401 void FlexFormattingContext::layoutInFlowContentForIntegration(const ConstraintsForInFlowContent& constraints) 367 402 { … … 373 408 374 409 computeLogicalWidthForFlexItems(logicalFlexItemList, flexConstraints); 410 computeLogicalHeightForFlexItems(logicalFlexItemList, flexConstraints); 375 411 376 412 for (auto& logicalFlexItem : logicalFlexItemList) { -
trunk/Source/WebCore/layout/formattingContexts/flex/FlexFormattingContext.h
r294904 r295001 69 69 void computeLogicalWidthForStretchingFlexItems(LogicalFlexItems&, LayoutUnit availableSpace); 70 70 void computeLogicalWidthForShrinkingFlexItems(LogicalFlexItems&, LayoutUnit availableSpace); 71 void computeLogicalHeightForFlexItems(LogicalFlexItems&, const ConstraintsForFlexContent&); 71 72 72 73 const FlexFormattingState& formattingState() const { return downcast<FlexFormattingState>(FormattingContext::formattingState()); }
Note:
See TracChangeset
for help on using the changeset viewer.