From a0881d2becd3d56befd5e5b9f7b69dc64a8ea6bf Mon Sep 17 00:00:00 2001 From: Ben Freist Date: Tue, 22 Nov 2022 18:37:02 +0000 Subject: [PATCH] Bug 1801458 - [refactor] Migrate NS_STYLE_UNICODE_BIDI_* defines r=emilio Differential Revision: https://phabricator.services.mozilla.com/D162487 --- layout/base/nsBidiPresUtils.cpp | 33 ++++++++++--------- layout/generic/nsBlockFrame.cpp | 5 +-- layout/generic/nsGfxScrollFrame.cpp | 4 +-- layout/generic/nsIFrame.cpp | 2 +- layout/generic/nsTextFrame.cpp | 6 ++-- layout/style/ServoBindings.toml | 1 + layout/style/nsStyleConsts.h | 14 ++++---- layout/style/nsStyleStruct.cpp | 2 +- layout/style/nsStyleStruct.h | 6 ++-- .../style/properties/longhands/text.mako.rs | 1 + 10 files changed, 40 insertions(+), 34 deletions(-) diff --git a/layout/base/nsBidiPresUtils.cpp b/layout/base/nsBidiPresUtils.cpp index f31220d98df7..d8071364f098 100644 --- a/layout/base/nsBidiPresUtils.cpp +++ b/layout/base/nsBidiPresUtils.cpp @@ -85,7 +85,8 @@ static char16_t GetBidiOverride(ComputedStyle* aComputedStyle) { return kLRO; } const nsStyleTextReset* text = aComputedStyle->StyleTextReset(); - if (text->mUnicodeBidi & NS_STYLE_UNICODE_BIDI_BIDI_OVERRIDE) { + if (text->mUnicodeBidi == StyleUnicodeBidi::BidiOverride || + text->mUnicodeBidi == StyleUnicodeBidi::IsolateOverride) { return StyleDirection::Rtl == vis->mDirection ? kRLO : kLRO; } return 0; @@ -104,21 +105,21 @@ static char16_t GetBidiOverride(ComputedStyle* aComputedStyle) { static char16_t GetBidiControl(ComputedStyle* aComputedStyle) { const nsStyleVisibility* vis = aComputedStyle->StyleVisibility(); const nsStyleTextReset* text = aComputedStyle->StyleTextReset(); - if (text->mUnicodeBidi & NS_STYLE_UNICODE_BIDI_EMBED) { - return StyleDirection::Rtl == vis->mDirection ? kRLE : kLRE; - } - if (text->mUnicodeBidi & NS_STYLE_UNICODE_BIDI_ISOLATE) { - if (text->mUnicodeBidi & NS_STYLE_UNICODE_BIDI_BIDI_OVERRIDE) { - // isolate-override + switch (text->mUnicodeBidi) { + case StyleUnicodeBidi::Embed: + return StyleDirection::Rtl == vis->mDirection ? kRLE : kLRE; + case StyleUnicodeBidi::Isolate: + // element already has its directionality set from content so + // we never need to return kFSI. + return StyleDirection::Rtl == vis->mDirection ? kRLI : kLRI; + case StyleUnicodeBidi::IsolateOverride: + case StyleUnicodeBidi::Plaintext: return kFSI; - } - // element already has its directionality set from content so - // we never need to return kFSI. - return StyleDirection::Rtl == vis->mDirection ? kRLI : kLRI; - } - if (text->mUnicodeBidi & NS_STYLE_UNICODE_BIDI_PLAINTEXT) { - return kFSI; + case StyleUnicodeBidi::Normal: + case StyleUnicodeBidi::BidiOverride: + break; } + return 0; } @@ -2474,8 +2475,8 @@ nsresult nsBidiPresUtils::ProcessTextForRenderingContext( /* static */ BidiEmbeddingLevel nsBidiPresUtils::BidiLevelFromStyle( ComputedStyle* aComputedStyle) { - if (aComputedStyle->StyleTextReset()->mUnicodeBidi & - NS_STYLE_UNICODE_BIDI_PLAINTEXT) { + if (aComputedStyle->StyleTextReset()->mUnicodeBidi == + StyleUnicodeBidi::Plaintext) { return BidiEmbeddingLevel::DefaultLTR(); } diff --git a/layout/generic/nsBlockFrame.cpp b/layout/generic/nsBlockFrame.cpp index 2e5e1af5d360..5adb79c767d7 100644 --- a/layout/generic/nsBlockFrame.cpp +++ b/layout/generic/nsBlockFrame.cpp @@ -2344,14 +2344,15 @@ void nsBlockFrame::MarkLineDirty(LineIterator aLine, */ static inline bool IsAlignedLeft(StyleTextAlign aAlignment, StyleDirection aDirection, - uint8_t aUnicodeBidi, nsIFrame* aFrame) { + StyleUnicodeBidi aUnicodeBidi, + nsIFrame* aFrame) { return SVGUtils::IsInSVGTextSubtree(aFrame) || StyleTextAlign::Left == aAlignment || (((StyleTextAlign::Start == aAlignment && StyleDirection::Ltr == aDirection) || (StyleTextAlign::End == aAlignment && StyleDirection::Rtl == aDirection)) && - !(NS_STYLE_UNICODE_BIDI_PLAINTEXT & aUnicodeBidi)); + aUnicodeBidi != StyleUnicodeBidi::Plaintext); } void nsBlockFrame::PrepareResizeReflow(BlockReflowState& aState) { diff --git a/layout/generic/nsGfxScrollFrame.cpp b/layout/generic/nsGfxScrollFrame.cpp index 8cbfe95a71c5..6d9595de9f82 100644 --- a/layout/generic/nsGfxScrollFrame.cpp +++ b/layout/generic/nsGfxScrollFrame.cpp @@ -7350,8 +7350,8 @@ nsRect ScrollFrameHelper::GetScrolledRect() const { StyleDirection ScrollFrameHelper::GetScrolledFrameDir() const { // If the scrolled frame has unicode-bidi: plaintext, the paragraph // direction set by the text content overrides the direction of the frame - if (mScrolledFrame->StyleTextReset()->mUnicodeBidi & - NS_STYLE_UNICODE_BIDI_PLAINTEXT) { + if (mScrolledFrame->StyleTextReset()->mUnicodeBidi == + StyleUnicodeBidi::Plaintext) { if (nsIFrame* child = mScrolledFrame->PrincipalChildList().FirstChild()) { return nsBidiPresUtils::ParagraphDirection(child) == mozilla::intl::BidiDirection::LTR diff --git a/layout/generic/nsIFrame.cpp b/layout/generic/nsIFrame.cpp index e20f789b0ed2..4badd2cd73d9 100644 --- a/layout/generic/nsIFrame.cpp +++ b/layout/generic/nsIFrame.cpp @@ -1718,7 +1718,7 @@ WritingMode nsIFrame::WritingModeForLine(WritingMode aSelfWM, MOZ_ASSERT(aSelfWM == GetWritingMode()); WritingMode writingMode = aSelfWM; - if (StyleTextReset()->mUnicodeBidi & NS_STYLE_UNICODE_BIDI_PLAINTEXT) { + if (StyleTextReset()->mUnicodeBidi == StyleUnicodeBidi::Plaintext) { mozilla::intl::BidiEmbeddingLevel frameLevel = nsBidiPresUtils::GetFrameBaseLevel(aSubFrame); writingMode.SetDirectionFromBidiLevel(frameLevel); diff --git a/layout/generic/nsTextFrame.cpp b/layout/generic/nsTextFrame.cpp index 1e1ad5830a76..ebfd4adbbd00 100644 --- a/layout/generic/nsTextFrame.cpp +++ b/layout/generic/nsTextFrame.cpp @@ -2019,9 +2019,9 @@ bool BuildTextRunsScanner::ContinueTextRunAcrossFrames(nsTextFrame* aFrame1, } // 3. The boundary is a bidi isolation boundary. - const uint8_t unicodeBidi = ctx->StyleTextReset()->mUnicodeBidi; - if (unicodeBidi == NS_STYLE_UNICODE_BIDI_ISOLATE || - unicodeBidi == NS_STYLE_UNICODE_BIDI_ISOLATE_OVERRIDE) { + const auto unicodeBidi = ctx->StyleTextReset()->mUnicodeBidi; + if (unicodeBidi == StyleUnicodeBidi::Isolate || + unicodeBidi == StyleUnicodeBidi::IsolateOverride) { return true; } diff --git a/layout/style/ServoBindings.toml b/layout/style/ServoBindings.toml index 181dcdbe2057..0ba115417725 100644 --- a/layout/style/ServoBindings.toml +++ b/layout/style/ServoBindings.toml @@ -151,6 +151,7 @@ rusty-enums = [ "mozilla::StyleTextOrientation", "mozilla::StyleMozBoxLayout", "mozilla::StyleTextCombineUpright", + "mozilla::StyleUnicodeBidi", "mozilla::StyleTableLayout", "mozilla::StyleEmptyCells", "nsStyleImageType", diff --git a/layout/style/nsStyleConsts.h b/layout/style/nsStyleConsts.h index 12a63dec3b49..b8cba322ef62 100644 --- a/layout/style/nsStyleConsts.h +++ b/layout/style/nsStyleConsts.h @@ -541,12 +541,14 @@ enum class StyleTextCombineUpright : uint8_t { }; // See nsStyleText -#define NS_STYLE_UNICODE_BIDI_NORMAL 0x0 -#define NS_STYLE_UNICODE_BIDI_EMBED 0x1 -#define NS_STYLE_UNICODE_BIDI_ISOLATE 0x2 -#define NS_STYLE_UNICODE_BIDI_BIDI_OVERRIDE 0x4 -#define NS_STYLE_UNICODE_BIDI_ISOLATE_OVERRIDE 0x6 -#define NS_STYLE_UNICODE_BIDI_PLAINTEXT 0x8 +enum class StyleUnicodeBidi : uint8_t { + Normal, + Embed, + Isolate, + BidiOverride, + IsolateOverride, + Plaintext +}; enum class StyleTableLayout : uint8_t { Auto, diff --git a/layout/style/nsStyleStruct.cpp b/layout/style/nsStyleStruct.cpp index 1046903cc818..27e1cabaf9f8 100644 --- a/layout/style/nsStyleStruct.cpp +++ b/layout/style/nsStyleStruct.cpp @@ -2868,7 +2868,7 @@ nsStyleTextReset::nsStyleTextReset(const Document& aDocument) : mTextOverflow(), mTextDecorationLine(StyleTextDecorationLine::NONE), mTextDecorationStyle(NS_STYLE_TEXT_DECORATION_STYLE_SOLID), - mUnicodeBidi(NS_STYLE_UNICODE_BIDI_NORMAL), + mUnicodeBidi(StyleUnicodeBidi::Normal), mInitialLetterSink(0), mInitialLetterSize(0.0f), mTextDecorationColor(StyleColor::CurrentColor()), diff --git a/layout/style/nsStyleStruct.h b/layout/style/nsStyleStruct.h index b45945ba4208..89a483e250f8 100644 --- a/layout/style/nsStyleStruct.h +++ b/layout/style/nsStyleStruct.h @@ -919,9 +919,9 @@ struct MOZ_NEEDS_MEMMOVABLE_MEMBERS nsStyleTextReset { mozilla::StyleTextDecorationLine mTextDecorationLine; uint8_t mTextDecorationStyle; // NS_STYLE_TEXT_DECORATION_STYLE_* - uint8_t mUnicodeBidi; // NS_STYLE_UNICODE_BIDI_* - nscoord mInitialLetterSink; // 0 means normal - float mInitialLetterSize; // 0.0f means normal + mozilla::StyleUnicodeBidi mUnicodeBidi; + nscoord mInitialLetterSink; // 0 means normal + float mInitialLetterSize; // 0.0f means normal mozilla::StyleColor mTextDecorationColor; mozilla::StyleTextDecorationLength mTextDecorationThickness; }; diff --git a/servo/components/style/properties/longhands/text.mako.rs b/servo/components/style/properties/longhands/text.mako.rs index 1660ed5c58e2..76a81dd6d30d 100644 --- a/servo/components/style/properties/longhands/text.mako.rs +++ b/servo/components/style/properties/longhands/text.mako.rs @@ -22,6 +22,7 @@ ${helpers.single_keyword( "unicode-bidi", "normal embed isolate bidi-override isolate-override plaintext", engines="gecko servo-2013", + gecko_enum_prefix="StyleUnicodeBidi", animation_value_type="none", spec="https://drafts.csswg.org/css-writing-modes/#propdef-unicode-bidi", servo_restyle_damage="rebuild_and_reflow",