Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: ff9b65a73dacb1403fb444ab7e5ec60631db81cf
      
https://github.com/WebKit/WebKit/commit/ff9b65a73dacb1403fb444ab7e5ec60631db81cf
  Author: Elika Etemad <[email protected]>
  Date:   2026-07-20 (Mon, 20 Jul 2026)

  Changed paths:
    M Source/WebCore/Headers.cmake
    M Source/WebCore/WebCore.xcodeproj/project.pbxproj
    M Source/WebCore/platform/BoxSides.h
    A Source/WebCore/platform/FlowMode.h
    M Source/WebCore/platform/text/WritingMode.h
    M Source/WebCore/rendering/style/RenderStyleConstants.h
    M Source/WebCore/style/computed/StyleComputedStyle+GettersInlines.h
    M Source/WebCore/style/computed/StyleComputedStyle.h
    M Tools/TestWebKitAPI/CMakeLists.txt
    M Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj
    A Tools/TestWebKitAPI/Tests/WebCore/FlowModeTests.cpp

  Log Message:
  -----------
  Create FlowMode to allow using WritingMode APIs with e.g. flex-flow
https://bugs.webkit.org/show_bug.cgi?id=319521
rdar://182338907

Reviewed by Alan Baradlay.

We have a lot of APIs that take WritingMode in order to map coordinates;
for example the marginStart()/marginBefore() getters.

However layout does not always follow the primary inline/block directions.
For example, flex-flow can reverse these directions or transpose them.
And inline layout is oriented to the line's over/under sides, which might
not match the block-start/inline-start sides.

Rather than requiring these cases to create their own mapping tools, this
patch creates a FlowMode object that mimics WritingMode, and can be used
similarly: it can be queried in ways similar to WritingMode, and can also
be cast into a WritingMode for use in existing APIs that accept WritingMode.

Test: Tools/TestWebKitAPI/Tests/WebCore/FlowModeTests.cpp

* Source/WebCore/Headers.cmake:
* Source/WebCore/WebCore.xcodeproj/project.pbxproj:
* Source/WebCore/platform/BoxSides.h:
* Source/WebCore/platform/FlowMode.h: Added.
(WebCore::FlowReversal::FlowReversal):
(WebCore::FlowReversal::isMainReversed const):
(WebCore::FlowReversal::isCrossReversed const):
(WebCore::FlowMode::FlowMode):
(WebCore::FlowMode::isMainHorizontal const):
(WebCore::FlowMode::isMainInline const):
(WebCore::FlowMode::isMainReverse const):
(WebCore::FlowMode::isCrossReverse const):
(WebCore::FlowMode::matches const):
(WebCore::FlowMode::isOrthogonal const):
(WebCore::FlowMode::isMainOpposing const):
(WebCore::FlowMode::isCrossOpposing const):
(WebCore::FlowMode::isMainMatchingAny const):
(WebCore::FlowMode::isCrossMatchingAny const):
(WebCore::FlowMode::isMainTopToBottom const):
(WebCore::FlowMode::isMainLeftToRight const):
(WebCore::FlowMode::isCrossTopToBottom const):
(WebCore::FlowMode::isCrossLeftToRight const):
(WebCore::FlowMode::isAnyTopToBottom const):
(WebCore::FlowMode::isAnyLeftToRight const):
(WebCore::FlowMode::isMainFlipped const):
(WebCore::FlowMode::isCrossFlipped const):
(WebCore::FlowMode::isInlineFlipped const):
(WebCore::FlowMode::isBlockFlipped const):
(WebCore::FlowMode::mainDirection const):
(WebCore::FlowMode::crossDirection const):
(WebCore::FlowMode::mainAxis const):
(WebCore::FlowMode::crossAxis const):
(WebCore::operator<<):
* Source/WebCore/platform/text/WritingMode.h:
* Source/WebCore/rendering/style/RenderStyleConstants.h:
(WebCore::toAxisDirection):
* Source/WebCore/style/computed/StyleComputedStyle+GettersInlines.h:
(WebCore::Style::ComputedStyle::isReverseFlexDirection const):
(WebCore::Style::ComputedStyle::flexFlowMode const):
* Source/WebCore/style/computed/StyleComputedStyle.h:
* Tools/TestWebKitAPI/CMakeLists.txt:
* Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
* Tools/TestWebKitAPI/Tests/WebCore/FlowModeTests.cpp: Added.
(TestWebKitAPI::writingModeString):
(TestWebKitAPI::flowModeString):
(TestWebKitAPI::flowReversalString):
(TestWebKitAPI::TEST(FlowMode, BoxAxisConstructor)):
(TestWebKitAPI::TEST(FlowMode, LogicalBoxAxisConstructor)):
(TestWebKitAPI::TEST(FlowMode, ConversionStyleConstructor)):

Canonical link: https://commits.webkit.org/317539@main



To unsubscribe from these emails, change your notification settings at 
https://github.com/WebKit/WebKit/settings/notifications

Reply via email to