Skip to content

Commit d3d2bd9

Browse files
chore: Update logic to give precedence to cardinal directions
1 parent b0dcb5a commit d3d2bd9

File tree

3 files changed

+30
-28
lines changed

3 files changed

+30
-28
lines changed

React/Views/RCTView.m

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -671,11 +671,16 @@ - (RCTCornerRadii)cornerRadii
671671
CGFloat bottomLeftRadius;
672672
CGFloat bottomRightRadius;
673673

674+
const CGFloat logicalTopStartRadius = RCTDefaultIfNegativeTo(_borderStartStartRadius, _borderTopStartRadius);
675+
const CGFloat logicalTopEndRadius = RCTDefaultIfNegativeTo(_borderStartEndRadius, _borderTopEndRadius);
676+
const CGFloat logicalBottomStartRadius = RCTDefaultIfNegativeTo(_borderEndStartRadius, _borderBottomStartRadius);
677+
const CGFloat logicalBottomEndRadius = RCTDefaultIfNegativeTo(_borderEndEndRadius, _borderBottomEndRadius);
678+
674679
if ([[RCTI18nUtil sharedInstance] doLeftAndRightSwapInRTL]) {
675-
const CGFloat topStartRadius = RCTDefaultIfNegativeTo(_borderTopLeftRadius, _borderStartStartRadius > 0 ? _borderStartStartRadius: _borderTopStartRadius);
676-
const CGFloat topEndRadius = RCTDefaultIfNegativeTo(_borderTopRightRadius, _borderStartEndRadius > 0 ? _borderStartEndRadius: _borderTopEndRadius);
677-
const CGFloat bottomStartRadius = RCTDefaultIfNegativeTo(_borderBottomLeftRadius, _borderEndStartRadius > 0 ? _borderEndStartRadius: _borderBottomStartRadius);
678-
const CGFloat bottomEndRadius = RCTDefaultIfNegativeTo(_borderBottomRightRadius, _borderEndEndRadius > 0 ? _borderEndEndRadius: _borderBottomEndRadius);
680+
const CGFloat topStartRadius = RCTDefaultIfNegativeTo(_borderTopLeftRadius, logicalTopStartRadius);
681+
const CGFloat topEndRadius = RCTDefaultIfNegativeTo(_borderTopRightRadius, logicalTopEndRadius);
682+
const CGFloat bottomStartRadius = RCTDefaultIfNegativeTo(_borderBottomLeftRadius, logicalBottomStartRadius);
683+
const CGFloat bottomEndRadius = RCTDefaultIfNegativeTo(_borderBottomRightRadius, logicalBottomEndRadius);
679684

680685
const CGFloat directionAwareTopLeftRadius = isRTL ? topEndRadius : topStartRadius;
681686
const CGFloat directionAwareTopRightRadius = isRTL ? topStartRadius : topEndRadius;
@@ -687,10 +692,10 @@ - (RCTCornerRadii)cornerRadii
687692
bottomLeftRadius = RCTDefaultIfNegativeTo(radius, directionAwareBottomLeftRadius);
688693
bottomRightRadius = RCTDefaultIfNegativeTo(radius, directionAwareBottomRightRadius);
689694
} else {
690-
const CGFloat directionAwareTopLeftRadius = isRTL ? _borderStartEndRadius > 0 ? _borderStartEndRadius: _borderTopEndRadius : _borderStartStartRadius > 0 ? _borderStartStartRadius: _borderTopStartRadius;
691-
const CGFloat directionAwareTopRightRadius = isRTL ? _borderStartStartRadius > 0 ? _borderStartStartRadius: _borderTopStartRadius : _borderStartEndRadius > 0 ? _borderStartEndRadius: _borderTopEndRadius;
692-
const CGFloat directionAwareBottomLeftRadius = isRTL ? _borderEndEndRadius > 0 ? _borderEndEndRadius: _borderBottomEndRadius : _borderEndStartRadius > 0 ? _borderEndStartRadius: _borderBottomStartRadius;
693-
const CGFloat directionAwareBottomRightRadius = isRTL ? _borderEndStartRadius > 0 ? _borderEndStartRadius: _borderBottomStartRadius : _borderEndEndRadius > 0 ? _borderEndEndRadius: _borderBottomEndRadius;
695+
const CGFloat directionAwareTopLeftRadius = isRTL ? logicalTopEndRadius : logicalTopStartRadius;
696+
const CGFloat directionAwareTopRightRadius = isRTL ? logicalTopStartRadius : logicalTopEndRadius;
697+
const CGFloat directionAwareBottomLeftRadius = isRTL ? logicalBottomEndRadius : logicalBottomStartRadius;
698+
const CGFloat directionAwareBottomRightRadius = isRTL ? logicalBottomStartRadius : logicalBottomEndRadius;
694699

695700
topLeftRadius =
696701
RCTDefaultIfNegativeTo(radius, RCTDefaultIfNegativeTo(_borderTopLeftRadius, directionAwareTopLeftRadius));

ReactAndroid/src/main/java/com/facebook/react/views/view/ReactViewBackgroundDrawable.java

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -607,10 +607,10 @@ private void updatePath() {
607607
bottomEndRadius = bottomRightRadius;
608608
}
609609

610-
final float logicalTopStartRadius = !YogaConstants.isUndefined(startStartRadius) ? startStartRadius : topStartRadius;
611-
final float logicalTopEndRadius = !YogaConstants.isUndefined(startEndRadius) ? startEndRadius : topEndRadius;
612-
final float logicalBottomStartRadius = !YogaConstants.isUndefined(endStartRadius) ? endStartRadius : bottomStartRadius;
613-
final float logicalBottomEndRadius = !YogaConstants.isUndefined(endEndRadius) ? endEndRadius : bottomEndRadius;
610+
final float logicalTopStartRadius = YogaConstants.isUndefined(topStartRadius) ? startStartRadius : topStartRadius;
611+
final float logicalTopEndRadius = YogaConstants.isUndefined(topEndRadius) ? startEndRadius : topEndRadius;
612+
final float logicalBottomStartRadius = YogaConstants.isUndefined(bottomStartRadius) ? endStartRadius : bottomStartRadius;
613+
final float logicalBottomEndRadius = YogaConstants.isUndefined(bottomEndRadius) ? endEndRadius : bottomEndRadius;
614614

615615
final float directionAwareTopLeftRadius = isRTL ? logicalTopEndRadius : logicalTopStartRadius;
616616
final float directionAwareTopRightRadius = isRTL ? logicalTopStartRadius : logicalTopEndRadius;
@@ -622,10 +622,10 @@ private void updatePath() {
622622
bottomLeftRadius = directionAwareBottomLeftRadius;
623623
bottomRightRadius = directionAwareBottomRightRadius;
624624
} else {
625-
final float logicalTopStartRadius = !YogaConstants.isUndefined(startStartRadius) ? startStartRadius : topStartRadius;
626-
final float logicalTopEndRadius = !YogaConstants.isUndefined(startEndRadius) ? startEndRadius : topEndRadius;
627-
final float logicalBottomStartRadius = !YogaConstants.isUndefined(endStartRadius) ? endStartRadius : bottomStartRadius;
628-
final float logicalBottomEndRadius = !YogaConstants.isUndefined(endEndRadius) ? endEndRadius : bottomEndRadius;
625+
final float logicalTopStartRadius = YogaConstants.isUndefined(topStartRadius) ? startStartRadius : topStartRadius;
626+
final float logicalTopEndRadius = YogaConstants.isUndefined(topEndRadius) ? startEndRadius : topEndRadius;
627+
final float logicalBottomStartRadius = YogaConstants.isUndefined(bottomStartRadius) ? endStartRadius : bottomStartRadius;
628+
final float logicalBottomEndRadius = YogaConstants.isUndefined(bottomEndRadius) ? endEndRadius : bottomEndRadius;
629629

630630
final float directionAwareTopLeftRadius = isRTL ? logicalTopEndRadius : logicalTopStartRadius;
631631
final float directionAwareTopRightRadius = isRTL ? logicalTopStartRadius : logicalTopEndRadius;

ReactCommon/react/renderer/components/view/primitives.h

Lines changed: 9 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -166,18 +166,15 @@ struct CascadedRectangleCorners {
166166
OptionalT startStart{};
167167

168168
Counterpart resolve(bool isRTL, T defaults) const {
169-
const auto topLeading = isRTL ? startEnd ? startEnd : topEnd
170-
: startStart ? startStart
171-
: topStart;
172-
const auto topTrailing = isRTL ? startStart ? startStart : topStart
173-
: startEnd ? startEnd
174-
: topEnd;
175-
const auto bottomLeading = isRTL ? endEnd ? endEnd : bottomEnd
176-
: endStart ? endStart
177-
: bottomStart;
178-
const auto bottomTrailing = isRTL ? endStart ? endStart : bottomStart
179-
: endEnd ? endEnd
180-
: bottomEnd;
169+
const auto logicalTopStart = topStart ? topStart : startStart;
170+
const auto logicalTopEnd = topEnd ? topEnd : startEnd;
171+
const auto logicalBottomStart = bottomStart ? bottomStart : endStart;
172+
const auto logicalBottomEnd = bottomEnd ? bottomEnd : endEnd;
173+
174+
const auto topLeading = isRTL ? logicalTopEnd : logicalTopStart;
175+
const auto topTrailing = isRTL ? logicalTopStart : logicalTopEnd;
176+
const auto bottomLeading = isRTL ? logicalBottomEnd : logicalBottomStart;
177+
const auto bottomTrailing = isRTL ? logicalBottomStart : logicalBottomEnd;
181178

182179
return {
183180
/* .topLeft = */ topLeft.value_or(

0 commit comments

Comments
 (0)