Skip to content

Commit a92c922

Browse files
sbuggayfacebook-github-bot
authored andcommitted
Add enableIOSCompressedTextFrameAdjustment feature flag (#57407)
Summary: Add the generated React Native feature flag plumbing for `enableIOSCompressedTextFrameAdjustment`. The flag gates an iOS `Text` rendering adjustment that expands and recenters compressed explicit `lineHeight` drawing when font glyph bounds exceed the drawing frame. Changelog: [iOS][Added] - Add `enableIOSCompressedTextFrameAdjustment` feature flag for `Text` rendering adjustments. Differential Revision: D110430299
1 parent f482ab6 commit a92c922

20 files changed

Lines changed: 197 additions & 80 deletions

packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlags.kt

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
* This source code is licensed under the MIT license found in the
55
* LICENSE file in the root directory of this source tree.
66
*
7-
* @generated SignedSource<<8b571241be0c86847ed265ab665059b2>>
7+
* @generated SignedSource<<c9e8eeefc709e1246577d67155300906>>
88
*/
99

1010
/**
@@ -180,6 +180,12 @@ public object ReactNativeFeatureFlags {
180180
@JvmStatic
181181
public fun enableFontScaleChangesUpdatingLayout(): Boolean = accessor.enableFontScaleChangesUpdatingLayout()
182182

183+
/**
184+
* Adjusts iOS Text drawing frames for compressed explicit line heights.
185+
*/
186+
@JvmStatic
187+
public fun enableIOSCompressedTextFrameAdjustment(): Boolean = accessor.enableIOSCompressedTextFrameAdjustment()
188+
183189
/**
184190
* Applies base offset for each line of text separately on iOS.
185191
*/

packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsCxxAccessor.kt

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
* This source code is licensed under the MIT license found in the
55
* LICENSE file in the root directory of this source tree.
66
*
7-
* @generated SignedSource<<856ed167e90b330583c3a6e981927c43>>
7+
* @generated SignedSource<<5ae6b1a0bfa9d680aa61685dbacd69d2>>
88
*/
99

1010
/**
@@ -45,6 +45,7 @@ internal class ReactNativeFeatureFlagsCxxAccessor : ReactNativeFeatureFlagsAcces
4545
private var enableFabricLogsCache: Boolean? = null
4646
private var enableFlexboxAutoMinSizeInStrictModeCache: Boolean? = null
4747
private var enableFontScaleChangesUpdatingLayoutCache: Boolean? = null
48+
private var enableIOSCompressedTextFrameAdjustmentCache: Boolean? = null
4849
private var enableIOSTextBaselineOffsetPerLineCache: Boolean? = null
4950
private var enableIOSViewClipToPaddingBoxCache: Boolean? = null
5051
private var enableImagePrefetchingAndroidCache: Boolean? = null
@@ -331,6 +332,15 @@ internal class ReactNativeFeatureFlagsCxxAccessor : ReactNativeFeatureFlagsAcces
331332
return cached
332333
}
333334

335+
override fun enableIOSCompressedTextFrameAdjustment(): Boolean {
336+
var cached = enableIOSCompressedTextFrameAdjustmentCache
337+
if (cached == null) {
338+
cached = ReactNativeFeatureFlagsCxxInterop.enableIOSCompressedTextFrameAdjustment()
339+
enableIOSCompressedTextFrameAdjustmentCache = cached
340+
}
341+
return cached
342+
}
343+
334344
override fun enableIOSTextBaselineOffsetPerLine(): Boolean {
335345
var cached = enableIOSTextBaselineOffsetPerLineCache
336346
if (cached == null) {

packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsCxxInterop.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
* This source code is licensed under the MIT license found in the
55
* LICENSE file in the root directory of this source tree.
66
*
7-
* @generated SignedSource<<2f68282c0b8c1971acdab2f229189d82>>
7+
* @generated SignedSource<<8b1c3206f7e63790e411f57c2dd64076>>
88
*/
99

1010
/**
@@ -78,6 +78,8 @@ public object ReactNativeFeatureFlagsCxxInterop {
7878

7979
@DoNotStrip @JvmStatic public external fun enableFontScaleChangesUpdatingLayout(): Boolean
8080

81+
@DoNotStrip @JvmStatic public external fun enableIOSCompressedTextFrameAdjustment(): Boolean
82+
8183
@DoNotStrip @JvmStatic public external fun enableIOSTextBaselineOffsetPerLine(): Boolean
8284

8385
@DoNotStrip @JvmStatic public external fun enableIOSViewClipToPaddingBox(): Boolean

packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsDefaults.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
* This source code is licensed under the MIT license found in the
55
* LICENSE file in the root directory of this source tree.
66
*
7-
* @generated SignedSource<<5f946970ba2e0676b55cc150de4bee01>>
7+
* @generated SignedSource<<5c36c0a5e9e67b43016ab02eab0ecd8f>>
88
*/
99

1010
/**
@@ -73,6 +73,8 @@ public open class ReactNativeFeatureFlagsDefaults : ReactNativeFeatureFlagsProvi
7373

7474
override fun enableFontScaleChangesUpdatingLayout(): Boolean = true
7575

76+
override fun enableIOSCompressedTextFrameAdjustment(): Boolean = false
77+
7678
override fun enableIOSTextBaselineOffsetPerLine(): Boolean = false
7779

7880
override fun enableIOSViewClipToPaddingBox(): Boolean = false

packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsLocalAccessor.kt

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
* This source code is licensed under the MIT license found in the
55
* LICENSE file in the root directory of this source tree.
66
*
7-
* @generated SignedSource<<c7adeebaabd6c647865bb5398b823221>>
7+
* @generated SignedSource<<98a6085638c86aaa012c8bd972627ad4>>
88
*/
99

1010
/**
@@ -49,6 +49,7 @@ internal class ReactNativeFeatureFlagsLocalAccessor : ReactNativeFeatureFlagsAcc
4949
private var enableFabricLogsCache: Boolean? = null
5050
private var enableFlexboxAutoMinSizeInStrictModeCache: Boolean? = null
5151
private var enableFontScaleChangesUpdatingLayoutCache: Boolean? = null
52+
private var enableIOSCompressedTextFrameAdjustmentCache: Boolean? = null
5253
private var enableIOSTextBaselineOffsetPerLineCache: Boolean? = null
5354
private var enableIOSViewClipToPaddingBoxCache: Boolean? = null
5455
private var enableImagePrefetchingAndroidCache: Boolean? = null
@@ -360,6 +361,16 @@ internal class ReactNativeFeatureFlagsLocalAccessor : ReactNativeFeatureFlagsAcc
360361
return cached
361362
}
362363

364+
override fun enableIOSCompressedTextFrameAdjustment(): Boolean {
365+
var cached = enableIOSCompressedTextFrameAdjustmentCache
366+
if (cached == null) {
367+
cached = currentProvider.enableIOSCompressedTextFrameAdjustment()
368+
accessedFeatureFlags.add("enableIOSCompressedTextFrameAdjustment")
369+
enableIOSCompressedTextFrameAdjustmentCache = cached
370+
}
371+
return cached
372+
}
373+
363374
override fun enableIOSTextBaselineOffsetPerLine(): Boolean {
364375
var cached = enableIOSTextBaselineOffsetPerLineCache
365376
if (cached == null) {

packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsProvider.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
* This source code is licensed under the MIT license found in the
55
* LICENSE file in the root directory of this source tree.
66
*
7-
* @generated SignedSource<<c4f37ab0fc935a27bae3b92e86abc243>>
7+
* @generated SignedSource<<8b5a9f8966d9f096b7fa4f7020db1f34>>
88
*/
99

1010
/**
@@ -73,6 +73,8 @@ public interface ReactNativeFeatureFlagsProvider {
7373

7474
@DoNotStrip public fun enableFontScaleChangesUpdatingLayout(): Boolean
7575

76+
@DoNotStrip public fun enableIOSCompressedTextFrameAdjustment(): Boolean
77+
7678
@DoNotStrip public fun enableIOSTextBaselineOffsetPerLine(): Boolean
7779

7880
@DoNotStrip public fun enableIOSViewClipToPaddingBox(): Boolean

packages/react-native/ReactAndroid/src/main/jni/react/featureflags/JReactNativeFeatureFlagsCxxInterop.cpp

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
* This source code is licensed under the MIT license found in the
55
* LICENSE file in the root directory of this source tree.
66
*
7-
* @generated SignedSource<<6719e639a89507a2019fcf1901394152>>
7+
* @generated SignedSource<<d2a114d06852632438ba743805e49f60>>
88
*/
99

1010
/**
@@ -189,6 +189,12 @@ class ReactNativeFeatureFlagsJavaProvider
189189
return method(javaProvider_);
190190
}
191191

192+
bool enableIOSCompressedTextFrameAdjustment() override {
193+
static const auto method =
194+
getReactNativeFeatureFlagsProviderJavaClass()->getMethod<jboolean()>("enableIOSCompressedTextFrameAdjustment");
195+
return method(javaProvider_);
196+
}
197+
192198
bool enableIOSTextBaselineOffsetPerLine() override {
193199
static const auto method =
194200
getReactNativeFeatureFlagsProviderJavaClass()->getMethod<jboolean()>("enableIOSTextBaselineOffsetPerLine");
@@ -678,6 +684,11 @@ bool JReactNativeFeatureFlagsCxxInterop::enableFontScaleChangesUpdatingLayout(
678684
return ReactNativeFeatureFlags::enableFontScaleChangesUpdatingLayout();
679685
}
680686

687+
bool JReactNativeFeatureFlagsCxxInterop::enableIOSCompressedTextFrameAdjustment(
688+
facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop> /*unused*/) {
689+
return ReactNativeFeatureFlags::enableIOSCompressedTextFrameAdjustment();
690+
}
691+
681692
bool JReactNativeFeatureFlagsCxxInterop::enableIOSTextBaselineOffsetPerLine(
682693
facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop> /*unused*/) {
683694
return ReactNativeFeatureFlags::enableIOSTextBaselineOffsetPerLine();
@@ -1084,6 +1095,9 @@ void JReactNativeFeatureFlagsCxxInterop::registerNatives() {
10841095
makeNativeMethod(
10851096
"enableFontScaleChangesUpdatingLayout",
10861097
JReactNativeFeatureFlagsCxxInterop::enableFontScaleChangesUpdatingLayout),
1098+
makeNativeMethod(
1099+
"enableIOSCompressedTextFrameAdjustment",
1100+
JReactNativeFeatureFlagsCxxInterop::enableIOSCompressedTextFrameAdjustment),
10871101
makeNativeMethod(
10881102
"enableIOSTextBaselineOffsetPerLine",
10891103
JReactNativeFeatureFlagsCxxInterop::enableIOSTextBaselineOffsetPerLine),

packages/react-native/ReactAndroid/src/main/jni/react/featureflags/JReactNativeFeatureFlagsCxxInterop.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
* This source code is licensed under the MIT license found in the
55
* LICENSE file in the root directory of this source tree.
66
*
7-
* @generated SignedSource<<ea2573be7bc2e1444cd9d157ac282f16>>
7+
* @generated SignedSource<<b4ad11ddb9d9beb0a8b3ae326d45dd97>>
88
*/
99

1010
/**
@@ -105,6 +105,9 @@ class JReactNativeFeatureFlagsCxxInterop
105105
static bool enableFontScaleChangesUpdatingLayout(
106106
facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop>);
107107

108+
static bool enableIOSCompressedTextFrameAdjustment(
109+
facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop>);
110+
108111
static bool enableIOSTextBaselineOffsetPerLine(
109112
facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop>);
110113

packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlags.cpp

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
* This source code is licensed under the MIT license found in the
55
* LICENSE file in the root directory of this source tree.
66
*
7-
* @generated SignedSource<<929bf9431ec07ddc39040cfff5b94754>>
7+
* @generated SignedSource<<b2f1772a72176d689d3152371808480a>>
88
*/
99

1010
/**
@@ -126,6 +126,10 @@ bool ReactNativeFeatureFlags::enableFontScaleChangesUpdatingLayout() {
126126
return getAccessor().enableFontScaleChangesUpdatingLayout();
127127
}
128128

129+
bool ReactNativeFeatureFlags::enableIOSCompressedTextFrameAdjustment() {
130+
return getAccessor().enableIOSCompressedTextFrameAdjustment();
131+
}
132+
129133
bool ReactNativeFeatureFlags::enableIOSTextBaselineOffsetPerLine() {
130134
return getAccessor().enableIOSTextBaselineOffsetPerLine();
131135
}

packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlags.h

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
* This source code is licensed under the MIT license found in the
55
* LICENSE file in the root directory of this source tree.
66
*
7-
* @generated SignedSource<<d7532c66f74b2f5e3b1dcd259089f6cd>>
7+
* @generated SignedSource<<5c7e2061344bf998e5fc6b621af2ff45>>
88
*/
99

1010
/**
@@ -164,6 +164,11 @@ class ReactNativeFeatureFlags {
164164
*/
165165
RN_EXPORT static bool enableFontScaleChangesUpdatingLayout();
166166

167+
/**
168+
* Adjusts iOS Text drawing frames for compressed explicit line heights.
169+
*/
170+
RN_EXPORT static bool enableIOSCompressedTextFrameAdjustment();
171+
167172
/**
168173
* Applies base offset for each line of text separately on iOS.
169174
*/

0 commit comments

Comments
 (0)