Remove explicit passing of trait collection to setChild/Children

This commit is contained in:
ricky 2016-05-25 10:49:42 -07:00
parent a33966d4ae
commit c42b0dd33a
21 changed files with 59 additions and 181 deletions

View File

@ -1904,6 +1904,7 @@ void recursivelyTriggerDisplayForLayer(CALayer *layer, BOOL shouldBlock)
if ((_methodOverrides & ASDisplayNodeMethodOverrideLayoutSpecThatFits) || _layoutSpecBlock != NULL) { if ((_methodOverrides & ASDisplayNodeMethodOverrideLayoutSpecThatFits) || _layoutSpecBlock != NULL) {
ASLayoutSpec *layoutSpec = [self layoutSpecThatFits:constrainedSize]; ASLayoutSpec *layoutSpec = [self layoutSpecThatFits:constrainedSize];
layoutSpec.parent = self; // This causes upward propogation of any non-default layoutable values. layoutSpec.parent = self; // This causes upward propogation of any non-default layoutable values.
layoutSpec.traitCollection = self.asyncTraitCollection;
layoutSpec.isMutable = NO; layoutSpec.isMutable = NO;
ASLayout *layout = [layoutSpec measureWithSizeRange:constrainedSize]; ASLayout *layout = [layoutSpec measureWithSizeRange:constrainedSize];
// Make sure layoutableObject of the root layout is `self`, so that the flattened layout will be structurally correct. // Make sure layoutableObject of the root layout is `self`, so that the flattened layout will be structurally correct.

View File

@ -50,5 +50,6 @@
- (ASEnvironmentTraitCollection)environmentTraitCollection; - (ASEnvironmentTraitCollection)environmentTraitCollection;
- (BOOL)isEqualToTraitCollection:(ASTraitCollection *)traitCollection;
@end @end

View File

@ -95,4 +95,14 @@
}; };
} }
- (BOOL)isEqualToTraitCollection:(ASTraitCollection *)traitCollection
{
return self.displayScale == traitCollection.displayScale &&
self.horizontalSizeClass == traitCollection.horizontalSizeClass &&
self.verticalSizeClass == traitCollection.verticalSizeClass &&
self.userInterfaceIdiom == traitCollection.userInterfaceIdiom &&
self.traitCollectionContext == traitCollection.traitCollectionContext &&
self.forceTouchCapability == traitCollection.forceTouchCapability;
}
@end @end

View File

@ -24,9 +24,6 @@ NS_ASSUME_NONNULL_BEGIN
@param background A layoutable object that is laid out behind the child. If this is nil, the background is omitted. @param background A layoutable object that is laid out behind the child. If this is nil, the background is omitted.
*/ */
+ (instancetype)backgroundLayoutSpecWithChild:(id<ASLayoutable>)child background:(nullable id<ASLayoutable>)background; + (instancetype)backgroundLayoutSpecWithChild:(id<ASLayoutable>)child background:(nullable id<ASLayoutable>)background;
+ (instancetype)backgroundLayoutSpecWithChild:(id<ASLayoutable>)child background:(nullable id<ASLayoutable>)background traitCollect:(nullable ASTraitCollection *)traitCollection;
- (void)setBackground:(id<ASLayoutable>)background traitCollection:(nullable ASTraitCollection *)traitCollection;
@end @end

View File

