Skip to content

Commit 5850165

Browse files
Emil SjolanderFacebook Github Bot
authored andcommitted
Add support for aspectRatio style prop
Summary: Expose aspectRatio style prop from css-layout to React Native. This means the following will now work: <View style={{backgroundColor: 'blue', aspectRatio: 1}}/> Reviewed By: javache Differential Revision: D4226472 fbshipit-source-id: c8709a7c0abbf77089a4e867879b42dcd9116f65
1 parent 1488725 commit 5850165

File tree

7 files changed

+30
-0
lines changed

7 files changed

+30
-0
lines changed

Libraries/StyleSheet/LayoutPropTypes.js

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -365,6 +365,21 @@ var LayoutPropTypes = {
365365
flexShrink: ReactPropTypes.number,
366366
flexBasis: ReactPropTypes.number,
367367

368+
/**
369+
* Aspect ratio control the size of the undefined dimension of a node. Aspect ratio is a
370+
* non-standard property only available in react native and not CSS.
371+
*
372+
* - On a node with a set width/height aspect ratio control the size of the unset dimension
373+
* - On a node with a set flex basis aspect ratio controls the size of the node in the cross axis
374+
* if unset
375+
* - On a node with a measure function aspect ratio works as though the measure function measures
376+
* the flex basis
377+
* - On a node with flex grow/shrink aspect ratio controls the size of the node in the cross axis
378+
* if unset
379+
* - Aspect ratio takes min/max dimensions into account
380+
*/
381+
aspectRatio: ReactPropTypes.number,
382+
368383
/** `zIndex` controls which components display on top of others.
369384
* Normally, you don't use `zIndex`. Components render according to
370385
* their order in the document tree, so later components draw over

React/Views/RCTShadowView.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,8 @@ typedef void (^RCTApplierBlock)(NSDictionary<NSNumber *, UIView *> *viewRegistry
138138
@property (nonatomic, assign) float flexShrink;
139139
@property (nonatomic, assign) float flexBasis;
140140

141+
@property (nonatomic, assign) float aspectRatio;
142+
141143
- (void)setFlex:(float)flex;
142144

143145
/**

React/Views/RCTShadowView.m

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -652,6 +652,7 @@ - (type)getProp \
652652
RCT_STYLE_PROPERTY(Position, position, PositionType, CSSPositionType)
653653
RCT_STYLE_PROPERTY(FlexWrap, flexWrap, FlexWrap, CSSWrap)
654654
RCT_STYLE_PROPERTY(Overflow, overflow, Overflow, CSSOverflow)
655+
RCT_STYLE_PROPERTY(AspectRatio, aspectRatio, AspectRatio, float)
655656

656657
- (void)setBackgroundColor:(UIColor *)color
657658
{

React/Views/RCTViewManager.m

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -294,6 +294,7 @@ - (RCTViewManagerUIBlock)uiBlockToAmendWithShadowViewRegistry:(__unused NSDictio
294294
RCT_EXPORT_SHADOW_PROPERTY(alignItems, CSSAlign)
295295
RCT_EXPORT_SHADOW_PROPERTY(alignSelf, CSSAlign)
296296
RCT_EXPORT_SHADOW_PROPERTY(position, CSSPositionType)
297+
RCT_EXPORT_SHADOW_PROPERTY(aspectRatio, float)
297298

298299
RCT_EXPORT_SHADOW_PROPERTY(overflow, CSSOverflow)
299300

ReactAndroid/src/main/java/com/facebook/react/uimanager/LayoutShadowNode.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,11 @@ public void setFlexBasis(float flexBasis) {
112112
super.setFlexBasis(flexBasis);
113113
}
114114

115+
@ReactProp(name = ViewProps.ASPECT_RATIO, defaultFloat = CSSConstants.UNDEFINED)
116+
public void setAspectRatio(float aspectRatio) {
117+
setStyleAspectRatio(aspectRatio);
118+
}
119+
115120
@ReactProp(name = ViewProps.FLEX_DIRECTION)
116121
public void setFlexDirection(@Nullable String flexDirection) {
117122
if (isVirtual()) {

ReactAndroid/src/main/java/com/facebook/react/uimanager/ReactShadowNode.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -576,6 +576,10 @@ public void setFlexBasis(float flexBasis) {
576576
mCSSNode.setFlexBasis(flexBasis);
577577
}
578578

579+
public void setStyleAspectRatio(float aspectRatio) {
580+
mCSSNode.setStyleAspectRatio(aspectRatio);
581+
}
582+
579583
public void setFlexDirection(CSSFlexDirection flexDirection) {
580584
mCSSNode.setFlexDirection(flexDirection);
581585
}

ReactAndroid/src/main/java/com/facebook/react/uimanager/ViewProps.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,8 @@ public class ViewProps {
6464
public static final String MIN_HEIGHT = "minHeight";
6565
public static final String MAX_HEIGHT = "maxHeight";
6666

67+
public static final String ASPECT_RATIO = "aspectRatio";
68+
6769
// Props that affect more than just layout
6870
public static final String ENABLED = "enabled";
6971
public static final String BACKGROUND_COLOR = "backgroundColor";

0 commit comments

Comments
 (0)