diff --git a/.travis.yml b/.travis.yml index f74b3aaf..8e09e9ac 100644 --- a/.travis.yml +++ b/.travis.yml @@ -23,7 +23,7 @@ before_install: script: - buck test //:CSSLayout - buck test //java:java - - buck test //CSSLayoutKit:CSSLayoutKit --config cxx.default_platform=iphonesimulator-x86_64 --config cxx.cflags=-DTRAVIS_CI + - buck test //YogaKit:YogaKit --config cxx.default_platform=iphonesimulator-x86_64 --config cxx.cflags=-DTRAVIS_CI - sh csharp/tests/Facebook.CSSLayout/test_macos.sh - buck run //benchmark:benchmark - git checkout HEAD^ diff --git a/CSSLayoutKit/UIView+CSSLayout.h b/CSSLayoutKit/UIView+CSSLayout.h deleted file mode 100644 index c88fbfbb..00000000 --- a/CSSLayoutKit/UIView+CSSLayout.h +++ /dev/null @@ -1,72 +0,0 @@ -/** - * Copyright (c) 2014-present, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - */ - -#import -#import - -@interface UIView (CSSLayout) - -/** - The property that decides if we should include this view when calculating layout. Defaults to YES. - */ -@property (nonatomic, readwrite, assign, setter=css_setIncludeInLayout:) BOOL css_includeInLayout; - -/** - The property that decides during layout/sizing whether or not css_* properties should be applied. Defaults to NO. - */ -@property (nonatomic, readwrite, assign, setter=css_setUsesFlexbox:) BOOL css_usesFlexbox; - -- (void)css_setDirection:(YGDirection)direction; -- (void)css_setFlexDirection:(YGFlexDirection)flexDirection; -- (void)css_setJustifyContent:(YGJustify)justifyContent; -- (void)css_setAlignContent:(YGAlign)alignContent; -- (void)css_setAlignItems:(YGAlign)alignItems; -- (void)css_setAlignSelf:(YGAlign)alignSelf; -- (void)css_setPositionType:(YGPositionType)positionType; -- (void)css_setFlexWrap:(YGWrap)flexWrap; - -- (void)css_setFlexGrow:(CGFloat)flexGrow; -- (void)css_setFlexShrink:(CGFloat)flexShrink; -- (void)css_setFlexBasis:(CGFloat)flexBasis; - -- (void)css_setPosition:(CGFloat)position forEdge:(YGEdge)edge; -- (void)css_setMargin:(CGFloat)margin forEdge:(YGEdge)edge; -- (void)css_setPadding:(CGFloat)padding forEdge:(YGEdge)edge; - -- (void)css_setWidth:(CGFloat)width; -- (void)css_setHeight:(CGFloat)height; -- (void)css_setMinWidth:(CGFloat)minWidth; -- (void)css_setMinHeight:(CGFloat)minHeight; -- (void)css_setMaxWidth:(CGFloat)maxWidth; -- (void)css_setMaxHeight:(CGFloat)maxHeight; - -// Yoga specific properties, not compatible with flexbox specification -- (void)css_setAspectRatio:(CGFloat)aspectRatio; - -/** - Get the resolved direction of this node. This won't be YGDirectionInherit - */ -- (YGDirection)css_resolvedDirection; - -/** - Perform a layout calculation and update the frames of the views in the hierarchy with th results - */ -- (void)css_applyLayout; - -/** - Returns the size of the view if no constraints were given. This could equivalent to calling [self sizeThatFits:CGSizeMake(CGFLOAT_MAX, CGFLOAT_MAX)]; - */ -- (CGSize)css_intrinsicSize; - -/** - Returns the number of children that are using Flexbox. - */ -- (NSUInteger)css_numberOfChildren; - -@end diff --git a/README.md b/README.md index c6bd9f37..09941370 100644 --- a/README.md +++ b/README.md @@ -94,23 +94,23 @@ root.getLayoutHeight(); ``` ### UIKit -The full API can be found in `CSSLayoutKit/UIView+CSSLayout.h`. +The full API can be found in `YogaKit/UIView+Yoga.h`. ```objective-c UIView *root = [UIView new]; -[root css_setUsesFlexbox:YES]; -[root css_setWidth:100]; -[root css_setHeight:100]; +[root yg_setUsesYoga:YES]; +[root yg_setWidth:100]; +[root yg_setHeight:100]; for (NSUInteger i = 0; i < 10; i++) { UIView *child = [UIView new]; - [child css_setUsesFlexbox:YES]; - [child css_setHeight:10]; + [child yg_setUsesYoga:YES]; + [child yg_setHeight:10]; [root addSubview:child]; } // Resulting layout will be set on the UIView hierarchy frames. -[root css_applyLayout]; +[root yg_applyLayout]; ``` ### .NET diff --git a/CSSLayoutKit/BUCK b/YogaKit/BUCK similarity index 93% rename from CSSLayoutKit/BUCK rename to YogaKit/BUCK index 224d68b7..fc97569b 100644 --- a/CSSLayoutKit/BUCK +++ b/YogaKit/BUCK @@ -28,9 +28,9 @@ UIKIT_CSSLAYOUT_COMPILER_FLAGS = [ ] apple_library( - name = 'CSSLayoutKit', + name = 'YogaKit', compiler_flags = UIKIT_CSSLAYOUT_COMPILER_FLAGS, - tests = [':CSSLayoutKitTests'], + tests = [':YogaKitTests'], srcs = glob(['*.m']), exported_headers = glob(['*.h']), frameworks = [ @@ -44,7 +44,7 @@ apple_library( ) apple_test( - name = 'CSSLayoutKitTests', + name = 'YogaKitTests', compiler_flags = UIKIT_CSSLAYOUT_COMPILER_FLAGS, info_plist = 'Tests/Info.plist', srcs = glob(['Tests/**/*.m']), @@ -53,7 +53,7 @@ apple_test( '$PLATFORM_DIR/Developer/Library/Frameworks/XCTest.framework', ], deps = [ - ':CSSLayoutKit', + ':YogaKit', ], visibility = ['PUBLIC'], ) diff --git a/CSSLayoutKit/Tests/Info.plist b/YogaKit/Tests/Info.plist similarity index 100% rename from CSSLayoutKit/Tests/Info.plist rename to YogaKit/Tests/Info.plist diff --git a/CSSLayoutKit/Tests/CSSLayoutKitTests.m b/YogaKit/Tests/YogaKitTests.m similarity index 69% rename from CSSLayoutKit/Tests/CSSLayoutKitTests.m rename to YogaKit/Tests/YogaKitTests.m index b125f382..2b31d9ce 100644 --- a/CSSLayoutKit/Tests/CSSLayoutKitTests.m +++ b/YogaKit/Tests/YogaKitTests.m @@ -9,12 +9,12 @@ #import -#import "UIView+CSSLayout.h" +#import "UIView+Yoga.h" -@interface CSSLayoutKitTests : XCTestCase +@interface YogaKitTests : XCTestCase @end -@implementation CSSLayoutKitTests +@implementation YogaKitTests #ifndef TRAVIS_CI @@ -23,7 +23,7 @@ XCTAssertEqual(0, CSSNodeGetInstanceCount()); UIView *view = [[UIView alloc] initWithFrame:CGRectZero]; - [view css_setFlexBasis:1]; + [view yg_setFlexBasis:1]; XCTAssertEqual(1, CSSNodeGetInstanceCount()); view = nil; @@ -35,11 +35,11 @@ XCTAssertEqual(0, CSSNodeGetInstanceCount()); UIView *view = [[UIView alloc] initWithFrame:CGRectZero]; - [view css_setFlexBasis:1]; + [view yg_setFlexBasis:1]; for (int i=0; i<10; i++) { UIView *subview = [[UIView alloc] initWithFrame:CGRectZero]; - [subview css_setFlexBasis:1]; + [subview yg_setFlexBasis:1]; [view addSubview:subview]; } XCTAssertEqual(11, CSSNodeGetInstanceCount()); @@ -50,49 +50,49 @@ #endif -- (void)testUsesFlexbox +- (void)testUsesYoga { UIView *view = [[UIView alloc] initWithFrame:CGRectZero]; - XCTAssertFalse([view css_usesFlexbox]); + XCTAssertFalse([view yg_usesYoga]); - [view css_setUsesFlexbox:YES]; - XCTAssertTrue([view css_usesFlexbox]); + [view yg_setUsesYoga:YES]; + XCTAssertTrue([view yg_usesYoga]); - [view css_setUsesFlexbox:NO]; - XCTAssertFalse([view css_usesFlexbox]); + [view yg_setUsesYoga:NO]; + XCTAssertFalse([view yg_usesYoga]); } - (void)testSizeThatFitsAsserts { UIView *view = [[UIView alloc] initWithFrame:CGRectZero]; - dispatch_sync(dispatch_queue_create("com.facebook.CSSLayout.testing", DISPATCH_QUEUE_SERIAL), ^(void){ - XCTAssertThrows([view css_intrinsicSize]); + dispatch_sync(dispatch_queue_create("com.facebook.Yoga.testing", DISPATCH_QUEUE_SERIAL), ^(void){ + XCTAssertThrows([view yg_intrinsicSize]); }); } - (void)testSizeThatFitsSmoke { UIView *container = [[UIView alloc] initWithFrame:CGRectZero]; - [container css_setUsesFlexbox:YES]; - [container css_setFlexDirection:YGFlexDirectionRow]; - [container css_setAlignItems:YGAlignFlexStart]; + [container yg_setUsesYoga:YES]; + [container yg_setFlexDirection:YGFlexDirectionRow]; + [container yg_setAlignItems:YGAlignFlexStart]; UILabel *longTextLabel = [[UILabel alloc] initWithFrame:CGRectZero]; longTextLabel.text = @"This is a very very very very very very very very long piece of text."; longTextLabel.lineBreakMode = NSLineBreakByTruncatingTail; longTextLabel.numberOfLines = 1; - [longTextLabel css_setUsesFlexbox:YES]; - [longTextLabel css_setFlexShrink:1]; + [longTextLabel yg_setUsesYoga:YES]; + [longTextLabel yg_setFlexShrink:1]; [container addSubview:longTextLabel]; UIView *textBadgeView = [[UIView alloc] initWithFrame:CGRectZero]; - [textBadgeView css_setUsesFlexbox:YES]; - [textBadgeView css_setMargin:3.0 forEdge:YGEdgeLeft]; - [textBadgeView css_setWidth:10]; - [textBadgeView css_setHeight:10]; + [textBadgeView yg_setUsesYoga:YES]; + [textBadgeView yg_setMargin:3.0 forEdge:YGEdgeLeft]; + [textBadgeView yg_setWidth:10]; + [textBadgeView yg_setHeight:10]; [container addSubview:textBadgeView]; - const CGSize containerSize = [container css_intrinsicSize]; + const CGSize containerSize = [container yg_intrinsicSize]; XCTAssertTrue(CGSizeEqualToSize(CGSizeMake(514,21), containerSize), @"Size is actually %@", NSStringFromCGSize(containerSize)); } @@ -101,17 +101,17 @@ const CGSize containerSize = CGSizeMake(320, 50); UIView *container = [[UIView alloc] initWithFrame:CGRectMake(0, 0, containerSize.width, containerSize.height)]; - [container css_setUsesFlexbox:YES]; - [container css_setFlexDirection:YGFlexDirectionRow]; + [container yg_setUsesYoga:YES]; + [container yg_setFlexDirection:YGFlexDirectionRow]; for (int i = 0; i < 3; i++) { UIView *subview = [[UIView alloc] initWithFrame:CGRectZero]; - [subview css_setUsesFlexbox:YES]; - [subview css_setFlexGrow:1]; + [subview yg_setUsesYoga:YES]; + [subview yg_setFlexGrow:1]; [container addSubview:subview]; } - [container css_applyLayout]; + [container yg_applyLayout]; XCTAssertFalse(CGRectIntersectsRect([container.subviews objectAtIndex:0].frame, [container.subviews objectAtIndex:1].frame)); XCTAssertFalse(CGRectIntersectsRect([container.subviews objectAtIndex:1].frame, [container.subviews objectAtIndex:2].frame)); @@ -130,33 +130,33 @@ const CGSize containerSize = CGSizeMake(300, 50); UIView *container = [[UIView alloc] initWithFrame:CGRectMake(0, 0, containerSize.width, containerSize.height)]; - [container css_setUsesFlexbox:YES]; - [container css_setFlexDirection:YGFlexDirectionRow]; + [container yg_setUsesYoga:YES]; + [container yg_setFlexDirection:YGFlexDirectionRow]; UIView *subview1 = [[UIView alloc] initWithFrame:CGRectZero]; - [subview1 css_setUsesFlexbox:YES]; - [subview1 css_setFlexGrow:1]; + [subview1 yg_setUsesYoga:YES]; + [subview1 yg_setFlexGrow:1]; [container addSubview:subview1]; UIView *subview2 = [[UIView alloc] initWithFrame:CGRectZero]; - [subview2 css_setUsesFlexbox:YES]; - [subview2 css_setFlexGrow:1]; + [subview2 yg_setUsesYoga:YES]; + [subview2 yg_setFlexGrow:1]; [container addSubview:subview2]; UIView *subview3 = [[UIView alloc] initWithFrame:CGRectZero]; - [subview3 css_setUsesFlexbox:YES]; - [subview3 css_setFlexGrow:1]; + [subview3 yg_setUsesYoga:YES]; + [subview3 yg_setFlexGrow:1]; [container addSubview:subview3]; - [container css_applyLayout]; + [container yg_applyLayout]; XCTAssertTrue(CGRectEqualToRect(subview1.frame, CGRectMake(0, 0, 100, 50))); XCTAssertTrue(CGRectEqualToRect(subview2.frame, CGRectMake(100, 0, 100, 50)), @"It's actually %@", NSStringFromCGRect(subview2.frame)); XCTAssertTrue(CGRectEqualToRect(subview3.frame, CGRectMake(200, 0, 100, 50))); [container exchangeSubviewAtIndex:2 withSubviewAtIndex:0]; - [subview2 css_setIncludeInLayout:NO]; - [container css_applyLayout]; + [subview2 yg_setIncludeInLayout:NO]; + [container yg_applyLayout]; XCTAssertTrue(CGRectEqualToRect(subview3.frame, CGRectMake(0, 0, 150, 50))); XCTAssertTrue(CGRectEqualToRect(subview1.frame, CGRectMake(150, 0, 150, 50))); @@ -170,32 +170,32 @@ const CGSize containerSize = CGSizeMake(300, 50); UIView *container = [[UIView alloc] initWithFrame:CGRectMake(0, 0, containerSize.width, containerSize.height)]; - [container css_setUsesFlexbox:YES]; - [container css_setFlexDirection:YGFlexDirectionRow]; + [container yg_setUsesYoga:YES]; + [container yg_setFlexDirection:YGFlexDirectionRow]; UIView *subview1 = [[UIView alloc] initWithFrame:CGRectZero]; - [subview1 css_setUsesFlexbox:YES]; - [subview1 css_setFlexGrow:1]; + [subview1 yg_setUsesYoga:YES]; + [subview1 yg_setFlexGrow:1]; [container addSubview:subview1]; UIView *subview2 = [[UIView alloc] initWithFrame:CGRectZero]; - [subview2 css_setUsesFlexbox:YES]; - [subview2 css_setFlexGrow:1]; + [subview2 yg_setUsesYoga:YES]; + [subview2 yg_setFlexGrow:1]; [container addSubview:subview2]; UIView *subview3 = [[UIView alloc] initWithFrame:CGRectZero]; - [subview3 css_setUsesFlexbox:YES]; - [subview3 css_setFlexGrow:1]; + [subview3 yg_setUsesYoga:YES]; + [subview3 yg_setFlexGrow:1]; [container addSubview:subview3]; - [container css_applyLayout]; + [container yg_applyLayout]; for (UIView *view in container.subviews) { XCTAssertTrue(CGSizeEqualToSize(CGSizeMake(100, 50), subview1.bounds.size), @"Actual size is %@", NSStringFromCGSize(view.bounds.size)); } - [subview3 css_setIncludeInLayout:NO]; - [container css_applyLayout]; + [subview3 yg_setIncludeInLayout:NO]; + [container yg_applyLayout]; XCTAssertTrue(CGSizeEqualToSize(CGSizeMake(150, 50), subview1.bounds.size), @"Actual size is %@", NSStringFromCGSize(subview1.bounds.size)); XCTAssertTrue(CGSizeEqualToSize(CGSizeMake(150, 50), subview2.bounds.size), @"Actual size is %@", NSStringFromCGSize(subview2.bounds.size)); @@ -207,62 +207,62 @@ - (void)testThatNumberOfChildrenIsCorrectWhenWeIgnoreSubviews { UIView *container = [[UIView alloc] initWithFrame:CGRectZero]; - [container css_setUsesFlexbox:YES]; - [container css_setFlexDirection:YGFlexDirectionRow]; + [container yg_setUsesYoga:YES]; + [container yg_setFlexDirection:YGFlexDirectionRow]; UIView *subview1 = [[UIView alloc] initWithFrame:CGRectZero]; - [subview1 css_setUsesFlexbox:YES]; - [subview1 css_setIncludeInLayout:NO]; + [subview1 yg_setUsesYoga:YES]; + [subview1 yg_setIncludeInLayout:NO]; [container addSubview:subview1]; UIView *subview2 = [[UIView alloc] initWithFrame:CGRectZero]; - [subview2 css_setUsesFlexbox:YES]; - [subview2 css_setIncludeInLayout:NO]; + [subview2 yg_setUsesYoga:YES]; + [subview2 yg_setIncludeInLayout:NO]; [container addSubview:subview2]; UIView *subview3 = [[UIView alloc] initWithFrame:CGRectZero]; - [subview3 css_setUsesFlexbox:YES]; - [subview3 css_setIncludeInLayout:YES]; + [subview3 yg_setUsesYoga:YES]; + [subview3 yg_setIncludeInLayout:YES]; [container addSubview:subview3]; - [container css_applyLayout]; - XCTAssertEqual(1, [container css_numberOfChildren]); + [container yg_applyLayout]; + XCTAssertEqual(1, [container yg_numberOfChildren]); - [subview2 css_setIncludeInLayout:YES]; - [container css_applyLayout]; - XCTAssertEqual(2, [container css_numberOfChildren]); + [subview2 yg_setIncludeInLayout:YES]; + [container yg_applyLayout]; + XCTAssertEqual(2, [container yg_numberOfChildren]); } - (void)testThatViewNotIncludedInFirstLayoutPassAreIncludedInSecond { UIView *container = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 300, 50)]; - [container css_setUsesFlexbox:YES]; - [container css_setFlexDirection:YGFlexDirectionRow]; + [container yg_setUsesYoga:YES]; + [container yg_setFlexDirection:YGFlexDirectionRow]; UIView *subview1 = [[UIView alloc] initWithFrame:CGRectZero]; - [subview1 css_setUsesFlexbox:YES]; - [subview1 css_setFlexGrow:1]; + [subview1 yg_setUsesYoga:YES]; + [subview1 yg_setFlexGrow:1]; [container addSubview:subview1]; UIView *subview2 = [[UIView alloc] initWithFrame:CGRectZero]; - [subview2 css_setUsesFlexbox:YES]; - [subview2 css_setFlexGrow:1]; + [subview2 yg_setUsesYoga:YES]; + [subview2 yg_setFlexGrow:1]; [container addSubview:subview2]; UIView *subview3 = [[UIView alloc] initWithFrame:CGRectZero]; - [subview3 css_setUsesFlexbox:YES]; - [subview3 css_setFlexGrow:1]; - [subview3 css_setIncludeInLayout:NO]; + [subview3 yg_setUsesYoga:YES]; + [subview3 yg_setFlexGrow:1]; + [subview3 yg_setIncludeInLayout:NO]; [container addSubview:subview3]; - [container css_applyLayout]; + [container yg_applyLayout]; XCTAssertTrue(CGSizeEqualToSize(CGSizeMake(150, 50), subview1.bounds.size), @"Actual size is %@", NSStringFromCGSize(subview1.bounds.size)); XCTAssertTrue(CGSizeEqualToSize(CGSizeMake(150, 50), subview2.bounds.size), @"Actual size is %@", NSStringFromCGSize(subview2.bounds.size)); XCTAssertTrue(CGSizeEqualToSize(CGSizeZero, subview3.bounds.size), @"Actual size %@", NSStringFromCGSize(subview3.bounds.size)); - [subview3 css_setIncludeInLayout:YES]; - [container css_applyLayout]; + [subview3 yg_setIncludeInLayout:YES]; + [container yg_applyLayout]; for (UIView *view in container.subviews) { XCTAssertTrue(CGSizeEqualToSize(CGSizeMake(100, 50), subview1.bounds.size), @"Actual size is %@", NSStringFromCGSize(view.bounds.size)); } diff --git a/YogaKit/UIView+Yoga.h b/YogaKit/UIView+Yoga.h new file mode 100644 index 00000000..b23b2027 --- /dev/null +++ b/YogaKit/UIView+Yoga.h @@ -0,0 +1,72 @@ +/** + * Copyright (c) 2014-present, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import +#import + +@interface UIView (CSSLayout) + +/** + The property that decides if we should include this view when calculating layout. Defaults to YES. + */ +@property (nonatomic, readwrite, assign, setter=yg_setIncludeInLayout:) BOOL yg_includeInLayout; + +/** + The property that decides during layout/sizing whether or not yg_* properties should be applied. Defaults to NO. + */ +@property (nonatomic, readwrite, assign, setter=yg_setUsesYoga:) BOOL yg_usesYoga; + +- (void)yg_setDirection:(YGDirection)direction; +- (void)yg_setFlexDirection:(YGFlexDirection)flexDirection; +- (void)yg_setJustifyContent:(YGJustify)justifyContent; +- (void)yg_setAlignContent:(YGAlign)alignContent; +- (void)yg_setAlignItems:(YGAlign)alignItems; +- (void)yg_setAlignSelf:(YGAlign)alignSelf; +- (void)yg_setPositionType:(YGPositionType)positionType; +- (void)yg_setFlexWrap:(YGWrap)flexWrap; + +- (void)yg_setFlexGrow:(CGFloat)flexGrow; +- (void)yg_setFlexShrink:(CGFloat)flexShrink; +- (void)yg_setFlexBasis:(CGFloat)flexBasis; + +- (void)yg_setPosition:(CGFloat)position forEdge:(YGEdge)edge; +- (void)yg_setMargin:(CGFloat)margin forEdge:(YGEdge)edge; +- (void)yg_setPadding:(CGFloat)padding forEdge:(YGEdge)edge; + +- (void)yg_setWidth:(CGFloat)width; +- (void)yg_setHeight:(CGFloat)height; +- (void)yg_setMinWidth:(CGFloat)minWidth; +- (void)yg_setMinHeight:(CGFloat)minHeight; +- (void)yg_setMaxWidth:(CGFloat)maxWidth; +- (void)yg_setMaxHeight:(CGFloat)maxHeight; + +// Yoga specific properties, not compatible with flexbox specification +- (void)yg_setAspectRatio:(CGFloat)aspectRatio; + +/** + Get the resolved direction of this node. This won't be YGDirectionInherit + */ +- (YGDirection)yg_resolvedDirection; + +/** + Perform a layout calculation and update the frames of the views in the hierarchy with th results + */ +- (void)yg_applyLayout; + +/** + Returns the size of the view if no constraints were given. This could equivalent to calling [self sizeThatFits:CGSizeMake(CGFLOAT_MAX, CGFLOAT_MAX)]; + */ +- (CGSize)yg_intrinsicSize; + +/** + Returns the number of children that are using Flexbox. + */ +- (NSUInteger)yg_numberOfChildren; + +@end diff --git a/CSSLayoutKit/UIView+CSSLayout.m b/YogaKit/UIView+Yoga.m similarity index 80% rename from CSSLayoutKit/UIView+CSSLayout.m rename to YogaKit/UIView+Yoga.m index 21b4010a..32299d9e 100644 --- a/CSSLayoutKit/UIView+CSSLayout.m +++ b/YogaKit/UIView+Yoga.m @@ -7,7 +7,7 @@ * of patent rights can be found in the PATENTS file in the same directory. */ -#import "UIView+CSSLayout.h" +#import "UIView+Yoga.h" #import @@ -39,162 +39,162 @@ @implementation UIView (CSSLayout) -- (BOOL)css_usesFlexbox +- (BOOL)yg_usesYoga { - NSNumber *usesFlexbox = objc_getAssociatedObject(self, @selector(css_usesFlexbox)); - return [usesFlexbox boolValue]; + NSNumber *usesYoga = objc_getAssociatedObject(self, @selector(yg_usesYoga)); + return [usesYoga boolValue]; } -- (BOOL)css_includeInLayout +- (BOOL)yg_includeInLayout { - NSNumber *includeInLayout = objc_getAssociatedObject(self, @selector(css_includeInLayout)); + NSNumber *includeInLayout = objc_getAssociatedObject(self, @selector(yg_includeInLayout)); return (includeInLayout != nil) ? [includeInLayout boolValue] : YES; } -- (NSUInteger)css_numberOfChildren +- (NSUInteger)yg_numberOfChildren { return CSSNodeChildCount([self cssNode]); } #pragma mark - Setters -- (void)css_setIncludeInLayout:(BOOL)includeInLayout +- (void)yg_setIncludeInLayout:(BOOL)includeInLayout { objc_setAssociatedObject( self, - @selector(css_includeInLayout), + @selector(yg_includeInLayout), @(includeInLayout), OBJC_ASSOCIATION_RETAIN_NONATOMIC); } -- (void)css_setUsesFlexbox:(BOOL)enabled +- (void)yg_setUsesYoga:(BOOL)enabled { objc_setAssociatedObject( self, - @selector(css_usesFlexbox), + @selector(yg_usesYoga), @(enabled), OBJC_ASSOCIATION_RETAIN_NONATOMIC); } -- (void)css_setDirection:(YGDirection)direction +- (void)yg_setDirection:(YGDirection)direction { CSSNodeStyleSetDirection([self cssNode], direction); } -- (void)css_setFlexDirection:(YGFlexDirection)flexDirection +- (void)yg_setFlexDirection:(YGFlexDirection)flexDirection { CSSNodeStyleSetFlexDirection([self cssNode], flexDirection); } -- (void)css_setJustifyContent:(YGJustify)justifyContent +- (void)yg_setJustifyContent:(YGJustify)justifyContent { CSSNodeStyleSetJustifyContent([self cssNode], justifyContent); } -- (void)css_setAlignContent:(YGAlign)alignContent +- (void)yg_setAlignContent:(YGAlign)alignContent { CSSNodeStyleSetAlignContent([self cssNode], alignContent); } -- (void)css_setAlignItems:(YGAlign)alignItems +- (void)yg_setAlignItems:(YGAlign)alignItems { CSSNodeStyleSetAlignItems([self cssNode], alignItems); } -- (void)css_setAlignSelf:(YGAlign)alignSelf +- (void)yg_setAlignSelf:(YGAlign)alignSelf { CSSNodeStyleSetAlignSelf([self cssNode], alignSelf); } -- (void)css_setPositionType:(YGPositionType)positionType +- (void)yg_setPositionType:(YGPositionType)positionType { CSSNodeStyleSetPositionType([self cssNode], positionType); } -- (void)css_setFlexWrap:(YGWrap)flexWrap +- (void)yg_setFlexWrap:(YGWrap)flexWrap { CSSNodeStyleSetFlexWrap([self cssNode], flexWrap); } -- (void)css_setFlexGrow:(CGFloat)flexGrow +- (void)yg_setFlexGrow:(CGFloat)flexGrow { CSSNodeStyleSetFlexGrow([self cssNode], flexGrow); } -- (void)css_setFlexShrink:(CGFloat)flexShrink +- (void)yg_setFlexShrink:(CGFloat)flexShrink { CSSNodeStyleSetFlexShrink([self cssNode], flexShrink); } -- (void)css_setFlexBasis:(CGFloat)flexBasis +- (void)yg_setFlexBasis:(CGFloat)flexBasis { CSSNodeStyleSetFlexBasis([self cssNode], flexBasis); } -- (void)css_setPosition:(CGFloat)position forEdge:(YGEdge)edge +- (void)yg_setPosition:(CGFloat)position forEdge:(YGEdge)edge { CSSNodeStyleSetPosition([self cssNode], edge, position); } -- (void)css_setMargin:(CGFloat)margin forEdge:(YGEdge)edge +- (void)yg_setMargin:(CGFloat)margin forEdge:(YGEdge)edge { CSSNodeStyleSetMargin([self cssNode], edge, margin); } -- (void)css_setPadding:(CGFloat)padding forEdge:(YGEdge)edge +- (void)yg_setPadding:(CGFloat)padding forEdge:(YGEdge)edge { CSSNodeStyleSetPadding([self cssNode], edge, padding); } -- (void)css_setWidth:(CGFloat)width +- (void)yg_setWidth:(CGFloat)width { CSSNodeStyleSetWidth([self cssNode], width); } -- (void)css_setHeight:(CGFloat)height +- (void)yg_setHeight:(CGFloat)height { CSSNodeStyleSetHeight([self cssNode], height); } -- (void)css_setMinWidth:(CGFloat)minWidth +- (void)yg_setMinWidth:(CGFloat)minWidth { CSSNodeStyleSetMinWidth([self cssNode], minWidth); } -- (void)css_setMinHeight:(CGFloat)minHeight +- (void)yg_setMinHeight:(CGFloat)minHeight { CSSNodeStyleSetMinHeight([self cssNode], minHeight); } -- (void)css_setMaxWidth:(CGFloat)maxWidth +- (void)yg_setMaxWidth:(CGFloat)maxWidth { CSSNodeStyleSetMaxWidth([self cssNode], maxWidth); } -- (void)css_setMaxHeight:(CGFloat)maxHeight +- (void)yg_setMaxHeight:(CGFloat)maxHeight { CSSNodeStyleSetMaxHeight([self cssNode], maxHeight); } -- (void)css_setAspectRatio:(CGFloat)aspectRatio +- (void)yg_setAspectRatio:(CGFloat)aspectRatio { CSSNodeStyleSetAspectRatio([self cssNode], aspectRatio); } #pragma mark - Layout and Sizing -- (YGDirection)css_resolvedDirection +- (YGDirection)yg_resolvedDirection { return CSSNodeLayoutGetDirection([self cssNode]); } -- (void)css_applyLayout +- (void)yg_applyLayout { [self calculateLayoutWithSize:self.bounds.size]; CSSApplyLayoutToViewHierarchy(self); } -- (CGSize)css_intrinsicSize +- (CGSize)yg_intrinsicSize { const CGSize constrainedSize = { .width = YGUndefined, @@ -220,7 +220,7 @@ - (CGSize)calculateLayoutWithSize:(CGSize)size { NSAssert([NSThread isMainThread], @"CSS Layout calculation must be done on main."); - NSAssert([self css_usesFlexbox], @"CSS Layout is not enabled for this view."); + NSAssert([self yg_usesYoga], @"CSS Layout is not enabled for this view."); CSSAttachNodesFromViewHierachy(self); @@ -280,7 +280,7 @@ static void CSSAttachNodesFromViewHierachy(UIView *view) { CSSNodeRef node = [view cssNode]; // Only leaf nodes should have a measure function - if (![view css_usesFlexbox] || view.subviews.count == 0) { + if (![view yg_usesYoga] || view.subviews.count == 0) { CSSNodeSetMeasureFunc(node, CSSMeasureView); CSSRemoveAllChildren(node); } else { @@ -289,7 +289,7 @@ static void CSSAttachNodesFromViewHierachy(UIView *view) { // Create a list of all the subviews that we are going to use for layout. NSMutableArray *subviewsToInclude = [[NSMutableArray alloc] initWithCapacity:view.subviews.count]; for (UIView *subview in view.subviews) { - if ([subview css_includeInLayout]) { + if ([subview yg_includeInLayout]) { [subviewsToInclude addObject:subview]; } } @@ -342,7 +342,7 @@ static CGFloat CSSRoundPixelValue(CGFloat value) static void CSSApplyLayoutToViewHierarchy(UIView *view) { NSCAssert([NSThread isMainThread], @"Framesetting should only be done on the main thread."); - if (![view css_includeInLayout]) { + if (![view yg_includeInLayout]) { return; } @@ -368,7 +368,7 @@ static void CSSApplyLayoutToViewHierarchy(UIView *view) { }, }; - const BOOL isLeaf = ![view css_usesFlexbox] || view.subviews.count == 0; + const BOOL isLeaf = ![view yg_usesYoga] || view.subviews.count == 0; if (!isLeaf) { for (NSUInteger i = 0; i < view.subviews.count; i++) { CSSApplyLayoutToViewHierarchy(view.subviews[i]);