@ -13,7 +13,6 @@
#import "ASAssert.h" #import "ASAssert.h"
#import "ASBaseDefines.h" #import "ASBaseDefines.h"
#import "ASLayout.h" #import "ASLayout.h"
#import "ASTraitCollection.h"
static NSString * const kBackgroundChildKey = @"kBackgroundChildKey"; static NSString * const kBackgroundChildKey = @"kBackgroundChildKey";
@ -22,27 +21,21 @@ static NSString * const kBackgroundChildKey = @"kBackgroundChildKey";
@implementation ASBackgroundLayoutSpec @implementation ASBackgroundLayoutSpec
- (instancetype)initWithChild:(id<ASLayoutable>)child background:(id<ASLayoutable>)background traitCollection:(ASTraitCollection *)traitCollection - (instancetype)initWithChild:(id<ASLayoutable>)child background:(id<ASLayoutable>)background
{ {
if (!(self = [super init])) { if (!(self = [super init])) {
return nil; return nil;
} }
ASDisplayNodeAssertNotNil(child, @"Child cannot be nil"); ASDisplayNodeAssertNotNil(child, @"Child cannot be nil");
self.environmentTraitCollection = [traitCollection environmentTraitCollection]; [self setChild:child];
[self setChild:child withTraitCollection:traitCollection]; self.background = background;
[self setBackground:background traitCollection:traitCollection];
return self; return self;
} }
+ (instancetype)backgroundLayoutSpecWithChild:(id<ASLayoutable>)child background:(id<ASLayoutable>)background; + (instancetype)backgroundLayoutSpecWithChild:(id<ASLayoutable>)child background:(id<ASLayoutable>)background;
{ {
return [self backgroundLayoutSpecWithChild:child background:background traitCollect:nil]; return [[self alloc] initWithChild:child background:background];
}
+ (instancetype)backgroundLayoutSpecWithChild:(id<ASLayoutable>)child background:(nullable id<ASLayoutable>)background traitCollect:(nullable ASTraitCollection *)traitCollection
{
return [[self alloc] initWithChild:child background:background traitCollection:traitCollection];
} }
/** /**
@ -67,12 +60,7 @@ static NSString * const kBackgroundChildKey = @"kBackgroundChildKey";
- (void)setBackground:(id<ASLayoutable>)background - (void)setBackground:(id<ASLayoutable>)background
{ {
[self setBackground:background traitCollection:nil]; [super setChild:background forIdentifier:kBackgroundChildKey];
}
- (void)setBackground:(id<ASLayoutable>)background traitCollection:(ASTraitCollection *)traitCollection
{
[super setChild:background forIdentifier:kBackgroundChildKey withTraitCollection:traitCollection];
} }
- (id<ASLayoutable>)background - (id<ASLayoutable>)background

View File

@ -58,11 +58,6 @@ NS_ASSUME_NONNULL_BEGIN
sizingOptions:(ASCenterLayoutSpecSizingOptions)sizingOptions sizingOptions:(ASCenterLayoutSpecSizingOptions)sizingOptions
child:(id<ASLayoutable>)child; child:(id<ASLayoutable>)child;
+ (instancetype)centerLayoutSpecWithCenteringOptions:(ASCenterLayoutSpecCenteringOptions)centeringOptions
sizingOptions:(ASCenterLayoutSpecSizingOptions)sizingOptions
child:(id<ASLayoutable>)child
traitCollection:(nullable ASTraitCollection *)traitCollection;
@end @end
NS_ASSUME_NONNULL_END NS_ASSUME_NONNULL_END

View File

@ -21,13 +21,12 @@
- (instancetype)initWithCenteringOptions:(ASCenterLayoutSpecCenteringOptions)centeringOptions - (instancetype)initWithCenteringOptions:(ASCenterLayoutSpecCenteringOptions)centeringOptions
sizingOptions:(ASCenterLayoutSpecSizingOptions)sizingOptions sizingOptions:(ASCenterLayoutSpecSizingOptions)sizingOptions
child:(id<ASLayoutable>)child child:(id<ASLayoutable>)child;
traitCollection:(ASTraitCollection *)traitCollection
{ {
ASRelativeLayoutSpecPosition verticalPosition = [self verticalPositionFromCenteringOptions:centeringOptions]; ASRelativeLayoutSpecPosition verticalPosition = [self verticalPositionFromCenteringOptions:centeringOptions];
ASRelativeLayoutSpecPosition horizontalPosition = [self horizontalPositionFromCenteringOptions:centeringOptions]; ASRelativeLayoutSpecPosition horizontalPosition = [self horizontalPositionFromCenteringOptions:centeringOptions];
if (!(self = [super initWithHorizontalPosition:horizontalPosition verticalPosition:verticalPosition sizingOption:sizingOptions child:child traitCollection:traitCollection])) { if (!(self = [super initWithHorizontalPosition:horizontalPosition verticalPosition:verticalPosition sizingOption:sizingOptions child:child])) {
return nil; return nil;
} }
_centeringOptions = centeringOptions; _centeringOptions = centeringOptions;
@ -39,15 +38,7 @@
sizingOptions:(ASCenterLayoutSpecSizingOptions)sizingOptions sizingOptions:(ASCenterLayoutSpecSizingOptions)sizingOptions
child:(id<ASLayoutable>)child child:(id<ASLayoutable>)child
{ {
return [self centerLayoutSpecWithCenteringOptions:centeringOptions sizingOptions:sizingOptions child:child traitCollection:nil]; return [[self alloc] initWithCenteringOptions:centeringOptions sizingOptions:sizingOptions child:child];
}
+ (instancetype)centerLayoutSpecWithCenteringOptions:(ASCenterLayoutSpecCenteringOptions)centeringOptions
sizingOptions:(ASCenterLayoutSpecSizingOptions)sizingOptions
child:(id<ASLayoutable>)child
traitCollection:(nullable ASTraitCollection *)traitCollection
{
return [[self alloc] initWithCenteringOptions:centeringOptions sizingOptions:sizingOptions child:child traitCollection:traitCollection];
} }
- (void)setCenteringOptions:(ASCenterLayoutSpecCenteringOptions)centeringOptions - (void)setCenteringOptions:(ASCenterLayoutSpecCenteringOptions)centeringOptions

View File

@ -38,7 +38,6 @@ NS_ASSUME_NONNULL_BEGIN
@param child The wrapped child to inset. @param child The wrapped child to inset.
*/ */
+ (instancetype)insetLayoutSpecWithInsets:(UIEdgeInsets)insets child:(id<ASLayoutable>)child; + (instancetype)insetLayoutSpecWithInsets:(UIEdgeInsets)insets child:(id<ASLayoutable>)child;
+ (instancetype)insetLayoutSpecWithInsets:(UIEdgeInsets)insets child:(id<ASLayoutable>)child traitCollection:(nullable ASTraitCollection *)traitCollection;
@end @end

View File

@ -12,9 +12,9 @@
#import "ASAssert.h" #import "ASAssert.h"
#import "ASBaseDefines.h" #import "ASBaseDefines.h"
#import "ASInternalHelpers.h" #import "ASInternalHelpers.h"
#import "ASLayout.h" #import "ASLayout.h"
#import "ASTraitCollection.h"
@interface ASInsetLayoutSpec () @interface ASInsetLayoutSpec ()
{ {
@ -42,26 +42,20 @@ static CGFloat centerInset(CGFloat outer, CGFloat inner)
@implementation ASInsetLayoutSpec @implementation ASInsetLayoutSpec
- (instancetype)initWithInsets:(UIEdgeInsets)insets child:(id<ASLayoutable>)child traitCollection:(nullable ASTraitCollection *)traitCollection - (instancetype)initWithInsets:(UIEdgeInsets)insets child:(id<ASLayoutable>)child;
{ {
if (!(self = [super init])) { if (!(self = [super init])) {
return nil; return nil;
} }
ASDisplayNodeAssertNotNil(child, @"Child cannot be nil"); ASDisplayNodeAssertNotNil(child, @"Child cannot be nil");
_insets = insets; _insets = insets;
self.environmentTraitCollection = [traitCollection environmentTraitCollection]; [self setChild:child];
[self setChild:child withTraitCollection:traitCollection];
return self; return self;
} }
+ (instancetype)insetLayoutSpecWithInsets:(UIEdgeInsets)insets child:(id<ASLayoutable>)child + (instancetype)insetLayoutSpecWithInsets:(UIEdgeInsets)insets child:(id<ASLayoutable>)child
{ {
return [self insetLayoutSpecWithInsets:insets child:child traitCollection:nil]; return [[self alloc] initWithInsets:insets child:child];
}
+ (instancetype)insetLayoutSpecWithInsets:(UIEdgeInsets)insets child:(id<ASLayoutable>)child traitCollection:(nullable ASTraitCollection *)traitCollection
{
return [[self alloc] initWithInsets:insets child:child traitCollection:traitCollection];
} }
- (void)setInsets:(UIEdgeInsets)insets - (void)setInsets:(UIEdgeInsets)insets

View File

@ -11,6 +11,8 @@
#import <AsyncDisplayKit/ASLayoutable.h> #import <AsyncDisplayKit/ASLayoutable.h>
#import <AsyncDisplayKit/ASAsciiArtBoxCreator.h> #import <AsyncDisplayKit/ASAsciiArtBoxCreator.h>
@class ASTraitCollection;
NS_ASSUME_NONNULL_BEGIN NS_ASSUME_NONNULL_BEGIN
/** A layout spec is an immutable object that describes a layout, loosely inspired by React. */ /** A layout spec is an immutable object that describes a layout, loosely inspired by React. */
@ -23,6 +25,8 @@ NS_ASSUME_NONNULL_BEGIN
*/ */
@property (nonatomic, assign) BOOL isMutable; @property (nonatomic, assign) BOOL isMutable;
@property (nonatomic, strong, nullable) ASTraitCollection *traitCollection;
- (instancetype)init; - (instancetype)init;
/** /**
@ -46,7 +50,6 @@ NS_ASSUME_NONNULL_BEGIN
* property that behind the scenes is calling setChild:forIdentifier:. * property that behind the scenes is calling setChild:forIdentifier:.
*/ */
- (void)setChild:(id<ASLayoutable>)child; - (void)setChild:(id<ASLayoutable>)child;
- (void)setChild:(id<ASLayoutable>)child withTraitCollection:(ASTraitCollection *)traitCollection;
/** /**
* Adds a child with the given identifier to this layout spec. * Adds a child with the given identifier to this layout spec.
@ -66,7 +69,6 @@ NS_ASSUME_NONNULL_BEGIN
* property that behind the scenes is calling setChild:forIdentifier:. * property that behind the scenes is calling setChild:forIdentifier:.
*/ */
- (void)setChild:(id<ASLayoutable>)child forIdentifier:(NSString *)identifier; - (void)setChild:(id<ASLayoutable>)child forIdentifier:(NSString *)identifier;
- (void)setChild:(id<ASLayoutable>)child forIdentifier:(NSString *)identifier withTraitCollection:(ASTraitCollection *)traitCollection;
/** /**
* Adds childen to this layout spec. * Adds childen to this layout spec.
@ -80,7 +82,6 @@ NS_ASSUME_NONNULL_BEGIN
* setChild: and setChild:forIdentifier: methods to do something appropriate or to assert. * setChild: and setChild:forIdentifier: methods to do something appropriate or to assert.
*/ */
- (void)setChildren:(NSArray<id<ASLayoutable>> *)children; - (void)setChildren:(NSArray<id<ASLayoutable>> *)children;
- (void)setChildren:(NSArray<id<ASLayoutable>> *)children withTraitCollection:(ASTraitCollection *)traitCollection;
/** /**
* Get child methods * Get child methods

View File

@ -114,48 +114,27 @@
} }
- (void)setChild:(id<ASLayoutable>)child - (void)setChild:(id<ASLayoutable>)child
{
id<ASEnvironment> parent = [child parent];
[self setChild:child withTraitCollection:[parent asyncTraitCollection]];
}
- (void)setChild:(id<ASLayoutable>)child withTraitCollection:(ASTraitCollection *)traitCollection
{ {
ASDisplayNodeAssert(self.isMutable, @"Cannot set properties when layout spec is not mutable"); ASDisplayNodeAssert(self.isMutable, @"Cannot set properties when layout spec is not mutable");
id<ASLayoutable> finalLayoutable = [self layoutableToAddFromLayoutable:child]; id<ASLayoutable> finalLayoutable = [self layoutableToAddFromLayoutable:child];
_child = finalLayoutable; _child = finalLayoutable;
[self propagateUpLayoutable:finalLayoutable]; [self propagateUpLayoutable:finalLayoutable];
ASEnvironmentStatePropagateDown(self, [traitCollection environmentTraitCollection]);
} }
- (void)setChild:(id<ASLayoutable>)child forIdentifier:(NSString *)identifier - (void)setChild:(id<ASLayoutable>)child forIdentifier:(NSString *)identifier
{
id<ASEnvironment> parent = [child parent];
[self setChild:child forIdentifier:identifier withTraitCollection:[parent asyncTraitCollection]];
}
- (void)setChild:(id<ASLayoutable>)child forIdentifier:(NSString *)identifier withTraitCollection:(ASTraitCollection *)traitCollection
{ {
ASDisplayNodeAssert(self.isMutable, @"Cannot set properties when layout spec is not mutable"); ASDisplayNodeAssert(self.isMutable, @"Cannot set properties when layout spec is not mutable");
id<ASLayoutable> finalLayoutable = [self layoutableToAddFromLayoutable:child]; id<ASLayoutable> finalLayoutable = [self layoutableToAddFromLayoutable:child];
self.childrenWithIdentifier[identifier] = finalLayoutable; self.childrenWithIdentifier[identifier] = finalLayoutable;
ASEnvironmentStatePropagateDown(self, [traitCollection environmentTraitCollection]);
// TODO: Should we propagate up the layoutable at it could happen that multiple children will propagated up their // TODO: Should we propagate up the layoutable at it could happen that multiple children will propagated up their
// layout options and one child will overwrite values from another child // layout options and one child will overwrite values from another child
// [self propagateUpLayoutable:finalLayoutable]; // [self propagateUpLayoutable:finalLayoutable];
} }
- (void)setChildren:(NSArray *)children - (void)setChildren:(NSArray<id<ASLayoutable>> *)children
{
id<ASLayoutable> child = [children firstObject];
id<ASEnvironment> parent = [child parent];
[self setChildren:children withTraitCollection:[parent asyncTraitCollection]];
}
- (void)setChildren:(NSArray<id<ASLayoutable>> *)children withTraitCollection:(ASTraitCollection *)traitCollection
{ {
ASDisplayNodeAssert(self.isMutable, @"Cannot set properties when layout spec is not mutable"); ASDisplayNodeAssert(self.isMutable, @"Cannot set properties when layout spec is not mutable");
@ -168,7 +147,6 @@
if (finalChildren.size() > 0) { if (finalChildren.size() > 0) {
_children = [NSArray arrayWithObjects:&finalChildren[0] count:finalChildren.size()]; _children = [NSArray arrayWithObjects:&finalChildren[0] count:finalChildren.size()];
} }
ASEnvironmentStatePropagateDown(self, [traitCollection environmentTraitCollection]);
} }
- (id<ASLayoutable>)childForIdentifier:(NSString *)identifier - (id<ASLayoutable>)childForIdentifier:(NSString *)identifier
@ -186,6 +164,13 @@
return [_children copy]; return [_children copy];
} }
- (void)setTraitCollection:(ASTraitCollection *)traitCollection
{
if ([traitCollection isEqualToTraitCollection:self.traitCollection] == NO) {
_traitCollection = traitCollection;
ASEnvironmentStatePropagateDown(self, [traitCollection environmentTraitCollection]);
}
}
#pragma mark - ASEnvironment #pragma mark - ASEnvironment

View File

@ -20,9 +20,6 @@ NS_ASSUME_NONNULL_BEGIN
@property (nullable, nonatomic, strong) id<ASLayoutable> overlay; @property (nullable, nonatomic, strong) id<ASLayoutable> overlay;
+ (instancetype)overlayLayoutSpecWithChild:(id<ASLayoutable>)child overlay:(nullable id<ASLayoutable>)overlay; + (instancetype)overlayLayoutSpecWithChild:(id<ASLayoutable>)child overlay:(nullable id<ASLayoutable>)overlay;
+ (instancetype)overlayLayoutSpecWithChild:(id<ASLayoutable>)child overlay:(nullable id<ASLayoutable>)overlay traitCollection:(nullable ASTraitCollection *)traitCollection;
- (void)setOverlay:(id<ASLayoutable> _Nullable)overlay traitCollection:(nullable ASTraitCollection *)traitCollection;
@end @end

View File

@ -13,42 +13,30 @@
#import "ASAssert.h" #import "ASAssert.h"
#import "ASBaseDefines.h" #import "ASBaseDefines.h"
#import "ASLayout.h" #import "ASLayout.h"
#import "ASTraitCollection.h"
static NSString * const kOverlayChildKey = @"kOverlayChildKey"; static NSString * const kOverlayChildKey = @"kOverlayChildKey";
@implementation ASOverlayLayoutSpec @implementation ASOverlayLayoutSpec
- (instancetype)initWithChild:(id<ASLayoutable>)child overlay:(id<ASLayoutable>)overlay traitCollection:(nullable ASTraitCollection *)traitCollection - (instancetype)initWithChild:(id<ASLayoutable>)child overlay:(id<ASLayoutable>)overlay
{ {
if (!(self = [super init])) { if (!(self = [super init])) {
return nil; return nil;
} }
ASDisplayNodeAssertNotNil(child, @"Child that will be overlayed on shouldn't be nil"); ASDisplayNodeAssertNotNil(child, @"Child that will be overlayed on shouldn't be nil");
self.environmentTraitCollection = [traitCollection environmentTraitCollection]; self.overlay = overlay;
[self setOverlay:overlay traitCollection:traitCollection]; [self setChild:child];
[self setChild:child withTraitCollection:traitCollection];
return self; return self;
} }
+ (instancetype)overlayLayoutSpecWithChild:(id<ASLayoutable>)child overlay:(id<ASLayoutable>)overlay + (instancetype)overlayLayoutSpecWithChild:(id<ASLayoutable>)child overlay:(id<ASLayoutable>)overlay
{ {
return [self overlayLayoutSpecWithChild:child overlay:overlay traitCollection:nil]; return [[self alloc] initWithChild:child overlay:overlay];
}
+ (instancetype)overlayLayoutSpecWithChild:(id<ASLayoutable>)child overlay:(nullable id<ASLayoutable>)overlay traitCollection:(nullable ASTraitCollection *)traitCollection
{
return [[self alloc] initWithChild:child overlay:overlay traitCollection:traitCollection];
} }
- (void)setOverlay:(id<ASLayoutable>)overlay - (void)setOverlay:(id<ASLayoutable>)overlay
{ {
[self setOverlay:overlay traitCollection:nil]; [super setChild:overlay forIdentifier:kOverlayChildKey];
}
- (void)setOverlay:(id<ASLayoutable> _Nullable)overlay traitCollection:(nullable ASTraitCollection *)traitCollection
{
return [super setChild:overlay forIdentifier:kOverlayChildKey withTraitCollection:traitCollection];
} }
- (id<ASLayoutable>)overlay - (id<ASLayoutable>)overlay

View File

@ -36,7 +36,6 @@ NS_ASSUME_NONNULL_BEGIN
@property (nonatomic, assign) CGFloat ratio; @property (nonatomic, assign) CGFloat ratio;
+ (instancetype)ratioLayoutSpecWithRatio:(CGFloat)ratio child:(id<ASLayoutable>)child; + (instancetype)ratioLayoutSpecWithRatio:(CGFloat)ratio child:(id<ASLayoutable>)child;
+ (instancetype)ratioLayoutSpecWithRatio:(CGFloat)ratio child:(id<ASLayoutable>)child traitCollection:(nullable ASTraitCollection *)traitCollection;
@end @end

View File

@ -15,9 +15,9 @@
#import "ASAssert.h" #import "ASAssert.h"
#import "ASBaseDefines.h" #import "ASBaseDefines.h"
#import "ASInternalHelpers.h" #import "ASInternalHelpers.h"
#import "ASLayout.h" #import "ASLayout.h"
#import "ASTraitCollection.h"
@implementation ASRatioLayoutSpec @implementation ASRatioLayoutSpec
{ {
@ -26,15 +26,10 @@
+ (instancetype)ratioLayoutSpecWithRatio:(CGFloat)ratio child:(id<ASLayoutable>)child + (instancetype)ratioLayoutSpecWithRatio:(CGFloat)ratio child:(id<ASLayoutable>)child
{ {
return [self ratioLayoutSpecWithRatio:ratio child:child traitCollection:nil]; return [[self alloc] initWithRatio:ratio child:child];
} }
+ (instancetype)ratioLayoutSpecWithRatio:(CGFloat)ratio child:(id<ASLayoutable>)child traitCollection:(ASTraitCollection *)traitCollection - (instancetype)initWithRatio:(CGFloat)ratio child:(id<ASLayoutable>)child;
{
return [[self alloc] initWithRatio:ratio child:child traitCollection:traitCollection];
}
- (instancetype)initWithRatio:(CGFloat)ratio child:(id<ASLayoutable>)child traitCollection:(ASTraitCollection *)traitCollection
{ {
if (!(self = [super init])) { if (!(self = [super init])) {
return nil; return nil;
@ -42,8 +37,7 @@
ASDisplayNodeAssertNotNil(child, @"Child cannot be nil"); ASDisplayNodeAssertNotNil(child, @"Child cannot be nil");
ASDisplayNodeAssert(ratio > 0, @"Ratio should be strictly positive, but received %f", ratio); ASDisplayNodeAssert(ratio > 0, @"Ratio should be strictly positive, but received %f", ratio);
_ratio = ratio; _ratio = ratio;
self.environmentTraitCollection = [traitCollection environmentTraitCollection]; [self setChild:child];
[self setChild:child withTraitCollection:traitCollection];
return self; return self;
} }

View File

@ -54,12 +54,6 @@ NS_ASSUME_NONNULL_BEGIN
sizingOption:(ASRelativeLayoutSpecSizingOption)sizingOption sizingOption:(ASRelativeLayoutSpecSizingOption)sizingOption
child:(id<ASLayoutable>)child; child:(id<ASLayoutable>)child;
+ (instancetype)relativePositionLayoutSpecWithHorizontalPosition:(ASRelativeLayoutSpecPosition)horizontalPosition
verticalPosition:(ASRelativeLayoutSpecPosition)verticalPosition
sizingOption:(ASRelativeLayoutSpecSizingOption)sizingOption
child:(id<ASLayoutable>)child
traitCollection:(nullable ASTraitCollection *)traitCollection;
/*! /*!
* @discussion convenience initializer for a ASRelativeLayoutSpec * @discussion convenience initializer for a ASRelativeLayoutSpec
* @param horizontalPosition how to position the item on the horizontal (x) axis * @param horizontalPosition how to position the item on the horizontal (x) axis
@ -71,8 +65,7 @@ NS_ASSUME_NONNULL_BEGIN
- (instancetype)initWithHorizontalPosition:(ASRelativeLayoutSpecPosition)horizontalPosition - (instancetype)initWithHorizontalPosition:(ASRelativeLayoutSpecPosition)horizontalPosition
verticalPosition:(ASRelativeLayoutSpecPosition)verticalPosition verticalPosition:(ASRelativeLayoutSpecPosition)verticalPosition
sizingOption:(ASRelativeLayoutSpecSizingOption)sizingOption sizingOption:(ASRelativeLayoutSpecSizingOption)sizingOption
child:(id<ASLayoutable>)child child:(id<ASLayoutable>)child;
traitCollection:(nullable ASTraitCollection *)traitCollection;
@end @end

View File

@ -9,15 +9,10 @@
#import "ASInternalHelpers.h" #import "ASInternalHelpers.h"
#import "ASLayout.h" #import "ASLayout.h"
#import "ASTraitCollection.h"
@implementation ASRelativeLayoutSpec @implementation ASRelativeLayoutSpec
- (instancetype)initWithHorizontalPosition:(ASRelativeLayoutSpecPosition)horizontalPosition - (instancetype)initWithHorizontalPosition:(ASRelativeLayoutSpecPosition)horizontalPosition verticalPosition:(ASRelativeLayoutSpecPosition)verticalPosition sizingOption:(ASRelativeLayoutSpecSizingOption)sizingOption child:(id<ASLayoutable>)child
verticalPosition:(ASRelativeLayoutSpecPosition)verticalPosition
sizingOption:(ASRelativeLayoutSpecSizingOption)sizingOption
child:(id<ASLayoutable>)child
traitCollection:(ASTraitCollection *)traitCollection
{ {
if (!(self = [super init])) { if (!(self = [super init])) {
return nil; return nil;
@ -26,23 +21,13 @@
_horizontalPosition = horizontalPosition; _horizontalPosition = horizontalPosition;
_verticalPosition = verticalPosition; _verticalPosition = verticalPosition;
_sizingOption = sizingOption; _sizingOption = sizingOption;
self.environmentTraitCollection = [traitCollection environmentTraitCollection]; [self setChild:child];
[self setChild:child withTraitCollection:traitCollection];
return self; return self;
} }
+ (instancetype)relativePositionLayoutSpecWithHorizontalPosition:(ASRelativeLayoutSpecPosition)horizontalPosition verticalPosition:(ASRelativeLayoutSpecPosition)verticalPosition sizingOption:(ASRelativeLayoutSpecSizingOption)sizingOption child:(id<ASLayoutable>)child + (instancetype)relativePositionLayoutSpecWithHorizontalPosition:(ASRelativeLayoutSpecPosition)horizontalPosition verticalPosition:(ASRelativeLayoutSpecPosition)verticalPosition sizingOption:(ASRelativeLayoutSpecSizingOption)sizingOption child:(id<ASLayoutable>)child
{ {
return [self relativePositionLayoutSpecWithHorizontalPosition:horizontalPosition verticalPosition:verticalPosition sizingOption:sizingOption child:child traitCollection:nil]; return [[self alloc] initWithHorizontalPosition:horizontalPosition verticalPosition:verticalPosition sizingOption:sizingOption child:child];
}
+ (instancetype)relativePositionLayoutSpecWithHorizontalPosition:(ASRelativeLayoutSpecPosition)horizontalPosition
verticalPosition:(ASRelativeLayoutSpecPosition)verticalPosition
sizingOption:(ASRelativeLayoutSpecSizingOption)sizingOption
child:(id<ASLayoutable>)child
traitCollection:(ASTraitCollection *)traitCollection
{
return [[self alloc] initWithHorizontalPosition:horizontalPosition verticalPosition:verticalPosition sizingOption:sizingOption child:child traitCollection:traitCollection];
} }
- (void)setHorizontalPosition:(ASRelativeLayoutSpecPosition)horizontalPosition - (void)setHorizontalPosition:(ASRelativeLayoutSpecPosition)horizontalPosition

View File

@ -71,18 +71,7 @@ NS_ASSUME_NONNULL_BEGIN
@param alignItems Orientation of the children along the cross axis @param alignItems Orientation of the children along the cross axis
@param children ASLayoutable children to be positioned. @param children ASLayoutable children to be positioned.
*/ */
+ (instancetype)stackLayoutSpecWithDirection:(ASStackLayoutDirection)direction + (instancetype)stackLayoutSpecWithDirection:(ASStackLayoutDirection)direction spacing:(CGFloat)spacing justifyContent:(ASStackLayoutJustifyContent)justifyContent alignItems:(ASStackLayoutAlignItems)alignItems children:(NSArray<id<ASLayoutable>> *)children;
spacing:(CGFloat)spacing
justifyContent:(ASStackLayoutJustifyContent)justifyContent
alignItems:(ASStackLayoutAlignItems)alignItems
children:(NSArray<id<ASLayoutable>> *)children;
+ (instancetype)stackLayoutSpecWithDirection:(ASStackLayoutDirection)direction
spacing:(CGFloat)spacing
justifyContent:(ASStackLayoutJustifyContent)justifyContent
alignItems:(ASStackLayoutAlignItems)alignItems
children:(NSArray<id<ASLayoutable>> *)children
traitCollection:(nullable ASTraitCollection *)traitCollection;
/** /**
* @return A stack layout spec with direction of ASStackLayoutDirectionVertical * @return A stack layout spec with direction of ASStackLayoutDirectionVertical

View File

@ -19,7 +19,6 @@
#import "ASStackLayoutSpecUtilities.h" #import "ASStackLayoutSpecUtilities.h"
#import "ASStackUnpositionedLayout.h" #import "ASStackUnpositionedLayout.h"
#import "ASThread.h" #import "ASThread.h"
#import "ASTraitCollection.h"
@implementation ASStackLayoutSpec @implementation ASStackLayoutSpec
{ {
@ -28,26 +27,12 @@
- (instancetype)init - (instancetype)init
{ {
return [self initWithDirection:ASStackLayoutDirectionHorizontal spacing:0.0 justifyContent:ASStackLayoutJustifyContentStart alignItems:ASStackLayoutAlignItemsStart children:nil traitCollection:nil]; return [self initWithDirection:ASStackLayoutDirectionHorizontal spacing:0.0 justifyContent:ASStackLayoutJustifyContentStart alignItems:ASStackLayoutAlignItemsStart children:nil];
} }
+ (instancetype)stackLayoutSpecWithDirection:(ASStackLayoutDirection)direction + (instancetype)stackLayoutSpecWithDirection:(ASStackLayoutDirection)direction spacing:(CGFloat)spacing justifyContent:(ASStackLayoutJustifyContent)justifyContent alignItems:(ASStackLayoutAlignItems)alignItems children:(NSArray *)children
spacing:(CGFloat)spacing
justifyContent:(ASStackLayoutJustifyContent)justifyContent
alignItems:(ASStackLayoutAlignItems)alignItems
children:(NSArray *)children
{ {
return [self stackLayoutSpecWithDirection:direction spacing:spacing justifyContent:justifyContent alignItems:alignItems children:children traitCollection:nil]; return [[self alloc] initWithDirection:direction spacing:spacing justifyContent:justifyContent alignItems:alignItems children:children];
}
+ (instancetype)stackLayoutSpecWithDirection:(ASStackLayoutDirection)direction
spacing:(CGFloat)spacing
justifyContent:(ASStackLayoutJustifyContent)justifyContent
alignItems:(ASStackLayoutAlignItems)alignItems
children:(NSArray<id<ASLayoutable>> *)children
traitCollection:(ASTraitCollection *)traitCollection
{
return [[self alloc] initWithDirection:direction spacing:spacing justifyContent:justifyContent alignItems:alignItems children:children traitCollection:traitCollection];
} }
+ (instancetype)verticalStackLayoutSpec + (instancetype)verticalStackLayoutSpec
@ -64,12 +49,7 @@
return stackLayoutSpec; return stackLayoutSpec;
} }
- (instancetype)initWithDirection:(ASStackLayoutDirection)direction - (instancetype)initWithDirection:(ASStackLayoutDirection)direction spacing:(CGFloat)spacing justifyContent:(ASStackLayoutJustifyContent)justifyContent alignItems:(ASStackLayoutAlignItems)alignItems children:(NSArray *)children
spacing:(CGFloat)spacing
justifyContent:(ASStackLayoutJustifyContent)justifyContent
alignItems:(ASStackLayoutAlignItems)alignItems
children:(NSArray *)children
traitCollection:(ASTraitCollection *)traitCollection
{ {
if (!(self = [super init])) { if (!(self = [super init])) {
return nil; return nil;
@ -81,8 +61,7 @@
_alignItems = alignItems; _alignItems = alignItems;
_justifyContent = justifyContent; _justifyContent = justifyContent;
self.environmentTraitCollection = [traitCollection environmentTraitCollection]; [self setChildren:children];
[self setChildren:children withTraitCollection:traitCollection];
return self; return self;
} }

View File

@ -24,7 +24,6 @@ NS_ASSUME_NONNULL_BEGIN
@param children Children to be positioned at fixed positions, each conforms to ASStaticLayoutable @param children Children to be positioned at fixed positions, each conforms to ASStaticLayoutable
*/ */
+ (instancetype)staticLayoutSpecWithChildren:(NSArray<id<ASStaticLayoutable>> *)children; + (instancetype)staticLayoutSpecWithChildren:(NSArray<id<ASStaticLayoutable>> *)children;
+ (instancetype)staticLayoutSpecWithChildren:(NSArray<id<ASStaticLayoutable>> *)children traitCollection:(nullable ASTraitCollection *)traitCollection;
@end @end

View File

@ -13,32 +13,25 @@
#import "ASLayoutSpecUtilities.h" #import "ASLayoutSpecUtilities.h"
#import "ASInternalHelpers.h" #import "ASInternalHelpers.h"
#import "ASLayout.h" #import "ASLayout.h"
#import "ASTraitCollection.h"
@implementation ASStaticLayoutSpec @implementation ASStaticLayoutSpec
+ (instancetype)staticLayoutSpecWithChildren:(NSArray *)children + (instancetype)staticLayoutSpecWithChildren:(NSArray *)children
{ {
return [self staticLayoutSpecWithChildren:children traitCollection:nil]; return [[self alloc] initWithChildren:children];
}
+ (instancetype)staticLayoutSpecWithChildren:(NSArray<id<ASStaticLayoutable>> *)children traitCollection:(ASTraitCollection *)traitCollection
{
return [[self alloc] initWithChildren:children traitCollection:traitCollection];
} }
- (instancetype)init - (instancetype)init
{ {
return [self initWithChildren:@[] traitCollection:nil]; return [self initWithChildren:@[]];
} }
- (instancetype)initWithChildren:(NSArray *)children traitCollection:(ASTraitCollection *)traitCollection - (instancetype)initWithChildren:(NSArray *)children
{ {
if (!(self = [super init])) { if (!(self = [super init])) {
return nil; return nil;
} }
self.environmentTraitCollection = [traitCollection environmentTraitCollection]; self.children = children;
[self setChildren:children withTraitCollection:traitCollection];
return self; return self;
} }