Compare commits
34 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
2c91e1e7d2 | ||
|
c3982b6c1e | ||
|
ae33c6c19c | ||
|
bcd68b997f | ||
|
fcfa1b9f01 | ||
|
d9a0822517 | ||
|
097e99b699 | ||
|
ff7bec703b | ||
|
c7ab004922 | ||
|
91230ae177 | ||
|
40eba60cf5 | ||
|
fb4cfed20d | ||
|
d3a9a84ac4 | ||
|
accad5366f | ||
|
8eca67e257 | ||
|
40e1bf6ce3 | ||
|
7b89a1dd48 | ||
|
203577724e | ||
|
e3dbef7cbd | ||
|
0ee3303791 | ||
|
83fddd8af6 | ||
|
77c05b5ff6 | ||
|
7c324f058c | ||
|
3db38f2a80 | ||
|
f6b17183c5 | ||
|
8f9d7e243e | ||
|
fde4db9383 | ||
|
3178e3bf15 | ||
|
cdfd05c742 | ||
|
76f6a54327 | ||
|
c91e4b3566 | ||
|
e24561bcef | ||
|
363e941867 | ||
|
3fb2c1888c |
12
.travis.yml
12
.travis.yml
@@ -19,9 +19,9 @@ env:
|
|||||||
- TARGET=android
|
- TARGET=android
|
||||||
|
|
||||||
before_install:
|
before_install:
|
||||||
|
- openssl aes-256-cbc -K $encrypted_d27e803291ff_key -iv $encrypted_d27e803291ff_iv -in scripts/setup-keys.enc -d >> gradle.properties
|
||||||
- brew update > /dev/null
|
- brew update > /dev/null
|
||||||
- brew tap facebook/fb
|
- brew install --HEAD facebook/fb/buck
|
||||||
- brew install buck
|
|
||||||
|
|
||||||
# Java
|
# Java
|
||||||
- |
|
- |
|
||||||
@@ -53,8 +53,8 @@ before_install:
|
|||||||
if [[ $TARGET = "js" ]]; then
|
if [[ $TARGET = "js" ]]; then
|
||||||
wget -O /tmp/emsdk-portable.tar.gz https://s3.amazonaws.com/mozilla-games/emscripten/releases/emsdk-portable.tar.gz &&
|
wget -O /tmp/emsdk-portable.tar.gz https://s3.amazonaws.com/mozilla-games/emscripten/releases/emsdk-portable.tar.gz &&
|
||||||
tar xf /tmp/emsdk-portable.tar.gz -C /tmp/ &&
|
tar xf /tmp/emsdk-portable.tar.gz -C /tmp/ &&
|
||||||
/tmp/emsdk_portable/emsdk install latest >& /dev/null &&
|
/tmp/emsdk-portable/emsdk install latest 2>&1 | grep -v '^x ' &&
|
||||||
/tmp/emsdk_portable/emsdk activate latest
|
/tmp/emsdk-portable/emsdk activate latest
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Android
|
# Android
|
||||||
@@ -63,7 +63,7 @@ before_install:
|
|||||||
brew cask install java;
|
brew cask install java;
|
||||||
export JAVA_HOME=$(/usr/libexec/java_home -v 1.8);
|
export JAVA_HOME=$(/usr/libexec/java_home -v 1.8);
|
||||||
export PATH=$JAVA_HOME/bin:$PATH;
|
export PATH=$JAVA_HOME/bin:$PATH;
|
||||||
brew install android-sdk;
|
brew install caskroom/cask/android-sdk;
|
||||||
export ANDROID_SDK=/usr/local/Cellar/android-sdk/24.4.1_1;
|
export ANDROID_SDK=/usr/local/Cellar/android-sdk/24.4.1_1;
|
||||||
export ANDROID_HOME=/usr/local/Cellar/android-sdk/24.4.1_1;
|
export ANDROID_HOME=/usr/local/Cellar/android-sdk/24.4.1_1;
|
||||||
brew install lib32stdc++6 lib32z1;
|
brew install lib32stdc++6 lib32z1;
|
||||||
@@ -77,7 +77,7 @@ before_install:
|
|||||||
cd javascript &&
|
cd javascript &&
|
||||||
npm install &&
|
npm install &&
|
||||||
unset CC && unset CXX && unset LINK &&
|
unset CC && unset CXX && unset LINK &&
|
||||||
source /tmp/emsdk_portable/emsdk_env.sh &&
|
source /tmp/emsdk-portable/emsdk_env.sh &&
|
||||||
npm run build:browser
|
npm run build:browser
|
||||||
) fi
|
) fi
|
||||||
|
|
||||||
|
@@ -9,6 +9,7 @@ SOLOADER_TARGET = '//lib/soloader:soloader'
|
|||||||
GTEST_TARGET = '//lib/gtest:gtest'
|
GTEST_TARGET = '//lib/gtest:gtest'
|
||||||
JNI_TARGET = '//lib/jni:jni'
|
JNI_TARGET = '//lib/jni:jni'
|
||||||
FBJNI_TARGET = '//lib/fb:fbjni'
|
FBJNI_TARGET = '//lib/fb:fbjni'
|
||||||
|
FBJNI_JAVA_TARGET = '//lib/fb/src/main/java/com/facebook/jni:jni'
|
||||||
APPCOMPAT_TARGET = '//lib/appcompat:appcompat'
|
APPCOMPAT_TARGET = '//lib/appcompat:appcompat'
|
||||||
ANDROID_SUPPORT_TARGET = '//lib/android-support:android-support'
|
ANDROID_SUPPORT_TARGET = '//lib/android-support:android-support'
|
||||||
ANDROID_TARGET = '//android:android'
|
ANDROID_TARGET = '//android:android'
|
||||||
|
@@ -15,11 +15,11 @@ podspec = Pod::Spec.new do |spec|
|
|||||||
}
|
}
|
||||||
|
|
||||||
spec.platform = :ios
|
spec.platform = :ios
|
||||||
spec.ios.deployment_target = '8.0'
|
spec.ios.deployment_target = '7.0'
|
||||||
spec.ios.frameworks = 'UIKit'
|
spec.ios.frameworks = 'UIKit'
|
||||||
|
|
||||||
spec.dependency 'Yoga', '~> 1.3'
|
spec.dependency 'Yoga', '~> 1.3'
|
||||||
spec.source_files = 'YogaKit/Source/*.{h,m}'
|
spec.source_files = 'YogaKit/Source/*.{h,m,swift}'
|
||||||
spec.public_header_files = 'YogaKit/Source/{YGLayout,UIView+Yoga}.h'
|
spec.public_header_files = 'YogaKit/Source/{YGLayout,UIView+Yoga}.h'
|
||||||
spec.private_header_files = 'YogaKit/Source/YGLayout+Private.h'
|
spec.private_header_files = 'YogaKit/Source/YGLayout+Private.h'
|
||||||
end
|
end
|
||||||
|
@@ -9,6 +9,12 @@
|
|||||||
|
|
||||||
#import <UIKit/UIKit.h>
|
#import <UIKit/UIKit.h>
|
||||||
#import <yoga/YGEnums.h>
|
#import <yoga/YGEnums.h>
|
||||||
|
#import <yoga/Yoga.h>
|
||||||
|
|
||||||
|
extern YGValue YGPointValue(CGFloat value)
|
||||||
|
NS_SWIFT_UNAVAILABLE("Use the swift Int and FloatingPoint extensions instead");
|
||||||
|
extern YGValue YGPercentValue(CGFloat value)
|
||||||
|
NS_SWIFT_UNAVAILABLE("Use the swift Int and FloatingPoint extensions instead");
|
||||||
|
|
||||||
typedef NS_OPTIONS(NSInteger, YGDimensionFlexibility) {
|
typedef NS_OPTIONS(NSInteger, YGDimensionFlexibility) {
|
||||||
YGDimensionFlexibilityFlexibleWidth = 1 << 0,
|
YGDimensionFlexibilityFlexibleWidth = 1 << 0,
|
||||||
@@ -41,34 +47,34 @@ typedef NS_OPTIONS(NSInteger, YGDimensionFlexibility) {
|
|||||||
|
|
||||||
@property (nonatomic, readwrite, assign) CGFloat flexGrow;
|
@property (nonatomic, readwrite, assign) CGFloat flexGrow;
|
||||||
@property (nonatomic, readwrite, assign) CGFloat flexShrink;
|
@property (nonatomic, readwrite, assign) CGFloat flexShrink;
|
||||||
@property (nonatomic, readwrite, assign) CGFloat flexBasis;
|
@property (nonatomic, readwrite, assign) YGValue flexBasis;
|
||||||
|
|
||||||
@property (nonatomic, readwrite, assign) CGFloat left;
|
@property (nonatomic, readwrite, assign) YGValue left;
|
||||||
@property (nonatomic, readwrite, assign) CGFloat top;
|
@property (nonatomic, readwrite, assign) YGValue top;
|
||||||
@property (nonatomic, readwrite, assign) CGFloat right;
|
@property (nonatomic, readwrite, assign) YGValue right;
|
||||||
@property (nonatomic, readwrite, assign) CGFloat bottom;
|
@property (nonatomic, readwrite, assign) YGValue bottom;
|
||||||
@property (nonatomic, readwrite, assign) CGFloat start;
|
@property (nonatomic, readwrite, assign) YGValue start;
|
||||||
@property (nonatomic, readwrite, assign) CGFloat end;
|
@property (nonatomic, readwrite, assign) YGValue end;
|
||||||
|
|
||||||
@property (nonatomic, readwrite, assign) CGFloat marginLeft;
|
@property (nonatomic, readwrite, assign) YGValue marginLeft;
|
||||||
@property (nonatomic, readwrite, assign) CGFloat marginTop;
|
@property (nonatomic, readwrite, assign) YGValue marginTop;
|
||||||
@property (nonatomic, readwrite, assign) CGFloat marginRight;
|
@property (nonatomic, readwrite, assign) YGValue marginRight;
|
||||||
@property (nonatomic, readwrite, assign) CGFloat marginBottom;
|
@property (nonatomic, readwrite, assign) YGValue marginBottom;
|
||||||
@property (nonatomic, readwrite, assign) CGFloat marginStart;
|
@property (nonatomic, readwrite, assign) YGValue marginStart;
|
||||||
@property (nonatomic, readwrite, assign) CGFloat marginEnd;
|
@property (nonatomic, readwrite, assign) YGValue marginEnd;
|
||||||
@property (nonatomic, readwrite, assign) CGFloat marginHorizontal;
|
@property (nonatomic, readwrite, assign) YGValue marginHorizontal;
|
||||||
@property (nonatomic, readwrite, assign) CGFloat marginVertical;
|
@property (nonatomic, readwrite, assign) YGValue marginVertical;
|
||||||
@property (nonatomic, readwrite, assign) CGFloat margin;
|
@property (nonatomic, readwrite, assign) YGValue margin;
|
||||||
|
|
||||||
@property (nonatomic, readwrite, assign) CGFloat paddingLeft;
|
@property (nonatomic, readwrite, assign) YGValue paddingLeft;
|
||||||
@property (nonatomic, readwrite, assign) CGFloat paddingTop;
|
@property (nonatomic, readwrite, assign) YGValue paddingTop;
|
||||||
@property (nonatomic, readwrite, assign) CGFloat paddingRight;
|
@property (nonatomic, readwrite, assign) YGValue paddingRight;
|
||||||
@property (nonatomic, readwrite, assign) CGFloat paddingBottom;
|
@property (nonatomic, readwrite, assign) YGValue paddingBottom;
|
||||||
@property (nonatomic, readwrite, assign) CGFloat paddingStart;
|
@property (nonatomic, readwrite, assign) YGValue paddingStart;
|
||||||
@property (nonatomic, readwrite, assign) CGFloat paddingEnd;
|
@property (nonatomic, readwrite, assign) YGValue paddingEnd;
|
||||||
@property (nonatomic, readwrite, assign) CGFloat paddingHorizontal;
|
@property (nonatomic, readwrite, assign) YGValue paddingHorizontal;
|
||||||
@property (nonatomic, readwrite, assign) CGFloat paddingVertical;
|
@property (nonatomic, readwrite, assign) YGValue paddingVertical;
|
||||||
@property (nonatomic, readwrite, assign) CGFloat padding;
|
@property (nonatomic, readwrite, assign) YGValue padding;
|
||||||
|
|
||||||
@property (nonatomic, readwrite, assign) CGFloat borderLeftWidth;
|
@property (nonatomic, readwrite, assign) CGFloat borderLeftWidth;
|
||||||
@property (nonatomic, readwrite, assign) CGFloat borderTopWidth;
|
@property (nonatomic, readwrite, assign) CGFloat borderTopWidth;
|
||||||
@@ -78,12 +84,12 @@ typedef NS_OPTIONS(NSInteger, YGDimensionFlexibility) {
|
|||||||
@property (nonatomic, readwrite, assign) CGFloat borderEndWidth;
|
@property (nonatomic, readwrite, assign) CGFloat borderEndWidth;
|
||||||
@property (nonatomic, readwrite, assign) CGFloat borderWidth;
|
@property (nonatomic, readwrite, assign) CGFloat borderWidth;
|
||||||
|
|
||||||
@property (nonatomic, readwrite, assign) CGFloat width;
|
@property (nonatomic, readwrite, assign) YGValue width;
|
||||||
@property (nonatomic, readwrite, assign) CGFloat height;
|
@property (nonatomic, readwrite, assign) YGValue height;
|
||||||
@property (nonatomic, readwrite, assign) CGFloat minWidth;
|
@property (nonatomic, readwrite, assign) YGValue minWidth;
|
||||||
@property (nonatomic, readwrite, assign) CGFloat minHeight;
|
@property (nonatomic, readwrite, assign) YGValue minHeight;
|
||||||
@property (nonatomic, readwrite, assign) CGFloat maxWidth;
|
@property (nonatomic, readwrite, assign) YGValue maxWidth;
|
||||||
@property (nonatomic, readwrite, assign) CGFloat maxHeight;
|
@property (nonatomic, readwrite, assign) YGValue maxHeight;
|
||||||
|
|
||||||
// Yoga specific properties, not compatible with flexbox specification
|
// Yoga specific properties, not compatible with flexbox specification
|
||||||
@property (nonatomic, readwrite, assign) CGFloat aspectRatio;
|
@property (nonatomic, readwrite, assign) CGFloat aspectRatio;
|
||||||
@@ -104,7 +110,8 @@ typedef NS_OPTIONS(NSInteger, YGDimensionFlexibility) {
|
|||||||
Perform a layout calculation and update the frames of the views in the hierarchy with the results.
|
Perform a layout calculation and update the frames of the views in the hierarchy with the results.
|
||||||
If the origin is not preserved, the root view's layout results will applied from {0,0}.
|
If the origin is not preserved, the root view's layout results will applied from {0,0}.
|
||||||
*/
|
*/
|
||||||
- (void)applyLayoutPreservingOrigin:(BOOL)preserveOrigin dimensionFlexibility:(YGDimensionFlexibility)dimensionFlexibility
|
- (void)applyLayoutPreservingOrigin:(BOOL)preserveOrigin
|
||||||
|
dimensionFlexibility:(YGDimensionFlexibility)dimensionFlexibility
|
||||||
NS_SWIFT_NAME(applyLayout(preservingOrigin:dimensionFlexibility:));
|
NS_SWIFT_NAME(applyLayout(preservingOrigin:dimensionFlexibility:));
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@@ -22,23 +22,27 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
#define YG_VALUE_PROPERTY(lowercased_name, capitalized_name) \
|
#define YG_VALUE_PROPERTY(lowercased_name, capitalized_name) \
|
||||||
- (CGFloat)lowercased_name \
|
- (YGValue)lowercased_name \
|
||||||
{ \
|
{ \
|
||||||
YGValue value = YGNodeStyleGet##capitalized_name(self.node); \
|
return YGNodeStyleGet##capitalized_name(self.node); \
|
||||||
if (value.unit == YGUnitPoint) { \
|
|
||||||
return value.value; \
|
|
||||||
} else { \
|
|
||||||
return YGUndefined; \
|
|
||||||
} \
|
|
||||||
} \
|
} \
|
||||||
\
|
\
|
||||||
- (void)set##capitalized_name:(CGFloat)lowercased_name \
|
- (void)set##capitalized_name:(YGValue)lowercased_name \
|
||||||
{ \
|
{ \
|
||||||
YGNodeStyleSet##capitalized_name(self.node, lowercased_name); \
|
switch (lowercased_name.unit) { \
|
||||||
|
case YGUnitPoint: \
|
||||||
|
YGNodeStyleSet##capitalized_name(self.node, lowercased_name.value); \
|
||||||
|
break; \
|
||||||
|
case YGUnitPercent: \
|
||||||
|
YGNodeStyleSet##capitalized_name##Percent(self.node, lowercased_name.value); \
|
||||||
|
break; \
|
||||||
|
default: \
|
||||||
|
NSAssert(NO, @"Not implemented"); \
|
||||||
|
} \
|
||||||
}
|
}
|
||||||
|
|
||||||
#define YG_EDGE_PROPERTY_GETTER(lowercased_name, capitalized_name, property, edge) \
|
#define YG_EDGE_PROPERTY_GETTER(type, lowercased_name, capitalized_name, property, edge) \
|
||||||
- (CGFloat)lowercased_name \
|
- (type)lowercased_name \
|
||||||
{ \
|
{ \
|
||||||
return YGNodeStyleGet##property(self.node, edge); \
|
return YGNodeStyleGet##property(self.node, edge); \
|
||||||
}
|
}
|
||||||
@@ -50,28 +54,26 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
#define YG_EDGE_PROPERTY(lowercased_name, capitalized_name, property, edge) \
|
#define YG_EDGE_PROPERTY(lowercased_name, capitalized_name, property, edge) \
|
||||||
YG_EDGE_PROPERTY_GETTER(lowercased_name, capitalized_name, property, edge) \
|
YG_EDGE_PROPERTY_GETTER(CGFloat, lowercased_name, capitalized_name, property, edge) \
|
||||||
YG_EDGE_PROPERTY_SETTER(lowercased_name, capitalized_name, property, edge)
|
YG_EDGE_PROPERTY_SETTER(lowercased_name, capitalized_name, property, edge)
|
||||||
|
|
||||||
#define YG_VALUE_EDGE_PROPERTY_GETTER(objc_lowercased_name, objc_capitalized_name, c_name, edge) \
|
#define YG_VALUE_EDGE_PROPERTY_SETTER(objc_lowercased_name, objc_capitalized_name, c_name, edge) \
|
||||||
- (CGFloat)objc_lowercased_name \
|
- (void)set##objc_capitalized_name:(YGValue)objc_lowercased_name \
|
||||||
{ \
|
{ \
|
||||||
YGValue value = YGNodeStyleGet##c_name(self.node, edge); \
|
switch (objc_lowercased_name.unit) { \
|
||||||
if (value.unit == YGUnitPoint) { \
|
case YGUnitPoint: \
|
||||||
return value.value; \
|
YGNodeStyleSet##c_name(self.node, edge, objc_lowercased_name.value); \
|
||||||
} else { \
|
break; \
|
||||||
return YGUndefined; \
|
case YGUnitPercent: \
|
||||||
|
YGNodeStyleSet##c_name##Percent(self.node, edge, objc_lowercased_name.value); \
|
||||||
|
break; \
|
||||||
|
default: \
|
||||||
|
NSAssert(NO, @"Not implemented"); \
|
||||||
} \
|
} \
|
||||||
}
|
}
|
||||||
|
|
||||||
#define YG_VALUE_EDGE_PROPERTY_SETTER(objc_lowercased_name, objc_capitalized_name, c_name, edge) \
|
|
||||||
- (void)set##objc_capitalized_name:(CGFloat)objc_lowercased_name \
|
|
||||||
{ \
|
|
||||||
YGNodeStyleSet##c_name(self.node, edge, objc_lowercased_name); \
|
|
||||||
}
|
|
||||||
|
|
||||||
#define YG_VALUE_EDGE_PROPERTY(lowercased_name, capitalized_name, property, edge) \
|
#define YG_VALUE_EDGE_PROPERTY(lowercased_name, capitalized_name, property, edge) \
|
||||||
YG_VALUE_EDGE_PROPERTY_GETTER(lowercased_name, capitalized_name, property, edge) \
|
YG_EDGE_PROPERTY_GETTER(YGValue, lowercased_name, capitalized_name, property, edge) \
|
||||||
YG_VALUE_EDGE_PROPERTY_SETTER(lowercased_name, capitalized_name, property, edge)
|
YG_VALUE_EDGE_PROPERTY_SETTER(lowercased_name, capitalized_name, property, edge)
|
||||||
|
|
||||||
#define YG_VALUE_EDGES_PROPERTIES(lowercased_name, capitalized_name) \
|
#define YG_VALUE_EDGES_PROPERTIES(lowercased_name, capitalized_name) \
|
||||||
@@ -85,6 +87,16 @@ YG_VALUE_EDGE_PROPERTY(lowercased_name##Horizontal, capitalized_name##Horizontal
|
|||||||
YG_VALUE_EDGE_PROPERTY(lowercased_name##Vertical, capitalized_name##Vertical, capitalized_name, YGEdgeVertical) \
|
YG_VALUE_EDGE_PROPERTY(lowercased_name##Vertical, capitalized_name##Vertical, capitalized_name, YGEdgeVertical) \
|
||||||
YG_VALUE_EDGE_PROPERTY(lowercased_name, capitalized_name, capitalized_name, YGEdgeAll)
|
YG_VALUE_EDGE_PROPERTY(lowercased_name, capitalized_name, capitalized_name, YGEdgeAll)
|
||||||
|
|
||||||
|
YGValue YGPointValue(CGFloat value)
|
||||||
|
{
|
||||||
|
return (YGValue) { .value = value, .unit = YGUnitPoint };
|
||||||
|
}
|
||||||
|
|
||||||
|
YGValue YGPercentValue(CGFloat value)
|
||||||
|
{
|
||||||
|
return (YGValue) { .value = value, .unit = YGUnitPercent };
|
||||||
|
}
|
||||||
|
|
||||||
static YGConfigRef globalConfig;
|
static YGConfigRef globalConfig;
|
||||||
|
|
||||||
@interface YGLayout ()
|
@interface YGLayout ()
|
||||||
@@ -103,6 +115,7 @@ static YGConfigRef globalConfig;
|
|||||||
{
|
{
|
||||||
globalConfig = YGConfigNew();
|
globalConfig = YGConfigNew();
|
||||||
YGConfigSetExperimentalFeatureEnabled(globalConfig, YGExperimentalFeatureWebFlexBasis, true);
|
YGConfigSetExperimentalFeatureEnabled(globalConfig, YGExperimentalFeatureWebFlexBasis, true);
|
||||||
|
YGConfigSetPointScaleFactor(globalConfig, [UIScreen mainScreen].scale);
|
||||||
}
|
}
|
||||||
|
|
||||||
- (instancetype)initWithView:(UIView*)view
|
- (instancetype)initWithView:(UIView*)view
|
||||||
@@ -245,7 +258,7 @@ YG_PROPERTY(CGFloat, aspectRatio, AspectRatio)
|
|||||||
size.height = YGUndefined;
|
size.height = YGUndefined;
|
||||||
}
|
}
|
||||||
[self calculateLayoutWithSize:size];
|
[self calculateLayoutWithSize:size];
|
||||||
YGApplyLayoutToViewHierarchy(self.view, NO);
|
YGApplyLayoutToViewHierarchy(self.view, preserveOrigin);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
46
YogaKit/Source/YGLayoutExtensions.swift
Normal file
46
YogaKit/Source/YGLayoutExtensions.swift
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
/**
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
postfix operator %
|
||||||
|
|
||||||
|
extension Int {
|
||||||
|
public static postfix func %(value: Int) -> YGValue {
|
||||||
|
return YGValue(value: Float(value), unit: .percent)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
extension Float {
|
||||||
|
public static postfix func %(value: Float) -> YGValue {
|
||||||
|
return YGValue(value: value, unit: .percent)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
extension CGFloat {
|
||||||
|
public static postfix func %(value: CGFloat) -> YGValue {
|
||||||
|
return YGValue(value: Float(value), unit: .percent)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
extension YGValue : ExpressibleByIntegerLiteral, ExpressibleByFloatLiteral {
|
||||||
|
public init(integerLiteral value: Int) {
|
||||||
|
self = YGValue(value: Float(value), unit: .point)
|
||||||
|
}
|
||||||
|
|
||||||
|
public init(floatLiteral value: Float) {
|
||||||
|
self = YGValue(value: value, unit: .point)
|
||||||
|
}
|
||||||
|
|
||||||
|
public init(_ value: Float) {
|
||||||
|
self = YGValue(value: value, unit: .point)
|
||||||
|
}
|
||||||
|
|
||||||
|
public init(_ value: CGFloat) {
|
||||||
|
self = YGValue(value: Float(value), unit: .point)
|
||||||
|
}
|
||||||
|
}
|
@@ -31,11 +31,11 @@
|
|||||||
[view configureLayoutWithBlock:^(YGLayout *layout){
|
[view configureLayoutWithBlock:^(YGLayout *layout){
|
||||||
XCTAssertNotNil(layout);
|
XCTAssertNotNil(layout);
|
||||||
layout.isEnabled = YES;
|
layout.isEnabled = YES;
|
||||||
layout.width = 25;
|
layout.width = YGPointValue(25);
|
||||||
}];
|
}];
|
||||||
|
|
||||||
XCTAssertTrue(view.yoga.isEnabled);
|
XCTAssertTrue(view.yoga.isEnabled);
|
||||||
XCTAssertEqual(view.yoga.width, 25);
|
XCTAssertEqual(view.yoga.width.value, 25);
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)testNodesAreDeallocedWithSingleView
|
- (void)testNodesAreDeallocedWithSingleView
|
||||||
@@ -44,7 +44,7 @@
|
|||||||
|
|
||||||
@autoreleasepool {
|
@autoreleasepool {
|
||||||
UIView *view = [[UIView alloc] initWithFrame:CGRectZero];
|
UIView *view = [[UIView alloc] initWithFrame:CGRectZero];
|
||||||
view.yoga.flexBasis = 1;
|
view.yoga.flexBasis = YGPointValue(1);
|
||||||
|
|
||||||
layoutRef = view.yoga;
|
layoutRef = view.yoga;
|
||||||
XCTAssertNotNil(layoutRef);
|
XCTAssertNotNil(layoutRef);
|
||||||
@@ -63,11 +63,11 @@
|
|||||||
@autoreleasepool {
|
@autoreleasepool {
|
||||||
UIView *view = [[UIView alloc] initWithFrame:CGRectZero];
|
UIView *view = [[UIView alloc] initWithFrame:CGRectZero];
|
||||||
topLayout = view.yoga;
|
topLayout = view.yoga;
|
||||||
topLayout.flexBasis = 1;
|
topLayout.flexBasis = YGPointValue(1);
|
||||||
|
|
||||||
UIView *subview = [[UIView alloc] initWithFrame:CGRectZero];
|
UIView *subview = [[UIView alloc] initWithFrame:CGRectZero];
|
||||||
subviewLayout = subview.yoga;
|
subviewLayout = subview.yoga;
|
||||||
subviewLayout.flexBasis = 1;
|
subviewLayout.flexBasis = YGPointValue(1);
|
||||||
|
|
||||||
view = nil;
|
view = nil;
|
||||||
}
|
}
|
||||||
@@ -113,9 +113,9 @@
|
|||||||
|
|
||||||
UIView *textBadgeView = [[UIView alloc] initWithFrame:CGRectZero];
|
UIView *textBadgeView = [[UIView alloc] initWithFrame:CGRectZero];
|
||||||
textBadgeView.yoga.isEnabled = YES;
|
textBadgeView.yoga.isEnabled = YES;
|
||||||
textBadgeView.yoga.margin = 0;
|
textBadgeView.yoga.margin = YGPointValue(0);
|
||||||
textBadgeView.yoga.width = 10;
|
textBadgeView.yoga.width = YGPointValue(10);
|
||||||
textBadgeView.yoga.height = 10;
|
textBadgeView.yoga.height = YGPointValue(10);
|
||||||
[container addSubview:textBadgeView];
|
[container addSubview:textBadgeView];
|
||||||
|
|
||||||
const CGSize textBadgeViewSize = textBadgeView.yoga.intrinsicSize;
|
const CGSize textBadgeViewSize = textBadgeView.yoga.intrinsicSize;
|
||||||
@@ -136,14 +136,14 @@
|
|||||||
|
|
||||||
UIView *view = [[UIView alloc] initWithFrame:CGRectZero];
|
UIView *view = [[UIView alloc] initWithFrame:CGRectZero];
|
||||||
view.yoga.isEnabled = YES;
|
view.yoga.isEnabled = YES;
|
||||||
view.yoga.flexBasis = 0;
|
view.yoga.flexBasis = YGPointValue(0);
|
||||||
view.yoga.flexGrow = 1;
|
view.yoga.flexGrow = 1;
|
||||||
[container addSubview:view];
|
[container addSubview:view];
|
||||||
|
|
||||||
UIView *view2 = [[UIView alloc] initWithFrame:CGRectZero];
|
UIView *view2 = [[UIView alloc] initWithFrame:CGRectZero];
|
||||||
view2.yoga.isEnabled = YES;
|
view2.yoga.isEnabled = YES;
|
||||||
view2.yoga.marginTop = 25;
|
view2.yoga.marginTop = YGPointValue(25);
|
||||||
view2.yoga.flexBasis = 0;
|
view2.yoga.flexBasis = YGPointValue(0);
|
||||||
view2.yoga.flexGrow = 1;
|
view2.yoga.flexGrow = 1;
|
||||||
[container addSubview:view2];
|
[container addSubview:view2];
|
||||||
|
|
||||||
@@ -161,8 +161,8 @@
|
|||||||
|
|
||||||
UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
|
UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
|
||||||
view.yoga.isEnabled = YES;
|
view.yoga.isEnabled = YES;
|
||||||
view.yoga.width = 100;
|
view.yoga.width = YGPointValue(100);
|
||||||
view.yoga.height = 100;
|
view.yoga.height = YGPointValue(100);
|
||||||
[container addSubview:view];
|
[container addSubview:view];
|
||||||
|
|
||||||
[container.yoga applyLayoutPreservingOrigin:YES dimensionFlexibility:YGDimensionFlexibilityFlexibleWidth];
|
[container.yoga applyLayoutPreservingOrigin:YES dimensionFlexibility:YGDimensionFlexibilityFlexibleWidth];
|
||||||
@@ -177,8 +177,8 @@
|
|||||||
|
|
||||||
UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
|
UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
|
||||||
view.yoga.isEnabled = YES;
|
view.yoga.isEnabled = YES;
|
||||||
view.yoga.width = 100;
|
view.yoga.width = YGPointValue(100);
|
||||||
view.yoga.height = 100;
|
view.yoga.height = YGPointValue(100);
|
||||||
[container addSubview:view];
|
[container addSubview:view];
|
||||||
|
|
||||||
[container.yoga applyLayoutPreservingOrigin:YES dimensionFlexibility:YGDimensionFlexibilityFlexibleHeigth];
|
[container.yoga applyLayoutPreservingOrigin:YES dimensionFlexibility:YGDimensionFlexibilityFlexibleHeigth];
|
||||||
@@ -193,8 +193,8 @@
|
|||||||
|
|
||||||
UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
|
UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
|
||||||
view.yoga.isEnabled = YES;
|
view.yoga.isEnabled = YES;
|
||||||
view.yoga.width = 100;
|
view.yoga.width = YGPointValue(100);
|
||||||
view.yoga.height = 100;
|
view.yoga.height = YGPointValue(100);
|
||||||
[container addSubview:view];
|
[container addSubview:view];
|
||||||
|
|
||||||
[container.yoga applyLayoutPreservingOrigin:YES dimensionFlexibility:YGDimensionFlexibilityFlexibleWidth | YGDimensionFlexibilityFlexibleHeigth];
|
[container.yoga applyLayoutPreservingOrigin:YES dimensionFlexibility:YGDimensionFlexibilityFlexibleWidth | YGDimensionFlexibilityFlexibleHeigth];
|
||||||
@@ -437,12 +437,12 @@
|
|||||||
XCTAssertTrue(view.yoga.isLeaf);
|
XCTAssertTrue(view.yoga.isLeaf);
|
||||||
|
|
||||||
view.yoga.isEnabled = YES;
|
view.yoga.isEnabled = YES;
|
||||||
view.yoga.width = 50.0;
|
view.yoga.width = YGPointValue(50);
|
||||||
XCTAssertTrue(view.yoga.isLeaf);
|
XCTAssertTrue(view.yoga.isLeaf);
|
||||||
|
|
||||||
UIView *const subview = view.subviews[0];
|
UIView *const subview = view.subviews[0];
|
||||||
subview.yoga.isEnabled = YES;
|
subview.yoga.isEnabled = YES;
|
||||||
subview.yoga.width = 50.0;
|
subview.yoga.width = YGPointValue(50);
|
||||||
XCTAssertFalse(view.yoga.isLeaf);
|
XCTAssertFalse(view.yoga.isLeaf);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -454,14 +454,14 @@
|
|||||||
|
|
||||||
UIView *subview1 = [[UIView alloc] initWithFrame:CGRectZero];
|
UIView *subview1 = [[UIView alloc] initWithFrame:CGRectZero];
|
||||||
subview1.yoga.isEnabled = YES;
|
subview1.yoga.isEnabled = YES;
|
||||||
subview1.yoga.width = 100;
|
subview1.yoga.width = YGPointValue(100);
|
||||||
subview1.yoga.flexGrow = 1;
|
subview1.yoga.flexGrow = 1;
|
||||||
subview1.yoga.flexDirection = YGFlexDirectionColumn;
|
subview1.yoga.flexDirection = YGFlexDirectionColumn;
|
||||||
[container addSubview:subview1];
|
[container addSubview:subview1];
|
||||||
|
|
||||||
UIView *subview2 = [[UIView alloc] initWithFrame:CGRectZero];
|
UIView *subview2 = [[UIView alloc] initWithFrame:CGRectZero];
|
||||||
subview2.yoga.isEnabled = YES;
|
subview2.yoga.isEnabled = YES;
|
||||||
subview2.yoga.width = 150;
|
subview2.yoga.width = YGPointValue(150);
|
||||||
subview2.yoga.flexGrow = 1;
|
subview2.yoga.flexGrow = 1;
|
||||||
subview2.yoga.flexDirection = YGFlexDirectionColumn;
|
subview2.yoga.flexDirection = YGFlexDirectionColumn;
|
||||||
[container addSubview:subview2];
|
[container addSubview:subview2];
|
||||||
@@ -522,155 +522,195 @@
|
|||||||
[container.yoga applyLayoutPreservingOrigin:YES];
|
[container.yoga applyLayoutPreservingOrigin:YES];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (void)testPointPercent
|
||||||
|
{
|
||||||
|
XCTAssertEqual(YGPointValue(1).value, 1);
|
||||||
|
XCTAssertEqual(YGPointValue(1).unit, YGUnitPoint);
|
||||||
|
XCTAssertEqual(YGPercentValue(2).value, 2);
|
||||||
|
XCTAssertEqual(YGPercentValue(2).unit, YGUnitPercent);
|
||||||
|
}
|
||||||
|
|
||||||
- (void)testPositionalPropertiesWork
|
- (void)testPositionalPropertiesWork
|
||||||
{
|
{
|
||||||
UIView *view = [[UIView alloc] initWithFrame:CGRectZero];
|
UIView *view = [[UIView alloc] initWithFrame:CGRectZero];
|
||||||
|
|
||||||
view.yoga.left = 1;
|
view.yoga.left = YGPointValue(1);
|
||||||
XCTAssertEqual(YGNodeStyleGetPosition(view.yoga.node, YGEdgeLeft).value, 1);
|
XCTAssertEqual(view.yoga.left.value, 1);
|
||||||
XCTAssertEqual(YGNodeStyleGetPosition(view.yoga.node, YGEdgeLeft).unit, YGUnitPoint);
|
XCTAssertEqual(view.yoga.left.unit, YGUnitPoint);
|
||||||
XCTAssertEqual(view.yoga.left, 1);
|
view.yoga.left = YGPercentValue(2);
|
||||||
|
XCTAssertEqual(view.yoga.left.value, 2);
|
||||||
|
XCTAssertEqual(view.yoga.left.unit, YGUnitPercent);
|
||||||
|
|
||||||
view.yoga.right = 2;
|
view.yoga.right = YGPointValue(3);
|
||||||
XCTAssertEqual(YGNodeStyleGetPosition(view.yoga.node, YGEdgeRight).value, 2);
|
XCTAssertEqual(view.yoga.right.value, 3);
|
||||||
XCTAssertEqual(YGNodeStyleGetPosition(view.yoga.node, YGEdgeRight).unit, YGUnitPoint);
|
XCTAssertEqual(view.yoga.right.unit, YGUnitPoint);
|
||||||
XCTAssertEqual(view.yoga.right, 2);
|
view.yoga.right = YGPercentValue(4);
|
||||||
|
XCTAssertEqual(view.yoga.right.value, 4);
|
||||||
|
XCTAssertEqual(view.yoga.right.unit, YGUnitPercent);
|
||||||
|
|
||||||
view.yoga.top = 3;
|
view.yoga.top = YGPointValue(5);
|
||||||
XCTAssertEqual(YGNodeStyleGetPosition(view.yoga.node, YGEdgeTop).value, 3);
|
XCTAssertEqual(view.yoga.top.value, 5);
|
||||||
XCTAssertEqual(YGNodeStyleGetPosition(view.yoga.node, YGEdgeTop).unit, YGUnitPoint);
|
XCTAssertEqual(view.yoga.top.unit, YGUnitPoint);
|
||||||
XCTAssertEqual(view.yoga.top, 3);
|
view.yoga.top = YGPercentValue(6);
|
||||||
|
XCTAssertEqual(view.yoga.top.value, 6);
|
||||||
|
XCTAssertEqual(view.yoga.top.unit, YGUnitPercent);
|
||||||
|
|
||||||
view.yoga.bottom = 4;
|
view.yoga.bottom = YGPointValue(7);
|
||||||
XCTAssertEqual(YGNodeStyleGetPosition(view.yoga.node, YGEdgeBottom).value, 4);
|
XCTAssertEqual(view.yoga.bottom.value, 7);
|
||||||
XCTAssertEqual(YGNodeStyleGetPosition(view.yoga.node, YGEdgeBottom).unit, YGUnitPoint);
|
XCTAssertEqual(view.yoga.bottom.unit, YGUnitPoint);
|
||||||
XCTAssertEqual(view.yoga.bottom, 4);
|
view.yoga.bottom = YGPercentValue(8);
|
||||||
|
XCTAssertEqual(view.yoga.bottom.value, 8);
|
||||||
|
XCTAssertEqual(view.yoga.bottom.unit, YGUnitPercent);
|
||||||
|
|
||||||
view.yoga.start = 5;
|
view.yoga.start = YGPointValue(9);
|
||||||
XCTAssertEqual(YGNodeStyleGetPosition(view.yoga.node, YGEdgeStart).value, 5);
|
XCTAssertEqual(view.yoga.start.value, 9);
|
||||||
XCTAssertEqual(YGNodeStyleGetPosition(view.yoga.node, YGEdgeStart).unit, YGUnitPoint);
|
XCTAssertEqual(view.yoga.start.unit, YGUnitPoint);
|
||||||
XCTAssertEqual(view.yoga.start, 5);
|
view.yoga.start = YGPercentValue(10);
|
||||||
|
XCTAssertEqual(view.yoga.start.value, 10);
|
||||||
|
XCTAssertEqual(view.yoga.start.unit, YGUnitPercent);
|
||||||
|
|
||||||
view.yoga.end = 6;
|
view.yoga.end = YGPointValue(11);
|
||||||
XCTAssertEqual(YGNodeStyleGetPosition(view.yoga.node, YGEdgeEnd).value, 6);
|
XCTAssertEqual(view.yoga.end.value, 11);
|
||||||
XCTAssertEqual(YGNodeStyleGetPosition(view.yoga.node, YGEdgeEnd).unit, YGUnitPoint);
|
XCTAssertEqual(view.yoga.end.unit, YGUnitPoint);
|
||||||
XCTAssertEqual(view.yoga.end, 6);
|
view.yoga.end = YGPercentValue(12);
|
||||||
|
XCTAssertEqual(view.yoga.end.value, 12);
|
||||||
|
XCTAssertEqual(view.yoga.end.unit, YGUnitPercent);
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)testMarginPropertiesWork
|
- (void)testMarginPropertiesWork
|
||||||
{
|
{
|
||||||
UIView *view = [[UIView alloc] initWithFrame:CGRectZero];
|
UIView *view = [[UIView alloc] initWithFrame:CGRectZero];
|
||||||
|
|
||||||
view.yoga.margin = 1;
|
view.yoga.margin = YGPointValue(1);
|
||||||
XCTAssertEqual(view.yoga.margin, 1);
|
XCTAssertEqual(view.yoga.margin.value, 1);
|
||||||
XCTAssertTrue(isnan(view.yoga.marginLeft));
|
XCTAssertEqual(view.yoga.margin.unit, YGUnitPoint);
|
||||||
XCTAssertTrue(isnan(view.yoga.marginRight));
|
view.yoga.margin = YGPercentValue(2);
|
||||||
XCTAssertTrue(isnan(view.yoga.marginStart));
|
XCTAssertEqual(view.yoga.margin.value, 2);
|
||||||
XCTAssertTrue(isnan(view.yoga.marginEnd));
|
XCTAssertEqual(view.yoga.margin.unit, YGUnitPercent);
|
||||||
XCTAssertTrue(isnan(view.yoga.marginTop));
|
|
||||||
XCTAssertTrue(isnan(view.yoga.marginBottom));
|
|
||||||
XCTAssertTrue(isnan(view.yoga.marginHorizontal));
|
|
||||||
XCTAssertTrue(isnan(view.yoga.marginVertical));
|
|
||||||
|
|
||||||
view.yoga.marginHorizontal = 2;
|
view.yoga.marginHorizontal = YGPointValue(3);
|
||||||
XCTAssertEqual(view.yoga.marginHorizontal, 2);
|
XCTAssertEqual(view.yoga.marginHorizontal.value, 3);
|
||||||
XCTAssertTrue(isnan(view.yoga.marginLeft));
|
XCTAssertEqual(view.yoga.marginHorizontal.unit, YGUnitPoint);
|
||||||
XCTAssertTrue(isnan(view.yoga.marginRight));
|
view.yoga.marginHorizontal = YGPercentValue(4);
|
||||||
XCTAssertTrue(isnan(view.yoga.marginStart));
|
XCTAssertEqual(view.yoga.marginHorizontal.value, 4);
|
||||||
XCTAssertTrue(isnan(view.yoga.marginEnd));
|
XCTAssertEqual(view.yoga.marginHorizontal.unit, YGUnitPercent);
|
||||||
|
|
||||||
view.yoga.marginVertical = 3;
|
view.yoga.marginVertical = YGPointValue(5);
|
||||||
XCTAssertEqual(view.yoga.marginVertical, 3);
|
XCTAssertEqual(view.yoga.marginVertical.value, 5);
|
||||||
XCTAssertTrue(isnan(view.yoga.marginTop));
|
XCTAssertEqual(view.yoga.marginVertical.unit, YGUnitPoint);
|
||||||
XCTAssertTrue(isnan(view.yoga.marginBottom));
|
view.yoga.marginVertical = YGPercentValue(6);
|
||||||
|
XCTAssertEqual(view.yoga.marginVertical.value, 6);
|
||||||
|
XCTAssertEqual(view.yoga.marginVertical.unit, YGUnitPercent);
|
||||||
|
|
||||||
view.yoga.marginLeft = 4;
|
view.yoga.marginLeft = YGPointValue(7);
|
||||||
XCTAssertEqual(YGNodeStyleGetMargin(view.yoga.node, YGEdgeLeft).value, 4);
|
XCTAssertEqual(view.yoga.marginLeft.value, 7);
|
||||||
XCTAssertEqual(YGNodeStyleGetMargin(view.yoga.node, YGEdgeLeft).unit, YGUnitPoint);
|
XCTAssertEqual(view.yoga.marginLeft.unit, YGUnitPoint);
|
||||||
XCTAssertEqual(view.yoga.marginLeft, 4);
|
view.yoga.marginLeft = YGPercentValue(8);
|
||||||
|
XCTAssertEqual(view.yoga.marginLeft.value, 8);
|
||||||
|
XCTAssertEqual(view.yoga.marginLeft.unit, YGUnitPercent);
|
||||||
|
|
||||||
view.yoga.marginRight = 5;
|
view.yoga.marginRight = YGPointValue(9);
|
||||||
XCTAssertEqual(YGNodeStyleGetMargin(view.yoga.node, YGEdgeRight).value, 5);
|
XCTAssertEqual(view.yoga.marginRight.value, 9);
|
||||||
XCTAssertEqual(YGNodeStyleGetMargin(view.yoga.node, YGEdgeRight).unit, YGUnitPoint);
|
XCTAssertEqual(view.yoga.marginRight.unit, YGUnitPoint);
|
||||||
XCTAssertEqual(view.yoga.marginRight, 5);
|
view.yoga.marginRight = YGPercentValue(10);
|
||||||
|
XCTAssertEqual(view.yoga.marginRight.value, 10);
|
||||||
|
XCTAssertEqual(view.yoga.marginRight.unit, YGUnitPercent);
|
||||||
|
|
||||||
view.yoga.marginTop = 6;
|
view.yoga.marginTop = YGPointValue(11);
|
||||||
XCTAssertEqual(YGNodeStyleGetMargin(view.yoga.node, YGEdgeTop).value, 6);
|
XCTAssertEqual(view.yoga.marginTop.value, 11);
|
||||||
XCTAssertEqual(YGNodeStyleGetMargin(view.yoga.node, YGEdgeTop).unit, YGUnitPoint);
|
XCTAssertEqual(view.yoga.marginTop.unit, YGUnitPoint);
|
||||||
XCTAssertEqual(view.yoga.marginTop, 6);
|
view.yoga.marginTop = YGPercentValue(12);
|
||||||
|
XCTAssertEqual(view.yoga.marginTop.value, 12);
|
||||||
|
XCTAssertEqual(view.yoga.marginTop.unit, YGUnitPercent);
|
||||||
|
|
||||||
view.yoga.marginBottom = 7;
|
view.yoga.marginBottom = YGPointValue(13);
|
||||||
XCTAssertEqual(YGNodeStyleGetMargin(view.yoga.node, YGEdgeBottom).value, 7);
|
XCTAssertEqual(view.yoga.marginBottom.value, 13);
|
||||||
XCTAssertEqual(YGNodeStyleGetMargin(view.yoga.node, YGEdgeBottom).unit, YGUnitPoint);
|
XCTAssertEqual(view.yoga.marginBottom.unit, YGUnitPoint);
|
||||||
XCTAssertEqual(view.yoga.marginBottom, 7);
|
view.yoga.marginBottom = YGPercentValue(14);
|
||||||
|
XCTAssertEqual(view.yoga.marginBottom.value, 14);
|
||||||
|
XCTAssertEqual(view.yoga.marginBottom.unit, YGUnitPercent);
|
||||||
|
|
||||||
view.yoga.marginStart = 8;
|
view.yoga.marginStart = YGPointValue(15);
|
||||||
XCTAssertEqual(YGNodeStyleGetMargin(view.yoga.node, YGEdgeStart).value, 8);
|
XCTAssertEqual(view.yoga.marginStart.value, 15);
|
||||||
XCTAssertEqual(YGNodeStyleGetMargin(view.yoga.node, YGEdgeStart).unit, YGUnitPoint);
|
XCTAssertEqual(view.yoga.marginStart.unit, YGUnitPoint);
|
||||||
XCTAssertEqual(view.yoga.marginStart, 8);
|
view.yoga.marginStart = YGPercentValue(16);
|
||||||
|
XCTAssertEqual(view.yoga.marginStart.value, 16);
|
||||||
|
XCTAssertEqual(view.yoga.marginStart.unit, YGUnitPercent);
|
||||||
|
|
||||||
view.yoga.marginEnd = 9;
|
view.yoga.marginEnd = YGPointValue(17);
|
||||||
XCTAssertEqual(YGNodeStyleGetMargin(view.yoga.node, YGEdgeEnd).value, 9);
|
XCTAssertEqual(view.yoga.marginEnd.value, 17);
|
||||||
XCTAssertEqual(YGNodeStyleGetMargin(view.yoga.node, YGEdgeEnd).unit, YGUnitPoint);
|
XCTAssertEqual(view.yoga.marginEnd.unit, YGUnitPoint);
|
||||||
XCTAssertEqual(view.yoga.marginEnd, 9);
|
view.yoga.marginEnd = YGPercentValue(18);
|
||||||
|
XCTAssertEqual(view.yoga.marginEnd.value, 18);
|
||||||
|
XCTAssertEqual(view.yoga.marginEnd.unit, YGUnitPercent);
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)testPaddingPropertiesWork
|
- (void)testPaddingPropertiesWork
|
||||||
{
|
{
|
||||||
UIView *view = [[UIView alloc] initWithFrame:CGRectZero];
|
UIView *view = [[UIView alloc] initWithFrame:CGRectZero];
|
||||||
|
|
||||||
view.yoga.padding = 1;
|
view.yoga.padding = YGPointValue(1);
|
||||||
XCTAssertEqual(view.yoga.padding, 1);
|
XCTAssertEqual(view.yoga.padding.value, 1);
|
||||||
XCTAssertTrue(isnan(view.yoga.paddingLeft));
|
XCTAssertEqual(view.yoga.padding.unit, YGUnitPoint);
|
||||||
XCTAssertTrue(isnan(view.yoga.paddingRight));
|
view.yoga.padding = YGPercentValue(2);
|
||||||
XCTAssertTrue(isnan(view.yoga.paddingStart));
|
XCTAssertEqual(view.yoga.padding.value, 2);
|
||||||
XCTAssertTrue(isnan(view.yoga.paddingEnd));
|
XCTAssertEqual(view.yoga.padding.unit, YGUnitPercent);
|
||||||
XCTAssertTrue(isnan(view.yoga.paddingTop));
|
|
||||||
XCTAssertTrue(isnan(view.yoga.paddingBottom));
|
|
||||||
XCTAssertTrue(isnan(view.yoga.paddingHorizontal));
|
|
||||||
XCTAssertTrue(isnan(view.yoga.paddingVertical));
|
|
||||||
|
|
||||||
view.yoga.paddingHorizontal = 2;
|
view.yoga.paddingHorizontal = YGPointValue(3);
|
||||||
XCTAssertEqual(view.yoga.paddingHorizontal, 2);
|
XCTAssertEqual(view.yoga.paddingHorizontal.value, 3);
|
||||||
XCTAssertTrue(isnan(view.yoga.paddingLeft));
|
XCTAssertEqual(view.yoga.paddingHorizontal.unit, YGUnitPoint);
|
||||||
XCTAssertTrue(isnan(view.yoga.paddingRight));
|
view.yoga.paddingHorizontal = YGPercentValue(4);
|
||||||
XCTAssertTrue(isnan(view.yoga.paddingStart));
|
XCTAssertEqual(view.yoga.paddingHorizontal.value, 4);
|
||||||
XCTAssertTrue(isnan(view.yoga.paddingEnd));
|
XCTAssertEqual(view.yoga.paddingHorizontal.unit, YGUnitPercent);
|
||||||
|
|
||||||
view.yoga.paddingVertical = 3;
|
view.yoga.paddingVertical = YGPointValue(5);
|
||||||
XCTAssertEqual(view.yoga.paddingVertical, 3);
|
XCTAssertEqual(view.yoga.paddingVertical.value, 5);
|
||||||
XCTAssertTrue(isnan(view.yoga.paddingTop));
|
XCTAssertEqual(view.yoga.paddingVertical.unit, YGUnitPoint);
|
||||||
XCTAssertTrue(isnan(view.yoga.paddingBottom));
|
view.yoga.paddingVertical = YGPercentValue(6);
|
||||||
|
XCTAssertEqual(view.yoga.paddingVertical.value, 6);
|
||||||
|
XCTAssertEqual(view.yoga.paddingVertical.unit, YGUnitPercent);
|
||||||
|
|
||||||
view.yoga.paddingLeft = 4;
|
view.yoga.paddingLeft = YGPointValue(7);
|
||||||
XCTAssertEqual(YGNodeStyleGetPadding(view.yoga.node, YGEdgeLeft).value, 4);
|
XCTAssertEqual(view.yoga.paddingLeft.value, 7);
|
||||||
XCTAssertEqual(YGNodeStyleGetPadding(view.yoga.node, YGEdgeLeft).unit, YGUnitPoint);
|
XCTAssertEqual(view.yoga.paddingLeft.unit, YGUnitPoint);
|
||||||
XCTAssertEqual(view.yoga.paddingLeft, 4);
|
view.yoga.paddingLeft = YGPercentValue(8);
|
||||||
|
XCTAssertEqual(view.yoga.paddingLeft.value, 8);
|
||||||
|
XCTAssertEqual(view.yoga.paddingLeft.unit, YGUnitPercent);
|
||||||
|
|
||||||
view.yoga.paddingRight = 5;
|
view.yoga.paddingRight = YGPointValue(9);
|
||||||
XCTAssertEqual(YGNodeStyleGetPadding(view.yoga.node, YGEdgeRight).value, 5);
|
XCTAssertEqual(view.yoga.paddingRight.value, 9);
|
||||||
XCTAssertEqual(YGNodeStyleGetPadding(view.yoga.node, YGEdgeRight).unit, YGUnitPoint);
|
XCTAssertEqual(view.yoga.paddingRight.unit, YGUnitPoint);
|
||||||
XCTAssertEqual(view.yoga.paddingRight, 5);
|
view.yoga.paddingRight = YGPercentValue(10);
|
||||||
|
XCTAssertEqual(view.yoga.paddingRight.value, 10);
|
||||||
|
XCTAssertEqual(view.yoga.paddingRight.unit, YGUnitPercent);
|
||||||
|
|
||||||
view.yoga.paddingTop = 6;
|
view.yoga.paddingTop = YGPointValue(11);
|
||||||
XCTAssertEqual(YGNodeStyleGetPadding(view.yoga.node, YGEdgeTop).value, 6);
|
XCTAssertEqual(view.yoga.paddingTop.value, 11);
|
||||||
XCTAssertEqual(YGNodeStyleGetPadding(view.yoga.node, YGEdgeTop).unit, YGUnitPoint);
|
XCTAssertEqual(view.yoga.paddingTop.unit, YGUnitPoint);
|
||||||
XCTAssertEqual(view.yoga.paddingTop, 6);
|
view.yoga.paddingTop = YGPercentValue(12);
|
||||||
|
XCTAssertEqual(view.yoga.paddingTop.value, 12);
|
||||||
|
XCTAssertEqual(view.yoga.paddingTop.unit, YGUnitPercent);
|
||||||
|
|
||||||
view.yoga.paddingBottom = 7;
|
view.yoga.paddingBottom = YGPointValue(13);
|
||||||
XCTAssertEqual(YGNodeStyleGetPadding(view.yoga.node, YGEdgeBottom).value, 7);
|
XCTAssertEqual(view.yoga.paddingBottom.value, 13);
|
||||||
XCTAssertEqual(YGNodeStyleGetPadding(view.yoga.node, YGEdgeBottom).unit, YGUnitPoint);
|
XCTAssertEqual(view.yoga.paddingBottom.unit, YGUnitPoint);
|
||||||
XCTAssertEqual(view.yoga.paddingBottom, 7);
|
view.yoga.paddingBottom = YGPercentValue(14);
|
||||||
|
XCTAssertEqual(view.yoga.paddingBottom.value, 14);
|
||||||
|
XCTAssertEqual(view.yoga.paddingBottom.unit, YGUnitPercent);
|
||||||
|
|
||||||
view.yoga.paddingStart = 8;
|
view.yoga.paddingStart = YGPointValue(15);
|
||||||
XCTAssertEqual(YGNodeStyleGetPadding(view.yoga.node, YGEdgeStart).value, 8);
|
XCTAssertEqual(view.yoga.paddingStart.value, 15);
|
||||||
XCTAssertEqual(YGNodeStyleGetPadding(view.yoga.node, YGEdgeStart).unit, YGUnitPoint);
|
XCTAssertEqual(view.yoga.paddingStart.unit, YGUnitPoint);
|
||||||
XCTAssertEqual(view.yoga.paddingStart, 8);
|
view.yoga.paddingStart = YGPercentValue(16);
|
||||||
|
XCTAssertEqual(view.yoga.paddingStart.value, 16);
|
||||||
|
XCTAssertEqual(view.yoga.paddingStart.unit, YGUnitPercent);
|
||||||
|
|
||||||
view.yoga.paddingEnd = 9;
|
view.yoga.paddingEnd = YGPointValue(17);
|
||||||
XCTAssertEqual(YGNodeStyleGetPadding(view.yoga.node, YGEdgeEnd).value, 9);
|
XCTAssertEqual(view.yoga.paddingEnd.value, 17);
|
||||||
XCTAssertEqual(YGNodeStyleGetPadding(view.yoga.node, YGEdgeEnd).unit, YGUnitPoint);
|
XCTAssertEqual(view.yoga.paddingEnd.unit, YGUnitPoint);
|
||||||
XCTAssertEqual(view.yoga.paddingEnd, 9);
|
view.yoga.paddingEnd = YGPercentValue(18);
|
||||||
|
XCTAssertEqual(view.yoga.paddingEnd.value, 18);
|
||||||
|
XCTAssertEqual(view.yoga.paddingEnd.unit, YGUnitPercent);
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)testBorderWidthPropertiesWork
|
- (void)testBorderWidthPropertiesWork
|
||||||
@@ -679,12 +719,6 @@
|
|||||||
|
|
||||||
view.yoga.borderWidth = 1;
|
view.yoga.borderWidth = 1;
|
||||||
XCTAssertEqual(view.yoga.borderWidth, 1);
|
XCTAssertEqual(view.yoga.borderWidth, 1);
|
||||||
XCTAssertTrue(isnan(view.yoga.borderLeftWidth));
|
|
||||||
XCTAssertTrue(isnan(view.yoga.borderRightWidth));
|
|
||||||
XCTAssertTrue(isnan(view.yoga.borderStartWidth));
|
|
||||||
XCTAssertTrue(isnan(view.yoga.borderEndWidth));
|
|
||||||
XCTAssertTrue(isnan(view.yoga.borderTopWidth));
|
|
||||||
XCTAssertTrue(isnan(view.yoga.borderBottomWidth));
|
|
||||||
|
|
||||||
view.yoga.borderLeftWidth = 2;
|
view.yoga.borderLeftWidth = 2;
|
||||||
XCTAssertEqual(view.yoga.borderLeftWidth, 2);
|
XCTAssertEqual(view.yoga.borderLeftWidth, 2);
|
||||||
|
@@ -14,13 +14,13 @@ DEPENDENCIES:
|
|||||||
|
|
||||||
EXTERNAL SOURCES:
|
EXTERNAL SOURCES:
|
||||||
YogaKit:
|
YogaKit:
|
||||||
:path: "../../YogaKit.podspec"
|
:path: ../../YogaKit.podspec
|
||||||
|
|
||||||
SPEC CHECKSUMS:
|
SPEC CHECKSUMS:
|
||||||
IGListKit: b826c68ef7a4ae1626c09d4d3e1ea7a169e6c36e
|
IGListKit: b826c68ef7a4ae1626c09d4d3e1ea7a169e6c36e
|
||||||
Yoga: 2ed1d7accfef3610a67f58c0cf101a0662137f2c
|
Yoga: 2ed1d7accfef3610a67f58c0cf101a0662137f2c
|
||||||
YogaKit: cddeccc6a8d2aff563e4c738d3bddb290a6de4cb
|
YogaKit: 31576530e8fcae3175469719ec3212397403330b
|
||||||
|
|
||||||
PODFILE CHECKSUM: 216f8e7127767709e0e43f3711208d238fa5c404
|
PODFILE CHECKSUM: 216f8e7127767709e0e43f3711208d238fa5c404
|
||||||
|
|
||||||
COCOAPODS: 1.2.0
|
COCOAPODS: 1.1.1
|
||||||
|
@@ -12,6 +12,11 @@ import YogaKit
|
|||||||
|
|
||||||
struct DemoItem {
|
struct DemoItem {
|
||||||
let name: String
|
let name: String
|
||||||
|
root.backgroundColor = .red
|
||||||
|
root.yoga.isEnabled = true
|
||||||
|
root.yoga.width = YGValue(self.view.bounds.size.width)
|
||||||
|
root.yoga.height = YGValue(self.view.bounds.size.height)
|
||||||
|
root.yoga.alignItems = .center
|
||||||
}
|
}
|
||||||
|
|
||||||
final class SwiftViewController: UIViewController, IGListAdapterDataSource {
|
final class SwiftViewController: UIViewController, IGListAdapterDataSource {
|
||||||
|
@@ -17,16 +17,16 @@
|
|||||||
UIView *root = self.view;
|
UIView *root = self.view;
|
||||||
root.backgroundColor = [UIColor redColor];
|
root.backgroundColor = [UIColor redColor];
|
||||||
root.yoga.isEnabled = YES;
|
root.yoga.isEnabled = YES;
|
||||||
root.yoga.width = self.view.bounds.size.width;
|
root.yoga.width = YGPointValue(self.view.bounds.size.width);
|
||||||
root.yoga.height = self.view.bounds.size.height;
|
root.yoga.height = YGPointValue(self.view.bounds.size.height);
|
||||||
root.yoga.alignItems = YGAlignCenter;
|
root.yoga.alignItems = YGAlignCenter;
|
||||||
root.yoga.justifyContent = YGJustifyCenter;
|
root.yoga.justifyContent = YGJustifyCenter;
|
||||||
|
|
||||||
UIView *child1 = [UIView new];
|
UIView *child1 = [UIView new];
|
||||||
child1.backgroundColor = [UIColor blueColor];
|
child1.backgroundColor = [UIColor blueColor];
|
||||||
child1.yoga.isEnabled = YES;
|
child1.yoga.isEnabled = YES;
|
||||||
child1.yoga.width = 100;
|
child1.yoga.width = YGPointValue(100);
|
||||||
child1.yoga.height = 100;
|
child1.yoga.height = YGPointValue(100);
|
||||||
|
|
||||||
UIView *child2 = [UIView new];
|
UIView *child2 = [UIView new];
|
||||||
child2.backgroundColor = [UIColor greenColor];
|
child2.backgroundColor = [UIColor greenColor];
|
||||||
|
@@ -17,8 +17,8 @@ final class BasicViewController: UIViewController {
|
|||||||
root.backgroundColor = .white
|
root.backgroundColor = .white
|
||||||
root.configureLayout { (layout) in
|
root.configureLayout { (layout) in
|
||||||
layout.isEnabled = true
|
layout.isEnabled = true
|
||||||
layout.width = containerSize.width
|
layout.width = YGValue(containerSize.width)
|
||||||
layout.height = containerSize.height
|
layout.height = YGValue(containerSize.height)
|
||||||
layout.alignItems = .center
|
layout.alignItems = .center
|
||||||
layout.justifyContent = .center
|
layout.justifyContent = .center
|
||||||
}
|
}
|
||||||
|
@@ -29,7 +29,7 @@ final class LayoutInclusionViewController: UIViewController {
|
|||||||
contentView.configureLayout { (layout) in
|
contentView.configureLayout { (layout) in
|
||||||
layout.isEnabled = true
|
layout.isEnabled = true
|
||||||
layout.height = 300
|
layout.height = 300
|
||||||
layout.width = self.view.bounds.size.width
|
layout.width = YGValue(self.view.bounds.size.width)
|
||||||
layout.flexDirection = .row
|
layout.flexDirection = .row
|
||||||
layout.justifyContent = .center
|
layout.justifyContent = .center
|
||||||
layout.paddingHorizontal = 25
|
layout.paddingHorizontal = 25
|
||||||
|
@@ -3,8 +3,8 @@ apply plugin: 'com.android.library'
|
|||||||
apply plugin: 'com.github.dcendents.android-maven'
|
apply plugin: 'com.github.dcendents.android-maven'
|
||||||
apply plugin: 'maven-publish'
|
apply plugin: 'maven-publish'
|
||||||
|
|
||||||
version = '1.4.1'
|
version = VERSION_NAME
|
||||||
group = 'com.facebook.yoga.android'
|
group = GROUP
|
||||||
|
|
||||||
android {
|
android {
|
||||||
compileSdkVersion rootProject.compileSdkVersion
|
compileSdkVersion rootProject.compileSdkVersion
|
||||||
@@ -42,8 +42,4 @@ task javadocJar(type: Jar, dependsOn: javadoc) {
|
|||||||
from javadoc.destinationDir
|
from javadoc.destinationDir
|
||||||
}
|
}
|
||||||
|
|
||||||
ext {
|
apply from: rootProject.file('gradle/release.gradle')
|
||||||
bintrayName = 'com.facebook.yoga.android:yoga-layout'
|
|
||||||
}
|
|
||||||
|
|
||||||
apply from: rootProject.file('gradle/android-jcenter-install.gradle')
|
|
||||||
|
5
android/gradle.properties
Normal file
5
android/gradle.properties
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
GROUP=com.facebook.yoga.android
|
||||||
|
POM_NAME=YogaLayout
|
||||||
|
POM_DESCRIPTION=YogaLayout
|
||||||
|
POM_ARTIFACT_ID=yoga-layout
|
||||||
|
POM_PACKAGING=aar
|
@@ -4,7 +4,7 @@ package com.facebook.samples.yoga;
|
|||||||
|
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.support.v7.app.ActionBarActivity;
|
import android.support.v7.app.AppCompatActivity;
|
||||||
import android.support.v4.app.FragmentPagerAdapter;
|
import android.support.v4.app.FragmentPagerAdapter;
|
||||||
import android.support.v4.app.FragmentManager;
|
import android.support.v4.app.FragmentManager;
|
||||||
import android.support.v4.app.Fragment;
|
import android.support.v4.app.Fragment;
|
||||||
@@ -19,7 +19,7 @@ import android.support.v7.app.ActionBar;
|
|||||||
import com.facebook.samples.yoga.R;
|
import com.facebook.samples.yoga.R;
|
||||||
import com.facebook.yoga.android.YogaViewLayoutFactory;
|
import com.facebook.yoga.android.YogaViewLayoutFactory;
|
||||||
|
|
||||||
public class BenchmarkActivity extends ActionBarActivity {
|
public class BenchmarkActivity extends AppCompatActivity {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onCreate(Bundle savedInstanceState) {
|
public void onCreate(Bundle savedInstanceState) {
|
||||||
|
@@ -10,7 +10,7 @@ package com.facebook.samples.yoga;
|
|||||||
|
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.support.v7.app.ActionBarActivity;
|
import android.support.v7.app.AppCompatActivity;
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
import android.view.MenuInflater;
|
import android.view.MenuInflater;
|
||||||
import android.view.MenuItem;
|
import android.view.MenuItem;
|
||||||
@@ -25,7 +25,7 @@ import com.facebook.yoga.android.YogaViewLayoutFactory;
|
|||||||
* {@code main_layout.xml}) that shows off the awesome functionality of the Yoga layout engine
|
* {@code main_layout.xml}) that shows off the awesome functionality of the Yoga layout engine
|
||||||
* as well as some optimisations on layout systems that it facilitates.
|
* as well as some optimisations on layout systems that it facilitates.
|
||||||
*/
|
*/
|
||||||
public class MainActivity extends ActionBarActivity {
|
public class MainActivity extends AppCompatActivity {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onCreate(Bundle savedInstanceState) {
|
public void onCreate(Bundle savedInstanceState) {
|
||||||
|
@@ -10,9 +10,12 @@
|
|||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Compile Include="$(MSBuildThisFileDirectory)BaselineFunction.cs" />
|
<Compile Include="$(MSBuildThisFileDirectory)BaselineFunction.cs" />
|
||||||
|
<Compile Include="$(MSBuildThisFileDirectory)Logger.cs" />
|
||||||
<Compile Include="$(MSBuildThisFileDirectory)MeasureFunction.cs" />
|
<Compile Include="$(MSBuildThisFileDirectory)MeasureFunction.cs" />
|
||||||
<Compile Include="$(MSBuildThisFileDirectory)MeasureOutput.cs" />
|
<Compile Include="$(MSBuildThisFileDirectory)MeasureOutput.cs" />
|
||||||
<Compile Include="$(MSBuildThisFileDirectory)Native.cs" />
|
<Compile Include="$(MSBuildThisFileDirectory)Native.cs" />
|
||||||
|
<Compile Include="$(MSBuildThisFileDirectory)YGConfigHandle.cs" />
|
||||||
|
<Compile Include="$(MSBuildThisFileDirectory)YGNodeHandle.cs" />
|
||||||
<Compile Include="$(MSBuildThisFileDirectory)YogaAlign.cs" />
|
<Compile Include="$(MSBuildThisFileDirectory)YogaAlign.cs" />
|
||||||
<Compile Include="$(MSBuildThisFileDirectory)YogaBaselineFunc.cs" />
|
<Compile Include="$(MSBuildThisFileDirectory)YogaBaselineFunc.cs" />
|
||||||
<Compile Include="$(MSBuildThisFileDirectory)YogaConfig.cs" />
|
<Compile Include="$(MSBuildThisFileDirectory)YogaConfig.cs" />
|
||||||
|
17
csharp/Facebook.Yoga/Logger.cs
Normal file
17
csharp/Facebook.Yoga/Logger.cs
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
/**
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Facebook.Yoga
|
||||||
|
{
|
||||||
|
public delegate void Logger(
|
||||||
|
YogaConfig config,
|
||||||
|
YogaNode node,
|
||||||
|
YogaLogLevel level,
|
||||||
|
string message);
|
||||||
|
}
|
@@ -26,96 +26,9 @@ namespace Facebook.Yoga
|
|||||||
private const string DllName = "yoga";
|
private const string DllName = "yoga";
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
internal class YGNodeHandle : SafeHandle
|
|
||||||
{
|
|
||||||
#if (UNITY_IOS && !UNITY_EDITOR) || ENABLE_IL2CPP || __IOS__
|
|
||||||
private GCHandle _managed;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
private YGNodeHandle() : base(IntPtr.Zero, true)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
public override bool IsInvalid
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return this.handle == IntPtr.Zero;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
protected override bool ReleaseHandle()
|
|
||||||
{
|
|
||||||
#if (UNITY_IOS && !UNITY_EDITOR) || ENABLE_IL2CPP || __IOS__
|
|
||||||
ReleaseManaged();
|
|
||||||
#endif
|
|
||||||
Native.YGNodeFree(this.handle);
|
|
||||||
GC.KeepAlive(this);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
#if (UNITY_IOS && !UNITY_EDITOR) || ENABLE_IL2CPP || __IOS__
|
|
||||||
public void SetContext(YogaNode node)
|
|
||||||
{
|
|
||||||
if (!_managed.IsAllocated)
|
|
||||||
{
|
|
||||||
#if ENABLE_IL2CPP
|
|
||||||
// Weak causes 'GCHandle value belongs to a different domain' error
|
|
||||||
_managed = GCHandle.Alloc(node);
|
|
||||||
#else
|
|
||||||
_managed = GCHandle.Alloc(node, GCHandleType.Weak);
|
|
||||||
#endif
|
|
||||||
Native.YGNodeSetContext(this.handle, GCHandle.ToIntPtr(_managed));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void ReleaseManaged()
|
|
||||||
{
|
|
||||||
if (_managed.IsAllocated)
|
|
||||||
{
|
|
||||||
_managed.Free();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static YogaNode GetManaged(IntPtr ygNodePtr)
|
|
||||||
{
|
|
||||||
var node =
|
|
||||||
GCHandle.FromIntPtr(Native.YGNodeGetContext(ygNodePtr)).Target as YogaNode;
|
|
||||||
if (node == null)
|
|
||||||
{
|
|
||||||
throw new InvalidOperationException("YogaNode is already deallocated");
|
|
||||||
}
|
|
||||||
|
|
||||||
return node;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
internal class YGConfigHandle : SafeHandle
|
|
||||||
{
|
|
||||||
private YGConfigHandle() : base(IntPtr.Zero, true)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
public override bool IsInvalid
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return this.handle == IntPtr.Zero;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
protected override bool ReleaseHandle()
|
|
||||||
{
|
|
||||||
Native.YGConfigFree(this.handle);
|
|
||||||
GC.KeepAlive(this);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
[DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
|
[DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
|
||||||
public static extern void YGInteropSetLogger(
|
public static extern void YGInteropSetLogger(
|
||||||
[MarshalAs(UnmanagedType.FunctionPtr)] YogaLogger.Func func);
|
[MarshalAs(UnmanagedType.FunctionPtr)] YogaLogger logger);
|
||||||
|
|
||||||
[DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
|
[DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
|
||||||
public static extern YGNodeHandle YGNodeNew();
|
public static extern YGNodeHandle YGNodeNew();
|
||||||
@@ -129,6 +42,9 @@ namespace Facebook.Yoga
|
|||||||
[DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
|
[DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
|
||||||
public static extern void YGNodeReset(YGNodeHandle node);
|
public static extern void YGNodeReset(YGNodeHandle node);
|
||||||
|
|
||||||
|
[DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
|
||||||
|
public static extern YGConfigHandle YGConfigGetDefault();
|
||||||
|
|
||||||
[DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
|
[DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
|
||||||
public static extern YGConfigHandle YGConfigNew();
|
public static extern YGConfigHandle YGConfigNew();
|
||||||
|
|
||||||
@@ -445,15 +361,19 @@ namespace Facebook.Yoga
|
|||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region AOT
|
#region Context
|
||||||
|
|
||||||
#if (UNITY_IOS && !UNITY_EDITOR) || ENABLE_IL2CPP || __IOS__
|
|
||||||
[DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
|
[DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
|
||||||
public static extern IntPtr YGNodeGetContext(IntPtr node);
|
public static extern IntPtr YGNodeGetContext(IntPtr node);
|
||||||
|
|
||||||
[DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
|
[DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
|
||||||
public static extern void YGNodeSetContext(IntPtr node, IntPtr managed);
|
public static extern void YGNodeSetContext(IntPtr node, IntPtr managed);
|
||||||
#endif
|
|
||||||
|
[DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
|
||||||
|
public static extern IntPtr YGConfigGetContext(IntPtr config);
|
||||||
|
|
||||||
|
[DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
|
||||||
|
public static extern void YGConfigSetContext(IntPtr config, IntPtr managed);
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
}
|
}
|
||||||
|
84
csharp/Facebook.Yoga/YGConfigHandle.cs
Normal file
84
csharp/Facebook.Yoga/YGConfigHandle.cs
Normal file
@@ -0,0 +1,84 @@
|
|||||||
|
/**
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
using System;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
|
namespace Facebook.Yoga
|
||||||
|
{
|
||||||
|
internal class YGConfigHandle : SafeHandle
|
||||||
|
{
|
||||||
|
internal static readonly YGConfigHandle Default = Native.YGConfigGetDefault();
|
||||||
|
private GCHandle _managedConfigHandle;
|
||||||
|
|
||||||
|
private YGConfigHandle() : base(IntPtr.Zero, true)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public override bool IsInvalid
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return this.handle == IntPtr.Zero;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override bool ReleaseHandle()
|
||||||
|
{
|
||||||
|
if (this.handle != Default.handle)
|
||||||
|
{
|
||||||
|
ReleaseManaged();
|
||||||
|
if (!IsInvalid)
|
||||||
|
{
|
||||||
|
Native.YGConfigFree(this.handle);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
GC.KeepAlive(this);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void SetContext(YogaConfig config)
|
||||||
|
{
|
||||||
|
if (!_managedConfigHandle.IsAllocated)
|
||||||
|
{
|
||||||
|
#if UNITY_5_4_OR_NEWER
|
||||||
|
// Weak causes 'GCHandle value belongs to a different domain' error
|
||||||
|
_managedConfigHandle = GCHandle.Alloc(config);
|
||||||
|
#else
|
||||||
|
_managedConfigHandle = GCHandle.Alloc(config, GCHandleType.Weak);
|
||||||
|
#endif
|
||||||
|
var managedConfigPtr = GCHandle.ToIntPtr(_managedConfigHandle);
|
||||||
|
Native.YGConfigSetContext(this.handle, managedConfigPtr);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void ReleaseManaged()
|
||||||
|
{
|
||||||
|
if (_managedConfigHandle.IsAllocated)
|
||||||
|
{
|
||||||
|
_managedConfigHandle.Free();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static YogaConfig GetManaged(IntPtr unmanagedConfigPtr)
|
||||||
|
{
|
||||||
|
if (unmanagedConfigPtr != IntPtr.Zero)
|
||||||
|
{
|
||||||
|
var managedConfigPtr = Native.YGConfigGetContext(unmanagedConfigPtr);
|
||||||
|
var config = GCHandle.FromIntPtr(managedConfigPtr).Target as YogaConfig;
|
||||||
|
if (config == null)
|
||||||
|
{
|
||||||
|
throw new InvalidOperationException("YogaConfig is already deallocated");
|
||||||
|
}
|
||||||
|
return config;
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
80
csharp/Facebook.Yoga/YGNodeHandle.cs
Normal file
80
csharp/Facebook.Yoga/YGNodeHandle.cs
Normal file
@@ -0,0 +1,80 @@
|
|||||||
|
/**
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
using System;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
|
namespace Facebook.Yoga
|
||||||
|
{
|
||||||
|
internal class YGNodeHandle : SafeHandle
|
||||||
|
{
|
||||||
|
private GCHandle _managedNodeHandle;
|
||||||
|
|
||||||
|
private YGNodeHandle() : base(IntPtr.Zero, true)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public override bool IsInvalid
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return this.handle == IntPtr.Zero;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override bool ReleaseHandle()
|
||||||
|
{
|
||||||
|
ReleaseManaged();
|
||||||
|
if (!IsInvalid)
|
||||||
|
{
|
||||||
|
Native.YGNodeFree(this.handle);
|
||||||
|
GC.KeepAlive(this);
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void SetContext(YogaNode node)
|
||||||
|
{
|
||||||
|
if (!_managedNodeHandle.IsAllocated)
|
||||||
|
{
|
||||||
|
#if UNITY_5_4_OR_NEWER
|
||||||
|
// Weak causes 'GCHandle value belongs to a different domain' error
|
||||||
|
_managedNodeHandle = GCHandle.Alloc(node);
|
||||||
|
#else
|
||||||
|
_managedNodeHandle = GCHandle.Alloc(node, GCHandleType.Weak);
|
||||||
|
#endif
|
||||||
|
var managedNodePtr = GCHandle.ToIntPtr(_managedNodeHandle);
|
||||||
|
Native.YGNodeSetContext(this.handle, managedNodePtr);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void ReleaseManaged()
|
||||||
|
{
|
||||||
|
if (_managedNodeHandle.IsAllocated)
|
||||||
|
{
|
||||||
|
_managedNodeHandle.Free();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static YogaNode GetManaged(IntPtr unmanagedNodePtr)
|
||||||
|
{
|
||||||
|
if (unmanagedNodePtr != IntPtr.Zero)
|
||||||
|
{
|
||||||
|
var managedNodePtr = Native.YGNodeGetContext(unmanagedNodePtr);
|
||||||
|
var node = GCHandle.FromIntPtr(managedNodePtr).Target as YogaNode;
|
||||||
|
if (node == null)
|
||||||
|
{
|
||||||
|
throw new InvalidOperationException("YogaNode is already deallocated");
|
||||||
|
}
|
||||||
|
return node;
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@@ -13,5 +13,5 @@ using System.Runtime.InteropServices;
|
|||||||
namespace Facebook.Yoga
|
namespace Facebook.Yoga
|
||||||
{
|
{
|
||||||
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
|
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
|
||||||
public delegate float YogaBaselineFunc(IntPtr node, float width, float height);
|
public delegate float YogaBaselineFunc(IntPtr unmanagedNodePtr, float width, float height);
|
||||||
}
|
}
|
||||||
|
@@ -8,29 +8,92 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
|
#if __IOS__
|
||||||
|
using ObjCRuntime;
|
||||||
|
#endif
|
||||||
|
#if ENABLE_IL2CPP
|
||||||
|
using AOT;
|
||||||
|
#endif
|
||||||
|
|
||||||
namespace Facebook.Yoga
|
namespace Facebook.Yoga
|
||||||
{
|
{
|
||||||
public class YogaConfig
|
public class YogaConfig
|
||||||
{
|
{
|
||||||
private Native.YGConfigHandle _ygConfig;
|
internal static readonly YogaConfig Default = new YogaConfig(YGConfigHandle.Default);
|
||||||
|
private static YogaLogger _managedLogger;
|
||||||
|
|
||||||
public YogaConfig()
|
private YGConfigHandle _ygConfig;
|
||||||
|
private Logger _logger;
|
||||||
|
|
||||||
|
private YogaConfig(YGConfigHandle ygConfig)
|
||||||
{
|
{
|
||||||
_ygConfig = Native.YGConfigNew();
|
_ygConfig = ygConfig;
|
||||||
if (_ygConfig.IsInvalid)
|
if (_ygConfig.IsInvalid)
|
||||||
{
|
{
|
||||||
throw new InvalidOperationException("Failed to allocate native memory");
|
throw new InvalidOperationException("Failed to allocate native memory");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_ygConfig.SetContext(this);
|
||||||
|
|
||||||
|
if (_ygConfig == YGConfigHandle.Default)
|
||||||
|
{
|
||||||
|
_managedLogger = LoggerInternal;
|
||||||
|
Native.YGInteropSetLogger(_managedLogger);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
internal Native.YGConfigHandle Handle
|
public YogaConfig()
|
||||||
|
: this(Native.YGConfigNew())
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
internal YGConfigHandle Handle
|
||||||
{
|
{
|
||||||
get {
|
get {
|
||||||
return _ygConfig;
|
return _ygConfig;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if (UNITY_IOS && !UNITY_EDITOR) || ENABLE_IL2CPP || __IOS__
|
||||||
|
[MonoPInvokeCallback(typeof(YogaLogger))]
|
||||||
|
#endif
|
||||||
|
private static void LoggerInternal(
|
||||||
|
IntPtr unmanagedConfigPtr,
|
||||||
|
IntPtr unmanagedNodePtr,
|
||||||
|
YogaLogLevel level,
|
||||||
|
string message)
|
||||||
|
{
|
||||||
|
var config = YGConfigHandle.GetManaged(unmanagedConfigPtr);
|
||||||
|
if (config == null || config._logger == null)
|
||||||
|
{
|
||||||
|
// Default logger
|
||||||
|
Console.WriteLine(message);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
var node = YGNodeHandle.GetManaged(unmanagedNodePtr);
|
||||||
|
config._logger(config, node, level, message);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (level == YogaLogLevel.Error || level == YogaLogLevel.Fatal)
|
||||||
|
{
|
||||||
|
throw new InvalidOperationException(message);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public Logger Logger
|
||||||
|
{
|
||||||
|
get {
|
||||||
|
return _logger;
|
||||||
|
}
|
||||||
|
|
||||||
|
set {
|
||||||
|
_logger = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public void SetExperimentalFeatureEnabled(
|
public void SetExperimentalFeatureEnabled(
|
||||||
YogaExperimentalFeature feature,
|
YogaExperimentalFeature feature,
|
||||||
bool enabled)
|
bool enabled)
|
||||||
@@ -68,5 +131,10 @@ namespace Facebook.Yoga
|
|||||||
{
|
{
|
||||||
return Native.YGConfigGetInstanceCount();
|
return Native.YGConfigGetInstanceCount();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void SetDefaultLogger(Logger logger)
|
||||||
|
{
|
||||||
|
Default.Logger = logger;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -11,8 +11,6 @@ namespace Facebook.Yoga
|
|||||||
{
|
{
|
||||||
public enum YogaExperimentalFeature
|
public enum YogaExperimentalFeature
|
||||||
{
|
{
|
||||||
Rounding,
|
|
||||||
WebFlexBasis,
|
WebFlexBasis,
|
||||||
MinFlexFix,
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -16,5 +16,6 @@ namespace Facebook.Yoga
|
|||||||
Info,
|
Info,
|
||||||
Debug,
|
Debug,
|
||||||
Verbose,
|
Verbose,
|
||||||
|
Fatal,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -10,48 +10,12 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Runtime.InteropServices;
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
#if __IOS__
|
|
||||||
using ObjCRuntime;
|
|
||||||
#endif
|
|
||||||
#if ENABLE_IL2CPP
|
|
||||||
using AOT;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
namespace Facebook.Yoga
|
namespace Facebook.Yoga
|
||||||
{
|
|
||||||
internal static class YogaLogger
|
|
||||||
{
|
{
|
||||||
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
|
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
|
||||||
public delegate void Func(YogaLogLevel level, string message);
|
public delegate void YogaLogger(
|
||||||
|
IntPtr unmanagedConfigPtr,
|
||||||
private static bool _initialized;
|
IntPtr unmanagedNotePtr,
|
||||||
private static Func _managedLogger = LoggerInternal;
|
YogaLogLevel level,
|
||||||
|
string message);
|
||||||
public static Func Logger = null;
|
|
||||||
|
|
||||||
#if (UNITY_IOS && !UNITY_EDITOR) || ENABLE_IL2CPP || __IOS__
|
|
||||||
[MonoPInvokeCallback(typeof(Func))]
|
|
||||||
#endif
|
|
||||||
public static void LoggerInternal(YogaLogLevel level, string message)
|
|
||||||
{
|
|
||||||
if (Logger != null)
|
|
||||||
{
|
|
||||||
Logger(level, message);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (level == YogaLogLevel.Error)
|
|
||||||
{
|
|
||||||
throw new InvalidOperationException(message);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void Initialize()
|
|
||||||
{
|
|
||||||
if (!_initialized)
|
|
||||||
{
|
|
||||||
Native.YGInteropSetLogger(_managedLogger);
|
|
||||||
_initialized = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@@ -14,7 +14,7 @@ namespace Facebook.Yoga
|
|||||||
{
|
{
|
||||||
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
|
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
|
||||||
public delegate YogaSize YogaMeasureFunc(
|
public delegate YogaSize YogaMeasureFunc(
|
||||||
IntPtr node,
|
IntPtr unmanagedNodePtr,
|
||||||
float width,
|
float width,
|
||||||
YogaMeasureMode widthMode,
|
YogaMeasureMode widthMode,
|
||||||
float height,
|
float height,
|
||||||
|
@@ -10,11 +10,9 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections;
|
using System.Collections;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
|
|
||||||
#if (UNITY_IOS && !UNITY_EDITOR) || ENABLE_IL2CPP || __IOS__
|
|
||||||
using System.Runtime.InteropServices;
|
|
||||||
#endif
|
|
||||||
#if __IOS__
|
#if __IOS__
|
||||||
using ObjCRuntime;
|
using ObjCRuntime;
|
||||||
#endif
|
#endif
|
||||||
@@ -26,49 +24,26 @@ namespace Facebook.Yoga
|
|||||||
{
|
{
|
||||||
public partial class YogaNode : IEnumerable<YogaNode>
|
public partial class YogaNode : IEnumerable<YogaNode>
|
||||||
{
|
{
|
||||||
private readonly Native.YGNodeHandle _ygNode;
|
private readonly YGNodeHandle _ygNode;
|
||||||
private readonly YogaConfig _config;
|
private readonly YogaConfig _config;
|
||||||
private WeakReference _parent;
|
private WeakReference _parent;
|
||||||
private List<YogaNode> _children;
|
private List<YogaNode> _children;
|
||||||
private MeasureFunction _measureFunction;
|
private MeasureFunction _measureFunction;
|
||||||
private BaselineFunction _baselineFunction;
|
private BaselineFunction _baselineFunction;
|
||||||
private object _data;
|
|
||||||
#if (UNITY_IOS && !UNITY_EDITOR) || ENABLE_IL2CPP || __IOS__
|
|
||||||
private static YogaMeasureFunc _managedMeasure;
|
|
||||||
private static YogaBaselineFunc _managedBaseline;
|
|
||||||
#else
|
|
||||||
private YogaMeasureFunc _managedMeasure;
|
private YogaMeasureFunc _managedMeasure;
|
||||||
private YogaBaselineFunc _managedBaseline;
|
private YogaBaselineFunc _managedBaseline;
|
||||||
#endif
|
private object _data;
|
||||||
|
|
||||||
public YogaNode()
|
public YogaNode(YogaConfig config = null)
|
||||||
{
|
{
|
||||||
YogaLogger.Initialize();
|
_config = config == null ? YogaConfig.Default : config;
|
||||||
|
|
||||||
_ygNode = Native.YGNodeNew();
|
|
||||||
if (_ygNode.IsInvalid)
|
|
||||||
{
|
|
||||||
throw new InvalidOperationException("Failed to allocate native memory");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public YogaNode(YogaConfig config)
|
|
||||||
{
|
|
||||||
YogaLogger.Initialize();
|
|
||||||
|
|
||||||
if (config != null)
|
|
||||||
{
|
|
||||||
_config = config;
|
|
||||||
_ygNode = Native.YGNodeNewWithConfig(_config.Handle);
|
_ygNode = Native.YGNodeNewWithConfig(_config.Handle);
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
_ygNode = Native.YGNodeNew();
|
|
||||||
}
|
|
||||||
if (_ygNode.IsInvalid)
|
if (_ygNode.IsInvalid)
|
||||||
{
|
{
|
||||||
throw new InvalidOperationException("Failed to allocate native memory");
|
throw new InvalidOperationException("Failed to allocate native memory");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_ygNode.SetContext(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
public YogaNode(YogaNode srcNode)
|
public YogaNode(YogaNode srcNode)
|
||||||
@@ -83,10 +58,9 @@ namespace Facebook.Yoga
|
|||||||
_baselineFunction = null;
|
_baselineFunction = null;
|
||||||
_data = null;
|
_data = null;
|
||||||
|
|
||||||
Native.YGNodeReset(_ygNode);
|
|
||||||
#if (UNITY_IOS && !UNITY_EDITOR) || ENABLE_IL2CPP || __IOS__
|
|
||||||
_ygNode.ReleaseManaged();
|
_ygNode.ReleaseManaged();
|
||||||
#endif
|
Native.YGNodeReset(_ygNode);
|
||||||
|
_ygNode.SetContext(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool IsDirty
|
public bool IsDirty
|
||||||
@@ -609,38 +583,15 @@ namespace Facebook.Yoga
|
|||||||
public void SetMeasureFunction(MeasureFunction measureFunction)
|
public void SetMeasureFunction(MeasureFunction measureFunction)
|
||||||
{
|
{
|
||||||
_measureFunction = measureFunction;
|
_measureFunction = measureFunction;
|
||||||
if (measureFunction != null)
|
_managedMeasure = measureFunction != null ? MeasureInternal : (YogaMeasureFunc)null;
|
||||||
{
|
|
||||||
#if (UNITY_IOS && !UNITY_EDITOR) || ENABLE_IL2CPP || __IOS__
|
|
||||||
_managedMeasure = MeasureInternalAOT;
|
|
||||||
_ygNode.SetContext(this);
|
|
||||||
#else
|
|
||||||
_managedMeasure = MeasureInternal;
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
_managedMeasure = null;
|
|
||||||
}
|
|
||||||
Native.YGNodeSetMeasureFunc(_ygNode, _managedMeasure);
|
Native.YGNodeSetMeasureFunc(_ygNode, _managedMeasure);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void SetBaselineFunction(BaselineFunction baselineFunction)
|
public void SetBaselineFunction(BaselineFunction baselineFunction)
|
||||||
{
|
{
|
||||||
_baselineFunction = baselineFunction;
|
_baselineFunction = baselineFunction;
|
||||||
if (baselineFunction != null)
|
_managedBaseline =
|
||||||
{
|
baselineFunction != null ? BaselineInternal : (YogaBaselineFunc)null;
|
||||||
#if (UNITY_IOS && !UNITY_EDITOR) || ENABLE_IL2CPP || __IOS__
|
|
||||||
_managedBaseline = BaselineInternalAOT;
|
|
||||||
_ygNode.SetContext(this);
|
|
||||||
#else
|
|
||||||
_managedBaseline = BaselineInternal;
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
_managedBaseline = null;
|
|
||||||
}
|
|
||||||
Native.YGNodeSetBaselineFunc(_ygNode, _managedBaseline);
|
Native.YGNodeSetBaselineFunc(_ygNode, _managedBaseline);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -655,63 +606,46 @@ namespace Facebook.Yoga
|
|||||||
|
|
||||||
#if (UNITY_IOS && !UNITY_EDITOR) || ENABLE_IL2CPP || __IOS__
|
#if (UNITY_IOS && !UNITY_EDITOR) || ENABLE_IL2CPP || __IOS__
|
||||||
[MonoPInvokeCallback(typeof(YogaMeasureFunc))]
|
[MonoPInvokeCallback(typeof(YogaMeasureFunc))]
|
||||||
private static YogaSize MeasureInternalAOT(
|
|
||||||
IntPtr ygNodePtr,
|
|
||||||
float width,
|
|
||||||
YogaMeasureMode widthMode,
|
|
||||||
float height,
|
|
||||||
YogaMeasureMode heightMode)
|
|
||||||
{
|
|
||||||
var node = Native.YGNodeHandle.GetManaged(ygNodePtr);
|
|
||||||
return node.MeasureInternal(IntPtr.Zero, width, widthMode, height, heightMode);
|
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
|
private static YogaSize MeasureInternal(
|
||||||
private YogaSize MeasureInternal(
|
IntPtr unmanagedNodePtr,
|
||||||
IntPtr node,
|
|
||||||
float width,
|
float width,
|
||||||
YogaMeasureMode widthMode,
|
YogaMeasureMode widthMode,
|
||||||
float height,
|
float height,
|
||||||
YogaMeasureMode heightMode)
|
YogaMeasureMode heightMode)
|
||||||
{
|
{
|
||||||
if (_measureFunction == null)
|
var node = YGNodeHandle.GetManaged(unmanagedNodePtr);
|
||||||
|
if (node == null || node._measureFunction == null)
|
||||||
{
|
{
|
||||||
throw new InvalidOperationException("Measure function is not defined.");
|
throw new InvalidOperationException("Measure function is not defined.");
|
||||||
}
|
}
|
||||||
|
return node._measureFunction(node, width, widthMode, height, heightMode);
|
||||||
return _measureFunction(this, width, widthMode, height, heightMode);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#if (UNITY_IOS && !UNITY_EDITOR) || ENABLE_IL2CPP || __IOS__
|
#if (UNITY_IOS && !UNITY_EDITOR) || ENABLE_IL2CPP || __IOS__
|
||||||
[MonoPInvokeCallback(typeof(YogaBaselineFunc))]
|
[MonoPInvokeCallback(typeof(YogaBaselineFunc))]
|
||||||
private static float BaselineInternalAOT(
|
#endif
|
||||||
IntPtr ygNodePtr,
|
private static float BaselineInternal(
|
||||||
|
IntPtr unmanagedNodePtr,
|
||||||
float width,
|
float width,
|
||||||
float height)
|
float height)
|
||||||
{
|
{
|
||||||
var node = Native.YGNodeHandle.GetManaged(ygNodePtr);
|
var node = YGNodeHandle.GetManaged(unmanagedNodePtr);
|
||||||
return node.BaselineInternal(IntPtr.Zero, width, height);
|
if (node == null || node._baselineFunction == null)
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
private float BaselineInternal(IntPtr node, float width, float height)
|
|
||||||
{
|
|
||||||
if (_baselineFunction == null)
|
|
||||||
{
|
{
|
||||||
throw new InvalidOperationException("Baseline function is not defined.");
|
throw new InvalidOperationException("Baseline function is not defined.");
|
||||||
}
|
}
|
||||||
|
return node._baselineFunction(node, width, height);
|
||||||
return _baselineFunction(this, width, height);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public string Print(YogaPrintOptions options =
|
public string Print(YogaPrintOptions options =
|
||||||
YogaPrintOptions.Layout|YogaPrintOptions.Style|YogaPrintOptions.Children)
|
YogaPrintOptions.Layout|YogaPrintOptions.Style|YogaPrintOptions.Children)
|
||||||
{
|
{
|
||||||
StringBuilder sb = new StringBuilder();
|
StringBuilder sb = new StringBuilder();
|
||||||
YogaLogger.Func orig = YogaLogger.Logger;
|
Logger orig = _config.Logger;
|
||||||
YogaLogger.Logger = (level, message) => {sb.Append(message);};
|
_config.Logger = (config, node, level, message) => {sb.Append(message);};
|
||||||
Native.YGNodePrint(_ygNode, options);
|
Native.YGNodePrint(_ygNode, options);
|
||||||
YogaLogger.Logger = orig;
|
_config.Logger = orig;
|
||||||
return sb.ToString();
|
return sb.ToString();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -9,19 +9,23 @@
|
|||||||
|
|
||||||
#include "YGInterop.h"
|
#include "YGInterop.h"
|
||||||
|
|
||||||
static YGInteropLoggerFunc gManagedFunc;
|
static YGInteropLogger gManagedLogger;
|
||||||
|
|
||||||
static int unmanagedLogger(YGLogLevel level, const char *format, va_list args) {
|
static int unmanagedLogger(const YGConfigRef config,
|
||||||
|
const YGNodeRef node,
|
||||||
|
YGLogLevel level,
|
||||||
|
const char *format,
|
||||||
|
va_list args) {
|
||||||
int result = 0;
|
int result = 0;
|
||||||
if (gManagedFunc) {
|
if (gManagedLogger) {
|
||||||
char buffer[256];
|
char message[8192];
|
||||||
result = vsnprintf(buffer, sizeof(buffer), format, args);
|
result = vsnprintf(message, sizeof(message), format, args);
|
||||||
(*gManagedFunc)(level, buffer);
|
(*gManagedLogger)(config, node, level, message);
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
void YGInteropSetLogger(YGInteropLoggerFunc managedFunc) {
|
void YGInteropSetLogger(YGInteropLogger managedLogger) {
|
||||||
gManagedFunc = managedFunc;
|
gManagedLogger = managedLogger;
|
||||||
YGSetLogger(&unmanagedLogger);
|
YGConfigSetLogger(YGConfigGetDefault(), &unmanagedLogger);
|
||||||
}
|
}
|
||||||
|
@@ -13,8 +13,13 @@
|
|||||||
|
|
||||||
YG_EXTERN_C_BEGIN
|
YG_EXTERN_C_BEGIN
|
||||||
|
|
||||||
typedef void (*YGInteropLoggerFunc)(YGLogLevel level, const char *message);
|
typedef int (*YGInteropLogger)(const void *unmanagedConfigPtr,
|
||||||
|
const void *unmanagedNodePtr,
|
||||||
|
YGLogLevel level,
|
||||||
|
const char *message);
|
||||||
|
|
||||||
WIN_EXPORT void YGInteropSetLogger(YGInteropLoggerFunc managedFunc);
|
WIN_EXPORT YGConfigRef YGConfigGetDefault();
|
||||||
|
|
||||||
|
WIN_EXPORT void YGInteropSetLogger(YGInteropLogger managedLogger);
|
||||||
|
|
||||||
YG_EXTERN_C_END
|
YG_EXTERN_C_END
|
||||||
|
@@ -1815,5 +1815,148 @@ namespace Facebook.Yoga
|
|||||||
Assert.AreEqual(72f, root_child0_child0.LayoutHeight);
|
Assert.AreEqual(72f, root_child0_child0.LayoutHeight);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void Test_align_center_should_size_based_on_content()
|
||||||
|
{
|
||||||
|
YogaConfig config = new YogaConfig();
|
||||||
|
|
||||||
|
YogaNode root = new YogaNode(config);
|
||||||
|
root.AlignItems = YogaAlign.Center;
|
||||||
|
root.MarginTop = 20;
|
||||||
|
root.Width = 100;
|
||||||
|
root.Height = 100;
|
||||||
|
|
||||||
|
YogaNode root_child0 = new YogaNode(config);
|
||||||
|
root_child0.JustifyContent = YogaJustify.Center;
|
||||||
|
root_child0.FlexShrink = 1;
|
||||||
|
root.Insert(0, root_child0);
|
||||||
|
|
||||||
|
YogaNode root_child0_child0 = new YogaNode(config);
|
||||||
|
root_child0_child0.FlexGrow = 1;
|
||||||
|
root_child0_child0.FlexShrink = 1;
|
||||||
|
root_child0.Insert(0, root_child0_child0);
|
||||||
|
|
||||||
|
YogaNode root_child0_child0_child0 = new YogaNode(config);
|
||||||
|
root_child0_child0_child0.Width = 20;
|
||||||
|
root_child0_child0_child0.Height = 20;
|
||||||
|
root_child0_child0.Insert(0, root_child0_child0_child0);
|
||||||
|
root.StyleDirection = YogaDirection.LTR;
|
||||||
|
root.CalculateLayout();
|
||||||
|
|
||||||
|
Assert.AreEqual(0f, root.LayoutX);
|
||||||
|
Assert.AreEqual(20f, root.LayoutY);
|
||||||
|
Assert.AreEqual(100f, root.LayoutWidth);
|
||||||
|
Assert.AreEqual(100f, root.LayoutHeight);
|
||||||
|
|
||||||
|
Assert.AreEqual(40f, root_child0.LayoutX);
|
||||||
|
Assert.AreEqual(0f, root_child0.LayoutY);
|
||||||
|
Assert.AreEqual(20f, root_child0.LayoutWidth);
|
||||||
|
Assert.AreEqual(20f, root_child0.LayoutHeight);
|
||||||
|
|
||||||
|
Assert.AreEqual(0f, root_child0_child0.LayoutX);
|
||||||
|
Assert.AreEqual(0f, root_child0_child0.LayoutY);
|
||||||
|
Assert.AreEqual(20f, root_child0_child0.LayoutWidth);
|
||||||
|
Assert.AreEqual(20f, root_child0_child0.LayoutHeight);
|
||||||
|
|
||||||
|
Assert.AreEqual(0f, root_child0_child0_child0.LayoutX);
|
||||||
|
Assert.AreEqual(0f, root_child0_child0_child0.LayoutY);
|
||||||
|
Assert.AreEqual(20f, root_child0_child0_child0.LayoutWidth);
|
||||||
|
Assert.AreEqual(20f, root_child0_child0_child0.LayoutHeight);
|
||||||
|
|
||||||
|
root.StyleDirection = YogaDirection.RTL;
|
||||||
|
root.CalculateLayout();
|
||||||
|
|
||||||
|
Assert.AreEqual(0f, root.LayoutX);
|
||||||
|
Assert.AreEqual(20f, root.LayoutY);
|
||||||
|
Assert.AreEqual(100f, root.LayoutWidth);
|
||||||
|
Assert.AreEqual(100f, root.LayoutHeight);
|
||||||
|
|
||||||
|
Assert.AreEqual(40f, root_child0.LayoutX);
|
||||||
|
Assert.AreEqual(0f, root_child0.LayoutY);
|
||||||
|
Assert.AreEqual(20f, root_child0.LayoutWidth);
|
||||||
|
Assert.AreEqual(20f, root_child0.LayoutHeight);
|
||||||
|
|
||||||
|
Assert.AreEqual(0f, root_child0_child0.LayoutX);
|
||||||
|
Assert.AreEqual(0f, root_child0_child0.LayoutY);
|
||||||
|
Assert.AreEqual(20f, root_child0_child0.LayoutWidth);
|
||||||
|
Assert.AreEqual(20f, root_child0_child0.LayoutHeight);
|
||||||
|
|
||||||
|
Assert.AreEqual(0f, root_child0_child0_child0.LayoutX);
|
||||||
|
Assert.AreEqual(0f, root_child0_child0_child0.LayoutY);
|
||||||
|
Assert.AreEqual(20f, root_child0_child0_child0.LayoutWidth);
|
||||||
|
Assert.AreEqual(20f, root_child0_child0_child0.LayoutHeight);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void Test_align_strech_should_size_based_on_parent()
|
||||||
|
{
|
||||||
|
YogaConfig config = new YogaConfig();
|
||||||
|
|
||||||
|
YogaNode root = new YogaNode(config);
|
||||||
|
root.MarginTop = 20;
|
||||||
|
root.Width = 100;
|
||||||
|
root.Height = 100;
|
||||||
|
|
||||||
|
YogaNode root_child0 = new YogaNode(config);
|
||||||
|
root_child0.JustifyContent = YogaJustify.Center;
|
||||||
|
root_child0.FlexShrink = 1;
|
||||||
|
root.Insert(0, root_child0);
|
||||||
|
|
||||||
|
YogaNode root_child0_child0 = new YogaNode(config);
|
||||||
|
root_child0_child0.FlexGrow = 1;
|
||||||
|
root_child0_child0.FlexShrink = 1;
|
||||||
|
root_child0.Insert(0, root_child0_child0);
|
||||||
|
|
||||||
|
YogaNode root_child0_child0_child0 = new YogaNode(config);
|
||||||
|
root_child0_child0_child0.Width = 20;
|
||||||
|
root_child0_child0_child0.Height = 20;
|
||||||
|
root_child0_child0.Insert(0, root_child0_child0_child0);
|
||||||
|
root.StyleDirection = YogaDirection.LTR;
|
||||||
|
root.CalculateLayout();
|
||||||
|
|
||||||
|
Assert.AreEqual(0f, root.LayoutX);
|
||||||
|
Assert.AreEqual(20f, root.LayoutY);
|
||||||
|
Assert.AreEqual(100f, root.LayoutWidth);
|
||||||
|
Assert.AreEqual(100f, root.LayoutHeight);
|
||||||
|
|
||||||
|
Assert.AreEqual(0f, root_child0.LayoutX);
|
||||||
|
Assert.AreEqual(0f, root_child0.LayoutY);
|
||||||
|
Assert.AreEqual(100f, root_child0.LayoutWidth);
|
||||||
|
Assert.AreEqual(20f, root_child0.LayoutHeight);
|
||||||
|
|
||||||
|
Assert.AreEqual(0f, root_child0_child0.LayoutX);
|
||||||
|
Assert.AreEqual(0f, root_child0_child0.LayoutY);
|
||||||
|
Assert.AreEqual(100f, root_child0_child0.LayoutWidth);
|
||||||
|
Assert.AreEqual(20f, root_child0_child0.LayoutHeight);
|
||||||
|
|
||||||
|
Assert.AreEqual(0f, root_child0_child0_child0.LayoutX);
|
||||||
|
Assert.AreEqual(0f, root_child0_child0_child0.LayoutY);
|
||||||
|
Assert.AreEqual(20f, root_child0_child0_child0.LayoutWidth);
|
||||||
|
Assert.AreEqual(20f, root_child0_child0_child0.LayoutHeight);
|
||||||
|
|
||||||
|
root.StyleDirection = YogaDirection.RTL;
|
||||||
|
root.CalculateLayout();
|
||||||
|
|
||||||
|
Assert.AreEqual(0f, root.LayoutX);
|
||||||
|
Assert.AreEqual(20f, root.LayoutY);
|
||||||
|
Assert.AreEqual(100f, root.LayoutWidth);
|
||||||
|
Assert.AreEqual(100f, root.LayoutHeight);
|
||||||
|
|
||||||
|
Assert.AreEqual(0f, root_child0.LayoutX);
|
||||||
|
Assert.AreEqual(0f, root_child0.LayoutY);
|
||||||
|
Assert.AreEqual(100f, root_child0.LayoutWidth);
|
||||||
|
Assert.AreEqual(20f, root_child0.LayoutHeight);
|
||||||
|
|
||||||
|
Assert.AreEqual(0f, root_child0_child0.LayoutX);
|
||||||
|
Assert.AreEqual(0f, root_child0_child0.LayoutY);
|
||||||
|
Assert.AreEqual(100f, root_child0_child0.LayoutWidth);
|
||||||
|
Assert.AreEqual(20f, root_child0_child0.LayoutHeight);
|
||||||
|
|
||||||
|
Assert.AreEqual(80f, root_child0_child0_child0.LayoutX);
|
||||||
|
Assert.AreEqual(0f, root_child0_child0_child0.LayoutY);
|
||||||
|
Assert.AreEqual(20f, root_child0_child0_child0.LayoutWidth);
|
||||||
|
Assert.AreEqual(20f, root_child0_child0_child0.LayoutHeight);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -1381,5 +1381,169 @@ namespace Facebook.Yoga
|
|||||||
Assert.AreEqual(80f, root_child0_child1.LayoutHeight);
|
Assert.AreEqual(80f, root_child0_child1.LayoutHeight);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void Test_wrapped_column_max_height()
|
||||||
|
{
|
||||||
|
YogaConfig config = new YogaConfig();
|
||||||
|
|
||||||
|
YogaNode root = new YogaNode(config);
|
||||||
|
root.JustifyContent = YogaJustify.Center;
|
||||||
|
root.AlignContent = YogaAlign.Center;
|
||||||
|
root.AlignItems = YogaAlign.Center;
|
||||||
|
root.Wrap = YogaWrap.Wrap;
|
||||||
|
root.Width = 700;
|
||||||
|
root.Height = 500;
|
||||||
|
|
||||||
|
YogaNode root_child0 = new YogaNode(config);
|
||||||
|
root_child0.Width = 100;
|
||||||
|
root_child0.Height = 500;
|
||||||
|
root_child0.MaxHeight = 200;
|
||||||
|
root.Insert(0, root_child0);
|
||||||
|
|
||||||
|
YogaNode root_child1 = new YogaNode(config);
|
||||||
|
root_child1.MarginLeft = 20;
|
||||||
|
root_child1.MarginTop = 20;
|
||||||
|
root_child1.MarginRight = 20;
|
||||||
|
root_child1.MarginBottom = 20;
|
||||||
|
root_child1.Width = 200;
|
||||||
|
root_child1.Height = 200;
|
||||||
|
root.Insert(1, root_child1);
|
||||||
|
|
||||||
|
YogaNode root_child2 = new YogaNode(config);
|
||||||
|
root_child2.Width = 100;
|
||||||
|
root_child2.Height = 100;
|
||||||
|
root.Insert(2, root_child2);
|
||||||
|
root.StyleDirection = YogaDirection.LTR;
|
||||||
|
root.CalculateLayout();
|
||||||
|
|
||||||
|
Assert.AreEqual(0f, root.LayoutX);
|
||||||
|
Assert.AreEqual(0f, root.LayoutY);
|
||||||
|
Assert.AreEqual(700f, root.LayoutWidth);
|
||||||
|
Assert.AreEqual(500f, root.LayoutHeight);
|
||||||
|
|
||||||
|
Assert.AreEqual(250f, root_child0.LayoutX);
|
||||||
|
Assert.AreEqual(30f, root_child0.LayoutY);
|
||||||
|
Assert.AreEqual(100f, root_child0.LayoutWidth);
|
||||||
|
Assert.AreEqual(200f, root_child0.LayoutHeight);
|
||||||
|
|
||||||
|
Assert.AreEqual(200f, root_child1.LayoutX);
|
||||||
|
Assert.AreEqual(250f, root_child1.LayoutY);
|
||||||
|
Assert.AreEqual(200f, root_child1.LayoutWidth);
|
||||||
|
Assert.AreEqual(200f, root_child1.LayoutHeight);
|
||||||
|
|
||||||
|
Assert.AreEqual(420f, root_child2.LayoutX);
|
||||||
|
Assert.AreEqual(200f, root_child2.LayoutY);
|
||||||
|
Assert.AreEqual(100f, root_child2.LayoutWidth);
|
||||||
|
Assert.AreEqual(100f, root_child2.LayoutHeight);
|
||||||
|
|
||||||
|
root.StyleDirection = YogaDirection.RTL;
|
||||||
|
root.CalculateLayout();
|
||||||
|
|
||||||
|
Assert.AreEqual(0f, root.LayoutX);
|
||||||
|
Assert.AreEqual(0f, root.LayoutY);
|
||||||
|
Assert.AreEqual(700f, root.LayoutWidth);
|
||||||
|
Assert.AreEqual(500f, root.LayoutHeight);
|
||||||
|
|
||||||
|
Assert.AreEqual(350f, root_child0.LayoutX);
|
||||||
|
Assert.AreEqual(30f, root_child0.LayoutY);
|
||||||
|
Assert.AreEqual(100f, root_child0.LayoutWidth);
|
||||||
|
Assert.AreEqual(200f, root_child0.LayoutHeight);
|
||||||
|
|
||||||
|
Assert.AreEqual(300f, root_child1.LayoutX);
|
||||||
|
Assert.AreEqual(250f, root_child1.LayoutY);
|
||||||
|
Assert.AreEqual(200f, root_child1.LayoutWidth);
|
||||||
|
Assert.AreEqual(200f, root_child1.LayoutHeight);
|
||||||
|
|
||||||
|
Assert.AreEqual(180f, root_child2.LayoutX);
|
||||||
|
Assert.AreEqual(200f, root_child2.LayoutY);
|
||||||
|
Assert.AreEqual(100f, root_child2.LayoutWidth);
|
||||||
|
Assert.AreEqual(100f, root_child2.LayoutHeight);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void Test_wrapped_column_max_height_flex()
|
||||||
|
{
|
||||||
|
YogaConfig config = new YogaConfig();
|
||||||
|
|
||||||
|
YogaNode root = new YogaNode(config);
|
||||||
|
root.JustifyContent = YogaJustify.Center;
|
||||||
|
root.AlignContent = YogaAlign.Center;
|
||||||
|
root.AlignItems = YogaAlign.Center;
|
||||||
|
root.Wrap = YogaWrap.Wrap;
|
||||||
|
root.Width = 700;
|
||||||
|
root.Height = 500;
|
||||||
|
|
||||||
|
YogaNode root_child0 = new YogaNode(config);
|
||||||
|
root_child0.FlexGrow = 1;
|
||||||
|
root_child0.FlexShrink = 1;
|
||||||
|
root_child0.FlexBasis = 0.Percent();
|
||||||
|
root_child0.Width = 100;
|
||||||
|
root_child0.Height = 500;
|
||||||
|
root_child0.MaxHeight = 200;
|
||||||
|
root.Insert(0, root_child0);
|
||||||
|
|
||||||
|
YogaNode root_child1 = new YogaNode(config);
|
||||||
|
root_child1.FlexGrow = 1;
|
||||||
|
root_child1.FlexShrink = 1;
|
||||||
|
root_child1.FlexBasis = 0.Percent();
|
||||||
|
root_child1.MarginLeft = 20;
|
||||||
|
root_child1.MarginTop = 20;
|
||||||
|
root_child1.MarginRight = 20;
|
||||||
|
root_child1.MarginBottom = 20;
|
||||||
|
root_child1.Width = 200;
|
||||||
|
root_child1.Height = 200;
|
||||||
|
root.Insert(1, root_child1);
|
||||||
|
|
||||||
|
YogaNode root_child2 = new YogaNode(config);
|
||||||
|
root_child2.Width = 100;
|
||||||
|
root_child2.Height = 100;
|
||||||
|
root.Insert(2, root_child2);
|
||||||
|
root.StyleDirection = YogaDirection.LTR;
|
||||||
|
root.CalculateLayout();
|
||||||
|
|
||||||
|
Assert.AreEqual(0f, root.LayoutX);
|
||||||
|
Assert.AreEqual(0f, root.LayoutY);
|
||||||
|
Assert.AreEqual(700f, root.LayoutWidth);
|
||||||
|
Assert.AreEqual(500f, root.LayoutHeight);
|
||||||
|
|
||||||
|
Assert.AreEqual(300f, root_child0.LayoutX);
|
||||||
|
Assert.AreEqual(0f, root_child0.LayoutY);
|
||||||
|
Assert.AreEqual(100f, root_child0.LayoutWidth);
|
||||||
|
Assert.AreEqual(180f, root_child0.LayoutHeight);
|
||||||
|
|
||||||
|
Assert.AreEqual(250f, root_child1.LayoutX);
|
||||||
|
Assert.AreEqual(200f, root_child1.LayoutY);
|
||||||
|
Assert.AreEqual(200f, root_child1.LayoutWidth);
|
||||||
|
Assert.AreEqual(180f, root_child1.LayoutHeight);
|
||||||
|
|
||||||
|
Assert.AreEqual(300f, root_child2.LayoutX);
|
||||||
|
Assert.AreEqual(400f, root_child2.LayoutY);
|
||||||
|
Assert.AreEqual(100f, root_child2.LayoutWidth);
|
||||||
|
Assert.AreEqual(100f, root_child2.LayoutHeight);
|
||||||
|
|
||||||
|
root.StyleDirection = YogaDirection.RTL;
|
||||||
|
root.CalculateLayout();
|
||||||
|
|
||||||
|
Assert.AreEqual(0f, root.LayoutX);
|
||||||
|
Assert.AreEqual(0f, root.LayoutY);
|
||||||
|
Assert.AreEqual(700f, root.LayoutWidth);
|
||||||
|
Assert.AreEqual(500f, root.LayoutHeight);
|
||||||
|
|
||||||
|
Assert.AreEqual(300f, root_child0.LayoutX);
|
||||||
|
Assert.AreEqual(0f, root_child0.LayoutY);
|
||||||
|
Assert.AreEqual(100f, root_child0.LayoutWidth);
|
||||||
|
Assert.AreEqual(180f, root_child0.LayoutHeight);
|
||||||
|
|
||||||
|
Assert.AreEqual(250f, root_child1.LayoutX);
|
||||||
|
Assert.AreEqual(200f, root_child1.LayoutY);
|
||||||
|
Assert.AreEqual(200f, root_child1.LayoutWidth);
|
||||||
|
Assert.AreEqual(180f, root_child1.LayoutHeight);
|
||||||
|
|
||||||
|
Assert.AreEqual(300f, root_child2.LayoutX);
|
||||||
|
Assert.AreEqual(400f, root_child2.LayoutY);
|
||||||
|
Assert.AreEqual(100f, root_child2.LayoutWidth);
|
||||||
|
Assert.AreEqual(100f, root_child2.LayoutHeight);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -366,7 +366,6 @@ namespace Facebook.Yoga
|
|||||||
public void Test_flex_grow_to_min()
|
public void Test_flex_grow_to_min()
|
||||||
{
|
{
|
||||||
YogaConfig config = new YogaConfig();
|
YogaConfig config = new YogaConfig();
|
||||||
config.SetExperimentalFeatureEnabled(YogaExperimentalFeature.MinFlexFix, true);
|
|
||||||
|
|
||||||
YogaNode root = new YogaNode(config);
|
YogaNode root = new YogaNode(config);
|
||||||
root.Width = 100;
|
root.Width = 100;
|
||||||
@@ -422,7 +421,6 @@ namespace Facebook.Yoga
|
|||||||
public void Test_flex_grow_in_at_most_container()
|
public void Test_flex_grow_in_at_most_container()
|
||||||
{
|
{
|
||||||
YogaConfig config = new YogaConfig();
|
YogaConfig config = new YogaConfig();
|
||||||
config.SetExperimentalFeatureEnabled(YogaExperimentalFeature.MinFlexFix, true);
|
|
||||||
|
|
||||||
YogaNode root = new YogaNode(config);
|
YogaNode root = new YogaNode(config);
|
||||||
root.FlexDirection = YogaFlexDirection.Row;
|
root.FlexDirection = YogaFlexDirection.Row;
|
||||||
|
@@ -21,7 +21,6 @@ namespace Facebook.Yoga
|
|||||||
public void Test_percentage_width_height()
|
public void Test_percentage_width_height()
|
||||||
{
|
{
|
||||||
YogaConfig config = new YogaConfig();
|
YogaConfig config = new YogaConfig();
|
||||||
config.SetExperimentalFeatureEnabled(YogaExperimentalFeature.Rounding, true);
|
|
||||||
|
|
||||||
YogaNode root = new YogaNode(config);
|
YogaNode root = new YogaNode(config);
|
||||||
root.FlexDirection = YogaFlexDirection.Row;
|
root.FlexDirection = YogaFlexDirection.Row;
|
||||||
@@ -63,7 +62,6 @@ namespace Facebook.Yoga
|
|||||||
public void Test_percentage_position_left_top()
|
public void Test_percentage_position_left_top()
|
||||||
{
|
{
|
||||||
YogaConfig config = new YogaConfig();
|
YogaConfig config = new YogaConfig();
|
||||||
config.SetExperimentalFeatureEnabled(YogaExperimentalFeature.Rounding, true);
|
|
||||||
|
|
||||||
YogaNode root = new YogaNode(config);
|
YogaNode root = new YogaNode(config);
|
||||||
root.FlexDirection = YogaFlexDirection.Row;
|
root.FlexDirection = YogaFlexDirection.Row;
|
||||||
@@ -107,7 +105,6 @@ namespace Facebook.Yoga
|
|||||||
public void Test_percentage_position_bottom_right()
|
public void Test_percentage_position_bottom_right()
|
||||||
{
|
{
|
||||||
YogaConfig config = new YogaConfig();
|
YogaConfig config = new YogaConfig();
|
||||||
config.SetExperimentalFeatureEnabled(YogaExperimentalFeature.Rounding, true);
|
|
||||||
|
|
||||||
YogaNode root = new YogaNode(config);
|
YogaNode root = new YogaNode(config);
|
||||||
root.FlexDirection = YogaFlexDirection.Row;
|
root.FlexDirection = YogaFlexDirection.Row;
|
||||||
@@ -151,7 +148,6 @@ namespace Facebook.Yoga
|
|||||||
public void Test_percentage_flex_basis()
|
public void Test_percentage_flex_basis()
|
||||||
{
|
{
|
||||||
YogaConfig config = new YogaConfig();
|
YogaConfig config = new YogaConfig();
|
||||||
config.SetExperimentalFeatureEnabled(YogaExperimentalFeature.Rounding, true);
|
|
||||||
|
|
||||||
YogaNode root = new YogaNode(config);
|
YogaNode root = new YogaNode(config);
|
||||||
root.FlexDirection = YogaFlexDirection.Row;
|
root.FlexDirection = YogaFlexDirection.Row;
|
||||||
@@ -208,7 +204,6 @@ namespace Facebook.Yoga
|
|||||||
public void Test_percentage_flex_basis_cross()
|
public void Test_percentage_flex_basis_cross()
|
||||||
{
|
{
|
||||||
YogaConfig config = new YogaConfig();
|
YogaConfig config = new YogaConfig();
|
||||||
config.SetExperimentalFeatureEnabled(YogaExperimentalFeature.Rounding, true);
|
|
||||||
|
|
||||||
YogaNode root = new YogaNode(config);
|
YogaNode root = new YogaNode(config);
|
||||||
root.Width = 200;
|
root.Width = 200;
|
||||||
@@ -264,7 +259,6 @@ namespace Facebook.Yoga
|
|||||||
public void Test_percentage_flex_basis_cross_min_height()
|
public void Test_percentage_flex_basis_cross_min_height()
|
||||||
{
|
{
|
||||||
YogaConfig config = new YogaConfig();
|
YogaConfig config = new YogaConfig();
|
||||||
config.SetExperimentalFeatureEnabled(YogaExperimentalFeature.Rounding, true);
|
|
||||||
|
|
||||||
YogaNode root = new YogaNode(config);
|
YogaNode root = new YogaNode(config);
|
||||||
root.Width = 200;
|
root.Width = 200;
|
||||||
@@ -320,7 +314,6 @@ namespace Facebook.Yoga
|
|||||||
public void Test_percentage_flex_basis_main_max_height()
|
public void Test_percentage_flex_basis_main_max_height()
|
||||||
{
|
{
|
||||||
YogaConfig config = new YogaConfig();
|
YogaConfig config = new YogaConfig();
|
||||||
config.SetExperimentalFeatureEnabled(YogaExperimentalFeature.Rounding, true);
|
|
||||||
|
|
||||||
YogaNode root = new YogaNode(config);
|
YogaNode root = new YogaNode(config);
|
||||||
root.FlexDirection = YogaFlexDirection.Row;
|
root.FlexDirection = YogaFlexDirection.Row;
|
||||||
@@ -379,7 +372,6 @@ namespace Facebook.Yoga
|
|||||||
public void Test_percentage_flex_basis_cross_max_height()
|
public void Test_percentage_flex_basis_cross_max_height()
|
||||||
{
|
{
|
||||||
YogaConfig config = new YogaConfig();
|
YogaConfig config = new YogaConfig();
|
||||||
config.SetExperimentalFeatureEnabled(YogaExperimentalFeature.Rounding, true);
|
|
||||||
|
|
||||||
YogaNode root = new YogaNode(config);
|
YogaNode root = new YogaNode(config);
|
||||||
root.Width = 200;
|
root.Width = 200;
|
||||||
@@ -437,7 +429,6 @@ namespace Facebook.Yoga
|
|||||||
public void Test_percentage_flex_basis_main_max_width()
|
public void Test_percentage_flex_basis_main_max_width()
|
||||||
{
|
{
|
||||||
YogaConfig config = new YogaConfig();
|
YogaConfig config = new YogaConfig();
|
||||||
config.SetExperimentalFeatureEnabled(YogaExperimentalFeature.Rounding, true);
|
|
||||||
|
|
||||||
YogaNode root = new YogaNode(config);
|
YogaNode root = new YogaNode(config);
|
||||||
root.FlexDirection = YogaFlexDirection.Row;
|
root.FlexDirection = YogaFlexDirection.Row;
|
||||||
@@ -496,7 +487,6 @@ namespace Facebook.Yoga
|
|||||||
public void Test_percentage_flex_basis_cross_max_width()
|
public void Test_percentage_flex_basis_cross_max_width()
|
||||||
{
|
{
|
||||||
YogaConfig config = new YogaConfig();
|
YogaConfig config = new YogaConfig();
|
||||||
config.SetExperimentalFeatureEnabled(YogaExperimentalFeature.Rounding, true);
|
|
||||||
|
|
||||||
YogaNode root = new YogaNode(config);
|
YogaNode root = new YogaNode(config);
|
||||||
root.Width = 200;
|
root.Width = 200;
|
||||||
@@ -554,7 +544,6 @@ namespace Facebook.Yoga
|
|||||||
public void Test_percentage_flex_basis_main_min_width()
|
public void Test_percentage_flex_basis_main_min_width()
|
||||||
{
|
{
|
||||||
YogaConfig config = new YogaConfig();
|
YogaConfig config = new YogaConfig();
|
||||||
config.SetExperimentalFeatureEnabled(YogaExperimentalFeature.Rounding, true);
|
|
||||||
|
|
||||||
YogaNode root = new YogaNode(config);
|
YogaNode root = new YogaNode(config);
|
||||||
root.FlexDirection = YogaFlexDirection.Row;
|
root.FlexDirection = YogaFlexDirection.Row;
|
||||||
@@ -613,7 +602,6 @@ namespace Facebook.Yoga
|
|||||||
public void Test_percentage_flex_basis_cross_min_width()
|
public void Test_percentage_flex_basis_cross_min_width()
|
||||||
{
|
{
|
||||||
YogaConfig config = new YogaConfig();
|
YogaConfig config = new YogaConfig();
|
||||||
config.SetExperimentalFeatureEnabled(YogaExperimentalFeature.Rounding, true);
|
|
||||||
|
|
||||||
YogaNode root = new YogaNode(config);
|
YogaNode root = new YogaNode(config);
|
||||||
root.Width = 200;
|
root.Width = 200;
|
||||||
@@ -671,7 +659,6 @@ namespace Facebook.Yoga
|
|||||||
public void Test_percentage_multiple_nested_with_padding_margin_and_percentage_values()
|
public void Test_percentage_multiple_nested_with_padding_margin_and_percentage_values()
|
||||||
{
|
{
|
||||||
YogaConfig config = new YogaConfig();
|
YogaConfig config = new YogaConfig();
|
||||||
config.SetExperimentalFeatureEnabled(YogaExperimentalFeature.Rounding, true);
|
|
||||||
|
|
||||||
YogaNode root = new YogaNode(config);
|
YogaNode root = new YogaNode(config);
|
||||||
root.Width = 200;
|
root.Width = 200;
|
||||||
@@ -781,7 +768,6 @@ namespace Facebook.Yoga
|
|||||||
public void Test_percentage_margin_should_calculate_based_only_on_width()
|
public void Test_percentage_margin_should_calculate_based_only_on_width()
|
||||||
{
|
{
|
||||||
YogaConfig config = new YogaConfig();
|
YogaConfig config = new YogaConfig();
|
||||||
config.SetExperimentalFeatureEnabled(YogaExperimentalFeature.Rounding, true);
|
|
||||||
|
|
||||||
YogaNode root = new YogaNode(config);
|
YogaNode root = new YogaNode(config);
|
||||||
root.Width = 200;
|
root.Width = 200;
|
||||||
@@ -840,7 +826,6 @@ namespace Facebook.Yoga
|
|||||||
public void Test_percentage_padding_should_calculate_based_only_on_width()
|
public void Test_percentage_padding_should_calculate_based_only_on_width()
|
||||||
{
|
{
|
||||||
YogaConfig config = new YogaConfig();
|
YogaConfig config = new YogaConfig();
|
||||||
config.SetExperimentalFeatureEnabled(YogaExperimentalFeature.Rounding, true);
|
|
||||||
|
|
||||||
YogaNode root = new YogaNode(config);
|
YogaNode root = new YogaNode(config);
|
||||||
root.Width = 200;
|
root.Width = 200;
|
||||||
@@ -899,7 +884,6 @@ namespace Facebook.Yoga
|
|||||||
public void Test_percentage_absolute_position()
|
public void Test_percentage_absolute_position()
|
||||||
{
|
{
|
||||||
YogaConfig config = new YogaConfig();
|
YogaConfig config = new YogaConfig();
|
||||||
config.SetExperimentalFeatureEnabled(YogaExperimentalFeature.Rounding, true);
|
|
||||||
|
|
||||||
YogaNode root = new YogaNode(config);
|
YogaNode root = new YogaNode(config);
|
||||||
root.Width = 200;
|
root.Width = 200;
|
||||||
@@ -1063,7 +1047,6 @@ namespace Facebook.Yoga
|
|||||||
public void Test_percentage_container_in_wrapping_container()
|
public void Test_percentage_container_in_wrapping_container()
|
||||||
{
|
{
|
||||||
YogaConfig config = new YogaConfig();
|
YogaConfig config = new YogaConfig();
|
||||||
config.SetExperimentalFeatureEnabled(YogaExperimentalFeature.MinFlexFix, true);
|
|
||||||
|
|
||||||
YogaNode root = new YogaNode(config);
|
YogaNode root = new YogaNode(config);
|
||||||
root.JustifyContent = YogaJustify.Center;
|
root.JustifyContent = YogaJustify.Center;
|
||||||
|
@@ -21,7 +21,6 @@ namespace Facebook.Yoga
|
|||||||
public void Test_rounding_flex_basis_flex_grow_row_width_of_100()
|
public void Test_rounding_flex_basis_flex_grow_row_width_of_100()
|
||||||
{
|
{
|
||||||
YogaConfig config = new YogaConfig();
|
YogaConfig config = new YogaConfig();
|
||||||
config.SetExperimentalFeatureEnabled(YogaExperimentalFeature.Rounding, true);
|
|
||||||
|
|
||||||
YogaNode root = new YogaNode(config);
|
YogaNode root = new YogaNode(config);
|
||||||
root.FlexDirection = YogaFlexDirection.Row;
|
root.FlexDirection = YogaFlexDirection.Row;
|
||||||
@@ -90,7 +89,6 @@ namespace Facebook.Yoga
|
|||||||
public void Test_rounding_flex_basis_flex_grow_row_prime_number_width()
|
public void Test_rounding_flex_basis_flex_grow_row_prime_number_width()
|
||||||
{
|
{
|
||||||
YogaConfig config = new YogaConfig();
|
YogaConfig config = new YogaConfig();
|
||||||
config.SetExperimentalFeatureEnabled(YogaExperimentalFeature.Rounding, true);
|
|
||||||
|
|
||||||
YogaNode root = new YogaNode(config);
|
YogaNode root = new YogaNode(config);
|
||||||
root.FlexDirection = YogaFlexDirection.Row;
|
root.FlexDirection = YogaFlexDirection.Row;
|
||||||
@@ -187,7 +185,6 @@ namespace Facebook.Yoga
|
|||||||
public void Test_rounding_flex_basis_flex_shrink_row()
|
public void Test_rounding_flex_basis_flex_shrink_row()
|
||||||
{
|
{
|
||||||
YogaConfig config = new YogaConfig();
|
YogaConfig config = new YogaConfig();
|
||||||
config.SetExperimentalFeatureEnabled(YogaExperimentalFeature.Rounding, true);
|
|
||||||
|
|
||||||
YogaNode root = new YogaNode(config);
|
YogaNode root = new YogaNode(config);
|
||||||
root.FlexDirection = YogaFlexDirection.Row;
|
root.FlexDirection = YogaFlexDirection.Row;
|
||||||
@@ -257,7 +254,6 @@ namespace Facebook.Yoga
|
|||||||
public void Test_rounding_flex_basis_overrides_main_size()
|
public void Test_rounding_flex_basis_overrides_main_size()
|
||||||
{
|
{
|
||||||
YogaConfig config = new YogaConfig();
|
YogaConfig config = new YogaConfig();
|
||||||
config.SetExperimentalFeatureEnabled(YogaExperimentalFeature.Rounding, true);
|
|
||||||
|
|
||||||
YogaNode root = new YogaNode(config);
|
YogaNode root = new YogaNode(config);
|
||||||
root.Width = 100;
|
root.Width = 100;
|
||||||
@@ -329,7 +325,6 @@ namespace Facebook.Yoga
|
|||||||
public void Test_rounding_total_fractial()
|
public void Test_rounding_total_fractial()
|
||||||
{
|
{
|
||||||
YogaConfig config = new YogaConfig();
|
YogaConfig config = new YogaConfig();
|
||||||
config.SetExperimentalFeatureEnabled(YogaExperimentalFeature.Rounding, true);
|
|
||||||
|
|
||||||
YogaNode root = new YogaNode(config);
|
YogaNode root = new YogaNode(config);
|
||||||
root.Width = 87.4f;
|
root.Width = 87.4f;
|
||||||
@@ -401,7 +396,6 @@ namespace Facebook.Yoga
|
|||||||
public void Test_rounding_total_fractial_nested()
|
public void Test_rounding_total_fractial_nested()
|
||||||
{
|
{
|
||||||
YogaConfig config = new YogaConfig();
|
YogaConfig config = new YogaConfig();
|
||||||
config.SetExperimentalFeatureEnabled(YogaExperimentalFeature.Rounding, true);
|
|
||||||
|
|
||||||
YogaNode root = new YogaNode(config);
|
YogaNode root = new YogaNode(config);
|
||||||
root.Width = 87.4f;
|
root.Width = 87.4f;
|
||||||
@@ -507,7 +501,6 @@ namespace Facebook.Yoga
|
|||||||
public void Test_rounding_fractial_input_1()
|
public void Test_rounding_fractial_input_1()
|
||||||
{
|
{
|
||||||
YogaConfig config = new YogaConfig();
|
YogaConfig config = new YogaConfig();
|
||||||
config.SetExperimentalFeatureEnabled(YogaExperimentalFeature.Rounding, true);
|
|
||||||
|
|
||||||
YogaNode root = new YogaNode(config);
|
YogaNode root = new YogaNode(config);
|
||||||
root.Width = 100;
|
root.Width = 100;
|
||||||
@@ -579,7 +572,6 @@ namespace Facebook.Yoga
|
|||||||
public void Test_rounding_fractial_input_2()
|
public void Test_rounding_fractial_input_2()
|
||||||
{
|
{
|
||||||
YogaConfig config = new YogaConfig();
|
YogaConfig config = new YogaConfig();
|
||||||
config.SetExperimentalFeatureEnabled(YogaExperimentalFeature.Rounding, true);
|
|
||||||
|
|
||||||
YogaNode root = new YogaNode(config);
|
YogaNode root = new YogaNode(config);
|
||||||
root.Width = 100;
|
root.Width = 100;
|
||||||
@@ -651,7 +643,6 @@ namespace Facebook.Yoga
|
|||||||
public void Test_rounding_fractial_input_3()
|
public void Test_rounding_fractial_input_3()
|
||||||
{
|
{
|
||||||
YogaConfig config = new YogaConfig();
|
YogaConfig config = new YogaConfig();
|
||||||
config.SetExperimentalFeatureEnabled(YogaExperimentalFeature.Rounding, true);
|
|
||||||
|
|
||||||
YogaNode root = new YogaNode(config);
|
YogaNode root = new YogaNode(config);
|
||||||
root.Top = 0.3f;
|
root.Top = 0.3f;
|
||||||
@@ -724,7 +715,6 @@ namespace Facebook.Yoga
|
|||||||
public void Test_rounding_fractial_input_4()
|
public void Test_rounding_fractial_input_4()
|
||||||
{
|
{
|
||||||
YogaConfig config = new YogaConfig();
|
YogaConfig config = new YogaConfig();
|
||||||
config.SetExperimentalFeatureEnabled(YogaExperimentalFeature.Rounding, true);
|
|
||||||
|
|
||||||
YogaNode root = new YogaNode(config);
|
YogaNode root = new YogaNode(config);
|
||||||
root.Top = 0.7f;
|
root.Top = 0.7f;
|
||||||
@@ -797,7 +787,6 @@ namespace Facebook.Yoga
|
|||||||
public void Test_rounding_inner_node_controversy_horizontal()
|
public void Test_rounding_inner_node_controversy_horizontal()
|
||||||
{
|
{
|
||||||
YogaConfig config = new YogaConfig();
|
YogaConfig config = new YogaConfig();
|
||||||
config.SetExperimentalFeatureEnabled(YogaExperimentalFeature.Rounding, true);
|
|
||||||
|
|
||||||
YogaNode root = new YogaNode(config);
|
YogaNode root = new YogaNode(config);
|
||||||
root.FlexDirection = YogaFlexDirection.Row;
|
root.FlexDirection = YogaFlexDirection.Row;
|
||||||
@@ -883,7 +872,6 @@ namespace Facebook.Yoga
|
|||||||
public void Test_rounding_inner_node_controversy_vertical()
|
public void Test_rounding_inner_node_controversy_vertical()
|
||||||
{
|
{
|
||||||
YogaConfig config = new YogaConfig();
|
YogaConfig config = new YogaConfig();
|
||||||
config.SetExperimentalFeatureEnabled(YogaExperimentalFeature.Rounding, true);
|
|
||||||
|
|
||||||
YogaNode root = new YogaNode(config);
|
YogaNode root = new YogaNode(config);
|
||||||
root.Height = 320;
|
root.Height = 320;
|
||||||
@@ -968,7 +956,6 @@ namespace Facebook.Yoga
|
|||||||
public void Test_rounding_inner_node_controversy_combined()
|
public void Test_rounding_inner_node_controversy_combined()
|
||||||
{
|
{
|
||||||
YogaConfig config = new YogaConfig();
|
YogaConfig config = new YogaConfig();
|
||||||
config.SetExperimentalFeatureEnabled(YogaExperimentalFeature.Rounding, true);
|
|
||||||
|
|
||||||
YogaNode root = new YogaNode(config);
|
YogaNode root = new YogaNode(config);
|
||||||
root.FlexDirection = YogaFlexDirection.Row;
|
root.FlexDirection = YogaFlexDirection.Row;
|
||||||
|
@@ -69,6 +69,7 @@ namespace Facebook.Yoga
|
|||||||
Assert.AreEqual(YogaFlexDirection.Row, node1.FlexDirection);
|
Assert.AreEqual(YogaFlexDirection.Row, node1.FlexDirection);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if !UNITY_5_4_OR_NEWER
|
||||||
public static void ForceGC()
|
public static void ForceGC()
|
||||||
{
|
{
|
||||||
YogaNodeTest.ForceGC();
|
YogaNodeTest.ForceGC();
|
||||||
@@ -132,5 +133,6 @@ namespace Facebook.Yoga
|
|||||||
|
|
||||||
return node;
|
return node;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -164,6 +164,14 @@ namespace Facebook.Yoga
|
|||||||
return MeasureOutput.Make(123.4f, 81.7f);
|
return MeasureOutput.Make(123.4f, 81.7f);
|
||||||
});
|
});
|
||||||
node.CalculateLayout();
|
node.CalculateLayout();
|
||||||
|
Assert.AreEqual(124.0f, node.LayoutWidth);
|
||||||
|
Assert.AreEqual(82.0f, node.LayoutHeight);
|
||||||
|
|
||||||
|
node = new YogaNode(new YogaConfig{PointScaleFactor = 0});
|
||||||
|
node.SetMeasureFunction((_, width, widthMode, height, heightMode) => {
|
||||||
|
return MeasureOutput.Make(123.4f, 81.7f);
|
||||||
|
});
|
||||||
|
node.CalculateLayout();
|
||||||
Assert.AreEqual(123.4f, node.LayoutWidth);
|
Assert.AreEqual(123.4f, node.LayoutWidth);
|
||||||
Assert.AreEqual(81.7f, node.LayoutHeight);
|
Assert.AreEqual(81.7f, node.LayoutHeight);
|
||||||
}
|
}
|
||||||
@@ -240,6 +248,26 @@ namespace Facebook.Yoga
|
|||||||
Assert.AreEqual(0, child2.LayoutY);
|
Assert.AreEqual(0, child2.LayoutY);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void TestPrintOneNode()
|
||||||
|
{
|
||||||
|
YogaNode node = new YogaNode();
|
||||||
|
node.Width = 100;
|
||||||
|
node.Height = 120;
|
||||||
|
node.CalculateLayout();
|
||||||
|
Assert.AreEqual("<div layout=\"width: 100; height: 120; top: 0; left: 0;\" style=\"width: 100px; height: 120px; \" ></div>", node.Print());
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void TestPrintWithLogger()
|
||||||
|
{
|
||||||
|
YogaNode node = new YogaNode(new YogaConfig{Logger = (c, n, l, m) => {}});
|
||||||
|
node.Width = 110;
|
||||||
|
node.Height = 105;
|
||||||
|
node.CalculateLayout();
|
||||||
|
Assert.AreEqual("<div layout=\"width: 110; height: 105; top: 0; left: 0;\" style=\"width: 110px; height: 105px; \" ></div>", node.Print());
|
||||||
|
}
|
||||||
|
|
||||||
[Test]
|
[Test]
|
||||||
public void TestPrint()
|
public void TestPrint()
|
||||||
{
|
{
|
||||||
@@ -301,9 +329,10 @@ namespace Facebook.Yoga
|
|||||||
Assert.AreEqual(90.Pt(), node4.MaxHeight);
|
Assert.AreEqual(90.Pt(), node4.MaxHeight);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if !UNITY_5_4_OR_NEWER
|
||||||
public static void ForceGC()
|
public static void ForceGC()
|
||||||
{
|
{
|
||||||
GC.Collect(GC.MaxGeneration);
|
GC.Collect();
|
||||||
GC.WaitForPendingFinalizers();
|
GC.WaitForPendingFinalizers();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -430,6 +459,7 @@ namespace Facebook.Yoga
|
|||||||
return MeasureOutput.Make(120, 130);
|
return MeasureOutput.Make(120, 130);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
[Test]
|
[Test]
|
||||||
public void TestLayoutMargin() {
|
public void TestLayoutMargin() {
|
||||||
|
@@ -24,5 +24,5 @@ ROOT=`buck root|tail -1`
|
|||||||
DYLIB=`buck targets --show-output $TARGET|tail -1|awk '{print $2}'`
|
DYLIB=`buck targets --show-output $TARGET|tail -1|awk '{print $2}'`
|
||||||
cp $ROOT/$DYLIB .
|
cp $ROOT/$DYLIB .
|
||||||
|
|
||||||
mcs -debug -t:library -r:$NUNIT/nunit.framework.dll -out:YogaTest.dll *.cs ../../../csharp/Facebook.Yoga/*cs
|
mcs -debug -d:YOGA_ENABLE_GC_TEST -t:library -r:$NUNIT/nunit.framework.dll -out:YogaTest.dll *.cs ../../../csharp/Facebook.Yoga/*cs
|
||||||
MONO_PATH=$NUNIT mono --arch=64 --debug $NUNIT/nunit-console.exe YogaTest.dll
|
MONO_PATH=$NUNIT mono --arch=64 --debug $NUNIT/nunit-console.exe YogaTest.dll
|
||||||
|
@@ -140,6 +140,3 @@ PLATFORMS
|
|||||||
|
|
||||||
DEPENDENCIES
|
DEPENDENCIES
|
||||||
github-pages (~> 104)
|
github-pages (~> 104)
|
||||||
|
|
||||||
BUNDLED WITH
|
|
||||||
1.14.6
|
|
||||||
|
@@ -20,30 +20,30 @@ There is an easy interface to Yoga called `YogaLayout`. This is a view group th
|
|||||||
xmlns:yoga="http://schemas.android.com/apk/res-auto"
|
xmlns:yoga="http://schemas.android.com/apk/res-auto"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
yoga:align_items="stretch"
|
yoga:yg_alignItems="stretch"
|
||||||
>
|
>
|
||||||
<YogaLayout
|
<YogaLayout
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:background="@drawable/sample_children_background"
|
android:background="@drawable/sample_children_background"
|
||||||
yoga:margin_horizontal="10dp"
|
yoga:yg_marginHorizontal="10dp"
|
||||||
yoga:margin_top="5dp"
|
yoga:yg_marginTop="5dp"
|
||||||
yoga:flex_direction="row"
|
yoga:yg_flexDirection="row"
|
||||||
yoga:align_items="center"
|
yoga:yg_alignItems="center"
|
||||||
>
|
>
|
||||||
<ImageView
|
<ImageView
|
||||||
android:layout_width="50dp"
|
android:layout_width="50dp"
|
||||||
android:layout_height="50dp"
|
android:layout_height="50dp"
|
||||||
android:src="@drawable/ic_launcher"
|
android:src="@drawable/ic_launcher"
|
||||||
yoga:flex="0"
|
yoga:yg_flex="0"
|
||||||
/>
|
/>
|
||||||
<TextView
|
<TextView
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:text="@string/child_1_text"
|
android:text="@string/child_1_text"
|
||||||
android:textColor="@color/children_text"
|
android:textColor="@color/children_text"
|
||||||
yoga:flex="1"
|
yoga:yg_flex="1"
|
||||||
yoga:margin_start="8dp"
|
yoga:yg_marginStart="8dp"
|
||||||
/>
|
/>
|
||||||
</YogaLayout>
|
</YogaLayout>
|
||||||
</YogaLayout>
|
</YogaLayout>
|
||||||
@@ -59,7 +59,7 @@ compile 'com.facebook.yoga.android:yoga-layout:1.2.0'
|
|||||||
|
|
||||||
## layout\_width and layout\_height
|
## layout\_width and layout\_height
|
||||||
|
|
||||||
If either are set to an actual size (in px or dp etc) then this is taken as a default for `yoga:height` or `yoga:width`. Otherwise they are ignored.
|
If either are set to an actual size (in px or dp etc) then this is taken as a default for `yoga:yg_height` or `yoga:ygWidth`. Otherwise they are ignored.
|
||||||
|
|
||||||
## VirtualYogaLayout
|
## VirtualYogaLayout
|
||||||
|
|
||||||
@@ -67,11 +67,11 @@ Sometimes you will nest `YogaLayout`s within `YogaLayout`s in order to get your
|
|||||||
|
|
||||||
## RTL locales
|
## RTL locales
|
||||||
|
|
||||||
RTL locales are supported by default. That is, unless you explicitly set the `yoga:direction="ltr|rtl|inherit"` attribute on a view, it will obtain the locale direction _at runtime_. This means that the layout will rearrange properly, even if the locale changes while your app is running!
|
RTL locales are supported by default. That is, unless you explicitly set the `yoga:yg_direction="ltr|rtl|inherit"` attribute on a view, it will obtain the locale direction At runtime_. This means that the layout will rearrange properly, even if the locale changes while your app is running!
|
||||||
|
|
||||||
## Attributes
|
## Attributes
|
||||||
|
|
||||||
The list of all attributes can be found in [attrs.xml](https://github.com/facebook/yoga/blob/master/android/sample/res/com/facebook/samples/yoga/res/values/attrs.xml), but logically map from the Yoga properties.
|
The list of all attributes can be found in [attrs.xml](https://github.com/facebook/yoga/blob/master/android/src/main/res/values/attrs.xml), but logically map from the Yoga properties.
|
||||||
|
|
||||||
## Auto margins
|
## Auto margins
|
||||||
|
|
||||||
|
@@ -28,7 +28,7 @@ The following functions help manage the children of a node.
|
|||||||
void YGNodeInsertChild(YGNodeRef node, YGNodeRef child, uint32_t index);
|
void YGNodeInsertChild(YGNodeRef node, YGNodeRef child, uint32_t index);
|
||||||
void YGNodeRemoveChild(YGNodeRef node, YGNodeRef child);
|
void YGNodeRemoveChild(YGNodeRef node, YGNodeRef child);
|
||||||
YGNodeRef YGNodeGetChild(YGNodeRef node, uint32_t index);
|
YGNodeRef YGNodeGetChild(YGNodeRef node, uint32_t index);
|
||||||
uint32_t YGNodeChildCount(YGNodeRef node);
|
uint32_t YGNodeGetChildCount(YGNodeRef node);
|
||||||
```
|
```
|
||||||
|
|
||||||
### Style getters & setters
|
### Style getters & setters
|
||||||
|
@@ -163,25 +163,25 @@ root.Insert(text, 1);
|
|||||||
<YogaLayout
|
<YogaLayout
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
yoga:justify_content="stretch">
|
yoga:yg_justifyContent="stretch">
|
||||||
<ImageView
|
<ImageView
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
yoga:flex="1"/>
|
yoga:yg_flex="1"/>
|
||||||
<VirtualYogaLayout
|
<VirtualYogaLayout
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
yoga:padding_all="20px"
|
yoga:yg_paddingAll="20px"
|
||||||
yoga:flex_direction="row"
|
yoga:yg_flexDirection="row"
|
||||||
yoga:align_items="center">
|
yoga:yg_alignItems="center">
|
||||||
<ImageView
|
<ImageView
|
||||||
android:layout_width="50dp"
|
android:layout_width="50dp"
|
||||||
android:layout_height="50dp"/>
|
android:layout_height="50dp"/>
|
||||||
<TextView
|
<TextView
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
yoga:flex="1"
|
yoga:yg_flex="1"
|
||||||
yoga:margin_start="20px"/>
|
yoga:yg_marginStart="20px"/>
|
||||||
</VirtualYogaLayout>
|
</VirtualYogaLayout>
|
||||||
</YogaLayout>
|
</YogaLayout>
|
||||||
```
|
```
|
||||||
|
3
enums.py
3
enums.py
@@ -90,12 +90,11 @@ ENUMS = {
|
|||||||
'Info',
|
'Info',
|
||||||
'Debug',
|
'Debug',
|
||||||
'Verbose',
|
'Verbose',
|
||||||
|
'Fatal',
|
||||||
],
|
],
|
||||||
'ExperimentalFeature': [
|
'ExperimentalFeature': [
|
||||||
'Rounding',
|
|
||||||
# Mimic web flex-basis behavior.
|
# Mimic web flex-basis behavior.
|
||||||
'WebFlexBasis',
|
'WebFlexBasis',
|
||||||
'MinFlexFix'
|
|
||||||
],
|
],
|
||||||
'PrintOptions': [
|
'PrintOptions': [
|
||||||
('Layout', 1),
|
('Layout', 1),
|
||||||
|
@@ -167,3 +167,20 @@
|
|||||||
<div style="width: 72px; height: 72px;"></div>
|
<div style="width: 72px; height: 72px;"></div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<div id="align_center_should_size_based_on_content" style="width: 100px; height: 100px; align-items: center; margin-top: 20px;">
|
||||||
|
<div style="flex-grow: 0; flex-shrink: 1; justify-content: center;">
|
||||||
|
<div style="flex-grow: 1; flex-shrink: 1;">
|
||||||
|
<div style="width: 20px; height: 20px;"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="align_strech_should_size_based_on_parent" style="width: 100px; height: 100px; align-items: strech; margin-top: 20px;">
|
||||||
|
<div style="flex-grow: 0; flex-shrink: 1; justify-content: center;">
|
||||||
|
<div style="flex-grow: 1; flex-shrink: 1;">
|
||||||
|
<div style="width: 20px; height: 20px;"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
@@ -113,3 +113,15 @@
|
|||||||
<div style="width: 80px; height: 80px;"></div>
|
<div style="width: 80px; height: 80px;"></div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<div id="wrapped_column_max_height" style="height: 500px; width: 700px; flex-direction: column;align-items: center; justify-content: center; align-content: center; flex-wrap:wrap;">
|
||||||
|
<div style="width: 100px; height: 500px; max-height: 200px;"></div>
|
||||||
|
<div style="width: 200px; height: 200px; margin: 20px;"></div>
|
||||||
|
<div style="width: 100px; height: 100px;"></div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="wrapped_column_max_height_flex" style="height: 500px; width: 700px; flex-direction: column;align-items: center; justify-content: center; align-content: center; flex-wrap:wrap;">
|
||||||
|
<div style="width: 100px; height: 500px; max-height: 200px; flex: 1;"></div>
|
||||||
|
<div style="width: 200px; height: 200px; margin: 20px; flex: 1"></div>
|
||||||
|
<div style="width: 100px; height: 100px;"></div>
|
||||||
|
</div>
|
@@ -30,12 +30,12 @@
|
|||||||
<div style="width: 50px; height: 50px;"></div>
|
<div style="width: 50px; height: 50px;"></div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="flex_grow_to_min" experiments="MinFlexFix" style="min-height: 100px; max-height: 500px; width: 100px;">
|
<div id="flex_grow_to_min" style="min-height: 100px; max-height: 500px; width: 100px;">
|
||||||
<div style="flex-grow: 1; flex-shrink: 1;"></div>
|
<div style="flex-grow: 1; flex-shrink: 1;"></div>
|
||||||
<div style="height: 50px;"></div>
|
<div style="height: 50px;"></div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="flex_grow_in_at_most_container" experiments="MinFlexFix" style="width: 100px; height: 100px; background-color: white; flex-direction: row; align-items: flex-start;">
|
<div id="flex_grow_in_at_most_container" style="width: 100px; height: 100px; background-color: white; flex-direction: row; align-items: flex-start;">
|
||||||
<div style="flex-direction: row;">
|
<div style="flex-direction: row;">
|
||||||
<div style="flex-grow: 1; flex-basis: 0px;"></div>
|
<div style="flex-grow: 1; flex-basis: 0px;"></div>
|
||||||
</div>
|
</div>
|
||||||
|
@@ -1,61 +1,61 @@
|
|||||||
<div id="percentage_width_height" experiments="Rounding" style="width: 200px; height: 200px; flex-direction: row;">
|
<div id="percentage_width_height" style="width: 200px; height: 200px; flex-direction: row;">
|
||||||
<div style="width: 30%; height: 30%;"></div>
|
<div style="width: 30%; height: 30%;"></div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="percentage_position_left_top" experiments="Rounding" style="width: 400px; height: 400px; flex-direction: row;">
|
<div id="percentage_position_left_top" style="width: 400px; height: 400px; flex-direction: row;">
|
||||||
<div style="width: 45%; height: 55%; left: 10%; top: 20%"></div>
|
<div style="width: 45%; height: 55%; left: 10%; top: 20%"></div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="percentage_position_bottom_right" experiments="Rounding" style="width: 500px; height: 500px; flex-direction: row;">
|
<div id="percentage_position_bottom_right" style="width: 500px; height: 500px; flex-direction: row;">
|
||||||
<div style="width: 55%; height: 15%; bottom: 10%; right: 20%"></div>
|
<div style="width: 55%; height: 15%; bottom: 10%; right: 20%"></div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="percentage_flex_basis" experiments="Rounding" style="width: 200px; height: 200px; flex-direction: row;">
|
<div id="percentage_flex_basis" style="width: 200px; height: 200px; flex-direction: row;">
|
||||||
<div style="flex-grow: 1; flex-basis: 50%;"></div>
|
<div style="flex-grow: 1; flex-basis: 50%;"></div>
|
||||||
<div style="flex-grow: 1; flex-basis: 25%;"></div>
|
<div style="flex-grow: 1; flex-basis: 25%;"></div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="percentage_flex_basis_cross" experiments="Rounding" style="width: 200px; height: 200px; flex-direction: column;">
|
<div id="percentage_flex_basis_cross" style="width: 200px; height: 200px; flex-direction: column;">
|
||||||
<div style="flex-grow: 1; flex-basis: 50%;"></div>
|
<div style="flex-grow: 1; flex-basis: 50%;"></div>
|
||||||
<div style="flex-grow: 1; flex-basis: 25%;"></div>
|
<div style="flex-grow: 1; flex-basis: 25%;"></div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="percentage_flex_basis_cross_min_height" experiments="Rounding" style="width: 200px; height: 200px; flex-direction: column;">
|
<div id="percentage_flex_basis_cross_min_height" style="width: 200px; height: 200px; flex-direction: column;">
|
||||||
<div style="flex-grow: 1; min-height: 60%;"></div>
|
<div style="flex-grow: 1; min-height: 60%;"></div>
|
||||||
<div style="flex-grow: 2; min-height: 10%;"></div>
|
<div style="flex-grow: 2; min-height: 10%;"></div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="percentage_flex_basis_main_max_height" experiments="Rounding" style="width: 200px; height: 200px; flex-direction: row;">
|
<div id="percentage_flex_basis_main_max_height" style="width: 200px; height: 200px; flex-direction: row;">
|
||||||
<div style="flex-grow: 1; flex-basis: 10%; max-height: 60%;"></div>
|
<div style="flex-grow: 1; flex-basis: 10%; max-height: 60%;"></div>
|
||||||
<div style="flex-grow: 4; flex-basis: 10%; max-height: 20%;"></div>
|
<div style="flex-grow: 4; flex-basis: 10%; max-height: 20%;"></div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="percentage_flex_basis_cross_max_height" experiments="Rounding" style="width: 200px; height: 200px; flex-direction: column;">
|
<div id="percentage_flex_basis_cross_max_height" style="width: 200px; height: 200px; flex-direction: column;">
|
||||||
<div style="flex-grow: 1; flex-basis: 10%; max-height: 60%;"></div>
|
<div style="flex-grow: 1; flex-basis: 10%; max-height: 60%;"></div>
|
||||||
<div style="flex-grow: 4; flex-basis: 10%; max-height: 20%;"></div>
|
<div style="flex-grow: 4; flex-basis: 10%; max-height: 20%;"></div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="percentage_flex_basis_main_max_width" experiments="Rounding" style="width: 200px; height: 200px; flex-direction: row;">
|
<div id="percentage_flex_basis_main_max_width" style="width: 200px; height: 200px; flex-direction: row;">
|
||||||
<div style="flex-grow: 1; flex-basis: 15%; max-width: 60%;"></div>
|
<div style="flex-grow: 1; flex-basis: 15%; max-width: 60%;"></div>
|
||||||
<div style="flex-grow: 4; flex-basis: 10%; max-width: 20%;"></div>
|
<div style="flex-grow: 4; flex-basis: 10%; max-width: 20%;"></div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="percentage_flex_basis_cross_max_width" experiments="Rounding" style="width: 200px; height: 200px; flex-direction: column;">
|
<div id="percentage_flex_basis_cross_max_width" style="width: 200px; height: 200px; flex-direction: column;">
|
||||||
<div style="flex-grow: 1; flex-basis: 10%; max-width: 60%;"></div>
|
<div style="flex-grow: 1; flex-basis: 10%; max-width: 60%;"></div>
|
||||||
<div style="flex-grow: 4; flex-basis: 15%; max-width: 20%;"></div>
|
<div style="flex-grow: 4; flex-basis: 15%; max-width: 20%;"></div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="percentage_flex_basis_main_min_width" experiments="Rounding" style="width: 200px; height: 200px; flex-direction: row;">
|
<div id="percentage_flex_basis_main_min_width" style="width: 200px; height: 200px; flex-direction: row;">
|
||||||
<div style="flex-grow: 1; flex-basis: 15%; min-width: 60%;"></div>
|
<div style="flex-grow: 1; flex-basis: 15%; min-width: 60%;"></div>
|
||||||
<div style="flex-grow: 4; flex-basis: 10%; min-width: 20%;"></div>
|
<div style="flex-grow: 4; flex-basis: 10%; min-width: 20%;"></div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="percentage_flex_basis_cross_min_width" experiments="Rounding" style="width: 200px; height: 200px; flex-direction: column;">
|
<div id="percentage_flex_basis_cross_min_width" style="width: 200px; height: 200px; flex-direction: column;">
|
||||||
<div style="flex-grow: 1; flex-basis: 10%; min-width: 60%;"></div>
|
<div style="flex-grow: 1; flex-basis: 10%; min-width: 60%;"></div>
|
||||||
<div style="flex-grow: 4; flex-basis: 15%; min-width: 20%;"></div>
|
<div style="flex-grow: 4; flex-basis: 15%; min-width: 20%;"></div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="percentage_multiple_nested_with_padding_margin_and_percentage_values" experiments="Rounding" style="width: 200px; height: 200px; flex-direction: column;">
|
<div id="percentage_multiple_nested_with_padding_margin_and_percentage_values" style="width: 200px; height: 200px; flex-direction: column;">
|
||||||
<div style="flex-grow: 1; flex-basis: 10%; min-width: 60%; margin: 5px; padding: 3px;">
|
<div style="flex-grow: 1; flex-basis: 10%; min-width: 60%; margin: 5px; padding: 3px;">
|
||||||
<div style="width: 50%; margin: 5px; padding: 3%;">
|
<div style="width: 50%; margin: 5px; padding: 3%;">
|
||||||
<div style="width: 45%; margin: 5%; padding: 3px;"></div>
|
<div style="width: 45%; margin: 5%; padding: 3px;"></div>
|
||||||
@@ -64,19 +64,19 @@
|
|||||||
<div style="flex-grow: 4; flex-basis: 15%; min-width: 20%;"></div>
|
<div style="flex-grow: 4; flex-basis: 15%; min-width: 20%;"></div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="percentage_margin_should_calculate_based_only_on_width" experiments="Rounding" style="width: 200px; height: 100px;">
|
<div id="percentage_margin_should_calculate_based_only_on_width" style="width: 200px; height: 100px;">
|
||||||
<div style="flex-grow: 1; margin: 10%;">
|
<div style="flex-grow: 1; margin: 10%;">
|
||||||
<div style="width: 10px; height: 10px;"></div>
|
<div style="width: 10px; height: 10px;"></div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="percentage_padding_should_calculate_based_only_on_width" experiments="Rounding" style="width: 200px; height: 100px;">
|
<div id="percentage_padding_should_calculate_based_only_on_width" style="width: 200px; height: 100px;">
|
||||||
<div style="flex-grow: 1; padding: 10%;">
|
<div style="flex-grow: 1; padding: 10%;">
|
||||||
<div style="width: 10px; height: 10px;"></div>
|
<div style="width: 10px; height: 10px;"></div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="percentage_absolute_position" experiments="Rounding" style="width: 200px; height: 100px;">
|
<div id="percentage_absolute_position" style="width: 200px; height: 100px;">
|
||||||
<div style="position: absolute; top: 10%; left: 30%; width: 10px; height: 10px;"></div>
|
<div style="position: absolute; top: 10%; left: 30%; width: 10px; height: 10px;"></div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -92,7 +92,7 @@
|
|||||||
<div style="width: 100px;"></div>
|
<div style="width: 100px;"></div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="percentage_container_in_wrapping_container" experiments="MinFlexFix" style="align-items: center; width: 200px; height: 200px; justify-content: center;">
|
<div id="percentage_container_in_wrapping_container" style="align-items: center; width: 200px; height: 200px; justify-content: center;">
|
||||||
<div>
|
<div>
|
||||||
<div style="alignItems: center; flex-direction: row; justify-content: center; width: 100%;">
|
<div style="alignItems: center; flex-direction: row; justify-content: center; width: 100%;">
|
||||||
<div style="width: 50px; height: 50px;"></div>
|
<div style="width: 50px; height: 50px;"></div>
|
||||||
|
@@ -1,10 +1,10 @@
|
|||||||
<div id="rounding_flex_basis_flex_grow_row_width_of_100" experiments="Rounding" style="width: 100px; height: 100px; flex-direction: row;">
|
<div id="rounding_flex_basis_flex_grow_row_width_of_100" style="width: 100px; height: 100px; flex-direction: row;">
|
||||||
<div style="flex-grow: 1;"></div>
|
<div style="flex-grow: 1;"></div>
|
||||||
<div style="flex-grow: 1;"></div>
|
<div style="flex-grow: 1;"></div>
|
||||||
<div style="flex-grow: 1;"></div>
|
<div style="flex-grow: 1;"></div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="rounding_flex_basis_flex_grow_row_prime_number_width" experiments="Rounding" style="width: 113px; height: 100px; flex-direction: row;">
|
<div id="rounding_flex_basis_flex_grow_row_prime_number_width" style="width: 113px; height: 100px; flex-direction: row;">
|
||||||
<div style="flex-grow: 1;"></div>
|
<div style="flex-grow: 1;"></div>
|
||||||
<div style="flex-grow: 1;"></div>
|
<div style="flex-grow: 1;"></div>
|
||||||
<div style="flex-grow: 1;"></div>
|
<div style="flex-grow: 1;"></div>
|
||||||
@@ -12,25 +12,25 @@
|
|||||||
<div style="flex-grow: 1;"></div>
|
<div style="flex-grow: 1;"></div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="rounding_flex_basis_flex_shrink_row" experiments="Rounding" style="width: 101px; height: 100px; flex-direction: row;">
|
<div id="rounding_flex_basis_flex_shrink_row" style="width: 101px; height: 100px; flex-direction: row;">
|
||||||
<div style="flex-basis: 100px; flex-shrink: 1;"></div>
|
<div style="flex-basis: 100px; flex-shrink: 1;"></div>
|
||||||
<div style="flex-basis: 25px;"></div>
|
<div style="flex-basis: 25px;"></div>
|
||||||
<div style="flex-basis: 25px;"></div>
|
<div style="flex-basis: 25px;"></div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="rounding_flex_basis_overrides_main_size" experiments="Rounding" style="height: 113px; width: 100px;">
|
<div id="rounding_flex_basis_overrides_main_size" style="height: 113px; width: 100px;">
|
||||||
<div style="height: 20px; flex-grow:1; flex-basis:50px;"></div>
|
<div style="height: 20px; flex-grow:1; flex-basis:50px;"></div>
|
||||||
<div style="height: 10px; flex-grow:1;"></div>
|
<div style="height: 10px; flex-grow:1;"></div>
|
||||||
<div style="height: 10px; flex-grow:1;"></div>
|
<div style="height: 10px; flex-grow:1;"></div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="rounding_total_fractial" experiments="Rounding" style="height: 113.4px; width: 87.4px;">
|
<div id="rounding_total_fractial" style="height: 113.4px; width: 87.4px;">
|
||||||
<div style="height: 20.3px; flex-grow:0.7; flex-basis:50.3px;"></div>
|
<div style="height: 20.3px; flex-grow:0.7; flex-basis:50.3px;"></div>
|
||||||
<div style="height: 10px; flex-grow:1.6;"></div>
|
<div style="height: 10px; flex-grow:1.6;"></div>
|
||||||
<div style="height: 10.7px; flex-grow:1.1;"></div>
|
<div style="height: 10.7px; flex-grow:1.1;"></div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="rounding_total_fractial_nested" experiments="Rounding" style="height: 113.4px; width: 87.4px;">
|
<div id="rounding_total_fractial_nested" style="height: 113.4px; width: 87.4px;">
|
||||||
<div style="height: 20.3px; flex-grow:0.7; flex-basis:50.3px;">
|
<div style="height: 20.3px; flex-grow:0.7; flex-basis:50.3px;">
|
||||||
<div style="bottom: 13.3px; height: 9.9px; flex-grow:1; flex-basis:0.3px;"></div>
|
<div style="bottom: 13.3px; height: 9.9px; flex-grow:1; flex-basis:0.3px;"></div>
|
||||||
<div style="top: 13.3px; height: 1.1px; flex-grow:4; flex-basis:0.3px;"></div>
|
<div style="top: 13.3px; height: 1.1px; flex-grow:4; flex-basis:0.3px;"></div>
|
||||||
@@ -39,31 +39,31 @@
|
|||||||
<div style="height: 10.7px; flex-grow:1.1;"></div>
|
<div style="height: 10.7px; flex-grow:1.1;"></div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="rounding_fractial_input_1" experiments="Rounding" style="height: 113.4px; width: 100px;">
|
<div id="rounding_fractial_input_1" style="height: 113.4px; width: 100px;">
|
||||||
<div style="height: 20px; flex-grow:1; flex-basis:50px;"></div>
|
<div style="height: 20px; flex-grow:1; flex-basis:50px;"></div>
|
||||||
<div style="height: 10px; flex-grow:1;"></div>
|
<div style="height: 10px; flex-grow:1;"></div>
|
||||||
<div style="height: 10px; flex-grow:1;"></div>
|
<div style="height: 10px; flex-grow:1;"></div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="rounding_fractial_input_2" experiments="Rounding" style="height: 113.6px; width: 100px;">
|
<div id="rounding_fractial_input_2" style="height: 113.6px; width: 100px;">
|
||||||
<div style="height: 20px; flex-grow:1; flex-basis:50px;"></div>
|
<div style="height: 20px; flex-grow:1; flex-basis:50px;"></div>
|
||||||
<div style="height: 10px; flex-grow:1;"></div>
|
<div style="height: 10px; flex-grow:1;"></div>
|
||||||
<div style="height: 10px; flex-grow:1;"></div>
|
<div style="height: 10px; flex-grow:1;"></div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="rounding_fractial_input_3" experiments="Rounding" style="top: 0.3px; height: 113.4px; width: 100px;">
|
<div id="rounding_fractial_input_3" style="top: 0.3px; height: 113.4px; width: 100px;">
|
||||||
<div style="height: 20px; flex-grow:1; flex-basis:50px;"></div>
|
<div style="height: 20px; flex-grow:1; flex-basis:50px;"></div>
|
||||||
<div style="height: 10px; flex-grow:1;"></div>
|
<div style="height: 10px; flex-grow:1;"></div>
|
||||||
<div style="height: 10px; flex-grow:1;"></div>
|
<div style="height: 10px; flex-grow:1;"></div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="rounding_fractial_input_4" experiments="Rounding" style="top: 0.7px; height: 113.4px; width: 100px;">
|
<div id="rounding_fractial_input_4" style="top: 0.7px; height: 113.4px; width: 100px;">
|
||||||
<div style="height: 20px; flex-grow:1; flex-basis:50px;"></div>
|
<div style="height: 20px; flex-grow:1; flex-basis:50px;"></div>
|
||||||
<div style="height: 10px; flex-grow:1;"></div>
|
<div style="height: 10px; flex-grow:1;"></div>
|
||||||
<div style="height: 10px; flex-grow:1;"></div>
|
<div style="height: 10px; flex-grow:1;"></div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="rounding_inner_node_controversy_horizontal" experiments="Rounding" style="width: 320px; flex-direction: row;">
|
<div id="rounding_inner_node_controversy_horizontal" style="width: 320px; flex-direction: row;">
|
||||||
<div style="height: 10px; flex-grow:1;"></div>
|
<div style="height: 10px; flex-grow:1;"></div>
|
||||||
<div style="height: 10px; flex-grow:1;">
|
<div style="height: 10px; flex-grow:1;">
|
||||||
<div style="height: 10px; flex-grow:1;">
|
<div style="height: 10px; flex-grow:1;">
|
||||||
@@ -72,7 +72,7 @@
|
|||||||
<div style="height: 10px; flex-grow:1;"></div>
|
<div style="height: 10px; flex-grow:1;"></div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="rounding_inner_node_controversy_vertical" experiments="Rounding" style="height: 320px;">
|
<div id="rounding_inner_node_controversy_vertical" style="height: 320px;">
|
||||||
<div style="width: 10px; flex-grow:1;"></div>
|
<div style="width: 10px; flex-grow:1;"></div>
|
||||||
<div style="width: 10px; flex-grow:1;">
|
<div style="width: 10px; flex-grow:1;">
|
||||||
<div style="width: 10px; flex-grow:1;">
|
<div style="width: 10px; flex-grow:1;">
|
||||||
@@ -81,7 +81,7 @@
|
|||||||
<div style="width: 10px; flex-grow:1;"></div>
|
<div style="width: 10px; flex-grow:1;"></div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="rounding_inner_node_controversy_combined" experiments="Rounding" style="width: 640px; height: 320px; flex-direction: row;">
|
<div id="rounding_inner_node_controversy_combined" style="width: 640px; height: 320px; flex-direction: row;">
|
||||||
<div style="height: 100%; flex-grow:1;"></div>
|
<div style="height: 100%; flex-grow:1;"></div>
|
||||||
<div style="height: 100%; flex-grow:1; flex-direction: column;">
|
<div style="height: 100%; flex-grow:1; flex-direction: column;">
|
||||||
<div style="width: 100%; flex-grow:1;"></div>
|
<div style="width: 100%; flex-grow:1;"></div>
|
||||||
|
@@ -431,11 +431,6 @@ function getRoundedSize(node) {
|
|||||||
function calculateTree(root, roundToPixelGrid) {
|
function calculateTree(root, roundToPixelGrid) {
|
||||||
var rootLayout = [];
|
var rootLayout = [];
|
||||||
|
|
||||||
// Any occurrence of "Rounding" mark during node tree traverse turns this feature on for whole subtree.
|
|
||||||
if ((root.getAttribute('experiments') || '').split(' ').indexOf('Rounding') != -1) {
|
|
||||||
roundToPixelGrid = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (var i = 0; i < root.children.length; i++) {
|
for (var i = 0; i < root.children.length; i++) {
|
||||||
var child = root.children[i];
|
var child = root.children[i];
|
||||||
var layout = {
|
var layout = {
|
||||||
@@ -453,11 +448,9 @@ function calculateTree(root, roundToPixelGrid) {
|
|||||||
: [],
|
: [],
|
||||||
};
|
};
|
||||||
|
|
||||||
if (roundToPixelGrid) {
|
|
||||||
var size = getRoundedSize(child);
|
var size = getRoundedSize(child);
|
||||||
layout.width = size.width;
|
layout.width = size.width;
|
||||||
layout.height = size.height;
|
layout.height = size.height;
|
||||||
}
|
|
||||||
|
|
||||||
rootLayout.push(layout);
|
rootLayout.push(layout);
|
||||||
}
|
}
|
||||||
|
@@ -1,4 +1,14 @@
|
|||||||
bintrayUsername=
|
# Project-wide Gradle settings.
|
||||||
bintrayApiKey=
|
|
||||||
bintrayGpgPassword=
|
org.gradle.jvmargs=-Xmx1536M
|
||||||
dryRun=false
|
|
||||||
|
VERSION_NAME=1.4.3-SNAPSHOT
|
||||||
|
POM_URL=https://github.com/facebook/yoga
|
||||||
|
POM_SCM_URL=https://github.com/facebook/yoga.git
|
||||||
|
POM_SCM_CONNECTION=scm:git:https://github.com/facebook/yoga.git
|
||||||
|
POM_SCM_DEV_CONNECTION=scm:git:git@github.com:facebook/yoga.git
|
||||||
|
POM_LICENSE_NAME=BSD License
|
||||||
|
POM_LICENSE_URL=https://github.com/facebook/yoga/blob/master/LICENSE
|
||||||
|
POM_LICENSE_DIST=repo
|
||||||
|
POM_DEVELOPER_ID=facebook
|
||||||
|
POM_DEVELOPER_NAME=facebook
|
||||||
|
@@ -1,92 +0,0 @@
|
|||||||
ext {
|
|
||||||
bintrayUserOrg = 'facebook'
|
|
||||||
bintrayRepo = 'maven'
|
|
||||||
siteURL = "https://facebook.github.io/yoga/"
|
|
||||||
projectLicenses = {
|
|
||||||
license {
|
|
||||||
name 'BSD License'
|
|
||||||
url 'https://github.com/facebook/yoga/blob/master/LICENSE'
|
|
||||||
distribution 'repo'
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
def getBintrayUsername() {
|
|
||||||
return property('bintrayUsername') || System.getenv('BINTRAY_USERNAME')
|
|
||||||
}
|
|
||||||
|
|
||||||
def getBintrayApiKey() {
|
|
||||||
return property('bintrayApiKey') || System.getenv('BINTRAY_API_KEY')
|
|
||||||
}
|
|
||||||
|
|
||||||
def getBintrayGpgPassword() {
|
|
||||||
return property('bintrayGpgPassword') || System.getenv('BINTRAY_GPG_PASSWORD')
|
|
||||||
}
|
|
||||||
|
|
||||||
def dryRunOnly() {
|
|
||||||
return hasProperty('dryRun') ? property('dryRun').toBoolean() : false
|
|
||||||
}
|
|
||||||
|
|
||||||
def pomConfig = {
|
|
||||||
licenses {
|
|
||||||
// TODO Can we grab this from above?
|
|
||||||
license {
|
|
||||||
name 'BSD License'
|
|
||||||
url 'https://github.com/facebook/yoga/blob/master/LICENSE'
|
|
||||||
distribution 'repo'
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
publishing {
|
|
||||||
publications {
|
|
||||||
primaryPublication(MavenPublication) {
|
|
||||||
groupId group
|
|
||||||
artifact(sourcesJar)
|
|
||||||
artifact(javadocJar)
|
|
||||||
pom.packaging='aar'
|
|
||||||
pom.withXml {
|
|
||||||
def root = asNode()
|
|
||||||
root.appendNode('name', 'Yoga')
|
|
||||||
root.appendNode('url', siteURL)
|
|
||||||
root.children().last() + pomConfig
|
|
||||||
def dependenciesNode = root.appendNode('dependencies')
|
|
||||||
//Iterate over the compile dependencies (we don't want the test ones), adding a <dependency> node for each
|
|
||||||
configurations.compile.allDependencies.each {
|
|
||||||
if(it.group != null && (it.name != null || "unspecified".equals(it.name)) && it.version != null) {
|
|
||||||
def dependencyNode = dependenciesNode.appendNode('dependency')
|
|
||||||
dependencyNode.appendNode('groupId', it.group)
|
|
||||||
dependencyNode.appendNode('artifactId', it.name)
|
|
||||||
dependencyNode.appendNode('version', it.version)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
bintray {
|
|
||||||
user = getBintrayUsername()
|
|
||||||
key = getBintrayApiKey()
|
|
||||||
publications = ['primaryPublication']
|
|
||||||
configurations = ['archives']
|
|
||||||
pkg {
|
|
||||||
repo = bintrayRepo
|
|
||||||
userOrg = bintrayUserOrg
|
|
||||||
name = project.bintrayName
|
|
||||||
dryRun = dryRunOnly()
|
|
||||||
licenses = projectLicenses
|
|
||||||
override = true
|
|
||||||
publish = true
|
|
||||||
publicDownloadNumbers = true
|
|
||||||
version {
|
|
||||||
name = project.version
|
|
||||||
released = new Date()
|
|
||||||
gpg {
|
|
||||||
sign = true
|
|
||||||
passphrase = getBintrayGpgPassword()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
37
gradle/android-maven-install.gradle
Normal file
37
gradle/android-maven-install.gradle
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
// Configure the Android maven publication
|
||||||
|
|
||||||
|
apply plugin: 'com.github.dcendents.android-maven'
|
||||||
|
|
||||||
|
version = VERSION_NAME
|
||||||
|
group = GROUP
|
||||||
|
// Set the .aar / .jar base file name to match the artifact ID
|
||||||
|
// in case the module has a different name
|
||||||
|
project.archivesBaseName = POM_ARTIFACT_ID
|
||||||
|
|
||||||
|
install {
|
||||||
|
repositories.mavenInstaller {
|
||||||
|
// This generates POM.xml with proper parameters
|
||||||
|
pom.project {
|
||||||
|
name POM_NAME
|
||||||
|
artifactId POM_ARTIFACT_ID
|
||||||
|
packaging POM_PACKAGING
|
||||||
|
description POM_DESCRIPTION
|
||||||
|
url projectUrl
|
||||||
|
|
||||||
|
scm {
|
||||||
|
url scmUrl
|
||||||
|
connection scmConnection
|
||||||
|
developerConnection scmDeveloperConnection
|
||||||
|
}
|
||||||
|
|
||||||
|
licenses projectLicenses
|
||||||
|
|
||||||
|
developers {
|
||||||
|
developer {
|
||||||
|
id developerId
|
||||||
|
name developerName
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
47
gradle/android-tasks.gradle
Normal file
47
gradle/android-tasks.gradle
Normal file
@@ -0,0 +1,47 @@
|
|||||||
|
// Android tasks for Javadoc and sources.jar generation
|
||||||
|
|
||||||
|
afterEvaluate { project ->
|
||||||
|
if (POM_PACKAGING == 'aar') {
|
||||||
|
task androidJavadoc(type: Javadoc) {
|
||||||
|
source = android.sourceSets.main.java.srcDirs
|
||||||
|
exclude '**/pom.xml'
|
||||||
|
exclude '**/proguard_annotations.pro'
|
||||||
|
classpath += files(android.bootClasspath)
|
||||||
|
}
|
||||||
|
|
||||||
|
task androidJavadocJar(type: Jar) {
|
||||||
|
classifier = 'javadoc'
|
||||||
|
from androidJavadoc.destinationDir
|
||||||
|
}
|
||||||
|
|
||||||
|
task androidSourcesJar(type: Jar) {
|
||||||
|
classifier = 'sources'
|
||||||
|
from android.sourceSets.main.java.srcDirs
|
||||||
|
}
|
||||||
|
|
||||||
|
android.libraryVariants.all { variant ->
|
||||||
|
def name = variant.name.capitalize()
|
||||||
|
task "jar${name}"(type: Jar, dependsOn: variant.javaCompile) {
|
||||||
|
from variant.javaCompile.destinationDir
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
artifacts.add('archives', androidJavadocJar)
|
||||||
|
artifacts.add('archives', androidSourcesJar)
|
||||||
|
}
|
||||||
|
|
||||||
|
if (POM_PACKAGING == 'jar') {
|
||||||
|
task javadocJar(type: Jar, dependsOn: javadoc) {
|
||||||
|
classifier = 'javadoc'
|
||||||
|
from javadoc.destinationDir
|
||||||
|
}
|
||||||
|
|
||||||
|
task sourcesJar(type: Jar, dependsOn: classes) {
|
||||||
|
classifier = 'sources'
|
||||||
|
from sourceSets.main.allSource
|
||||||
|
}
|
||||||
|
|
||||||
|
artifacts.add('archives', javadocJar)
|
||||||
|
artifacts.add('archives', sourcesJar)
|
||||||
|
}
|
||||||
|
}
|
63
gradle/bintray.gradle
Normal file
63
gradle/bintray.gradle
Normal file
@@ -0,0 +1,63 @@
|
|||||||
|
// Upload to Bintray
|
||||||
|
apply plugin: 'com.jfrog.bintray'
|
||||||
|
|
||||||
|
def getBintrayUsername() {
|
||||||
|
return project.hasProperty('bintrayUsername') ? property('bintrayUsername') : System.getenv('BINTRAY_USERNAME')
|
||||||
|
}
|
||||||
|
|
||||||
|
def getBintrayApiKey() {
|
||||||
|
return project.hasProperty('bintrayApiKey') ? property('bintrayApiKey') : System.getenv('BINTRAY_API_KEY')
|
||||||
|
}
|
||||||
|
|
||||||
|
def getBintrayGpgPassword() {
|
||||||
|
return project.hasProperty('bintrayGpgPassword') ? property('bintrayGpgPassword') : System.getenv('BINTRAY_GPG_PASSWORD')
|
||||||
|
}
|
||||||
|
|
||||||
|
def getMavenCentralUsername() {
|
||||||
|
return project.hasProperty('mavenCentralUsername') ? property('mavenCentralUsername') : System.getenv('MAVEN_CENTRAL_USERNAME')
|
||||||
|
}
|
||||||
|
|
||||||
|
def getMavenCentralPassword() {
|
||||||
|
return project.hasProperty('mavenCentralPassword') ? property('mavenCentralPassword') : System.getenv('MAVEN_CENTRAL_PASSWORD')
|
||||||
|
}
|
||||||
|
|
||||||
|
def shouldSyncWithMavenCentral() {
|
||||||
|
return project.hasProperty('syncWithMavenCentral') ? property('syncWithMavenCentral').toBoolean() : false
|
||||||
|
}
|
||||||
|
|
||||||
|
def dryRunOnly() {
|
||||||
|
return project.hasProperty('dryRun') ? property('dryRun').toBoolean() : false
|
||||||
|
}
|
||||||
|
|
||||||
|
bintray {
|
||||||
|
user = getBintrayUsername()
|
||||||
|
key = getBintrayApiKey()
|
||||||
|
configurations = ['archives']
|
||||||
|
pkg {
|
||||||
|
repo = bintrayRepo
|
||||||
|
userOrg = bintrayUserOrg
|
||||||
|
name = bintrayName
|
||||||
|
desc = bintrayDescription
|
||||||
|
websiteUrl = projectUrl
|
||||||
|
issueTrackerUrl = issuesUrl
|
||||||
|
vcsUrl = scmUrl
|
||||||
|
licenses = projectLicenses
|
||||||
|
dryRun = dryRunOnly()
|
||||||
|
override = true
|
||||||
|
publish = true
|
||||||
|
publicDownloadNumbers = true
|
||||||
|
version {
|
||||||
|
desc = bintrayDescription
|
||||||
|
gpg {
|
||||||
|
sign = true
|
||||||
|
passphrase = getBintrayGpgPassword()
|
||||||
|
}
|
||||||
|
mavenCentralSync {
|
||||||
|
sync = shouldSyncWithMavenCentral()
|
||||||
|
user = getMavenCentralUsername()
|
||||||
|
password = getMavenCentralPassword()
|
||||||
|
close = '1' // If set to 0, you have to manually click release
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
96
gradle/gradle-mvn-push.gradle
Normal file
96
gradle/gradle-mvn-push.gradle
Normal file
@@ -0,0 +1,96 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2013 Chris Banes
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
apply plugin: 'signing'
|
||||||
|
|
||||||
|
version = VERSION_NAME
|
||||||
|
group = GROUP
|
||||||
|
|
||||||
|
def isReleaseBuild() {
|
||||||
|
return VERSION_NAME.contains('SNAPSHOT') == false
|
||||||
|
}
|
||||||
|
|
||||||
|
def getReleaseRepositoryUrl() {
|
||||||
|
return hasProperty('RELEASE_REPOSITORY_URL') ? RELEASE_REPOSITORY_URL
|
||||||
|
: "https://oss.sonatype.org/service/local/staging/deploy/maven2/"
|
||||||
|
}
|
||||||
|
|
||||||
|
def getSnapshotRepositoryUrl() {
|
||||||
|
return hasProperty('SNAPSHOT_REPOSITORY_URL') ? SNAPSHOT_REPOSITORY_URL
|
||||||
|
: "https://oss.sonatype.org/content/repositories/snapshots/"
|
||||||
|
}
|
||||||
|
|
||||||
|
def getRepositoryUsername() {
|
||||||
|
return hasProperty('SONATYPE_NEXUS_USERNAME') ? SONATYPE_NEXUS_USERNAME : ""
|
||||||
|
}
|
||||||
|
|
||||||
|
def getRepositoryPassword() {
|
||||||
|
return hasProperty('SONATYPE_NEXUS_PASSWORD') ? SONATYPE_NEXUS_PASSWORD : ""
|
||||||
|
}
|
||||||
|
|
||||||
|
afterEvaluate { project ->
|
||||||
|
uploadArchives {
|
||||||
|
repositories {
|
||||||
|
mavenDeployer {
|
||||||
|
beforeDeployment { MavenDeployment deployment -> signing.signPom(deployment) }
|
||||||
|
|
||||||
|
pom.groupId = GROUP
|
||||||
|
pom.artifactId = POM_ARTIFACT_ID
|
||||||
|
pom.version = VERSION_NAME
|
||||||
|
|
||||||
|
repository(url: getReleaseRepositoryUrl()) {
|
||||||
|
authentication(userName: getRepositoryUsername(), password: getRepositoryPassword())
|
||||||
|
}
|
||||||
|
snapshotRepository(url: getSnapshotRepositoryUrl()) {
|
||||||
|
authentication(userName: getRepositoryUsername(), password: getRepositoryPassword())
|
||||||
|
}
|
||||||
|
|
||||||
|
pom.project {
|
||||||
|
name POM_NAME
|
||||||
|
packaging POM_PACKAGING
|
||||||
|
description POM_DESCRIPTION
|
||||||
|
url POM_URL
|
||||||
|
|
||||||
|
scm {
|
||||||
|
url POM_SCM_URL
|
||||||
|
connection POM_SCM_CONNECTION
|
||||||
|
developerConnection POM_SCM_DEV_CONNECTION
|
||||||
|
}
|
||||||
|
|
||||||
|
licenses {
|
||||||
|
license {
|
||||||
|
name POM_LICENSE_NAME
|
||||||
|
url POM_LICENSE_URL
|
||||||
|
distribution POM_LICENSE_DIST
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
developers {
|
||||||
|
developer {
|
||||||
|
id POM_DEVELOPER_ID
|
||||||
|
name POM_DEVELOPER_NAME
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
signing {
|
||||||
|
required { isReleaseBuild() && gradle.taskGraph.hasTask('uploadArchives') }
|
||||||
|
sign configurations.archives
|
||||||
|
}
|
||||||
|
}
|
33
gradle/release-bintray.gradle
Normal file
33
gradle/release-bintray.gradle
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
// Set up everything required for releasing on Bintray
|
||||||
|
ext {
|
||||||
|
bintrayRepo = 'maven'
|
||||||
|
bintrayUserOrg = 'facebook'
|
||||||
|
bintrayName = "${GROUP}:${POM_ARTIFACT_ID}"
|
||||||
|
bintrayDescription = POM_DESCRIPTION
|
||||||
|
projectUrl = POM_URL
|
||||||
|
issuesUrl = 'https://github.com/facebook/yoga/issues'
|
||||||
|
scmUrl = POM_SCM_URL
|
||||||
|
scmConnection = POM_SCM_CONNECTION
|
||||||
|
scmDeveloperConnection = POM_SCM_DEV_CONNECTION
|
||||||
|
|
||||||
|
publishedGroupId = GROUP
|
||||||
|
libraryName = 'yoga'
|
||||||
|
artifact = 'yoga'
|
||||||
|
|
||||||
|
developerId = POM_DEVELOPER_ID
|
||||||
|
developerName = POM_DEVELOPER_NAME
|
||||||
|
|
||||||
|
projectLicenses = {
|
||||||
|
license {
|
||||||
|
name = POM_LICENSE_NAME
|
||||||
|
url = POM_LICENSE_URL
|
||||||
|
distribution = POM_LICENSE_DIST
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Set up the Android Maven publication (POM etc.)
|
||||||
|
apply from: rootProject.file('gradle/android-maven-install.gradle')
|
||||||
|
|
||||||
|
// Upload to Bintray
|
||||||
|
apply from: rootProject.file('gradle/bintray.gradle')
|
8
gradle/release.gradle
Normal file
8
gradle/release.gradle
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
// Common Android tasks for all releases that generate Javadocs, sources, etc.
|
||||||
|
apply from: rootProject.file('gradle/android-tasks.gradle')
|
||||||
|
|
||||||
|
// Upload to Bintray
|
||||||
|
apply from: rootProject.file('gradle/release-bintray.gradle')
|
||||||
|
|
||||||
|
// Upload directly to standard Maven Central (for SNAPSHOTs)
|
||||||
|
apply from: rootProject.file('gradle/gradle-mvn-push.gradle')
|
@@ -3,8 +3,8 @@ apply plugin: 'com.android.library'
|
|||||||
apply plugin: 'com.github.dcendents.android-maven'
|
apply plugin: 'com.github.dcendents.android-maven'
|
||||||
apply plugin: 'maven-publish'
|
apply plugin: 'maven-publish'
|
||||||
|
|
||||||
version = '1.4.2'
|
group = GROUP
|
||||||
group = 'com.facebook.yoga'
|
version = VERSION_NAME
|
||||||
|
|
||||||
android {
|
android {
|
||||||
compileSdkVersion rootProject.compileSdkVersion
|
compileSdkVersion rootProject.compileSdkVersion
|
||||||
@@ -73,4 +73,4 @@ ext {
|
|||||||
bintrayName = 'com.facebook.yoga:yoga'
|
bintrayName = 'com.facebook.yoga:yoga'
|
||||||
}
|
}
|
||||||
|
|
||||||
apply from: rootProject.file('gradle/android-jcenter-install.gradle')
|
apply from: rootProject.file('gradle/release.gradle')
|
||||||
|
@@ -20,6 +20,7 @@ public class YogaConfig {
|
|||||||
}
|
}
|
||||||
|
|
||||||
long mNativePointer;
|
long mNativePointer;
|
||||||
|
private YogaLogger mLogger;
|
||||||
|
|
||||||
private native long jni_YGConfigNew();
|
private native long jni_YGConfigNew();
|
||||||
public YogaConfig() {
|
public YogaConfig() {
|
||||||
@@ -51,4 +52,30 @@ public class YogaConfig {
|
|||||||
public void setUseWebDefaults(boolean useWebDefaults) {
|
public void setUseWebDefaults(boolean useWebDefaults) {
|
||||||
jni_YGConfigSetUseWebDefaults(mNativePointer, useWebDefaults);
|
jni_YGConfigSetUseWebDefaults(mNativePointer, useWebDefaults);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private native void jni_YGConfigSetPointScaleFactor(long nativePointer, float pixelsInPoint);
|
||||||
|
public void setPointScaleFactor(float pixelsInPoint) {
|
||||||
|
jni_YGConfigSetPointScaleFactor(mNativePointer, pixelsInPoint);
|
||||||
|
}
|
||||||
|
|
||||||
|
private native void jni_YGConfigSetUseLegacyStretchBehaviour(long nativePointer, boolean useLegacyStretchBehaviour);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Yoga previously had an error where containers would take the maximum space possible instead of the minimum
|
||||||
|
* like they are supposed to. In practice this resulted in implicit behaviour similar to align-self: stretch;
|
||||||
|
* Because this was such a long-standing bug we must allow legacy users to switch back to this behaviour.
|
||||||
|
*/
|
||||||
|
public void setUseLegacyStretchBehaviour(boolean useLegacyStretchBehaviour) {
|
||||||
|
jni_YGConfigSetUseLegacyStretchBehaviour(mNativePointer, useLegacyStretchBehaviour);
|
||||||
|
}
|
||||||
|
|
||||||
|
private native void jni_YGConfigSetLogger(long nativePointer, Object logger);
|
||||||
|
public void setLogger(YogaLogger logger) {
|
||||||
|
mLogger = logger;
|
||||||
|
jni_YGConfigSetLogger(mNativePointer, logger);
|
||||||
|
}
|
||||||
|
|
||||||
|
public YogaLogger getLogger() {
|
||||||
|
return mLogger;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -13,9 +13,7 @@ import com.facebook.proguard.annotations.DoNotStrip;
|
|||||||
|
|
||||||
@DoNotStrip
|
@DoNotStrip
|
||||||
public enum YogaExperimentalFeature {
|
public enum YogaExperimentalFeature {
|
||||||
ROUNDING(0),
|
WEB_FLEX_BASIS(0);
|
||||||
WEB_FLEX_BASIS(1),
|
|
||||||
MIN_FLEX_FIX(2);
|
|
||||||
|
|
||||||
private int mIntValue;
|
private int mIntValue;
|
||||||
|
|
||||||
@@ -29,9 +27,7 @@ public enum YogaExperimentalFeature {
|
|||||||
|
|
||||||
public static YogaExperimentalFeature fromInt(int value) {
|
public static YogaExperimentalFeature fromInt(int value) {
|
||||||
switch (value) {
|
switch (value) {
|
||||||
case 0: return ROUNDING;
|
case 0: return WEB_FLEX_BASIS;
|
||||||
case 1: return WEB_FLEX_BASIS;
|
|
||||||
case 2: return MIN_FLEX_FIX;
|
|
||||||
default: throw new IllegalArgumentException("Unknown enum value: " + value);
|
default: throw new IllegalArgumentException("Unknown enum value: " + value);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -17,7 +17,8 @@ public enum YogaLogLevel {
|
|||||||
WARN(1),
|
WARN(1),
|
||||||
INFO(2),
|
INFO(2),
|
||||||
DEBUG(3),
|
DEBUG(3),
|
||||||
VERBOSE(4);
|
VERBOSE(4),
|
||||||
|
FATAL(5);
|
||||||
|
|
||||||
private int mIntValue;
|
private int mIntValue;
|
||||||
|
|
||||||
@@ -36,6 +37,7 @@ public enum YogaLogLevel {
|
|||||||
case 2: return INFO;
|
case 2: return INFO;
|
||||||
case 3: return DEBUG;
|
case 3: return DEBUG;
|
||||||
case 4: return VERBOSE;
|
case 4: return VERBOSE;
|
||||||
|
case 5: return FATAL;
|
||||||
default: throw new IllegalArgumentException("Unknown enum value: " + value);
|
default: throw new IllegalArgumentException("Unknown enum value: " + value);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -18,5 +18,5 @@ import com.facebook.proguard.annotations.DoNotStrip;
|
|||||||
@DoNotStrip
|
@DoNotStrip
|
||||||
public interface YogaLogger {
|
public interface YogaLogger {
|
||||||
@DoNotStrip
|
@DoNotStrip
|
||||||
void log(YogaLogLevel level, String message);
|
void log(YogaNode node, YogaLogLevel level, String message);
|
||||||
}
|
}
|
||||||
|
@@ -28,12 +28,6 @@ public class YogaNode {
|
|||||||
* Get native instance count. Useful for testing only.
|
* Get native instance count. Useful for testing only.
|
||||||
*/
|
*/
|
||||||
static native int jni_YGNodeGetInstanceCount();
|
static native int jni_YGNodeGetInstanceCount();
|
||||||
static native void jni_YGLog(int level, String message);
|
|
||||||
|
|
||||||
private static native void jni_YGSetLogger(Object logger);
|
|
||||||
public static void setLogger(YogaLogger logger) {
|
|
||||||
jni_YGSetLogger(logger);
|
|
||||||
}
|
|
||||||
|
|
||||||
private YogaNode mParent;
|
private YogaNode mParent;
|
||||||
private List<YogaNode> mChildren;
|
private List<YogaNode> mChildren;
|
||||||
@@ -667,4 +661,14 @@ public class YogaNode {
|
|||||||
public Object getData() {
|
public Object getData() {
|
||||||
return mData;
|
return mData;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private native void jni_YGNodePrint(long nativePointer);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Use the set logger (defaults to adb log) to print out the styles, children, and computed
|
||||||
|
* layout of the tree rooted at this node.
|
||||||
|
*/
|
||||||
|
public void print() {
|
||||||
|
jni_YGNodePrint(mNativePointer);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
5
java/gradle.properties
Normal file
5
java/gradle.properties
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
GROUP=com.facebook.yoga
|
||||||
|
POM_NAME=Yoga
|
||||||
|
POM_DESCRIPTION=Java bindings to libyoga
|
||||||
|
POM_ARTIFACT_ID=yoga
|
||||||
|
POM_PACKAGING=aar
|
@@ -14,8 +14,12 @@
|
|||||||
using namespace facebook::jni;
|
using namespace facebook::jni;
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
|
||||||
static inline weak_ref<jobject> *YGNodeJobject(YGNodeRef node) {
|
struct JYogaNode : public JavaClass<JYogaNode> {
|
||||||
return reinterpret_cast<weak_ref<jobject> *>(YGNodeGetContext(node));
|
static constexpr auto kJavaDescriptor = "Lcom/facebook/yoga/YogaNode;";
|
||||||
|
};
|
||||||
|
|
||||||
|
static inline weak_ref<JYogaNode> *YGNodeJobject(YGNodeRef node) {
|
||||||
|
return reinterpret_cast<weak_ref<JYogaNode> *>(YGNodeGetContext(node));
|
||||||
}
|
}
|
||||||
|
|
||||||
static void YGTransferLayoutDirection(YGNodeRef node, alias_ref<jobject> javaNode) {
|
static void YGTransferLayoutDirection(YGNodeRef node, alias_ref<jobject> javaNode) {
|
||||||
@@ -90,7 +94,7 @@ static void YGTransferLayoutOutputsRecursive(YGNodeRef root) {
|
|||||||
YGTransferLayoutOutputsRecursive(YGNodeGetChild(root, i));
|
YGTransferLayoutOutputsRecursive(YGNodeGetChild(root, i));
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
YGLog(YGLogLevelError, "Java YGNode was GCed during layout calculation\n");
|
YGLog(root, YGLogLevelError, "Java YGNode was GCed during layout calculation\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -99,7 +103,7 @@ static void YGPrint(YGNodeRef node) {
|
|||||||
if (auto obj = YGNodeJobject(node)->lockLocal()) {
|
if (auto obj = YGNodeJobject(node)->lockLocal()) {
|
||||||
cout << obj->toString() << endl;
|
cout << obj->toString() << endl;
|
||||||
} else {
|
} else {
|
||||||
YGLog(YGLogLevelError, "Java YGNode was GCed during layout calculation\n");
|
YGLog(node, YGLogLevelError, "Java YGNode was GCed during layout calculation\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -136,7 +140,7 @@ static YGSize YGJNIMeasureFunc(YGNodeRef node,
|
|||||||
|
|
||||||
return YGSize{*measuredWidth, *measuredHeight};
|
return YGSize{*measuredWidth, *measuredHeight};
|
||||||
} else {
|
} else {
|
||||||
YGLog(YGLogLevelError, "Java YGNode was GCed during layout calculation\n");
|
YGLog(node, YGLogLevelError, "Java YGNode was GCed during layout calculation\n");
|
||||||
return YGSize{
|
return YGSize{
|
||||||
widthMode == YGMeasureModeUndefined ? 0 : width,
|
widthMode == YGMeasureModeUndefined ? 0 : width,
|
||||||
heightMode == YGMeasureModeUndefined ? 0 : height,
|
heightMode == YGMeasureModeUndefined ? 0 : height,
|
||||||
@@ -148,20 +152,28 @@ struct JYogaLogLevel : public JavaClass<JYogaLogLevel> {
|
|||||||
static constexpr auto kJavaDescriptor = "Lcom/facebook/yoga/YogaLogLevel;";
|
static constexpr auto kJavaDescriptor = "Lcom/facebook/yoga/YogaLogLevel;";
|
||||||
};
|
};
|
||||||
|
|
||||||
static global_ref<jobject> *jLogger;
|
static int YGJNILogFunc(const YGConfigRef config,
|
||||||
static int YGLog(YGLogLevel level, const char *format, va_list args) {
|
const YGNodeRef node,
|
||||||
|
YGLogLevel level,
|
||||||
|
const char *format,
|
||||||
|
va_list args) {
|
||||||
char buffer[256];
|
char buffer[256];
|
||||||
int result = vsnprintf(buffer, sizeof(buffer), format, args);
|
int result = vsnprintf(buffer, sizeof(buffer), format, args);
|
||||||
|
|
||||||
static auto logFunc = findClassStatic("com/facebook/yoga/YogaLogger")
|
static auto logFunc =
|
||||||
->getMethod<void(local_ref<JYogaLogLevel>, jstring)>("log");
|
findClassStatic("com/facebook/yoga/YogaLogger")
|
||||||
|
->getMethod<void(local_ref<JYogaNode>, local_ref<JYogaLogLevel>, jstring)>("log");
|
||||||
|
|
||||||
static auto logLevelFromInt =
|
static auto logLevelFromInt =
|
||||||
JYogaLogLevel::javaClassStatic()->getStaticMethod<JYogaLogLevel::javaobject(jint)>("fromInt");
|
JYogaLogLevel::javaClassStatic()->getStaticMethod<JYogaLogLevel::javaobject(jint)>("fromInt");
|
||||||
|
|
||||||
logFunc(jLogger->get(),
|
if (auto obj = YGNodeJobject(node)->lockLocal()) {
|
||||||
|
auto jlogger = reinterpret_cast<global_ref<jobject> *>(YGConfigGetContext(config));
|
||||||
|
logFunc(jlogger->get(),
|
||||||
|
obj,
|
||||||
logLevelFromInt(JYogaLogLevel::javaClassStatic(), static_cast<jint>(level)),
|
logLevelFromInt(JYogaLogLevel::javaClassStatic(), static_cast<jint>(level)),
|
||||||
Environment::current()->NewStringUTF(buffer));
|
Environment::current()->NewStringUTF(buffer));
|
||||||
|
}
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
@@ -174,27 +186,6 @@ static inline YGConfigRef _jlong2YGConfigRef(jlong addr) {
|
|||||||
return reinterpret_cast<YGConfigRef>(static_cast<intptr_t>(addr));
|
return reinterpret_cast<YGConfigRef>(static_cast<intptr_t>(addr));
|
||||||
}
|
}
|
||||||
|
|
||||||
void jni_YGSetLogger(alias_ref<jclass> clazz, alias_ref<jobject> logger) {
|
|
||||||
if (jLogger) {
|
|
||||||
jLogger->releaseAlias();
|
|
||||||
delete jLogger;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (logger) {
|
|
||||||
jLogger = new global_ref<jobject>(make_global(logger));
|
|
||||||
YGSetLogger(YGLog);
|
|
||||||
} else {
|
|
||||||
jLogger = NULL;
|
|
||||||
YGSetLogger(NULL);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void jni_YGLog(alias_ref<jclass> clazz, jint level, jstring message) {
|
|
||||||
const char *nMessage = Environment::current()->GetStringUTFChars(message, 0);
|
|
||||||
YGLog(static_cast<YGLogLevel>(level), "%s", nMessage);
|
|
||||||
Environment::current()->ReleaseStringUTFChars(message, nMessage);
|
|
||||||
}
|
|
||||||
|
|
||||||
jlong jni_YGNodeNew(alias_ref<jobject> thiz) {
|
jlong jni_YGNodeNew(alias_ref<jobject> thiz) {
|
||||||
const YGNodeRef node = YGNodeNew();
|
const YGNodeRef node = YGNodeNew();
|
||||||
YGNodeSetContext(node, new weak_ref<jobject>(make_weak(thiz)));
|
YGNodeSetContext(node, new weak_ref<jobject>(make_weak(thiz)));
|
||||||
@@ -223,6 +214,13 @@ void jni_YGNodeReset(alias_ref<jobject> thiz, jlong nativePointer) {
|
|||||||
YGNodeSetPrintFunc(node, YGPrint);
|
YGNodeSetPrintFunc(node, YGPrint);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void jni_YGNodePrint(alias_ref<jobject> thiz, jlong nativePointer) {
|
||||||
|
const YGNodeRef node = _jlong2YGNodeRef(nativePointer);
|
||||||
|
YGNodePrint(node,
|
||||||
|
(YGPrintOptions)(YGPrintOptionsStyle | YGPrintOptionsLayout |
|
||||||
|
YGPrintOptionsChildren));
|
||||||
|
}
|
||||||
|
|
||||||
void jni_YGNodeInsertChild(alias_ref<jobject>, jlong nativePointer, jlong childPointer, jint index) {
|
void jni_YGNodeInsertChild(alias_ref<jobject>, jlong nativePointer, jlong childPointer, jint index) {
|
||||||
YGNodeInsertChild(_jlong2YGNodeRef(nativePointer), _jlong2YGNodeRef(childPointer), index);
|
YGNodeInsertChild(_jlong2YGNodeRef(nativePointer), _jlong2YGNodeRef(childPointer), index);
|
||||||
}
|
}
|
||||||
@@ -388,16 +386,56 @@ void jni_YGConfigFree(alias_ref<jobject>, jlong nativePointer) {
|
|||||||
YGConfigFree(config);
|
YGConfigFree(config);
|
||||||
}
|
}
|
||||||
|
|
||||||
void jni_YGConfigSetExperimentalFeatureEnabled(alias_ref<jobject>, jlong nativePointer, jint feature, jboolean enabled) {
|
void jni_YGConfigSetExperimentalFeatureEnabled(alias_ref<jobject>,
|
||||||
|
jlong nativePointer,
|
||||||
|
jint feature,
|
||||||
|
jboolean enabled) {
|
||||||
const YGConfigRef config = _jlong2YGConfigRef(nativePointer);
|
const YGConfigRef config = _jlong2YGConfigRef(nativePointer);
|
||||||
YGConfigSetExperimentalFeatureEnabled(config, static_cast<YGExperimentalFeature>(feature), enabled);
|
YGConfigSetExperimentalFeatureEnabled(config,
|
||||||
|
static_cast<YGExperimentalFeature>(feature),
|
||||||
|
enabled);
|
||||||
}
|
}
|
||||||
|
|
||||||
void jni_YGConfigSetUseWebDefaults(alias_ref<jobject>, jlong nativePointer, jboolean useWebDefaults) {
|
void jni_YGConfigSetUseWebDefaults(alias_ref<jobject>,
|
||||||
|
jlong nativePointer,
|
||||||
|
jboolean useWebDefaults) {
|
||||||
const YGConfigRef config = _jlong2YGConfigRef(nativePointer);
|
const YGConfigRef config = _jlong2YGConfigRef(nativePointer);
|
||||||
YGConfigSetUseWebDefaults(config, useWebDefaults);
|
YGConfigSetUseWebDefaults(config, useWebDefaults);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void jni_YGConfigSetPointScaleFactor(alias_ref<jobject>,
|
||||||
|
jlong nativePointer,
|
||||||
|
jfloat pixelsInPoint) {
|
||||||
|
const YGConfigRef config = _jlong2YGConfigRef(nativePointer);
|
||||||
|
YGConfigSetPointScaleFactor(config, pixelsInPoint);
|
||||||
|
}
|
||||||
|
|
||||||
|
void jni_YGConfigSetUseLegacyStretchBehaviour(alias_ref<jobject>,
|
||||||
|
jlong nativePointer,
|
||||||
|
jboolean useLegacyStretchBehaviour) {
|
||||||
|
const YGConfigRef config = _jlong2YGConfigRef(nativePointer);
|
||||||
|
YGConfigSetUseLegacyStretchBehaviour(config, useLegacyStretchBehaviour);
|
||||||
|
}
|
||||||
|
|
||||||
|
void jni_YGConfigSetLogger(alias_ref<jobject>, jlong nativePointer, alias_ref<jobject> logger) {
|
||||||
|
const YGConfigRef config = _jlong2YGConfigRef(nativePointer);
|
||||||
|
|
||||||
|
auto context = YGConfigGetContext(config);
|
||||||
|
if (context) {
|
||||||
|
auto jlogger = reinterpret_cast<global_ref<jobject> *>(context);
|
||||||
|
jlogger->releaseAlias();
|
||||||
|
delete jlogger;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (logger) {
|
||||||
|
YGConfigSetContext(config, new global_ref<jobject>(make_global(logger)));
|
||||||
|
YGConfigSetLogger(config, YGJNILogFunc);
|
||||||
|
} else {
|
||||||
|
YGConfigSetContext(config, NULL);
|
||||||
|
YGConfigSetLogger(config, NULL);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
jint jni_YGNodeGetInstanceCount(alias_ref<jclass> clazz) {
|
jint jni_YGNodeGetInstanceCount(alias_ref<jclass> clazz) {
|
||||||
return YGNodeGetInstanceCount();
|
return YGNodeGetInstanceCount();
|
||||||
}
|
}
|
||||||
@@ -483,8 +521,7 @@ jint JNI_OnLoad(JavaVM *vm, void *) {
|
|||||||
YGMakeNativeMethod(jni_YGNodeStyleGetAspectRatio),
|
YGMakeNativeMethod(jni_YGNodeStyleGetAspectRatio),
|
||||||
YGMakeNativeMethod(jni_YGNodeStyleSetAspectRatio),
|
YGMakeNativeMethod(jni_YGNodeStyleSetAspectRatio),
|
||||||
YGMakeNativeMethod(jni_YGNodeGetInstanceCount),
|
YGMakeNativeMethod(jni_YGNodeGetInstanceCount),
|
||||||
YGMakeNativeMethod(jni_YGSetLogger),
|
YGMakeNativeMethod(jni_YGNodePrint),
|
||||||
YGMakeNativeMethod(jni_YGLog),
|
|
||||||
});
|
});
|
||||||
registerNatives("com/facebook/yoga/YogaConfig",
|
registerNatives("com/facebook/yoga/YogaConfig",
|
||||||
{
|
{
|
||||||
@@ -492,6 +529,9 @@ jint JNI_OnLoad(JavaVM *vm, void *) {
|
|||||||
YGMakeNativeMethod(jni_YGConfigFree),
|
YGMakeNativeMethod(jni_YGConfigFree),
|
||||||
YGMakeNativeMethod(jni_YGConfigSetExperimentalFeatureEnabled),
|
YGMakeNativeMethod(jni_YGConfigSetExperimentalFeatureEnabled),
|
||||||
YGMakeNativeMethod(jni_YGConfigSetUseWebDefaults),
|
YGMakeNativeMethod(jni_YGConfigSetUseWebDefaults),
|
||||||
|
YGMakeNativeMethod(jni_YGConfigSetPointScaleFactor),
|
||||||
|
YGMakeNativeMethod(jni_YGConfigSetUseLegacyStretchBehaviour),
|
||||||
|
YGMakeNativeMethod(jni_YGConfigSetLogger),
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@@ -1791,4 +1791,145 @@ public class YGAlignItemsTest {
|
|||||||
assertEquals(72f, root_child0_child0.getLayoutHeight(), 0.0f);
|
assertEquals(72f, root_child0_child0.getLayoutHeight(), 0.0f);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void test_align_center_should_size_based_on_content() {
|
||||||
|
YogaConfig config = new YogaConfig();
|
||||||
|
|
||||||
|
final YogaNode root = new YogaNode(config);
|
||||||
|
root.setAlignItems(YogaAlign.CENTER);
|
||||||
|
root.setMargin(YogaEdge.TOP, 20f);
|
||||||
|
root.setWidth(100f);
|
||||||
|
root.setHeight(100f);
|
||||||
|
|
||||||
|
final YogaNode root_child0 = new YogaNode(config);
|
||||||
|
root_child0.setJustifyContent(YogaJustify.CENTER);
|
||||||
|
root_child0.setFlexShrink(1f);
|
||||||
|
root.addChildAt(root_child0, 0);
|
||||||
|
|
||||||
|
final YogaNode root_child0_child0 = new YogaNode(config);
|
||||||
|
root_child0_child0.setFlexGrow(1f);
|
||||||
|
root_child0_child0.setFlexShrink(1f);
|
||||||
|
root_child0.addChildAt(root_child0_child0, 0);
|
||||||
|
|
||||||
|
final YogaNode root_child0_child0_child0 = new YogaNode(config);
|
||||||
|
root_child0_child0_child0.setWidth(20f);
|
||||||
|
root_child0_child0_child0.setHeight(20f);
|
||||||
|
root_child0_child0.addChildAt(root_child0_child0_child0, 0);
|
||||||
|
root.setDirection(YogaDirection.LTR);
|
||||||
|
root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);
|
||||||
|
|
||||||
|
assertEquals(0f, root.getLayoutX(), 0.0f);
|
||||||
|
assertEquals(20f, root.getLayoutY(), 0.0f);
|
||||||
|
assertEquals(100f, root.getLayoutWidth(), 0.0f);
|
||||||
|
assertEquals(100f, root.getLayoutHeight(), 0.0f);
|
||||||
|
|
||||||
|
assertEquals(40f, root_child0.getLayoutX(), 0.0f);
|
||||||
|
assertEquals(0f, root_child0.getLayoutY(), 0.0f);
|
||||||
|
assertEquals(20f, root_child0.getLayoutWidth(), 0.0f);
|
||||||
|
assertEquals(20f, root_child0.getLayoutHeight(), 0.0f);
|
||||||
|
|
||||||
|
assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);
|
||||||
|
assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);
|
||||||
|
assertEquals(20f, root_child0_child0.getLayoutWidth(), 0.0f);
|
||||||
|
assertEquals(20f, root_child0_child0.getLayoutHeight(), 0.0f);
|
||||||
|
|
||||||
|
assertEquals(0f, root_child0_child0_child0.getLayoutX(), 0.0f);
|
||||||
|
assertEquals(0f, root_child0_child0_child0.getLayoutY(), 0.0f);
|
||||||
|
assertEquals(20f, root_child0_child0_child0.getLayoutWidth(), 0.0f);
|
||||||
|
assertEquals(20f, root_child0_child0_child0.getLayoutHeight(), 0.0f);
|
||||||
|
|
||||||
|
root.setDirection(YogaDirection.RTL);
|
||||||
|
root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);
|
||||||
|
|
||||||
|
assertEquals(0f, root.getLayoutX(), 0.0f);
|
||||||
|
assertEquals(20f, root.getLayoutY(), 0.0f);
|
||||||
|
assertEquals(100f, root.getLayoutWidth(), 0.0f);
|
||||||
|
assertEquals(100f, root.getLayoutHeight(), 0.0f);
|
||||||
|
|
||||||
|
assertEquals(40f, root_child0.getLayoutX(), 0.0f);
|
||||||
|
assertEquals(0f, root_child0.getLayoutY(), 0.0f);
|
||||||
|
assertEquals(20f, root_child0.getLayoutWidth(), 0.0f);
|
||||||
|
assertEquals(20f, root_child0.getLayoutHeight(), 0.0f);
|
||||||
|
|
||||||
|
assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);
|
||||||
|
assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);
|
||||||
|
assertEquals(20f, root_child0_child0.getLayoutWidth(), 0.0f);
|
||||||
|
assertEquals(20f, root_child0_child0.getLayoutHeight(), 0.0f);
|
||||||
|
|
||||||
|
assertEquals(0f, root_child0_child0_child0.getLayoutX(), 0.0f);
|
||||||
|
assertEquals(0f, root_child0_child0_child0.getLayoutY(), 0.0f);
|
||||||
|
assertEquals(20f, root_child0_child0_child0.getLayoutWidth(), 0.0f);
|
||||||
|
assertEquals(20f, root_child0_child0_child0.getLayoutHeight(), 0.0f);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void test_align_strech_should_size_based_on_parent() {
|
||||||
|
YogaConfig config = new YogaConfig();
|
||||||
|
|
||||||
|
final YogaNode root = new YogaNode(config);
|
||||||
|
root.setMargin(YogaEdge.TOP, 20f);
|
||||||
|
root.setWidth(100f);
|
||||||
|
root.setHeight(100f);
|
||||||
|
|
||||||
|
final YogaNode root_child0 = new YogaNode(config);
|
||||||
|
root_child0.setJustifyContent(YogaJustify.CENTER);
|
||||||
|
root_child0.setFlexShrink(1f);
|
||||||
|
root.addChildAt(root_child0, 0);
|
||||||
|
|
||||||
|
final YogaNode root_child0_child0 = new YogaNode(config);
|
||||||
|
root_child0_child0.setFlexGrow(1f);
|
||||||
|
root_child0_child0.setFlexShrink(1f);
|
||||||
|
root_child0.addChildAt(root_child0_child0, 0);
|
||||||
|
|
||||||
|
final YogaNode root_child0_child0_child0 = new YogaNode(config);
|
||||||
|
root_child0_child0_child0.setWidth(20f);
|
||||||
|
root_child0_child0_child0.setHeight(20f);
|
||||||
|
root_child0_child0.addChildAt(root_child0_child0_child0, 0);
|
||||||
|
root.setDirection(YogaDirection.LTR);
|
||||||
|
root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);
|
||||||
|
|
||||||
|
assertEquals(0f, root.getLayoutX(), 0.0f);
|
||||||
|
assertEquals(20f, root.getLayoutY(), 0.0f);
|
||||||
|
assertEquals(100f, root.getLayoutWidth(), 0.0f);
|
||||||
|
assertEquals(100f, root.getLayoutHeight(), 0.0f);
|
||||||
|
|
||||||
|
assertEquals(0f, root_child0.getLayoutX(), 0.0f);
|
||||||
|
assertEquals(0f, root_child0.getLayoutY(), 0.0f);
|
||||||
|
assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);
|
||||||
|
assertEquals(20f, root_child0.getLayoutHeight(), 0.0f);
|
||||||
|
|
||||||
|
assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);
|
||||||
|
assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);
|
||||||
|
assertEquals(100f, root_child0_child0.getLayoutWidth(), 0.0f);
|
||||||
|
assertEquals(20f, root_child0_child0.getLayoutHeight(), 0.0f);
|
||||||
|
|
||||||
|
assertEquals(0f, root_child0_child0_child0.getLayoutX(), 0.0f);
|
||||||
|
assertEquals(0f, root_child0_child0_child0.getLayoutY(), 0.0f);
|
||||||
|
assertEquals(20f, root_child0_child0_child0.getLayoutWidth(), 0.0f);
|
||||||
|
assertEquals(20f, root_child0_child0_child0.getLayoutHeight(), 0.0f);
|
||||||
|
|
||||||
|
root.setDirection(YogaDirection.RTL);
|
||||||
|
root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);
|
||||||
|
|
||||||
|
assertEquals(0f, root.getLayoutX(), 0.0f);
|
||||||
|
assertEquals(20f, root.getLayoutY(), 0.0f);
|
||||||
|
assertEquals(100f, root.getLayoutWidth(), 0.0f);
|
||||||
|
assertEquals(100f, root.getLayoutHeight(), 0.0f);
|
||||||
|
|
||||||
|
assertEquals(0f, root_child0.getLayoutX(), 0.0f);
|
||||||
|
assertEquals(0f, root_child0.getLayoutY(), 0.0f);
|
||||||
|
assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);
|
||||||
|
assertEquals(20f, root_child0.getLayoutHeight(), 0.0f);
|
||||||
|
|
||||||
|
assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);
|
||||||
|
assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);
|
||||||
|
assertEquals(100f, root_child0_child0.getLayoutWidth(), 0.0f);
|
||||||
|
assertEquals(20f, root_child0_child0.getLayoutHeight(), 0.0f);
|
||||||
|
|
||||||
|
assertEquals(80f, root_child0_child0_child0.getLayoutX(), 0.0f);
|
||||||
|
assertEquals(0f, root_child0_child0_child0.getLayoutY(), 0.0f);
|
||||||
|
assertEquals(20f, root_child0_child0_child0.getLayoutWidth(), 0.0f);
|
||||||
|
assertEquals(20f, root_child0_child0_child0.getLayoutHeight(), 0.0f);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@@ -1364,4 +1364,166 @@ public class YGFlexWrapTest {
|
|||||||
assertEquals(80f, root_child0_child1.getLayoutHeight(), 0.0f);
|
assertEquals(80f, root_child0_child1.getLayoutHeight(), 0.0f);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void test_wrapped_column_max_height() {
|
||||||
|
YogaConfig config = new YogaConfig();
|
||||||
|
|
||||||
|
final YogaNode root = new YogaNode(config);
|
||||||
|
root.setJustifyContent(YogaJustify.CENTER);
|
||||||
|
root.setAlignContent(YogaAlign.CENTER);
|
||||||
|
root.setAlignItems(YogaAlign.CENTER);
|
||||||
|
root.setWrap(YogaWrap.WRAP);
|
||||||
|
root.setWidth(700f);
|
||||||
|
root.setHeight(500f);
|
||||||
|
|
||||||
|
final YogaNode root_child0 = new YogaNode(config);
|
||||||
|
root_child0.setWidth(100f);
|
||||||
|
root_child0.setHeight(500f);
|
||||||
|
root_child0.setMaxHeight(200f);
|
||||||
|
root.addChildAt(root_child0, 0);
|
||||||
|
|
||||||
|
final YogaNode root_child1 = new YogaNode(config);
|
||||||
|
root_child1.setMargin(YogaEdge.LEFT, 20f);
|
||||||
|
root_child1.setMargin(YogaEdge.TOP, 20f);
|
||||||
|
root_child1.setMargin(YogaEdge.RIGHT, 20f);
|
||||||
|
root_child1.setMargin(YogaEdge.BOTTOM, 20f);
|
||||||
|
root_child1.setWidth(200f);
|
||||||
|
root_child1.setHeight(200f);
|
||||||
|
root.addChildAt(root_child1, 1);
|
||||||
|
|
||||||
|
final YogaNode root_child2 = new YogaNode(config);
|
||||||
|
root_child2.setWidth(100f);
|
||||||
|
root_child2.setHeight(100f);
|
||||||
|
root.addChildAt(root_child2, 2);
|
||||||
|
root.setDirection(YogaDirection.LTR);
|
||||||
|
root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);
|
||||||
|
|
||||||
|
assertEquals(0f, root.getLayoutX(), 0.0f);
|
||||||
|
assertEquals(0f, root.getLayoutY(), 0.0f);
|
||||||
|
assertEquals(700f, root.getLayoutWidth(), 0.0f);
|
||||||
|
assertEquals(500f, root.getLayoutHeight(), 0.0f);
|
||||||
|
|
||||||
|
assertEquals(250f, root_child0.getLayoutX(), 0.0f);
|
||||||
|
assertEquals(30f, root_child0.getLayoutY(), 0.0f);
|
||||||
|
assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);
|
||||||
|
assertEquals(200f, root_child0.getLayoutHeight(), 0.0f);
|
||||||
|
|
||||||
|
assertEquals(200f, root_child1.getLayoutX(), 0.0f);
|
||||||
|
assertEquals(250f, root_child1.getLayoutY(), 0.0f);
|
||||||
|
assertEquals(200f, root_child1.getLayoutWidth(), 0.0f);
|
||||||
|
assertEquals(200f, root_child1.getLayoutHeight(), 0.0f);
|
||||||
|
|
||||||
|
assertEquals(420f, root_child2.getLayoutX(), 0.0f);
|
||||||
|
assertEquals(200f, root_child2.getLayoutY(), 0.0f);
|
||||||
|
assertEquals(100f, root_child2.getLayoutWidth(), 0.0f);
|
||||||
|
assertEquals(100f, root_child2.getLayoutHeight(), 0.0f);
|
||||||
|
|
||||||
|
root.setDirection(YogaDirection.RTL);
|
||||||
|
root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);
|
||||||
|
|
||||||
|
assertEquals(0f, root.getLayoutX(), 0.0f);
|
||||||
|
assertEquals(0f, root.getLayoutY(), 0.0f);
|
||||||
|
assertEquals(700f, root.getLayoutWidth(), 0.0f);
|
||||||
|
assertEquals(500f, root.getLayoutHeight(), 0.0f);
|
||||||
|
|
||||||
|
assertEquals(350f, root_child0.getLayoutX(), 0.0f);
|
||||||
|
assertEquals(30f, root_child0.getLayoutY(), 0.0f);
|
||||||
|
assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);
|
||||||
|
assertEquals(200f, root_child0.getLayoutHeight(), 0.0f);
|
||||||
|
|
||||||
|
assertEquals(300f, root_child1.getLayoutX(), 0.0f);
|
||||||
|
assertEquals(250f, root_child1.getLayoutY(), 0.0f);
|
||||||
|
assertEquals(200f, root_child1.getLayoutWidth(), 0.0f);
|
||||||
|
assertEquals(200f, root_child1.getLayoutHeight(), 0.0f);
|
||||||
|
|
||||||
|
assertEquals(180f, root_child2.getLayoutX(), 0.0f);
|
||||||
|
assertEquals(200f, root_child2.getLayoutY(), 0.0f);
|
||||||
|
assertEquals(100f, root_child2.getLayoutWidth(), 0.0f);
|
||||||
|
assertEquals(100f, root_child2.getLayoutHeight(), 0.0f);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void test_wrapped_column_max_height_flex() {
|
||||||
|
YogaConfig config = new YogaConfig();
|
||||||
|
|
||||||
|
final YogaNode root = new YogaNode(config);
|
||||||
|
root.setJustifyContent(YogaJustify.CENTER);
|
||||||
|
root.setAlignContent(YogaAlign.CENTER);
|
||||||
|
root.setAlignItems(YogaAlign.CENTER);
|
||||||
|
root.setWrap(YogaWrap.WRAP);
|
||||||
|
root.setWidth(700f);
|
||||||
|
root.setHeight(500f);
|
||||||
|
|
||||||
|
final YogaNode root_child0 = new YogaNode(config);
|
||||||
|
root_child0.setFlexGrow(1f);
|
||||||
|
root_child0.setFlexShrink(1f);
|
||||||
|
root_child0.setFlexBasisPercent(0f);
|
||||||
|
root_child0.setWidth(100f);
|
||||||
|
root_child0.setHeight(500f);
|
||||||
|
root_child0.setMaxHeight(200f);
|
||||||
|
root.addChildAt(root_child0, 0);
|
||||||
|
|
||||||
|
final YogaNode root_child1 = new YogaNode(config);
|
||||||
|
root_child1.setFlexGrow(1f);
|
||||||
|
root_child1.setFlexShrink(1f);
|
||||||
|
root_child1.setFlexBasisPercent(0f);
|
||||||
|
root_child1.setMargin(YogaEdge.LEFT, 20f);
|
||||||
|
root_child1.setMargin(YogaEdge.TOP, 20f);
|
||||||
|
root_child1.setMargin(YogaEdge.RIGHT, 20f);
|
||||||
|
root_child1.setMargin(YogaEdge.BOTTOM, 20f);
|
||||||
|
root_child1.setWidth(200f);
|
||||||
|
root_child1.setHeight(200f);
|
||||||
|
root.addChildAt(root_child1, 1);
|
||||||
|
|
||||||
|
final YogaNode root_child2 = new YogaNode(config);
|
||||||
|
root_child2.setWidth(100f);
|
||||||
|
root_child2.setHeight(100f);
|
||||||
|
root.addChildAt(root_child2, 2);
|
||||||
|
root.setDirection(YogaDirection.LTR);
|
||||||
|
root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);
|
||||||
|
|
||||||
|
assertEquals(0f, root.getLayoutX(), 0.0f);
|
||||||
|
assertEquals(0f, root.getLayoutY(), 0.0f);
|
||||||
|
assertEquals(700f, root.getLayoutWidth(), 0.0f);
|
||||||
|
assertEquals(500f, root.getLayoutHeight(), 0.0f);
|
||||||
|
|
||||||
|
assertEquals(300f, root_child0.getLayoutX(), 0.0f);
|
||||||
|
assertEquals(0f, root_child0.getLayoutY(), 0.0f);
|
||||||
|
assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);
|
||||||
|
assertEquals(180f, root_child0.getLayoutHeight(), 0.0f);
|
||||||
|
|
||||||
|
assertEquals(250f, root_child1.getLayoutX(), 0.0f);
|
||||||
|
assertEquals(200f, root_child1.getLayoutY(), 0.0f);
|
||||||
|
assertEquals(200f, root_child1.getLayoutWidth(), 0.0f);
|
||||||
|
assertEquals(180f, root_child1.getLayoutHeight(), 0.0f);
|
||||||
|
|
||||||
|
assertEquals(300f, root_child2.getLayoutX(), 0.0f);
|
||||||
|
assertEquals(400f, root_child2.getLayoutY(), 0.0f);
|
||||||
|
assertEquals(100f, root_child2.getLayoutWidth(), 0.0f);
|
||||||
|
assertEquals(100f, root_child2.getLayoutHeight(), 0.0f);
|
||||||
|
|
||||||
|
root.setDirection(YogaDirection.RTL);
|
||||||
|
root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);
|
||||||
|
|
||||||
|
assertEquals(0f, root.getLayoutX(), 0.0f);
|
||||||
|
assertEquals(0f, root.getLayoutY(), 0.0f);
|
||||||
|
assertEquals(700f, root.getLayoutWidth(), 0.0f);
|
||||||
|
assertEquals(500f, root.getLayoutHeight(), 0.0f);
|
||||||
|
|
||||||
|
assertEquals(300f, root_child0.getLayoutX(), 0.0f);
|
||||||
|
assertEquals(0f, root_child0.getLayoutY(), 0.0f);
|
||||||
|
assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);
|
||||||
|
assertEquals(180f, root_child0.getLayoutHeight(), 0.0f);
|
||||||
|
|
||||||
|
assertEquals(250f, root_child1.getLayoutX(), 0.0f);
|
||||||
|
assertEquals(200f, root_child1.getLayoutY(), 0.0f);
|
||||||
|
assertEquals(200f, root_child1.getLayoutWidth(), 0.0f);
|
||||||
|
assertEquals(180f, root_child1.getLayoutHeight(), 0.0f);
|
||||||
|
|
||||||
|
assertEquals(300f, root_child2.getLayoutX(), 0.0f);
|
||||||
|
assertEquals(400f, root_child2.getLayoutY(), 0.0f);
|
||||||
|
assertEquals(100f, root_child2.getLayoutWidth(), 0.0f);
|
||||||
|
assertEquals(100f, root_child2.getLayoutHeight(), 0.0f);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@@ -357,7 +357,6 @@ public class YGMinMaxDimensionTest {
|
|||||||
@Test
|
@Test
|
||||||
public void test_flex_grow_to_min() {
|
public void test_flex_grow_to_min() {
|
||||||
YogaConfig config = new YogaConfig();
|
YogaConfig config = new YogaConfig();
|
||||||
config.setExperimentalFeatureEnabled(YogaExperimentalFeature.MIN_FLEX_FIX, true);
|
|
||||||
|
|
||||||
final YogaNode root = new YogaNode(config);
|
final YogaNode root = new YogaNode(config);
|
||||||
root.setWidth(100f);
|
root.setWidth(100f);
|
||||||
@@ -412,7 +411,6 @@ public class YGMinMaxDimensionTest {
|
|||||||
@Test
|
@Test
|
||||||
public void test_flex_grow_in_at_most_container() {
|
public void test_flex_grow_in_at_most_container() {
|
||||||
YogaConfig config = new YogaConfig();
|
YogaConfig config = new YogaConfig();
|
||||||
config.setExperimentalFeatureEnabled(YogaExperimentalFeature.MIN_FLEX_FIX, true);
|
|
||||||
|
|
||||||
final YogaNode root = new YogaNode(config);
|
final YogaNode root = new YogaNode(config);
|
||||||
root.setFlexDirection(YogaFlexDirection.ROW);
|
root.setFlexDirection(YogaFlexDirection.ROW);
|
||||||
|
@@ -19,7 +19,6 @@ public class YGPercentageTest {
|
|||||||
@Test
|
@Test
|
||||||
public void test_percentage_width_height() {
|
public void test_percentage_width_height() {
|
||||||
YogaConfig config = new YogaConfig();
|
YogaConfig config = new YogaConfig();
|
||||||
config.setExperimentalFeatureEnabled(YogaExperimentalFeature.ROUNDING, true);
|
|
||||||
|
|
||||||
final YogaNode root = new YogaNode(config);
|
final YogaNode root = new YogaNode(config);
|
||||||
root.setFlexDirection(YogaFlexDirection.ROW);
|
root.setFlexDirection(YogaFlexDirection.ROW);
|
||||||
@@ -60,7 +59,6 @@ public class YGPercentageTest {
|
|||||||
@Test
|
@Test
|
||||||
public void test_percentage_position_left_top() {
|
public void test_percentage_position_left_top() {
|
||||||
YogaConfig config = new YogaConfig();
|
YogaConfig config = new YogaConfig();
|
||||||
config.setExperimentalFeatureEnabled(YogaExperimentalFeature.ROUNDING, true);
|
|
||||||
|
|
||||||
final YogaNode root = new YogaNode(config);
|
final YogaNode root = new YogaNode(config);
|
||||||
root.setFlexDirection(YogaFlexDirection.ROW);
|
root.setFlexDirection(YogaFlexDirection.ROW);
|
||||||
@@ -103,7 +101,6 @@ public class YGPercentageTest {
|
|||||||
@Test
|
@Test
|
||||||
public void test_percentage_position_bottom_right() {
|
public void test_percentage_position_bottom_right() {
|
||||||
YogaConfig config = new YogaConfig();
|
YogaConfig config = new YogaConfig();
|
||||||
config.setExperimentalFeatureEnabled(YogaExperimentalFeature.ROUNDING, true);
|
|
||||||
|
|
||||||
final YogaNode root = new YogaNode(config);
|
final YogaNode root = new YogaNode(config);
|
||||||
root.setFlexDirection(YogaFlexDirection.ROW);
|
root.setFlexDirection(YogaFlexDirection.ROW);
|
||||||
@@ -146,7 +143,6 @@ public class YGPercentageTest {
|
|||||||
@Test
|
@Test
|
||||||
public void test_percentage_flex_basis() {
|
public void test_percentage_flex_basis() {
|
||||||
YogaConfig config = new YogaConfig();
|
YogaConfig config = new YogaConfig();
|
||||||
config.setExperimentalFeatureEnabled(YogaExperimentalFeature.ROUNDING, true);
|
|
||||||
|
|
||||||
final YogaNode root = new YogaNode(config);
|
final YogaNode root = new YogaNode(config);
|
||||||
root.setFlexDirection(YogaFlexDirection.ROW);
|
root.setFlexDirection(YogaFlexDirection.ROW);
|
||||||
@@ -202,7 +198,6 @@ public class YGPercentageTest {
|
|||||||
@Test
|
@Test
|
||||||
public void test_percentage_flex_basis_cross() {
|
public void test_percentage_flex_basis_cross() {
|
||||||
YogaConfig config = new YogaConfig();
|
YogaConfig config = new YogaConfig();
|
||||||
config.setExperimentalFeatureEnabled(YogaExperimentalFeature.ROUNDING, true);
|
|
||||||
|
|
||||||
final YogaNode root = new YogaNode(config);
|
final YogaNode root = new YogaNode(config);
|
||||||
root.setWidth(200f);
|
root.setWidth(200f);
|
||||||
@@ -257,7 +252,6 @@ public class YGPercentageTest {
|
|||||||
@Test
|
@Test
|
||||||
public void test_percentage_flex_basis_cross_min_height() {
|
public void test_percentage_flex_basis_cross_min_height() {
|
||||||
YogaConfig config = new YogaConfig();
|
YogaConfig config = new YogaConfig();
|
||||||
config.setExperimentalFeatureEnabled(YogaExperimentalFeature.ROUNDING, true);
|
|
||||||
|
|
||||||
final YogaNode root = new YogaNode(config);
|
final YogaNode root = new YogaNode(config);
|
||||||
root.setWidth(200f);
|
root.setWidth(200f);
|
||||||
@@ -312,7 +306,6 @@ public class YGPercentageTest {
|
|||||||
@Test
|
@Test
|
||||||
public void test_percentage_flex_basis_main_max_height() {
|
public void test_percentage_flex_basis_main_max_height() {
|
||||||
YogaConfig config = new YogaConfig();
|
YogaConfig config = new YogaConfig();
|
||||||
config.setExperimentalFeatureEnabled(YogaExperimentalFeature.ROUNDING, true);
|
|
||||||
|
|
||||||
final YogaNode root = new YogaNode(config);
|
final YogaNode root = new YogaNode(config);
|
||||||
root.setFlexDirection(YogaFlexDirection.ROW);
|
root.setFlexDirection(YogaFlexDirection.ROW);
|
||||||
@@ -370,7 +363,6 @@ public class YGPercentageTest {
|
|||||||
@Test
|
@Test
|
||||||
public void test_percentage_flex_basis_cross_max_height() {
|
public void test_percentage_flex_basis_cross_max_height() {
|
||||||
YogaConfig config = new YogaConfig();
|
YogaConfig config = new YogaConfig();
|
||||||
config.setExperimentalFeatureEnabled(YogaExperimentalFeature.ROUNDING, true);
|
|
||||||
|
|
||||||
final YogaNode root = new YogaNode(config);
|
final YogaNode root = new YogaNode(config);
|
||||||
root.setWidth(200f);
|
root.setWidth(200f);
|
||||||
@@ -427,7 +419,6 @@ public class YGPercentageTest {
|
|||||||
@Test
|
@Test
|
||||||
public void test_percentage_flex_basis_main_max_width() {
|
public void test_percentage_flex_basis_main_max_width() {
|
||||||
YogaConfig config = new YogaConfig();
|
YogaConfig config = new YogaConfig();
|
||||||
config.setExperimentalFeatureEnabled(YogaExperimentalFeature.ROUNDING, true);
|
|
||||||
|
|
||||||
final YogaNode root = new YogaNode(config);
|
final YogaNode root = new YogaNode(config);
|
||||||
root.setFlexDirection(YogaFlexDirection.ROW);
|
root.setFlexDirection(YogaFlexDirection.ROW);
|
||||||
@@ -485,7 +476,6 @@ public class YGPercentageTest {
|
|||||||
@Test
|
@Test
|
||||||
public void test_percentage_flex_basis_cross_max_width() {
|
public void test_percentage_flex_basis_cross_max_width() {
|
||||||
YogaConfig config = new YogaConfig();
|
YogaConfig config = new YogaConfig();
|
||||||
config.setExperimentalFeatureEnabled(YogaExperimentalFeature.ROUNDING, true);
|
|
||||||
|
|
||||||
final YogaNode root = new YogaNode(config);
|
final YogaNode root = new YogaNode(config);
|
||||||
root.setWidth(200f);
|
root.setWidth(200f);
|
||||||
@@ -542,7 +532,6 @@ public class YGPercentageTest {
|
|||||||
@Test
|
@Test
|
||||||
public void test_percentage_flex_basis_main_min_width() {
|
public void test_percentage_flex_basis_main_min_width() {
|
||||||
YogaConfig config = new YogaConfig();
|
YogaConfig config = new YogaConfig();
|
||||||
config.setExperimentalFeatureEnabled(YogaExperimentalFeature.ROUNDING, true);
|
|
||||||
|
|
||||||
final YogaNode root = new YogaNode(config);
|
final YogaNode root = new YogaNode(config);
|
||||||
root.setFlexDirection(YogaFlexDirection.ROW);
|
root.setFlexDirection(YogaFlexDirection.ROW);
|
||||||
@@ -600,7 +589,6 @@ public class YGPercentageTest {
|
|||||||
@Test
|
@Test
|
||||||
public void test_percentage_flex_basis_cross_min_width() {
|
public void test_percentage_flex_basis_cross_min_width() {
|
||||||
YogaConfig config = new YogaConfig();
|
YogaConfig config = new YogaConfig();
|
||||||
config.setExperimentalFeatureEnabled(YogaExperimentalFeature.ROUNDING, true);
|
|
||||||
|
|
||||||
final YogaNode root = new YogaNode(config);
|
final YogaNode root = new YogaNode(config);
|
||||||
root.setWidth(200f);
|
root.setWidth(200f);
|
||||||
@@ -657,7 +645,6 @@ public class YGPercentageTest {
|
|||||||
@Test
|
@Test
|
||||||
public void test_percentage_multiple_nested_with_padding_margin_and_percentage_values() {
|
public void test_percentage_multiple_nested_with_padding_margin_and_percentage_values() {
|
||||||
YogaConfig config = new YogaConfig();
|
YogaConfig config = new YogaConfig();
|
||||||
config.setExperimentalFeatureEnabled(YogaExperimentalFeature.ROUNDING, true);
|
|
||||||
|
|
||||||
final YogaNode root = new YogaNode(config);
|
final YogaNode root = new YogaNode(config);
|
||||||
root.setWidth(200f);
|
root.setWidth(200f);
|
||||||
@@ -766,7 +753,6 @@ public class YGPercentageTest {
|
|||||||
@Test
|
@Test
|
||||||
public void test_percentage_margin_should_calculate_based_only_on_width() {
|
public void test_percentage_margin_should_calculate_based_only_on_width() {
|
||||||
YogaConfig config = new YogaConfig();
|
YogaConfig config = new YogaConfig();
|
||||||
config.setExperimentalFeatureEnabled(YogaExperimentalFeature.ROUNDING, true);
|
|
||||||
|
|
||||||
final YogaNode root = new YogaNode(config);
|
final YogaNode root = new YogaNode(config);
|
||||||
root.setWidth(200f);
|
root.setWidth(200f);
|
||||||
@@ -824,7 +810,6 @@ public class YGPercentageTest {
|
|||||||
@Test
|
@Test
|
||||||
public void test_percentage_padding_should_calculate_based_only_on_width() {
|
public void test_percentage_padding_should_calculate_based_only_on_width() {
|
||||||
YogaConfig config = new YogaConfig();
|
YogaConfig config = new YogaConfig();
|
||||||
config.setExperimentalFeatureEnabled(YogaExperimentalFeature.ROUNDING, true);
|
|
||||||
|
|
||||||
final YogaNode root = new YogaNode(config);
|
final YogaNode root = new YogaNode(config);
|
||||||
root.setWidth(200f);
|
root.setWidth(200f);
|
||||||
@@ -882,7 +867,6 @@ public class YGPercentageTest {
|
|||||||
@Test
|
@Test
|
||||||
public void test_percentage_absolute_position() {
|
public void test_percentage_absolute_position() {
|
||||||
YogaConfig config = new YogaConfig();
|
YogaConfig config = new YogaConfig();
|
||||||
config.setExperimentalFeatureEnabled(YogaExperimentalFeature.ROUNDING, true);
|
|
||||||
|
|
||||||
final YogaNode root = new YogaNode(config);
|
final YogaNode root = new YogaNode(config);
|
||||||
root.setWidth(200f);
|
root.setWidth(200f);
|
||||||
@@ -1043,7 +1027,6 @@ public class YGPercentageTest {
|
|||||||
@Test
|
@Test
|
||||||
public void test_percentage_container_in_wrapping_container() {
|
public void test_percentage_container_in_wrapping_container() {
|
||||||
YogaConfig config = new YogaConfig();
|
YogaConfig config = new YogaConfig();
|
||||||
config.setExperimentalFeatureEnabled(YogaExperimentalFeature.MIN_FLEX_FIX, true);
|
|
||||||
|
|
||||||
final YogaNode root = new YogaNode(config);
|
final YogaNode root = new YogaNode(config);
|
||||||
root.setJustifyContent(YogaJustify.CENTER);
|
root.setJustifyContent(YogaJustify.CENTER);
|
||||||
|
@@ -19,7 +19,6 @@ public class YGRoundingTest {
|
|||||||
@Test
|
@Test
|
||||||
public void test_rounding_flex_basis_flex_grow_row_width_of_100() {
|
public void test_rounding_flex_basis_flex_grow_row_width_of_100() {
|
||||||
YogaConfig config = new YogaConfig();
|
YogaConfig config = new YogaConfig();
|
||||||
config.setExperimentalFeatureEnabled(YogaExperimentalFeature.ROUNDING, true);
|
|
||||||
|
|
||||||
final YogaNode root = new YogaNode(config);
|
final YogaNode root = new YogaNode(config);
|
||||||
root.setFlexDirection(YogaFlexDirection.ROW);
|
root.setFlexDirection(YogaFlexDirection.ROW);
|
||||||
@@ -87,7 +86,6 @@ public class YGRoundingTest {
|
|||||||
@Test
|
@Test
|
||||||
public void test_rounding_flex_basis_flex_grow_row_prime_number_width() {
|
public void test_rounding_flex_basis_flex_grow_row_prime_number_width() {
|
||||||
YogaConfig config = new YogaConfig();
|
YogaConfig config = new YogaConfig();
|
||||||
config.setExperimentalFeatureEnabled(YogaExperimentalFeature.ROUNDING, true);
|
|
||||||
|
|
||||||
final YogaNode root = new YogaNode(config);
|
final YogaNode root = new YogaNode(config);
|
||||||
root.setFlexDirection(YogaFlexDirection.ROW);
|
root.setFlexDirection(YogaFlexDirection.ROW);
|
||||||
@@ -183,7 +181,6 @@ public class YGRoundingTest {
|
|||||||
@Test
|
@Test
|
||||||
public void test_rounding_flex_basis_flex_shrink_row() {
|
public void test_rounding_flex_basis_flex_shrink_row() {
|
||||||
YogaConfig config = new YogaConfig();
|
YogaConfig config = new YogaConfig();
|
||||||
config.setExperimentalFeatureEnabled(YogaExperimentalFeature.ROUNDING, true);
|
|
||||||
|
|
||||||
final YogaNode root = new YogaNode(config);
|
final YogaNode root = new YogaNode(config);
|
||||||
root.setFlexDirection(YogaFlexDirection.ROW);
|
root.setFlexDirection(YogaFlexDirection.ROW);
|
||||||
@@ -252,7 +249,6 @@ public class YGRoundingTest {
|
|||||||
@Test
|
@Test
|
||||||
public void test_rounding_flex_basis_overrides_main_size() {
|
public void test_rounding_flex_basis_overrides_main_size() {
|
||||||
YogaConfig config = new YogaConfig();
|
YogaConfig config = new YogaConfig();
|
||||||
config.setExperimentalFeatureEnabled(YogaExperimentalFeature.ROUNDING, true);
|
|
||||||
|
|
||||||
final YogaNode root = new YogaNode(config);
|
final YogaNode root = new YogaNode(config);
|
||||||
root.setWidth(100f);
|
root.setWidth(100f);
|
||||||
@@ -323,7 +319,6 @@ public class YGRoundingTest {
|
|||||||
@Test
|
@Test
|
||||||
public void test_rounding_total_fractial() {
|
public void test_rounding_total_fractial() {
|
||||||
YogaConfig config = new YogaConfig();
|
YogaConfig config = new YogaConfig();
|
||||||
config.setExperimentalFeatureEnabled(YogaExperimentalFeature.ROUNDING, true);
|
|
||||||
|
|
||||||
final YogaNode root = new YogaNode(config);
|
final YogaNode root = new YogaNode(config);
|
||||||
root.setWidth(87.4f);
|
root.setWidth(87.4f);
|
||||||
@@ -394,7 +389,6 @@ public class YGRoundingTest {
|
|||||||
@Test
|
@Test
|
||||||
public void test_rounding_total_fractial_nested() {
|
public void test_rounding_total_fractial_nested() {
|
||||||
YogaConfig config = new YogaConfig();
|
YogaConfig config = new YogaConfig();
|
||||||
config.setExperimentalFeatureEnabled(YogaExperimentalFeature.ROUNDING, true);
|
|
||||||
|
|
||||||
final YogaNode root = new YogaNode(config);
|
final YogaNode root = new YogaNode(config);
|
||||||
root.setWidth(87.4f);
|
root.setWidth(87.4f);
|
||||||
@@ -499,7 +493,6 @@ public class YGRoundingTest {
|
|||||||
@Test
|
@Test
|
||||||
public void test_rounding_fractial_input_1() {
|
public void test_rounding_fractial_input_1() {
|
||||||
YogaConfig config = new YogaConfig();
|
YogaConfig config = new YogaConfig();
|
||||||
config.setExperimentalFeatureEnabled(YogaExperimentalFeature.ROUNDING, true);
|
|
||||||
|
|
||||||
final YogaNode root = new YogaNode(config);
|
final YogaNode root = new YogaNode(config);
|
||||||
root.setWidth(100f);
|
root.setWidth(100f);
|
||||||
@@ -570,7 +563,6 @@ public class YGRoundingTest {
|
|||||||
@Test
|
@Test
|
||||||
public void test_rounding_fractial_input_2() {
|
public void test_rounding_fractial_input_2() {
|
||||||
YogaConfig config = new YogaConfig();
|
YogaConfig config = new YogaConfig();
|
||||||
config.setExperimentalFeatureEnabled(YogaExperimentalFeature.ROUNDING, true);
|
|
||||||
|
|
||||||
final YogaNode root = new YogaNode(config);
|
final YogaNode root = new YogaNode(config);
|
||||||
root.setWidth(100f);
|
root.setWidth(100f);
|
||||||
@@ -641,7 +633,6 @@ public class YGRoundingTest {
|
|||||||
@Test
|
@Test
|
||||||
public void test_rounding_fractial_input_3() {
|
public void test_rounding_fractial_input_3() {
|
||||||
YogaConfig config = new YogaConfig();
|
YogaConfig config = new YogaConfig();
|
||||||
config.setExperimentalFeatureEnabled(YogaExperimentalFeature.ROUNDING, true);
|
|
||||||
|
|
||||||
final YogaNode root = new YogaNode(config);
|
final YogaNode root = new YogaNode(config);
|
||||||
root.setPosition(YogaEdge.TOP, 0.3f);
|
root.setPosition(YogaEdge.TOP, 0.3f);
|
||||||
@@ -713,7 +704,6 @@ public class YGRoundingTest {
|
|||||||
@Test
|
@Test
|
||||||
public void test_rounding_fractial_input_4() {
|
public void test_rounding_fractial_input_4() {
|
||||||
YogaConfig config = new YogaConfig();
|
YogaConfig config = new YogaConfig();
|
||||||
config.setExperimentalFeatureEnabled(YogaExperimentalFeature.ROUNDING, true);
|
|
||||||
|
|
||||||
final YogaNode root = new YogaNode(config);
|
final YogaNode root = new YogaNode(config);
|
||||||
root.setPosition(YogaEdge.TOP, 0.7f);
|
root.setPosition(YogaEdge.TOP, 0.7f);
|
||||||
@@ -785,7 +775,6 @@ public class YGRoundingTest {
|
|||||||
@Test
|
@Test
|
||||||
public void test_rounding_inner_node_controversy_horizontal() {
|
public void test_rounding_inner_node_controversy_horizontal() {
|
||||||
YogaConfig config = new YogaConfig();
|
YogaConfig config = new YogaConfig();
|
||||||
config.setExperimentalFeatureEnabled(YogaExperimentalFeature.ROUNDING, true);
|
|
||||||
|
|
||||||
final YogaNode root = new YogaNode(config);
|
final YogaNode root = new YogaNode(config);
|
||||||
root.setFlexDirection(YogaFlexDirection.ROW);
|
root.setFlexDirection(YogaFlexDirection.ROW);
|
||||||
@@ -870,7 +859,6 @@ public class YGRoundingTest {
|
|||||||
@Test
|
@Test
|
||||||
public void test_rounding_inner_node_controversy_vertical() {
|
public void test_rounding_inner_node_controversy_vertical() {
|
||||||
YogaConfig config = new YogaConfig();
|
YogaConfig config = new YogaConfig();
|
||||||
config.setExperimentalFeatureEnabled(YogaExperimentalFeature.ROUNDING, true);
|
|
||||||
|
|
||||||
final YogaNode root = new YogaNode(config);
|
final YogaNode root = new YogaNode(config);
|
||||||
root.setHeight(320f);
|
root.setHeight(320f);
|
||||||
@@ -954,7 +942,6 @@ public class YGRoundingTest {
|
|||||||
@Test
|
@Test
|
||||||
public void test_rounding_inner_node_controversy_combined() {
|
public void test_rounding_inner_node_controversy_combined() {
|
||||||
YogaConfig config = new YogaConfig();
|
YogaConfig config = new YogaConfig();
|
||||||
config.setExperimentalFeatureEnabled(YogaExperimentalFeature.ROUNDING, true);
|
|
||||||
|
|
||||||
final YogaNode root = new YogaNode(config);
|
final YogaNode root = new YogaNode(config);
|
||||||
root.setFlexDirection(YogaFlexDirection.ROW);
|
root.setFlexDirection(YogaFlexDirection.ROW);
|
||||||
|
@@ -84,8 +84,8 @@ public class YogaNodeTest {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
node.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);
|
node.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);
|
||||||
assertEquals(100.5f, node.getLayoutWidth(), 0.0f);
|
assertEquals(101f, node.getLayoutWidth(), 0.01f);
|
||||||
assertEquals(100.5f, node.getLayoutHeight(), 0.0f);
|
assertEquals(101f, node.getLayoutHeight(), 0.01f);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -102,8 +102,8 @@ public class YogaNodeTest {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
node.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);
|
node.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);
|
||||||
assertEquals(Float.MIN_VALUE, node.getLayoutWidth(), 0.0f);
|
assertEquals(Float.MIN_VALUE, node.getLayoutWidth(), 0.01f);
|
||||||
assertEquals(Float.MIN_VALUE, node.getLayoutHeight(), 0.0f);
|
assertEquals(Float.MIN_VALUE, node.getLayoutHeight(), 0.01f);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -120,40 +120,8 @@ public class YogaNodeTest {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
node.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);
|
node.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);
|
||||||
assertEquals(Float.MAX_VALUE, node.getLayoutWidth(), 0.0f);
|
assertEquals(Float.MAX_VALUE, node.getLayoutWidth(), 0.01f);
|
||||||
assertEquals(Float.MAX_VALUE, node.getLayoutHeight(), 0.0f);
|
assertEquals(Float.MAX_VALUE, node.getLayoutHeight(), 0.01f);
|
||||||
}
|
|
||||||
|
|
||||||
private YogaLogLevel mLogLevel;
|
|
||||||
private String mLogMessage;
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void testLogger() {
|
|
||||||
YogaNode.setLogger(new YogaLogger() {
|
|
||||||
public void log(YogaLogLevel level, String message) {
|
|
||||||
mLogLevel = level;
|
|
||||||
mLogMessage = message;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
YogaNode.jni_YGLog(YogaLogLevel.DEBUG.intValue(), "Hello");
|
|
||||||
assertEquals(YogaLogLevel.DEBUG, mLogLevel);
|
|
||||||
assertEquals("Hello", mLogMessage);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void testUpdateLogger() {
|
|
||||||
YogaNode.setLogger(new YogaLogger() {
|
|
||||||
public void log(YogaLogLevel level, String message) {}
|
|
||||||
});
|
|
||||||
YogaNode.setLogger(new YogaLogger() {
|
|
||||||
public void log(YogaLogLevel level, String message) {
|
|
||||||
mLogLevel = level;
|
|
||||||
mLogMessage = message;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
YogaNode.jni_YGLog(YogaLogLevel.VERBOSE.intValue(), "Flexbox");
|
|
||||||
assertEquals(YogaLogLevel.VERBOSE, mLogLevel);
|
|
||||||
assertEquals("Flexbox", mLogMessage);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
@@ -43,10 +43,8 @@ module.exports = {
|
|||||||
EDGE_VERTICAL: 7,
|
EDGE_VERTICAL: 7,
|
||||||
EDGE_ALL: 8,
|
EDGE_ALL: 8,
|
||||||
|
|
||||||
EXPERIMENTAL_FEATURE_COUNT: 3,
|
EXPERIMENTAL_FEATURE_COUNT: 1,
|
||||||
EXPERIMENTAL_FEATURE_ROUNDING: 0,
|
EXPERIMENTAL_FEATURE_WEB_FLEX_BASIS: 0,
|
||||||
EXPERIMENTAL_FEATURE_WEB_FLEX_BASIS: 1,
|
|
||||||
EXPERIMENTAL_FEATURE_MIN_FLEX_FIX: 2,
|
|
||||||
|
|
||||||
FLEX_DIRECTION_COUNT: 4,
|
FLEX_DIRECTION_COUNT: 4,
|
||||||
FLEX_DIRECTION_COLUMN: 0,
|
FLEX_DIRECTION_COLUMN: 0,
|
||||||
@@ -61,12 +59,13 @@ module.exports = {
|
|||||||
JUSTIFY_SPACE_BETWEEN: 3,
|
JUSTIFY_SPACE_BETWEEN: 3,
|
||||||
JUSTIFY_SPACE_AROUND: 4,
|
JUSTIFY_SPACE_AROUND: 4,
|
||||||
|
|
||||||
LOG_LEVEL_COUNT: 5,
|
LOG_LEVEL_COUNT: 6,
|
||||||
LOG_LEVEL_ERROR: 0,
|
LOG_LEVEL_ERROR: 0,
|
||||||
LOG_LEVEL_WARN: 1,
|
LOG_LEVEL_WARN: 1,
|
||||||
LOG_LEVEL_INFO: 2,
|
LOG_LEVEL_INFO: 2,
|
||||||
LOG_LEVEL_DEBUG: 3,
|
LOG_LEVEL_DEBUG: 3,
|
||||||
LOG_LEVEL_VERBOSE: 4,
|
LOG_LEVEL_VERBOSE: 4,
|
||||||
|
LOG_LEVEL_FATAL: 5,
|
||||||
|
|
||||||
MEASURE_MODE_COUNT: 3,
|
MEASURE_MODE_COUNT: 3,
|
||||||
MEASURE_MODE_UNDEFINED: 0,
|
MEASURE_MODE_UNDEFINED: 0,
|
||||||
|
@@ -23,7 +23,7 @@ module.exports = function (bind, lib) {
|
|||||||
|
|
||||||
UNDEFINED: NaN
|
UNDEFINED: NaN
|
||||||
|
|
||||||
}, require(`./YGEnums`));
|
}, require('./YGEnums'));
|
||||||
|
|
||||||
class Layout {
|
class Layout {
|
||||||
|
|
||||||
|
@@ -1878,3 +1878,152 @@ it("align_items_flex_end_child_without_margin_bigger_than_parent", function () {
|
|||||||
config.free();
|
config.free();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
it("align_center_should_size_based_on_content", function () {
|
||||||
|
var config = Yoga.Config.create();
|
||||||
|
|
||||||
|
try {
|
||||||
|
var root = Yoga.Node.create(config);
|
||||||
|
root.setAlignItems(Yoga.ALIGN_CENTER);
|
||||||
|
root.setMargin(Yoga.EDGE_TOP, 20);
|
||||||
|
root.setWidth(100);
|
||||||
|
root.setHeight(100);
|
||||||
|
|
||||||
|
var root_child0 = Yoga.Node.create(config);
|
||||||
|
root_child0.setJustifyContent(Yoga.JUSTIFY_CENTER);
|
||||||
|
root_child0.setFlexShrink(1);
|
||||||
|
root.insertChild(root_child0, 0);
|
||||||
|
|
||||||
|
var root_child0_child0 = Yoga.Node.create(config);
|
||||||
|
root_child0_child0.setFlexGrow(1);
|
||||||
|
root_child0_child0.setFlexShrink(1);
|
||||||
|
root_child0.insertChild(root_child0_child0, 0);
|
||||||
|
|
||||||
|
var root_child0_child0_child0 = Yoga.Node.create(config);
|
||||||
|
root_child0_child0_child0.setWidth(20);
|
||||||
|
root_child0_child0_child0.setHeight(20);
|
||||||
|
root_child0_child0.insertChild(root_child0_child0_child0, 0);
|
||||||
|
root.calculateLayout(Yoga.UNDEFINED, Yoga.UNDEFINED, Yoga.DIRECTION_LTR);
|
||||||
|
|
||||||
|
console.assert(0 === root.getComputedLeft(), "0 === root.getComputedLeft() (" + root.getComputedLeft() + ")");
|
||||||
|
console.assert(20 === root.getComputedTop(), "20 === root.getComputedTop() (" + root.getComputedTop() + ")");
|
||||||
|
console.assert(100 === root.getComputedWidth(), "100 === root.getComputedWidth() (" + root.getComputedWidth() + ")");
|
||||||
|
console.assert(100 === root.getComputedHeight(), "100 === root.getComputedHeight() (" + root.getComputedHeight() + ")");
|
||||||
|
|
||||||
|
console.assert(40 === root_child0.getComputedLeft(), "40 === root_child0.getComputedLeft() (" + root_child0.getComputedLeft() + ")");
|
||||||
|
console.assert(0 === root_child0.getComputedTop(), "0 === root_child0.getComputedTop() (" + root_child0.getComputedTop() + ")");
|
||||||
|
console.assert(20 === root_child0.getComputedWidth(), "20 === root_child0.getComputedWidth() (" + root_child0.getComputedWidth() + ")");
|
||||||
|
console.assert(20 === root_child0.getComputedHeight(), "20 === root_child0.getComputedHeight() (" + root_child0.getComputedHeight() + ")");
|
||||||
|
|
||||||
|
console.assert(0 === root_child0_child0.getComputedLeft(), "0 === root_child0_child0.getComputedLeft() (" + root_child0_child0.getComputedLeft() + ")");
|
||||||
|
console.assert(0 === root_child0_child0.getComputedTop(), "0 === root_child0_child0.getComputedTop() (" + root_child0_child0.getComputedTop() + ")");
|
||||||
|
console.assert(20 === root_child0_child0.getComputedWidth(), "20 === root_child0_child0.getComputedWidth() (" + root_child0_child0.getComputedWidth() + ")");
|
||||||
|
console.assert(20 === root_child0_child0.getComputedHeight(), "20 === root_child0_child0.getComputedHeight() (" + root_child0_child0.getComputedHeight() + ")");
|
||||||
|
|
||||||
|
console.assert(0 === root_child0_child0_child0.getComputedLeft(), "0 === root_child0_child0_child0.getComputedLeft() (" + root_child0_child0_child0.getComputedLeft() + ")");
|
||||||
|
console.assert(0 === root_child0_child0_child0.getComputedTop(), "0 === root_child0_child0_child0.getComputedTop() (" + root_child0_child0_child0.getComputedTop() + ")");
|
||||||
|
console.assert(20 === root_child0_child0_child0.getComputedWidth(), "20 === root_child0_child0_child0.getComputedWidth() (" + root_child0_child0_child0.getComputedWidth() + ")");
|
||||||
|
console.assert(20 === root_child0_child0_child0.getComputedHeight(), "20 === root_child0_child0_child0.getComputedHeight() (" + root_child0_child0_child0.getComputedHeight() + ")");
|
||||||
|
|
||||||
|
root.calculateLayout(Yoga.UNDEFINED, Yoga.UNDEFINED, Yoga.DIRECTION_RTL);
|
||||||
|
|
||||||
|
console.assert(0 === root.getComputedLeft(), "0 === root.getComputedLeft() (" + root.getComputedLeft() + ")");
|
||||||
|
console.assert(20 === root.getComputedTop(), "20 === root.getComputedTop() (" + root.getComputedTop() + ")");
|
||||||
|
console.assert(100 === root.getComputedWidth(), "100 === root.getComputedWidth() (" + root.getComputedWidth() + ")");
|
||||||
|
console.assert(100 === root.getComputedHeight(), "100 === root.getComputedHeight() (" + root.getComputedHeight() + ")");
|
||||||
|
|
||||||
|
console.assert(40 === root_child0.getComputedLeft(), "40 === root_child0.getComputedLeft() (" + root_child0.getComputedLeft() + ")");
|
||||||
|
console.assert(0 === root_child0.getComputedTop(), "0 === root_child0.getComputedTop() (" + root_child0.getComputedTop() + ")");
|
||||||
|
console.assert(20 === root_child0.getComputedWidth(), "20 === root_child0.getComputedWidth() (" + root_child0.getComputedWidth() + ")");
|
||||||
|
console.assert(20 === root_child0.getComputedHeight(), "20 === root_child0.getComputedHeight() (" + root_child0.getComputedHeight() + ")");
|
||||||
|
|
||||||
|
console.assert(0 === root_child0_child0.getComputedLeft(), "0 === root_child0_child0.getComputedLeft() (" + root_child0_child0.getComputedLeft() + ")");
|
||||||
|
console.assert(0 === root_child0_child0.getComputedTop(), "0 === root_child0_child0.getComputedTop() (" + root_child0_child0.getComputedTop() + ")");
|
||||||
|
console.assert(20 === root_child0_child0.getComputedWidth(), "20 === root_child0_child0.getComputedWidth() (" + root_child0_child0.getComputedWidth() + ")");
|
||||||
|
console.assert(20 === root_child0_child0.getComputedHeight(), "20 === root_child0_child0.getComputedHeight() (" + root_child0_child0.getComputedHeight() + ")");
|
||||||
|
|
||||||
|
console.assert(0 === root_child0_child0_child0.getComputedLeft(), "0 === root_child0_child0_child0.getComputedLeft() (" + root_child0_child0_child0.getComputedLeft() + ")");
|
||||||
|
console.assert(0 === root_child0_child0_child0.getComputedTop(), "0 === root_child0_child0_child0.getComputedTop() (" + root_child0_child0_child0.getComputedTop() + ")");
|
||||||
|
console.assert(20 === root_child0_child0_child0.getComputedWidth(), "20 === root_child0_child0_child0.getComputedWidth() (" + root_child0_child0_child0.getComputedWidth() + ")");
|
||||||
|
console.assert(20 === root_child0_child0_child0.getComputedHeight(), "20 === root_child0_child0_child0.getComputedHeight() (" + root_child0_child0_child0.getComputedHeight() + ")");
|
||||||
|
} finally {
|
||||||
|
if (typeof root !== "undefined") {
|
||||||
|
root.freeRecursive();
|
||||||
|
}
|
||||||
|
|
||||||
|
config.free();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
it("align_strech_should_size_based_on_parent", function () {
|
||||||
|
var config = Yoga.Config.create();
|
||||||
|
|
||||||
|
try {
|
||||||
|
var root = Yoga.Node.create(config);
|
||||||
|
root.setMargin(Yoga.EDGE_TOP, 20);
|
||||||
|
root.setWidth(100);
|
||||||
|
root.setHeight(100);
|
||||||
|
|
||||||
|
var root_child0 = Yoga.Node.create(config);
|
||||||
|
root_child0.setJustifyContent(Yoga.JUSTIFY_CENTER);
|
||||||
|
root_child0.setFlexShrink(1);
|
||||||
|
root.insertChild(root_child0, 0);
|
||||||
|
|
||||||
|
var root_child0_child0 = Yoga.Node.create(config);
|
||||||
|
root_child0_child0.setFlexGrow(1);
|
||||||
|
root_child0_child0.setFlexShrink(1);
|
||||||
|
root_child0.insertChild(root_child0_child0, 0);
|
||||||
|
|
||||||
|
var root_child0_child0_child0 = Yoga.Node.create(config);
|
||||||
|
root_child0_child0_child0.setWidth(20);
|
||||||
|
root_child0_child0_child0.setHeight(20);
|
||||||
|
root_child0_child0.insertChild(root_child0_child0_child0, 0);
|
||||||
|
root.calculateLayout(Yoga.UNDEFINED, Yoga.UNDEFINED, Yoga.DIRECTION_LTR);
|
||||||
|
|
||||||
|
console.assert(0 === root.getComputedLeft(), "0 === root.getComputedLeft() (" + root.getComputedLeft() + ")");
|
||||||
|
console.assert(20 === root.getComputedTop(), "20 === root.getComputedTop() (" + root.getComputedTop() + ")");
|
||||||
|
console.assert(100 === root.getComputedWidth(), "100 === root.getComputedWidth() (" + root.getComputedWidth() + ")");
|
||||||
|
console.assert(100 === root.getComputedHeight(), "100 === root.getComputedHeight() (" + root.getComputedHeight() + ")");
|
||||||
|
|
||||||
|
console.assert(0 === root_child0.getComputedLeft(), "0 === root_child0.getComputedLeft() (" + root_child0.getComputedLeft() + ")");
|
||||||
|
console.assert(0 === root_child0.getComputedTop(), "0 === root_child0.getComputedTop() (" + root_child0.getComputedTop() + ")");
|
||||||
|
console.assert(100 === root_child0.getComputedWidth(), "100 === root_child0.getComputedWidth() (" + root_child0.getComputedWidth() + ")");
|
||||||
|
console.assert(20 === root_child0.getComputedHeight(), "20 === root_child0.getComputedHeight() (" + root_child0.getComputedHeight() + ")");
|
||||||
|
|
||||||
|
console.assert(0 === root_child0_child0.getComputedLeft(), "0 === root_child0_child0.getComputedLeft() (" + root_child0_child0.getComputedLeft() + ")");
|
||||||
|
console.assert(0 === root_child0_child0.getComputedTop(), "0 === root_child0_child0.getComputedTop() (" + root_child0_child0.getComputedTop() + ")");
|
||||||
|
console.assert(100 === root_child0_child0.getComputedWidth(), "100 === root_child0_child0.getComputedWidth() (" + root_child0_child0.getComputedWidth() + ")");
|
||||||
|
console.assert(20 === root_child0_child0.getComputedHeight(), "20 === root_child0_child0.getComputedHeight() (" + root_child0_child0.getComputedHeight() + ")");
|
||||||
|
|
||||||
|
console.assert(0 === root_child0_child0_child0.getComputedLeft(), "0 === root_child0_child0_child0.getComputedLeft() (" + root_child0_child0_child0.getComputedLeft() + ")");
|
||||||
|
console.assert(0 === root_child0_child0_child0.getComputedTop(), "0 === root_child0_child0_child0.getComputedTop() (" + root_child0_child0_child0.getComputedTop() + ")");
|
||||||
|
console.assert(20 === root_child0_child0_child0.getComputedWidth(), "20 === root_child0_child0_child0.getComputedWidth() (" + root_child0_child0_child0.getComputedWidth() + ")");
|
||||||
|
console.assert(20 === root_child0_child0_child0.getComputedHeight(), "20 === root_child0_child0_child0.getComputedHeight() (" + root_child0_child0_child0.getComputedHeight() + ")");
|
||||||
|
|
||||||
|
root.calculateLayout(Yoga.UNDEFINED, Yoga.UNDEFINED, Yoga.DIRECTION_RTL);
|
||||||
|
|
||||||
|
console.assert(0 === root.getComputedLeft(), "0 === root.getComputedLeft() (" + root.getComputedLeft() + ")");
|
||||||
|
console.assert(20 === root.getComputedTop(), "20 === root.getComputedTop() (" + root.getComputedTop() + ")");
|
||||||
|
console.assert(100 === root.getComputedWidth(), "100 === root.getComputedWidth() (" + root.getComputedWidth() + ")");
|
||||||
|
console.assert(100 === root.getComputedHeight(), "100 === root.getComputedHeight() (" + root.getComputedHeight() + ")");
|
||||||
|
|
||||||
|
console.assert(0 === root_child0.getComputedLeft(), "0 === root_child0.getComputedLeft() (" + root_child0.getComputedLeft() + ")");
|
||||||
|
console.assert(0 === root_child0.getComputedTop(), "0 === root_child0.getComputedTop() (" + root_child0.getComputedTop() + ")");
|
||||||
|
console.assert(100 === root_child0.getComputedWidth(), "100 === root_child0.getComputedWidth() (" + root_child0.getComputedWidth() + ")");
|
||||||
|
console.assert(20 === root_child0.getComputedHeight(), "20 === root_child0.getComputedHeight() (" + root_child0.getComputedHeight() + ")");
|
||||||
|
|
||||||
|
console.assert(0 === root_child0_child0.getComputedLeft(), "0 === root_child0_child0.getComputedLeft() (" + root_child0_child0.getComputedLeft() + ")");
|
||||||
|
console.assert(0 === root_child0_child0.getComputedTop(), "0 === root_child0_child0.getComputedTop() (" + root_child0_child0.getComputedTop() + ")");
|
||||||
|
console.assert(100 === root_child0_child0.getComputedWidth(), "100 === root_child0_child0.getComputedWidth() (" + root_child0_child0.getComputedWidth() + ")");
|
||||||
|
console.assert(20 === root_child0_child0.getComputedHeight(), "20 === root_child0_child0.getComputedHeight() (" + root_child0_child0.getComputedHeight() + ")");
|
||||||
|
|
||||||
|
console.assert(80 === root_child0_child0_child0.getComputedLeft(), "80 === root_child0_child0_child0.getComputedLeft() (" + root_child0_child0_child0.getComputedLeft() + ")");
|
||||||
|
console.assert(0 === root_child0_child0_child0.getComputedTop(), "0 === root_child0_child0_child0.getComputedTop() (" + root_child0_child0_child0.getComputedTop() + ")");
|
||||||
|
console.assert(20 === root_child0_child0_child0.getComputedWidth(), "20 === root_child0_child0_child0.getComputedWidth() (" + root_child0_child0_child0.getComputedWidth() + ")");
|
||||||
|
console.assert(20 === root_child0_child0_child0.getComputedHeight(), "20 === root_child0_child0_child0.getComputedHeight() (" + root_child0_child0_child0.getComputedHeight() + ")");
|
||||||
|
} finally {
|
||||||
|
if (typeof root !== "undefined") {
|
||||||
|
root.freeRecursive();
|
||||||
|
}
|
||||||
|
|
||||||
|
config.free();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
@@ -1423,3 +1423,173 @@ it("wrapped_row_within_align_items_flex_end", function () {
|
|||||||
config.free();
|
config.free();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
it("wrapped_column_max_height", function () {
|
||||||
|
var config = Yoga.Config.create();
|
||||||
|
|
||||||
|
try {
|
||||||
|
var root = Yoga.Node.create(config);
|
||||||
|
root.setJustifyContent(Yoga.JUSTIFY_CENTER);
|
||||||
|
root.setAlignContent(Yoga.ALIGN_CENTER);
|
||||||
|
root.setAlignItems(Yoga.ALIGN_CENTER);
|
||||||
|
root.setFlexWrap(Yoga.WRAP_WRAP);
|
||||||
|
root.setWidth(700);
|
||||||
|
root.setHeight(500);
|
||||||
|
|
||||||
|
var root_child0 = Yoga.Node.create(config);
|
||||||
|
root_child0.setWidth(100);
|
||||||
|
root_child0.setHeight(500);
|
||||||
|
root_child0.setMaxHeight(200);
|
||||||
|
root.insertChild(root_child0, 0);
|
||||||
|
|
||||||
|
var root_child1 = Yoga.Node.create(config);
|
||||||
|
root_child1.setMargin(Yoga.EDGE_LEFT, 20);
|
||||||
|
root_child1.setMargin(Yoga.EDGE_TOP, 20);
|
||||||
|
root_child1.setMargin(Yoga.EDGE_RIGHT, 20);
|
||||||
|
root_child1.setMargin(Yoga.EDGE_BOTTOM, 20);
|
||||||
|
root_child1.setWidth(200);
|
||||||
|
root_child1.setHeight(200);
|
||||||
|
root.insertChild(root_child1, 1);
|
||||||
|
|
||||||
|
var root_child2 = Yoga.Node.create(config);
|
||||||
|
root_child2.setWidth(100);
|
||||||
|
root_child2.setHeight(100);
|
||||||
|
root.insertChild(root_child2, 2);
|
||||||
|
root.calculateLayout(Yoga.UNDEFINED, Yoga.UNDEFINED, Yoga.DIRECTION_LTR);
|
||||||
|
|
||||||
|
console.assert(0 === root.getComputedLeft(), "0 === root.getComputedLeft() (" + root.getComputedLeft() + ")");
|
||||||
|
console.assert(0 === root.getComputedTop(), "0 === root.getComputedTop() (" + root.getComputedTop() + ")");
|
||||||
|
console.assert(700 === root.getComputedWidth(), "700 === root.getComputedWidth() (" + root.getComputedWidth() + ")");
|
||||||
|
console.assert(500 === root.getComputedHeight(), "500 === root.getComputedHeight() (" + root.getComputedHeight() + ")");
|
||||||
|
|
||||||
|
console.assert(250 === root_child0.getComputedLeft(), "250 === root_child0.getComputedLeft() (" + root_child0.getComputedLeft() + ")");
|
||||||
|
console.assert(30 === root_child0.getComputedTop(), "30 === root_child0.getComputedTop() (" + root_child0.getComputedTop() + ")");
|
||||||
|
console.assert(100 === root_child0.getComputedWidth(), "100 === root_child0.getComputedWidth() (" + root_child0.getComputedWidth() + ")");
|
||||||
|
console.assert(200 === root_child0.getComputedHeight(), "200 === root_child0.getComputedHeight() (" + root_child0.getComputedHeight() + ")");
|
||||||
|
|
||||||
|
console.assert(200 === root_child1.getComputedLeft(), "200 === root_child1.getComputedLeft() (" + root_child1.getComputedLeft() + ")");
|
||||||
|
console.assert(250 === root_child1.getComputedTop(), "250 === root_child1.getComputedTop() (" + root_child1.getComputedTop() + ")");
|
||||||
|
console.assert(200 === root_child1.getComputedWidth(), "200 === root_child1.getComputedWidth() (" + root_child1.getComputedWidth() + ")");
|
||||||
|
console.assert(200 === root_child1.getComputedHeight(), "200 === root_child1.getComputedHeight() (" + root_child1.getComputedHeight() + ")");
|
||||||
|
|
||||||
|
console.assert(420 === root_child2.getComputedLeft(), "420 === root_child2.getComputedLeft() (" + root_child2.getComputedLeft() + ")");
|
||||||
|
console.assert(200 === root_child2.getComputedTop(), "200 === root_child2.getComputedTop() (" + root_child2.getComputedTop() + ")");
|
||||||
|
console.assert(100 === root_child2.getComputedWidth(), "100 === root_child2.getComputedWidth() (" + root_child2.getComputedWidth() + ")");
|
||||||
|
console.assert(100 === root_child2.getComputedHeight(), "100 === root_child2.getComputedHeight() (" + root_child2.getComputedHeight() + ")");
|
||||||
|
|
||||||
|
root.calculateLayout(Yoga.UNDEFINED, Yoga.UNDEFINED, Yoga.DIRECTION_RTL);
|
||||||
|
|
||||||
|
console.assert(0 === root.getComputedLeft(), "0 === root.getComputedLeft() (" + root.getComputedLeft() + ")");
|
||||||
|
console.assert(0 === root.getComputedTop(), "0 === root.getComputedTop() (" + root.getComputedTop() + ")");
|
||||||
|
console.assert(700 === root.getComputedWidth(), "700 === root.getComputedWidth() (" + root.getComputedWidth() + ")");
|
||||||
|
console.assert(500 === root.getComputedHeight(), "500 === root.getComputedHeight() (" + root.getComputedHeight() + ")");
|
||||||
|
|
||||||
|
console.assert(350 === root_child0.getComputedLeft(), "350 === root_child0.getComputedLeft() (" + root_child0.getComputedLeft() + ")");
|
||||||
|
console.assert(30 === root_child0.getComputedTop(), "30 === root_child0.getComputedTop() (" + root_child0.getComputedTop() + ")");
|
||||||
|
console.assert(100 === root_child0.getComputedWidth(), "100 === root_child0.getComputedWidth() (" + root_child0.getComputedWidth() + ")");
|
||||||
|
console.assert(200 === root_child0.getComputedHeight(), "200 === root_child0.getComputedHeight() (" + root_child0.getComputedHeight() + ")");
|
||||||
|
|
||||||
|
console.assert(300 === root_child1.getComputedLeft(), "300 === root_child1.getComputedLeft() (" + root_child1.getComputedLeft() + ")");
|
||||||
|
console.assert(250 === root_child1.getComputedTop(), "250 === root_child1.getComputedTop() (" + root_child1.getComputedTop() + ")");
|
||||||
|
console.assert(200 === root_child1.getComputedWidth(), "200 === root_child1.getComputedWidth() (" + root_child1.getComputedWidth() + ")");
|
||||||
|
console.assert(200 === root_child1.getComputedHeight(), "200 === root_child1.getComputedHeight() (" + root_child1.getComputedHeight() + ")");
|
||||||
|
|
||||||
|
console.assert(180 === root_child2.getComputedLeft(), "180 === root_child2.getComputedLeft() (" + root_child2.getComputedLeft() + ")");
|
||||||
|
console.assert(200 === root_child2.getComputedTop(), "200 === root_child2.getComputedTop() (" + root_child2.getComputedTop() + ")");
|
||||||
|
console.assert(100 === root_child2.getComputedWidth(), "100 === root_child2.getComputedWidth() (" + root_child2.getComputedWidth() + ")");
|
||||||
|
console.assert(100 === root_child2.getComputedHeight(), "100 === root_child2.getComputedHeight() (" + root_child2.getComputedHeight() + ")");
|
||||||
|
} finally {
|
||||||
|
if (typeof root !== "undefined") {
|
||||||
|
root.freeRecursive();
|
||||||
|
}
|
||||||
|
|
||||||
|
config.free();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
it("wrapped_column_max_height_flex", function () {
|
||||||
|
var config = Yoga.Config.create();
|
||||||
|
|
||||||
|
try {
|
||||||
|
var root = Yoga.Node.create(config);
|
||||||
|
root.setJustifyContent(Yoga.JUSTIFY_CENTER);
|
||||||
|
root.setAlignContent(Yoga.ALIGN_CENTER);
|
||||||
|
root.setAlignItems(Yoga.ALIGN_CENTER);
|
||||||
|
root.setFlexWrap(Yoga.WRAP_WRAP);
|
||||||
|
root.setWidth(700);
|
||||||
|
root.setHeight(500);
|
||||||
|
|
||||||
|
var root_child0 = Yoga.Node.create(config);
|
||||||
|
root_child0.setFlexGrow(1);
|
||||||
|
root_child0.setFlexShrink(1);
|
||||||
|
root_child0.setFlexBasis("0%");
|
||||||
|
root_child0.setWidth(100);
|
||||||
|
root_child0.setHeight(500);
|
||||||
|
root_child0.setMaxHeight(200);
|
||||||
|
root.insertChild(root_child0, 0);
|
||||||
|
|
||||||
|
var root_child1 = Yoga.Node.create(config);
|
||||||
|
root_child1.setFlexGrow(1);
|
||||||
|
root_child1.setFlexShrink(1);
|
||||||
|
root_child1.setFlexBasis("0%");
|
||||||
|
root_child1.setMargin(Yoga.EDGE_LEFT, 20);
|
||||||
|
root_child1.setMargin(Yoga.EDGE_TOP, 20);
|
||||||
|
root_child1.setMargin(Yoga.EDGE_RIGHT, 20);
|
||||||
|
root_child1.setMargin(Yoga.EDGE_BOTTOM, 20);
|
||||||
|
root_child1.setWidth(200);
|
||||||
|
root_child1.setHeight(200);
|
||||||
|
root.insertChild(root_child1, 1);
|
||||||
|
|
||||||
|
var root_child2 = Yoga.Node.create(config);
|
||||||
|
root_child2.setWidth(100);
|
||||||
|
root_child2.setHeight(100);
|
||||||
|
root.insertChild(root_child2, 2);
|
||||||
|
root.calculateLayout(Yoga.UNDEFINED, Yoga.UNDEFINED, Yoga.DIRECTION_LTR);
|
||||||
|
|
||||||
|
console.assert(0 === root.getComputedLeft(), "0 === root.getComputedLeft() (" + root.getComputedLeft() + ")");
|
||||||
|
console.assert(0 === root.getComputedTop(), "0 === root.getComputedTop() (" + root.getComputedTop() + ")");
|
||||||
|
console.assert(700 === root.getComputedWidth(), "700 === root.getComputedWidth() (" + root.getComputedWidth() + ")");
|
||||||
|
console.assert(500 === root.getComputedHeight(), "500 === root.getComputedHeight() (" + root.getComputedHeight() + ")");
|
||||||
|
|
||||||
|
console.assert(300 === root_child0.getComputedLeft(), "300 === root_child0.getComputedLeft() (" + root_child0.getComputedLeft() + ")");
|
||||||
|
console.assert(0 === root_child0.getComputedTop(), "0 === root_child0.getComputedTop() (" + root_child0.getComputedTop() + ")");
|
||||||
|
console.assert(100 === root_child0.getComputedWidth(), "100 === root_child0.getComputedWidth() (" + root_child0.getComputedWidth() + ")");
|
||||||
|
console.assert(180 === root_child0.getComputedHeight(), "180 === root_child0.getComputedHeight() (" + root_child0.getComputedHeight() + ")");
|
||||||
|
|
||||||
|
console.assert(250 === root_child1.getComputedLeft(), "250 === root_child1.getComputedLeft() (" + root_child1.getComputedLeft() + ")");
|
||||||
|
console.assert(200 === root_child1.getComputedTop(), "200 === root_child1.getComputedTop() (" + root_child1.getComputedTop() + ")");
|
||||||
|
console.assert(200 === root_child1.getComputedWidth(), "200 === root_child1.getComputedWidth() (" + root_child1.getComputedWidth() + ")");
|
||||||
|
console.assert(180 === root_child1.getComputedHeight(), "180 === root_child1.getComputedHeight() (" + root_child1.getComputedHeight() + ")");
|
||||||
|
|
||||||
|
console.assert(300 === root_child2.getComputedLeft(), "300 === root_child2.getComputedLeft() (" + root_child2.getComputedLeft() + ")");
|
||||||
|
console.assert(400 === root_child2.getComputedTop(), "400 === root_child2.getComputedTop() (" + root_child2.getComputedTop() + ")");
|
||||||
|
console.assert(100 === root_child2.getComputedWidth(), "100 === root_child2.getComputedWidth() (" + root_child2.getComputedWidth() + ")");
|
||||||
|
console.assert(100 === root_child2.getComputedHeight(), "100 === root_child2.getComputedHeight() (" + root_child2.getComputedHeight() + ")");
|
||||||
|
|
||||||
|
root.calculateLayout(Yoga.UNDEFINED, Yoga.UNDEFINED, Yoga.DIRECTION_RTL);
|
||||||
|
|
||||||
|
console.assert(0 === root.getComputedLeft(), "0 === root.getComputedLeft() (" + root.getComputedLeft() + ")");
|
||||||
|
console.assert(0 === root.getComputedTop(), "0 === root.getComputedTop() (" + root.getComputedTop() + ")");
|
||||||
|
console.assert(700 === root.getComputedWidth(), "700 === root.getComputedWidth() (" + root.getComputedWidth() + ")");
|
||||||
|
console.assert(500 === root.getComputedHeight(), "500 === root.getComputedHeight() (" + root.getComputedHeight() + ")");
|
||||||
|
|
||||||
|
console.assert(300 === root_child0.getComputedLeft(), "300 === root_child0.getComputedLeft() (" + root_child0.getComputedLeft() + ")");
|
||||||
|
console.assert(0 === root_child0.getComputedTop(), "0 === root_child0.getComputedTop() (" + root_child0.getComputedTop() + ")");
|
||||||
|
console.assert(100 === root_child0.getComputedWidth(), "100 === root_child0.getComputedWidth() (" + root_child0.getComputedWidth() + ")");
|
||||||
|
console.assert(180 === root_child0.getComputedHeight(), "180 === root_child0.getComputedHeight() (" + root_child0.getComputedHeight() + ")");
|
||||||
|
|
||||||
|
console.assert(250 === root_child1.getComputedLeft(), "250 === root_child1.getComputedLeft() (" + root_child1.getComputedLeft() + ")");
|
||||||
|
console.assert(200 === root_child1.getComputedTop(), "200 === root_child1.getComputedTop() (" + root_child1.getComputedTop() + ")");
|
||||||
|
console.assert(200 === root_child1.getComputedWidth(), "200 === root_child1.getComputedWidth() (" + root_child1.getComputedWidth() + ")");
|
||||||
|
console.assert(180 === root_child1.getComputedHeight(), "180 === root_child1.getComputedHeight() (" + root_child1.getComputedHeight() + ")");
|
||||||
|
|
||||||
|
console.assert(300 === root_child2.getComputedLeft(), "300 === root_child2.getComputedLeft() (" + root_child2.getComputedLeft() + ")");
|
||||||
|
console.assert(400 === root_child2.getComputedTop(), "400 === root_child2.getComputedTop() (" + root_child2.getComputedTop() + ")");
|
||||||
|
console.assert(100 === root_child2.getComputedWidth(), "100 === root_child2.getComputedWidth() (" + root_child2.getComputedWidth() + ")");
|
||||||
|
console.assert(100 === root_child2.getComputedHeight(), "100 === root_child2.getComputedHeight() (" + root_child2.getComputedHeight() + ")");
|
||||||
|
} finally {
|
||||||
|
if (typeof root !== "undefined") {
|
||||||
|
root.freeRecursive();
|
||||||
|
}
|
||||||
|
|
||||||
|
config.free();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
@@ -380,8 +380,6 @@ it("justify_content_overflow_min_max", function () {
|
|||||||
it("flex_grow_to_min", function () {
|
it("flex_grow_to_min", function () {
|
||||||
var config = Yoga.Config.create();
|
var config = Yoga.Config.create();
|
||||||
|
|
||||||
config.setExperimentalFeatureEnabled(Yoga.EXPERIMENTAL_FEATURE_MIN_FLEX_FIX, true);
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
var root = Yoga.Node.create(config);
|
var root = Yoga.Node.create(config);
|
||||||
root.setWidth(100);
|
root.setWidth(100);
|
||||||
@@ -440,8 +438,6 @@ it("flex_grow_to_min", function () {
|
|||||||
it("flex_grow_in_at_most_container", function () {
|
it("flex_grow_in_at_most_container", function () {
|
||||||
var config = Yoga.Config.create();
|
var config = Yoga.Config.create();
|
||||||
|
|
||||||
config.setExperimentalFeatureEnabled(Yoga.EXPERIMENTAL_FEATURE_MIN_FLEX_FIX, true);
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
var root = Yoga.Node.create(config);
|
var root = Yoga.Node.create(config);
|
||||||
root.setFlexDirection(Yoga.FLEX_DIRECTION_ROW);
|
root.setFlexDirection(Yoga.FLEX_DIRECTION_ROW);
|
||||||
|
@@ -14,8 +14,6 @@ var Yoga = Yoga || require("../../sources/entry-" + process.env.TEST_ENTRY);
|
|||||||
it("percentage_width_height", function () {
|
it("percentage_width_height", function () {
|
||||||
var config = Yoga.Config.create();
|
var config = Yoga.Config.create();
|
||||||
|
|
||||||
config.setExperimentalFeatureEnabled(Yoga.EXPERIMENTAL_FEATURE_ROUNDING, true);
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
var root = Yoga.Node.create(config);
|
var root = Yoga.Node.create(config);
|
||||||
root.setFlexDirection(Yoga.FLEX_DIRECTION_ROW);
|
root.setFlexDirection(Yoga.FLEX_DIRECTION_ROW);
|
||||||
@@ -60,8 +58,6 @@ it("percentage_width_height", function () {
|
|||||||
it("percentage_position_left_top", function () {
|
it("percentage_position_left_top", function () {
|
||||||
var config = Yoga.Config.create();
|
var config = Yoga.Config.create();
|
||||||
|
|
||||||
config.setExperimentalFeatureEnabled(Yoga.EXPERIMENTAL_FEATURE_ROUNDING, true);
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
var root = Yoga.Node.create(config);
|
var root = Yoga.Node.create(config);
|
||||||
root.setFlexDirection(Yoga.FLEX_DIRECTION_ROW);
|
root.setFlexDirection(Yoga.FLEX_DIRECTION_ROW);
|
||||||
@@ -108,8 +104,6 @@ it("percentage_position_left_top", function () {
|
|||||||
it("percentage_position_bottom_right", function () {
|
it("percentage_position_bottom_right", function () {
|
||||||
var config = Yoga.Config.create();
|
var config = Yoga.Config.create();
|
||||||
|
|
||||||
config.setExperimentalFeatureEnabled(Yoga.EXPERIMENTAL_FEATURE_ROUNDING, true);
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
var root = Yoga.Node.create(config);
|
var root = Yoga.Node.create(config);
|
||||||
root.setFlexDirection(Yoga.FLEX_DIRECTION_ROW);
|
root.setFlexDirection(Yoga.FLEX_DIRECTION_ROW);
|
||||||
@@ -156,8 +150,6 @@ it("percentage_position_bottom_right", function () {
|
|||||||
it("percentage_flex_basis", function () {
|
it("percentage_flex_basis", function () {
|
||||||
var config = Yoga.Config.create();
|
var config = Yoga.Config.create();
|
||||||
|
|
||||||
config.setExperimentalFeatureEnabled(Yoga.EXPERIMENTAL_FEATURE_ROUNDING, true);
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
var root = Yoga.Node.create(config);
|
var root = Yoga.Node.create(config);
|
||||||
root.setFlexDirection(Yoga.FLEX_DIRECTION_ROW);
|
root.setFlexDirection(Yoga.FLEX_DIRECTION_ROW);
|
||||||
@@ -217,8 +209,6 @@ it("percentage_flex_basis", function () {
|
|||||||
it("percentage_flex_basis_cross", function () {
|
it("percentage_flex_basis_cross", function () {
|
||||||
var config = Yoga.Config.create();
|
var config = Yoga.Config.create();
|
||||||
|
|
||||||
config.setExperimentalFeatureEnabled(Yoga.EXPERIMENTAL_FEATURE_ROUNDING, true);
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
var root = Yoga.Node.create(config);
|
var root = Yoga.Node.create(config);
|
||||||
root.setWidth(200);
|
root.setWidth(200);
|
||||||
@@ -277,8 +267,6 @@ it("percentage_flex_basis_cross", function () {
|
|||||||
it("percentage_flex_basis_cross_min_height", function () {
|
it("percentage_flex_basis_cross_min_height", function () {
|
||||||
var config = Yoga.Config.create();
|
var config = Yoga.Config.create();
|
||||||
|
|
||||||
config.setExperimentalFeatureEnabled(Yoga.EXPERIMENTAL_FEATURE_ROUNDING, true);
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
var root = Yoga.Node.create(config);
|
var root = Yoga.Node.create(config);
|
||||||
root.setWidth(200);
|
root.setWidth(200);
|
||||||
@@ -337,8 +325,6 @@ it("percentage_flex_basis_cross_min_height", function () {
|
|||||||
it("percentage_flex_basis_main_max_height", function () {
|
it("percentage_flex_basis_main_max_height", function () {
|
||||||
var config = Yoga.Config.create();
|
var config = Yoga.Config.create();
|
||||||
|
|
||||||
config.setExperimentalFeatureEnabled(Yoga.EXPERIMENTAL_FEATURE_ROUNDING, true);
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
var root = Yoga.Node.create(config);
|
var root = Yoga.Node.create(config);
|
||||||
root.setFlexDirection(Yoga.FLEX_DIRECTION_ROW);
|
root.setFlexDirection(Yoga.FLEX_DIRECTION_ROW);
|
||||||
@@ -400,8 +386,6 @@ it("percentage_flex_basis_main_max_height", function () {
|
|||||||
it("percentage_flex_basis_cross_max_height", function () {
|
it("percentage_flex_basis_cross_max_height", function () {
|
||||||
var config = Yoga.Config.create();
|
var config = Yoga.Config.create();
|
||||||
|
|
||||||
config.setExperimentalFeatureEnabled(Yoga.EXPERIMENTAL_FEATURE_ROUNDING, true);
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
var root = Yoga.Node.create(config);
|
var root = Yoga.Node.create(config);
|
||||||
root.setWidth(200);
|
root.setWidth(200);
|
||||||
@@ -462,8 +446,6 @@ it("percentage_flex_basis_cross_max_height", function () {
|
|||||||
it("percentage_flex_basis_main_max_width", function () {
|
it("percentage_flex_basis_main_max_width", function () {
|
||||||
var config = Yoga.Config.create();
|
var config = Yoga.Config.create();
|
||||||
|
|
||||||
config.setExperimentalFeatureEnabled(Yoga.EXPERIMENTAL_FEATURE_ROUNDING, true);
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
var root = Yoga.Node.create(config);
|
var root = Yoga.Node.create(config);
|
||||||
root.setFlexDirection(Yoga.FLEX_DIRECTION_ROW);
|
root.setFlexDirection(Yoga.FLEX_DIRECTION_ROW);
|
||||||
@@ -525,8 +507,6 @@ it("percentage_flex_basis_main_max_width", function () {
|
|||||||
it("percentage_flex_basis_cross_max_width", function () {
|
it("percentage_flex_basis_cross_max_width", function () {
|
||||||
var config = Yoga.Config.create();
|
var config = Yoga.Config.create();
|
||||||
|
|
||||||
config.setExperimentalFeatureEnabled(Yoga.EXPERIMENTAL_FEATURE_ROUNDING, true);
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
var root = Yoga.Node.create(config);
|
var root = Yoga.Node.create(config);
|
||||||
root.setWidth(200);
|
root.setWidth(200);
|
||||||
@@ -587,8 +567,6 @@ it("percentage_flex_basis_cross_max_width", function () {
|
|||||||
it("percentage_flex_basis_main_min_width", function () {
|
it("percentage_flex_basis_main_min_width", function () {
|
||||||
var config = Yoga.Config.create();
|
var config = Yoga.Config.create();
|
||||||
|
|
||||||
config.setExperimentalFeatureEnabled(Yoga.EXPERIMENTAL_FEATURE_ROUNDING, true);
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
var root = Yoga.Node.create(config);
|
var root = Yoga.Node.create(config);
|
||||||
root.setFlexDirection(Yoga.FLEX_DIRECTION_ROW);
|
root.setFlexDirection(Yoga.FLEX_DIRECTION_ROW);
|
||||||
@@ -650,8 +628,6 @@ it("percentage_flex_basis_main_min_width", function () {
|
|||||||
it("percentage_flex_basis_cross_min_width", function () {
|
it("percentage_flex_basis_cross_min_width", function () {
|
||||||
var config = Yoga.Config.create();
|
var config = Yoga.Config.create();
|
||||||
|
|
||||||
config.setExperimentalFeatureEnabled(Yoga.EXPERIMENTAL_FEATURE_ROUNDING, true);
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
var root = Yoga.Node.create(config);
|
var root = Yoga.Node.create(config);
|
||||||
root.setWidth(200);
|
root.setWidth(200);
|
||||||
@@ -712,8 +688,6 @@ it("percentage_flex_basis_cross_min_width", function () {
|
|||||||
it("percentage_multiple_nested_with_padding_margin_and_percentage_values", function () {
|
it("percentage_multiple_nested_with_padding_margin_and_percentage_values", function () {
|
||||||
var config = Yoga.Config.create();
|
var config = Yoga.Config.create();
|
||||||
|
|
||||||
config.setExperimentalFeatureEnabled(Yoga.EXPERIMENTAL_FEATURE_ROUNDING, true);
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
var root = Yoga.Node.create(config);
|
var root = Yoga.Node.create(config);
|
||||||
root.setWidth(200);
|
root.setWidth(200);
|
||||||
@@ -826,8 +800,6 @@ it("percentage_multiple_nested_with_padding_margin_and_percentage_values", funct
|
|||||||
it("percentage_margin_should_calculate_based_only_on_width", function () {
|
it("percentage_margin_should_calculate_based_only_on_width", function () {
|
||||||
var config = Yoga.Config.create();
|
var config = Yoga.Config.create();
|
||||||
|
|
||||||
config.setExperimentalFeatureEnabled(Yoga.EXPERIMENTAL_FEATURE_ROUNDING, true);
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
var root = Yoga.Node.create(config);
|
var root = Yoga.Node.create(config);
|
||||||
root.setWidth(200);
|
root.setWidth(200);
|
||||||
@@ -889,8 +861,6 @@ it("percentage_margin_should_calculate_based_only_on_width", function () {
|
|||||||
it("percentage_padding_should_calculate_based_only_on_width", function () {
|
it("percentage_padding_should_calculate_based_only_on_width", function () {
|
||||||
var config = Yoga.Config.create();
|
var config = Yoga.Config.create();
|
||||||
|
|
||||||
config.setExperimentalFeatureEnabled(Yoga.EXPERIMENTAL_FEATURE_ROUNDING, true);
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
var root = Yoga.Node.create(config);
|
var root = Yoga.Node.create(config);
|
||||||
root.setWidth(200);
|
root.setWidth(200);
|
||||||
@@ -952,8 +922,6 @@ it("percentage_padding_should_calculate_based_only_on_width", function () {
|
|||||||
it("percentage_absolute_position", function () {
|
it("percentage_absolute_position", function () {
|
||||||
var config = Yoga.Config.create();
|
var config = Yoga.Config.create();
|
||||||
|
|
||||||
config.setExperimentalFeatureEnabled(Yoga.EXPERIMENTAL_FEATURE_ROUNDING, true);
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
var root = Yoga.Node.create(config);
|
var root = Yoga.Node.create(config);
|
||||||
root.setWidth(200);
|
root.setWidth(200);
|
||||||
@@ -1126,8 +1094,6 @@ it("percent_within_flex_grow", function () {
|
|||||||
it("percentage_container_in_wrapping_container", function () {
|
it("percentage_container_in_wrapping_container", function () {
|
||||||
var config = Yoga.Config.create();
|
var config = Yoga.Config.create();
|
||||||
|
|
||||||
config.setExperimentalFeatureEnabled(Yoga.EXPERIMENTAL_FEATURE_MIN_FLEX_FIX, true);
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
var root = Yoga.Node.create(config);
|
var root = Yoga.Node.create(config);
|
||||||
root.setJustifyContent(Yoga.JUSTIFY_CENTER);
|
root.setJustifyContent(Yoga.JUSTIFY_CENTER);
|
||||||
|
@@ -14,8 +14,6 @@ var Yoga = Yoga || require("../../sources/entry-" + process.env.TEST_ENTRY);
|
|||||||
it("rounding_flex_basis_flex_grow_row_width_of_100", function () {
|
it("rounding_flex_basis_flex_grow_row_width_of_100", function () {
|
||||||
var config = Yoga.Config.create();
|
var config = Yoga.Config.create();
|
||||||
|
|
||||||
config.setExperimentalFeatureEnabled(Yoga.EXPERIMENTAL_FEATURE_ROUNDING, true);
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
var root = Yoga.Node.create(config);
|
var root = Yoga.Node.create(config);
|
||||||
root.setFlexDirection(Yoga.FLEX_DIRECTION_ROW);
|
root.setFlexDirection(Yoga.FLEX_DIRECTION_ROW);
|
||||||
@@ -87,8 +85,6 @@ it("rounding_flex_basis_flex_grow_row_width_of_100", function () {
|
|||||||
it("rounding_flex_basis_flex_grow_row_prime_number_width", function () {
|
it("rounding_flex_basis_flex_grow_row_prime_number_width", function () {
|
||||||
var config = Yoga.Config.create();
|
var config = Yoga.Config.create();
|
||||||
|
|
||||||
config.setExperimentalFeatureEnabled(Yoga.EXPERIMENTAL_FEATURE_ROUNDING, true);
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
var root = Yoga.Node.create(config);
|
var root = Yoga.Node.create(config);
|
||||||
root.setFlexDirection(Yoga.FLEX_DIRECTION_ROW);
|
root.setFlexDirection(Yoga.FLEX_DIRECTION_ROW);
|
||||||
@@ -188,8 +184,6 @@ it("rounding_flex_basis_flex_grow_row_prime_number_width", function () {
|
|||||||
it("rounding_flex_basis_flex_shrink_row", function () {
|
it("rounding_flex_basis_flex_shrink_row", function () {
|
||||||
var config = Yoga.Config.create();
|
var config = Yoga.Config.create();
|
||||||
|
|
||||||
config.setExperimentalFeatureEnabled(Yoga.EXPERIMENTAL_FEATURE_ROUNDING, true);
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
var root = Yoga.Node.create(config);
|
var root = Yoga.Node.create(config);
|
||||||
root.setFlexDirection(Yoga.FLEX_DIRECTION_ROW);
|
root.setFlexDirection(Yoga.FLEX_DIRECTION_ROW);
|
||||||
@@ -262,8 +256,6 @@ it("rounding_flex_basis_flex_shrink_row", function () {
|
|||||||
it("rounding_flex_basis_overrides_main_size", function () {
|
it("rounding_flex_basis_overrides_main_size", function () {
|
||||||
var config = Yoga.Config.create();
|
var config = Yoga.Config.create();
|
||||||
|
|
||||||
config.setExperimentalFeatureEnabled(Yoga.EXPERIMENTAL_FEATURE_ROUNDING, true);
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
var root = Yoga.Node.create(config);
|
var root = Yoga.Node.create(config);
|
||||||
root.setWidth(100);
|
root.setWidth(100);
|
||||||
@@ -338,8 +330,6 @@ it("rounding_flex_basis_overrides_main_size", function () {
|
|||||||
it("rounding_total_fractial", function () {
|
it("rounding_total_fractial", function () {
|
||||||
var config = Yoga.Config.create();
|
var config = Yoga.Config.create();
|
||||||
|
|
||||||
config.setExperimentalFeatureEnabled(Yoga.EXPERIMENTAL_FEATURE_ROUNDING, true);
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
var root = Yoga.Node.create(config);
|
var root = Yoga.Node.create(config);
|
||||||
root.setWidth(87.4);
|
root.setWidth(87.4);
|
||||||
@@ -414,8 +404,6 @@ it("rounding_total_fractial", function () {
|
|||||||
it("rounding_total_fractial_nested", function () {
|
it("rounding_total_fractial_nested", function () {
|
||||||
var config = Yoga.Config.create();
|
var config = Yoga.Config.create();
|
||||||
|
|
||||||
config.setExperimentalFeatureEnabled(Yoga.EXPERIMENTAL_FEATURE_ROUNDING, true);
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
var root = Yoga.Node.create(config);
|
var root = Yoga.Node.create(config);
|
||||||
root.setWidth(87.4);
|
root.setWidth(87.4);
|
||||||
@@ -524,8 +512,6 @@ it("rounding_total_fractial_nested", function () {
|
|||||||
it("rounding_fractial_input_1", function () {
|
it("rounding_fractial_input_1", function () {
|
||||||
var config = Yoga.Config.create();
|
var config = Yoga.Config.create();
|
||||||
|
|
||||||
config.setExperimentalFeatureEnabled(Yoga.EXPERIMENTAL_FEATURE_ROUNDING, true);
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
var root = Yoga.Node.create(config);
|
var root = Yoga.Node.create(config);
|
||||||
root.setWidth(100);
|
root.setWidth(100);
|
||||||
@@ -600,8 +586,6 @@ it("rounding_fractial_input_1", function () {
|
|||||||
it("rounding_fractial_input_2", function () {
|
it("rounding_fractial_input_2", function () {
|
||||||
var config = Yoga.Config.create();
|
var config = Yoga.Config.create();
|
||||||
|
|
||||||
config.setExperimentalFeatureEnabled(Yoga.EXPERIMENTAL_FEATURE_ROUNDING, true);
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
var root = Yoga.Node.create(config);
|
var root = Yoga.Node.create(config);
|
||||||
root.setWidth(100);
|
root.setWidth(100);
|
||||||
@@ -676,8 +660,6 @@ it("rounding_fractial_input_2", function () {
|
|||||||
it("rounding_fractial_input_3", function () {
|
it("rounding_fractial_input_3", function () {
|
||||||
var config = Yoga.Config.create();
|
var config = Yoga.Config.create();
|
||||||
|
|
||||||
config.setExperimentalFeatureEnabled(Yoga.EXPERIMENTAL_FEATURE_ROUNDING, true);
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
var root = Yoga.Node.create(config);
|
var root = Yoga.Node.create(config);
|
||||||
root.setPosition(Yoga.EDGE_TOP, 0.3);
|
root.setPosition(Yoga.EDGE_TOP, 0.3);
|
||||||
@@ -753,8 +735,6 @@ it("rounding_fractial_input_3", function () {
|
|||||||
it("rounding_fractial_input_4", function () {
|
it("rounding_fractial_input_4", function () {
|
||||||
var config = Yoga.Config.create();
|
var config = Yoga.Config.create();
|
||||||
|
|
||||||
config.setExperimentalFeatureEnabled(Yoga.EXPERIMENTAL_FEATURE_ROUNDING, true);
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
var root = Yoga.Node.create(config);
|
var root = Yoga.Node.create(config);
|
||||||
root.setPosition(Yoga.EDGE_TOP, 0.7);
|
root.setPosition(Yoga.EDGE_TOP, 0.7);
|
||||||
@@ -830,8 +810,6 @@ it("rounding_fractial_input_4", function () {
|
|||||||
it("rounding_inner_node_controversy_horizontal", function () {
|
it("rounding_inner_node_controversy_horizontal", function () {
|
||||||
var config = Yoga.Config.create();
|
var config = Yoga.Config.create();
|
||||||
|
|
||||||
config.setExperimentalFeatureEnabled(Yoga.EXPERIMENTAL_FEATURE_ROUNDING, true);
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
var root = Yoga.Node.create(config);
|
var root = Yoga.Node.create(config);
|
||||||
root.setFlexDirection(Yoga.FLEX_DIRECTION_ROW);
|
root.setFlexDirection(Yoga.FLEX_DIRECTION_ROW);
|
||||||
@@ -920,8 +898,6 @@ it("rounding_inner_node_controversy_horizontal", function () {
|
|||||||
it("rounding_inner_node_controversy_vertical", function () {
|
it("rounding_inner_node_controversy_vertical", function () {
|
||||||
var config = Yoga.Config.create();
|
var config = Yoga.Config.create();
|
||||||
|
|
||||||
config.setExperimentalFeatureEnabled(Yoga.EXPERIMENTAL_FEATURE_ROUNDING, true);
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
var root = Yoga.Node.create(config);
|
var root = Yoga.Node.create(config);
|
||||||
root.setHeight(320);
|
root.setHeight(320);
|
||||||
@@ -1009,8 +985,6 @@ it("rounding_inner_node_controversy_vertical", function () {
|
|||||||
it("rounding_inner_node_controversy_combined", function () {
|
it("rounding_inner_node_controversy_combined", function () {
|
||||||
var config = Yoga.Config.create();
|
var config = Yoga.Config.create();
|
||||||
|
|
||||||
config.setExperimentalFeatureEnabled(Yoga.EXPERIMENTAL_FEATURE_ROUNDING, true);
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
var root = Yoga.Node.create(config);
|
var root = Yoga.Node.create(config);
|
||||||
root.setFlexDirection(Yoga.FLEX_DIRECTION_ROW);
|
root.setFlexDirection(Yoga.FLEX_DIRECTION_ROW);
|
||||||
|
@@ -40,6 +40,7 @@ cxx_library(
|
|||||||
visibility = ["PUBLIC"],
|
visibility = ["PUBLIC"],
|
||||||
deps = [
|
deps = [
|
||||||
":ndklog",
|
":ndklog",
|
||||||
|
FBJNI_JAVA_TARGET,
|
||||||
JNI_TARGET,
|
JNI_TARGET,
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
|
@@ -24,4 +24,10 @@ android {
|
|||||||
path 'src/main/cpp/CMakeLists.txt'
|
path 'src/main/cpp/CMakeLists.txt'
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
dependencies {
|
||||||
|
compile 'com.facebook.soloader:soloader:0.2.0'
|
||||||
|
compile 'com.google.code.findbugs:jsr305:3.0.1'
|
||||||
|
compile project(':yoga:proguard-annotations')
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -39,7 +39,7 @@ local_ref<JByteBuffer> JByteBuffer::wrapBytes(uint8_t* data, size_t size) {
|
|||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint8_t* JByteBuffer::getDirectBytes() {
|
uint8_t* JByteBuffer::getDirectBytes() const {
|
||||||
if (!self()) {
|
if (!self()) {
|
||||||
throwNewJavaException("java/lang/NullPointerException", "java.lang.NullPointerException");
|
throwNewJavaException("java/lang/NullPointerException", "java.lang.NullPointerException");
|
||||||
}
|
}
|
||||||
@@ -54,7 +54,7 @@ uint8_t* JByteBuffer::getDirectBytes() {
|
|||||||
return static_cast<uint8_t*>(bytes);
|
return static_cast<uint8_t*>(bytes);
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t JByteBuffer::getDirectSize() {
|
size_t JByteBuffer::getDirectSize() const {
|
||||||
if (!self()) {
|
if (!self()) {
|
||||||
throwNewJavaException("java/lang/NullPointerException", "java.lang.NullPointerException");
|
throwNewJavaException("java/lang/NullPointerException", "java.lang.NullPointerException");
|
||||||
}
|
}
|
||||||
@@ -69,7 +69,7 @@ size_t JByteBuffer::getDirectSize() {
|
|||||||
return static_cast<size_t>(size);
|
return static_cast<size_t>(size);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool JByteBuffer::isDirect() {
|
bool JByteBuffer::isDirect() const {
|
||||||
static auto meth = javaClassStatic()->getMethod<jboolean()>("isDirect");
|
static auto meth = javaClassStatic()->getMethod<jboolean()>("isDirect");
|
||||||
return meth(self());
|
return meth(self());
|
||||||
}
|
}
|
||||||
|
22
lib/fb/src/main/java/com/facebook/jni/BUCK
Normal file
22
lib/fb/src/main/java/com/facebook/jni/BUCK
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
# 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.
|
||||||
|
|
||||||
|
include_defs("//YOGA_DEFS")
|
||||||
|
|
||||||
|
java_library(
|
||||||
|
name = "jni",
|
||||||
|
srcs = glob(["**/*.java"]),
|
||||||
|
proguard_config = "fbjni.pro",
|
||||||
|
visibility = [
|
||||||
|
"PUBLIC",
|
||||||
|
],
|
||||||
|
deps = [
|
||||||
|
PROGRUARD_ANNOTATIONS_TARGET,
|
||||||
|
SOLOADER_TARGET,
|
||||||
|
JSR_305_TARGET,
|
||||||
|
],
|
||||||
|
)
|
35
lib/fb/src/main/java/com/facebook/jni/Countable.java
Normal file
35
lib/fb/src/main/java/com/facebook/jni/Countable.java
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
// Copyright 2004-present Facebook. All Rights Reserved.
|
||||||
|
|
||||||
|
package com.facebook.jni;
|
||||||
|
|
||||||
|
import com.facebook.proguard.annotations.DoNotStrip;
|
||||||
|
import com.facebook.soloader.SoLoader;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A Java Object that has native memory allocated corresponding to this instance.
|
||||||
|
*
|
||||||
|
* NB: THREAD SAFETY (this comment also exists at Countable.cpp)
|
||||||
|
*
|
||||||
|
* {@link #dispose} deletes the corresponding native object on whatever thread the method is called
|
||||||
|
* on. In the common case when this is called by Countable#finalize(), this will be called on the
|
||||||
|
* system finalizer thread. If you manually call dispose on the Java object, the native object
|
||||||
|
* will be deleted synchronously on that thread.
|
||||||
|
*/
|
||||||
|
@DoNotStrip
|
||||||
|
public class Countable {
|
||||||
|
|
||||||
|
static {
|
||||||
|
SoLoader.loadLibrary("fb");
|
||||||
|
}
|
||||||
|
|
||||||
|
// Private C++ instance
|
||||||
|
@DoNotStrip
|
||||||
|
private long mInstance = 0;
|
||||||
|
|
||||||
|
public native void dispose();
|
||||||
|
|
||||||
|
protected void finalize() throws Throwable {
|
||||||
|
dispose();
|
||||||
|
super.finalize();
|
||||||
|
}
|
||||||
|
}
|
49
lib/fb/src/main/java/com/facebook/jni/HybridData.java
Normal file
49
lib/fb/src/main/java/com/facebook/jni/HybridData.java
Normal file
@@ -0,0 +1,49 @@
|
|||||||
|
// Copyright 2004-present Facebook. All Rights Reserved.
|
||||||
|
|
||||||
|
package com.facebook.jni;
|
||||||
|
|
||||||
|
import com.facebook.proguard.annotations.DoNotStrip;
|
||||||
|
import com.facebook.soloader.SoLoader;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This object holds a native C++ member for hybrid Java/C++ objects.
|
||||||
|
*
|
||||||
|
* NB: THREAD SAFETY
|
||||||
|
*
|
||||||
|
* {@link #dispose} deletes the corresponding native object on whatever thread
|
||||||
|
* the method is called on. In the common case when this is called by
|
||||||
|
* HybridData#finalize(), this will be called on the system finalizer
|
||||||
|
* thread. If you manually call resetNative() on the Java object, the C++
|
||||||
|
* object will be deleted synchronously on that thread.
|
||||||
|
*/
|
||||||
|
@DoNotStrip
|
||||||
|
public class HybridData {
|
||||||
|
|
||||||
|
static {
|
||||||
|
SoLoader.loadLibrary("fb");
|
||||||
|
}
|
||||||
|
|
||||||
|
// Private C++ instance
|
||||||
|
@DoNotStrip
|
||||||
|
private long mNativePointer = 0;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* To explicitly delete the instance, call resetNative(). If the C++
|
||||||
|
* instance is referenced after this is called, a NullPointerException will
|
||||||
|
* be thrown. resetNative() may be called multiple times safely. Because
|
||||||
|
* {@link #finalize} calls resetNative, the instance will not leak if this is
|
||||||
|
* not called, but timing of deletion and the thread the C++ dtor is called
|
||||||
|
* on will be at the whim of the Java GC. If you want to control the thread
|
||||||
|
* and timing of the destructor, you should call resetNative() explicitly.
|
||||||
|
*/
|
||||||
|
public native void resetNative();
|
||||||
|
|
||||||
|
protected void finalize() throws Throwable {
|
||||||
|
resetNative();
|
||||||
|
super.finalize();
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isValid() {
|
||||||
|
return mNativePointer != 0;
|
||||||
|
}
|
||||||
|
}
|
56
lib/fb/src/main/java/com/facebook/jni/IteratorHelper.java
Normal file
56
lib/fb/src/main/java/com/facebook/jni/IteratorHelper.java
Normal file
@@ -0,0 +1,56 @@
|
|||||||
|
/**
|
||||||
|
* Copyright (c) 2015-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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.facebook.jni;
|
||||||
|
|
||||||
|
import com.facebook.proguard.annotations.DoNotStrip;
|
||||||
|
|
||||||
|
import javax.annotation.Nullable;
|
||||||
|
|
||||||
|
import java.util.Iterator;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* To iterate over an Iterator from C++ requires two calls per entry: hasNext()
|
||||||
|
* and next(). This helper reduces it to one call and one field get per entry.
|
||||||
|
* It does not use a generic argument, since in C++, the types will be erased,
|
||||||
|
* anyway. This is *not* a {@link java.util.Iterator}.
|
||||||
|
*/
|
||||||
|
@DoNotStrip
|
||||||
|
public class IteratorHelper {
|
||||||
|
private final Iterator mIterator;
|
||||||
|
|
||||||
|
// This is private, but accessed via JNI.
|
||||||
|
@DoNotStrip
|
||||||
|
private @Nullable Object mElement;
|
||||||
|
|
||||||
|
@DoNotStrip
|
||||||
|
public IteratorHelper(Iterator iterator) {
|
||||||
|
mIterator = iterator;
|
||||||
|
}
|
||||||
|
|
||||||
|
@DoNotStrip
|
||||||
|
public IteratorHelper(Iterable iterable) {
|
||||||
|
mIterator = iterable.iterator();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Moves the helper to the next entry in the map, if any. Returns true iff
|
||||||
|
* there is an entry to read.
|
||||||
|
*/
|
||||||
|
@DoNotStrip
|
||||||
|
boolean hasNext() {
|
||||||
|
if (mIterator.hasNext()) {
|
||||||
|
mElement = mIterator.next();
|
||||||
|
return true;
|
||||||
|
} else {
|
||||||
|
mElement = null;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
53
lib/fb/src/main/java/com/facebook/jni/MapIteratorHelper.java
Normal file
53
lib/fb/src/main/java/com/facebook/jni/MapIteratorHelper.java
Normal file
@@ -0,0 +1,53 @@
|
|||||||
|
/**
|
||||||
|
* Copyright (c) 2015-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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.facebook.jni;
|
||||||
|
|
||||||
|
import javax.annotation.Nullable;
|
||||||
|
|
||||||
|
import java.util.Iterator;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import com.facebook.proguard.annotations.DoNotStrip;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* To iterate over a Map from C++ requires four calls per entry: hasNext(),
|
||||||
|
* next(), getKey(), getValue(). This helper reduces it to one call and two
|
||||||
|
* field gets per entry. It does not use a generic argument, since in C++, the
|
||||||
|
* types will be erased, anyway. This is *not* a {@link java.util.Iterator}.
|
||||||
|
*/
|
||||||
|
@DoNotStrip
|
||||||
|
public class MapIteratorHelper {
|
||||||
|
@DoNotStrip private final Iterator<Map.Entry> mIterator;
|
||||||
|
@DoNotStrip private @Nullable Object mKey;
|
||||||
|
@DoNotStrip private @Nullable Object mValue;
|
||||||
|
|
||||||
|
@DoNotStrip
|
||||||
|
public MapIteratorHelper(Map map) {
|
||||||
|
mIterator = map.entrySet().iterator();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Moves the helper to the next entry in the map, if any. Returns true iff
|
||||||
|
* there is an entry to read.
|
||||||
|
*/
|
||||||
|
@DoNotStrip
|
||||||
|
boolean hasNext() {
|
||||||
|
if (mIterator.hasNext()) {
|
||||||
|
Map.Entry entry = mIterator.next();
|
||||||
|
mKey = entry.getKey();
|
||||||
|
mValue = entry.getValue();
|
||||||
|
return true;
|
||||||
|
} else {
|
||||||
|
mKey = null;
|
||||||
|
mValue = null;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
28
lib/fb/src/main/java/com/facebook/jni/NativeRunnable.java
Normal file
28
lib/fb/src/main/java/com/facebook/jni/NativeRunnable.java
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
/**
|
||||||
|
* Copyright (c) 2015-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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.facebook.jni;
|
||||||
|
|
||||||
|
import com.facebook.jni.HybridData;
|
||||||
|
import com.facebook.proguard.annotations.DoNotStrip;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A Runnable that has a native run implementation.
|
||||||
|
*/
|
||||||
|
@DoNotStrip
|
||||||
|
public class NativeRunnable implements Runnable {
|
||||||
|
|
||||||
|
private final HybridData mHybridData;
|
||||||
|
|
||||||
|
private NativeRunnable(HybridData hybridData) {
|
||||||
|
mHybridData = hybridData;
|
||||||
|
}
|
||||||
|
|
||||||
|
public native void run();
|
||||||
|
}
|
@@ -0,0 +1,22 @@
|
|||||||
|
// Copyright 2004-present Facebook. All Rights Reserved.
|
||||||
|
|
||||||
|
package com.facebook.jni;
|
||||||
|
|
||||||
|
import com.facebook.proguard.annotations.DoNotStrip;
|
||||||
|
import com.facebook.soloader.SoLoader;
|
||||||
|
|
||||||
|
@DoNotStrip
|
||||||
|
public class ThreadScopeSupport {
|
||||||
|
static {
|
||||||
|
SoLoader.loadLibrary("fb");
|
||||||
|
}
|
||||||
|
|
||||||
|
// This is just used for ThreadScope::withClassLoader to have a java function
|
||||||
|
// in the stack so that jni has access to the correct classloader.
|
||||||
|
@DoNotStrip
|
||||||
|
private static void runStdFunction(long ptr) {
|
||||||
|
runStdFunctionImpl(ptr);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static native void runStdFunctionImpl(long ptr);
|
||||||
|
}
|
11
lib/fb/src/main/java/com/facebook/jni/fbjni.pro
Normal file
11
lib/fb/src/main/java/com/facebook/jni/fbjni.pro
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
# For common use cases for the hybrid pattern, keep symbols which may
|
||||||
|
# be referenced only from C++.
|
||||||
|
|
||||||
|
-keepclassmembers class * {
|
||||||
|
com.facebook.jni.HybridData *;
|
||||||
|
<init>(com.facebook.jni.HybridData);
|
||||||
|
}
|
||||||
|
|
||||||
|
-keepclasseswithmembers class * {
|
||||||
|
com.facebook.jni.HybridData *;
|
||||||
|
}
|
25
scripts/circle-ci-publish-snapshot.sh
Executable file
25
scripts/circle-ci-publish-snapshot.sh
Executable file
@@ -0,0 +1,25 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
#
|
||||||
|
# Deploy a SNAPSHOT JAR after every successful Circle CI To Sonatype.
|
||||||
|
# See https://circleci.com/docs/1.0/environment-variables/
|
||||||
|
#
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
BASEDIR="$(readlink -m "$(dirname "$0")/..")"
|
||||||
|
IS_SNAPSHOT="$(grep 'VERSION_NAME=[0-9\.]\+-SNAPSHOT' "$BASEDIR/gradle.properties")"
|
||||||
|
|
||||||
|
if [ "$TRAVIS_REPO_SLUG" != "facebook/yoga" ]; then
|
||||||
|
echo "Skipping repository. Expected project to be 'facebook/yoga', but was '$TRAVIS_REPO_SLUG'."
|
||||||
|
exit
|
||||||
|
elif [ "$TRAVIS_BRANCH" != "master" ]; then
|
||||||
|
echo "Skipping build. Expected branch name to be 'master', but was '$TRAVIS_BRANCH'."
|
||||||
|
exit
|
||||||
|
elif [ "$TRAVIS_PULL_REQUEST" != "false" ]; then
|
||||||
|
echo "Skipping build. Only considering non-PR builds, but URL was '$TRAVIS_PULL_REQUEST'."
|
||||||
|
exit
|
||||||
|
elif [ "$IS_SNAPSHOT" == "" ]; then
|
||||||
|
echo "Skipping build. Given build doesn't appear to be a SNAPSHOT release."
|
||||||
|
else
|
||||||
|
"$BASEDIR/gradlew" uploadArchives
|
||||||
|
fi
|
1
scripts/setup-keys.enc
Normal file
1
scripts/setup-keys.enc
Normal file
@@ -0,0 +1 @@
|
|||||||
|
k<EFBFBD><EFBFBD><EFBFBD><04><18>=+\M<><4D>n<EFBFBD>mq6<71>P<16><>q<EFBFBD>Z<<3C>c%<25><><1D>j<EFBFBD><6A><EFBFBD>d<EFBFBD><64><EFBFBD><EFBFBD><EFBFBD>(<28><><EFBFBD><11>9C7P`]<5D><><EFBFBD><EFBFBD>#<23>Z<EFBFBD>+<2B><><EFBFBD><EFBFBD><EFBFBD>^7<><37><EFBFBD><EFBFBD><EFBFBD>*<2A><><EFBFBD>r<EFBFBD>`L<>A<13>1m<31><6D><EFBFBD>0h<30>n%v<><76>
|
@@ -1809,3 +1809,146 @@ TEST(YogaTest, align_items_flex_end_child_without_margin_bigger_than_parent) {
|
|||||||
|
|
||||||
YGConfigFree(config);
|
YGConfigFree(config);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST(YogaTest, align_center_should_size_based_on_content) {
|
||||||
|
const YGConfigRef config = YGConfigNew();
|
||||||
|
|
||||||
|
const YGNodeRef root = YGNodeNewWithConfig(config);
|
||||||
|
YGNodeStyleSetAlignItems(root, YGAlignCenter);
|
||||||
|
YGNodeStyleSetMargin(root, YGEdgeTop, 20);
|
||||||
|
YGNodeStyleSetWidth(root, 100);
|
||||||
|
YGNodeStyleSetHeight(root, 100);
|
||||||
|
|
||||||
|
const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
|
||||||
|
YGNodeStyleSetJustifyContent(root_child0, YGJustifyCenter);
|
||||||
|
YGNodeStyleSetFlexShrink(root_child0, 1);
|
||||||
|
YGNodeInsertChild(root, root_child0, 0);
|
||||||
|
|
||||||
|
const YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);
|
||||||
|
YGNodeStyleSetFlexGrow(root_child0_child0, 1);
|
||||||
|
YGNodeStyleSetFlexShrink(root_child0_child0, 1);
|
||||||
|
YGNodeInsertChild(root_child0, root_child0_child0, 0);
|
||||||
|
|
||||||
|
const YGNodeRef root_child0_child0_child0 = YGNodeNewWithConfig(config);
|
||||||
|
YGNodeStyleSetWidth(root_child0_child0_child0, 20);
|
||||||
|
YGNodeStyleSetHeight(root_child0_child0_child0, 20);
|
||||||
|
YGNodeInsertChild(root_child0_child0, root_child0_child0_child0, 0);
|
||||||
|
YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
|
||||||
|
|
||||||
|
ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
|
||||||
|
ASSERT_FLOAT_EQ(20, YGNodeLayoutGetTop(root));
|
||||||
|
ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
|
||||||
|
ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
|
||||||
|
|
||||||
|
ASSERT_FLOAT_EQ(40, YGNodeLayoutGetLeft(root_child0));
|
||||||
|
ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
|
||||||
|
ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child0));
|
||||||
|
ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0));
|
||||||
|
|
||||||
|
ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));
|
||||||
|
ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));
|
||||||
|
ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child0_child0));
|
||||||
|
ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0_child0));
|
||||||
|
|
||||||
|
ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0_child0));
|
||||||
|
ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child0));
|
||||||
|
ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child0_child0_child0));
|
||||||
|
ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0_child0_child0));
|
||||||
|
|
||||||
|
YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
|
||||||
|
|
||||||
|
ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
|
||||||
|
ASSERT_FLOAT_EQ(20, YGNodeLayoutGetTop(root));
|
||||||
|
ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
|
||||||
|
ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
|
||||||
|
|
||||||
|
ASSERT_FLOAT_EQ(40, YGNodeLayoutGetLeft(root_child0));
|
||||||
|
ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
|
||||||
|
ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child0));
|
||||||
|
ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0));
|
||||||
|
|
||||||
|
ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));
|
||||||
|
ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));
|
||||||
|
ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child0_child0));
|
||||||
|
ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0_child0));
|
||||||
|
|
||||||
|
ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0_child0));
|
||||||
|
ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child0));
|
||||||
|
ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child0_child0_child0));
|
||||||
|
ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0_child0_child0));
|
||||||
|
|
||||||
|
YGNodeFreeRecursive(root);
|
||||||
|
|
||||||
|
YGConfigFree(config);
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST(YogaTest, align_strech_should_size_based_on_parent) {
|
||||||
|
const YGConfigRef config = YGConfigNew();
|
||||||
|
|
||||||
|
const YGNodeRef root = YGNodeNewWithConfig(config);
|
||||||
|
YGNodeStyleSetMargin(root, YGEdgeTop, 20);
|
||||||
|
YGNodeStyleSetWidth(root, 100);
|
||||||
|
YGNodeStyleSetHeight(root, 100);
|
||||||
|
|
||||||
|
const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
|
||||||
|
YGNodeStyleSetJustifyContent(root_child0, YGJustifyCenter);
|
||||||
|
YGNodeStyleSetFlexShrink(root_child0, 1);
|
||||||
|
YGNodeInsertChild(root, root_child0, 0);
|
||||||
|
|
||||||
|
const YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);
|
||||||
|
YGNodeStyleSetFlexGrow(root_child0_child0, 1);
|
||||||
|
YGNodeStyleSetFlexShrink(root_child0_child0, 1);
|
||||||
|
YGNodeInsertChild(root_child0, root_child0_child0, 0);
|
||||||
|
|
||||||
|
const YGNodeRef root_child0_child0_child0 = YGNodeNewWithConfig(config);
|
||||||
|
YGNodeStyleSetWidth(root_child0_child0_child0, 20);
|
||||||
|
YGNodeStyleSetHeight(root_child0_child0_child0, 20);
|
||||||
|
YGNodeInsertChild(root_child0_child0, root_child0_child0_child0, 0);
|
||||||
|
YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
|
||||||
|
|
||||||
|
ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
|
||||||
|
ASSERT_FLOAT_EQ(20, YGNodeLayoutGetTop(root));
|
||||||
|
ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
|
||||||
|
ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
|
||||||
|
|
||||||
|
ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
|
||||||
|
ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
|
||||||
|
ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));
|
||||||
|
ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0));
|
||||||
|
|
||||||
|
ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));
|
||||||
|
ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));
|
||||||
|
ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0));
|
||||||
|
ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0_child0));
|
||||||
|
|
||||||
|
ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0_child0));
|
||||||
|
ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child0));
|
||||||
|
ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child0_child0_child0));
|
||||||
|
ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0_child0_child0));
|
||||||
|
|
||||||
|
YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
|
||||||
|
|
||||||
|
ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
|
||||||
|
ASSERT_FLOAT_EQ(20, YGNodeLayoutGetTop(root));
|
||||||
|
ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
|
||||||
|
ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
|
||||||
|
|
||||||
|
ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
|
||||||
|
ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
|
||||||
|
ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));
|
||||||
|
ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0));
|
||||||
|
|
||||||
|
ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));
|
||||||
|
ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));
|
||||||
|
ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0));
|
||||||
|
ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0_child0));
|
||||||
|
|
||||||
|
ASSERT_FLOAT_EQ(80, YGNodeLayoutGetLeft(root_child0_child0_child0));
|
||||||
|
ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child0));
|
||||||
|
ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child0_child0_child0));
|
||||||
|
ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0_child0_child0));
|
||||||
|
|
||||||
|
YGNodeFreeRecursive(root);
|
||||||
|
|
||||||
|
YGConfigFree(config);
|
||||||
|
}
|
||||||
|
@@ -1375,3 +1375,167 @@ TEST(YogaTest, wrapped_row_within_align_items_flex_end) {
|
|||||||
|
|
||||||
YGConfigFree(config);
|
YGConfigFree(config);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST(YogaTest, wrapped_column_max_height) {
|
||||||
|
const YGConfigRef config = YGConfigNew();
|
||||||
|
|
||||||
|
const YGNodeRef root = YGNodeNewWithConfig(config);
|
||||||
|
YGNodeStyleSetJustifyContent(root, YGJustifyCenter);
|
||||||
|
YGNodeStyleSetAlignContent(root, YGAlignCenter);
|
||||||
|
YGNodeStyleSetAlignItems(root, YGAlignCenter);
|
||||||
|
YGNodeStyleSetFlexWrap(root, YGWrapWrap);
|
||||||
|
YGNodeStyleSetWidth(root, 700);
|
||||||
|
YGNodeStyleSetHeight(root, 500);
|
||||||
|
|
||||||
|
const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
|
||||||
|
YGNodeStyleSetWidth(root_child0, 100);
|
||||||
|
YGNodeStyleSetHeight(root_child0, 500);
|
||||||
|
YGNodeStyleSetMaxHeight(root_child0, 200);
|
||||||
|
YGNodeInsertChild(root, root_child0, 0);
|
||||||
|
|
||||||
|
const YGNodeRef root_child1 = YGNodeNewWithConfig(config);
|
||||||
|
YGNodeStyleSetMargin(root_child1, YGEdgeLeft, 20);
|
||||||
|
YGNodeStyleSetMargin(root_child1, YGEdgeTop, 20);
|
||||||
|
YGNodeStyleSetMargin(root_child1, YGEdgeRight, 20);
|
||||||
|
YGNodeStyleSetMargin(root_child1, YGEdgeBottom, 20);
|
||||||
|
YGNodeStyleSetWidth(root_child1, 200);
|
||||||
|
YGNodeStyleSetHeight(root_child1, 200);
|
||||||
|
YGNodeInsertChild(root, root_child1, 1);
|
||||||
|
|
||||||
|
const YGNodeRef root_child2 = YGNodeNewWithConfig(config);
|
||||||
|
YGNodeStyleSetWidth(root_child2, 100);
|
||||||
|
YGNodeStyleSetHeight(root_child2, 100);
|
||||||
|
YGNodeInsertChild(root, root_child2, 2);
|
||||||
|
YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
|
||||||
|
|
||||||
|
ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
|
||||||
|
ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
|
||||||
|
ASSERT_FLOAT_EQ(700, YGNodeLayoutGetWidth(root));
|
||||||
|
ASSERT_FLOAT_EQ(500, YGNodeLayoutGetHeight(root));
|
||||||
|
|
||||||
|
ASSERT_FLOAT_EQ(250, YGNodeLayoutGetLeft(root_child0));
|
||||||
|
ASSERT_FLOAT_EQ(30, YGNodeLayoutGetTop(root_child0));
|
||||||
|
ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));
|
||||||
|
ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child0));
|
||||||
|
|
||||||
|
ASSERT_FLOAT_EQ(200, YGNodeLayoutGetLeft(root_child1));
|
||||||
|
ASSERT_FLOAT_EQ(250, YGNodeLayoutGetTop(root_child1));
|
||||||
|
ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child1));
|
||||||
|
ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child1));
|
||||||
|
|
||||||
|
ASSERT_FLOAT_EQ(420, YGNodeLayoutGetLeft(root_child2));
|
||||||
|
ASSERT_FLOAT_EQ(200, YGNodeLayoutGetTop(root_child2));
|
||||||
|
ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child2));
|
||||||
|
ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child2));
|
||||||
|
|
||||||
|
YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
|
||||||
|
|
||||||
|
ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
|
||||||
|
ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
|
||||||
|
ASSERT_FLOAT_EQ(700, YGNodeLayoutGetWidth(root));
|
||||||
|
ASSERT_FLOAT_EQ(500, YGNodeLayoutGetHeight(root));
|
||||||
|
|
||||||
|
ASSERT_FLOAT_EQ(350, YGNodeLayoutGetLeft(root_child0));
|
||||||
|
ASSERT_FLOAT_EQ(30, YGNodeLayoutGetTop(root_child0));
|
||||||
|
ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));
|
||||||
|
ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child0));
|
||||||
|
|
||||||
|
ASSERT_FLOAT_EQ(300, YGNodeLayoutGetLeft(root_child1));
|
||||||
|
ASSERT_FLOAT_EQ(250, YGNodeLayoutGetTop(root_child1));
|
||||||
|
ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child1));
|
||||||
|
ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child1));
|
||||||
|
|
||||||
|
ASSERT_FLOAT_EQ(180, YGNodeLayoutGetLeft(root_child2));
|
||||||
|
ASSERT_FLOAT_EQ(200, YGNodeLayoutGetTop(root_child2));
|
||||||
|
ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child2));
|
||||||
|
ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child2));
|
||||||
|
|
||||||
|
YGNodeFreeRecursive(root);
|
||||||
|
|
||||||
|
YGConfigFree(config);
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST(YogaTest, wrapped_column_max_height_flex) {
|
||||||
|
const YGConfigRef config = YGConfigNew();
|
||||||
|
|
||||||
|
const YGNodeRef root = YGNodeNewWithConfig(config);
|
||||||
|
YGNodeStyleSetJustifyContent(root, YGJustifyCenter);
|
||||||
|
YGNodeStyleSetAlignContent(root, YGAlignCenter);
|
||||||
|
YGNodeStyleSetAlignItems(root, YGAlignCenter);
|
||||||
|
YGNodeStyleSetFlexWrap(root, YGWrapWrap);
|
||||||
|
YGNodeStyleSetWidth(root, 700);
|
||||||
|
YGNodeStyleSetHeight(root, 500);
|
||||||
|
|
||||||
|
const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
|
||||||
|
YGNodeStyleSetFlexGrow(root_child0, 1);
|
||||||
|
YGNodeStyleSetFlexShrink(root_child0, 1);
|
||||||
|
YGNodeStyleSetFlexBasisPercent(root_child0, 0);
|
||||||
|
YGNodeStyleSetWidth(root_child0, 100);
|
||||||
|
YGNodeStyleSetHeight(root_child0, 500);
|
||||||
|
YGNodeStyleSetMaxHeight(root_child0, 200);
|
||||||
|
YGNodeInsertChild(root, root_child0, 0);
|
||||||
|
|
||||||
|
const YGNodeRef root_child1 = YGNodeNewWithConfig(config);
|
||||||
|
YGNodeStyleSetFlexGrow(root_child1, 1);
|
||||||
|
YGNodeStyleSetFlexShrink(root_child1, 1);
|
||||||
|
YGNodeStyleSetFlexBasisPercent(root_child1, 0);
|
||||||
|
YGNodeStyleSetMargin(root_child1, YGEdgeLeft, 20);
|
||||||
|
YGNodeStyleSetMargin(root_child1, YGEdgeTop, 20);
|
||||||
|
YGNodeStyleSetMargin(root_child1, YGEdgeRight, 20);
|
||||||
|
YGNodeStyleSetMargin(root_child1, YGEdgeBottom, 20);
|
||||||
|
YGNodeStyleSetWidth(root_child1, 200);
|
||||||
|
YGNodeStyleSetHeight(root_child1, 200);
|
||||||
|
YGNodeInsertChild(root, root_child1, 1);
|
||||||
|
|
||||||
|
const YGNodeRef root_child2 = YGNodeNewWithConfig(config);
|
||||||
|
YGNodeStyleSetWidth(root_child2, 100);
|
||||||
|
YGNodeStyleSetHeight(root_child2, 100);
|
||||||
|
YGNodeInsertChild(root, root_child2, 2);
|
||||||
|
YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
|
||||||
|
|
||||||
|
ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
|
||||||
|
ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
|
||||||
|
ASSERT_FLOAT_EQ(700, YGNodeLayoutGetWidth(root));
|
||||||
|
ASSERT_FLOAT_EQ(500, YGNodeLayoutGetHeight(root));
|
||||||
|
|
||||||
|
ASSERT_FLOAT_EQ(300, YGNodeLayoutGetLeft(root_child0));
|
||||||
|
ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
|
||||||
|
ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));
|
||||||
|
ASSERT_FLOAT_EQ(180, YGNodeLayoutGetHeight(root_child0));
|
||||||
|
|
||||||
|
ASSERT_FLOAT_EQ(250, YGNodeLayoutGetLeft(root_child1));
|
||||||
|
ASSERT_FLOAT_EQ(200, YGNodeLayoutGetTop(root_child1));
|
||||||
|
ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child1));
|
||||||
|
ASSERT_FLOAT_EQ(180, YGNodeLayoutGetHeight(root_child1));
|
||||||
|
|
||||||
|
ASSERT_FLOAT_EQ(300, YGNodeLayoutGetLeft(root_child2));
|
||||||
|
ASSERT_FLOAT_EQ(400, YGNodeLayoutGetTop(root_child2));
|
||||||
|
ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child2));
|
||||||
|
ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child2));
|
||||||
|
|
||||||
|
YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
|
||||||
|
|
||||||
|
ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
|
||||||
|
ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
|
||||||
|
ASSERT_FLOAT_EQ(700, YGNodeLayoutGetWidth(root));
|
||||||
|
ASSERT_FLOAT_EQ(500, YGNodeLayoutGetHeight(root));
|
||||||
|
|
||||||
|
ASSERT_FLOAT_EQ(300, YGNodeLayoutGetLeft(root_child0));
|
||||||
|
ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
|
||||||
|
ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));
|
||||||
|
ASSERT_FLOAT_EQ(180, YGNodeLayoutGetHeight(root_child0));
|
||||||
|
|
||||||
|
ASSERT_FLOAT_EQ(250, YGNodeLayoutGetLeft(root_child1));
|
||||||
|
ASSERT_FLOAT_EQ(200, YGNodeLayoutGetTop(root_child1));
|
||||||
|
ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child1));
|
||||||
|
ASSERT_FLOAT_EQ(180, YGNodeLayoutGetHeight(root_child1));
|
||||||
|
|
||||||
|
ASSERT_FLOAT_EQ(300, YGNodeLayoutGetLeft(root_child2));
|
||||||
|
ASSERT_FLOAT_EQ(400, YGNodeLayoutGetTop(root_child2));
|
||||||
|
ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child2));
|
||||||
|
ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child2));
|
||||||
|
|
||||||
|
YGNodeFreeRecursive(root);
|
||||||
|
|
||||||
|
YGConfigFree(config);
|
||||||
|
}
|
||||||
|
@@ -8,23 +8,33 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include <gtest/gtest.h>
|
#include <gtest/gtest.h>
|
||||||
#include <yoga/Yoga.h>
|
|
||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
|
#include <yoga/Yoga.h>
|
||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
char writeBuffer[4096];
|
char writeBuffer[4096];
|
||||||
int _unmanagedLogger(YGLogLevel level, const char *format, va_list args) {
|
int _unmanagedLogger(const YGConfigRef config,
|
||||||
return vsnprintf(writeBuffer + strlen(writeBuffer), sizeof(writeBuffer) - strlen(writeBuffer), format, args);
|
const YGNodeRef node,
|
||||||
|
YGLogLevel level,
|
||||||
|
const char *format,
|
||||||
|
va_list args) {
|
||||||
|
return vsnprintf(writeBuffer + strlen(writeBuffer),
|
||||||
|
sizeof(writeBuffer) - strlen(writeBuffer),
|
||||||
|
format,
|
||||||
|
args);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST(YogaTest, logger_default_node_should_print_no_style_info) {
|
TEST(YogaTest, logger_default_node_should_print_no_style_info) {
|
||||||
writeBuffer[0] = '\0';
|
writeBuffer[0] = '\0';
|
||||||
YGSetLogger(_unmanagedLogger);
|
const YGConfigRef config = YGConfigNew();
|
||||||
const YGNodeRef root = YGNodeNew();
|
YGConfigSetLogger(config, _unmanagedLogger);
|
||||||
|
const YGNodeRef root = YGNodeNewWithConfig(config);
|
||||||
YGNodeCalculateLayout(root, YGUnitUndefined, YGUnitUndefined, YGDirectionLTR);
|
YGNodeCalculateLayout(root, YGUnitUndefined, YGUnitUndefined, YGDirectionLTR);
|
||||||
YGNodePrint(root, (YGPrintOptions)(YGPrintOptionsLayout | YGPrintOptionsChildren | YGPrintOptionsStyle));
|
YGNodePrint(root,
|
||||||
YGSetLogger(NULL);
|
(YGPrintOptions)(YGPrintOptionsLayout | YGPrintOptionsChildren |
|
||||||
|
YGPrintOptionsStyle));
|
||||||
|
YGConfigSetLogger(config, NULL);
|
||||||
YGNodeFree(root);
|
YGNodeFree(root);
|
||||||
|
|
||||||
const char *expected = "<div layout=\"width: 0; height: 0; top: 0; left: 0;\" style=\"\" ></div>";
|
const char *expected = "<div layout=\"width: 0; height: 0; top: 0; left: 0;\" style=\"\" ></div>";
|
||||||
@@ -33,8 +43,9 @@ TEST(YogaTest, logger_default_node_should_print_no_style_info) {
|
|||||||
|
|
||||||
TEST(YogaTest, logger_node_with_percentage_absolute_position_and_margin) {
|
TEST(YogaTest, logger_node_with_percentage_absolute_position_and_margin) {
|
||||||
writeBuffer[0] = '\0';
|
writeBuffer[0] = '\0';
|
||||||
YGSetLogger(_unmanagedLogger);
|
const YGConfigRef config = YGConfigNew();
|
||||||
const YGNodeRef root = YGNodeNew();
|
YGConfigSetLogger(config, _unmanagedLogger);
|
||||||
|
const YGNodeRef root = YGNodeNewWithConfig(config);
|
||||||
YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);
|
YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute);
|
||||||
YGNodeStyleSetWidthPercent(root, 50);
|
YGNodeStyleSetWidthPercent(root, 50);
|
||||||
YGNodeStyleSetHeightPercent(root, 75);
|
YGNodeStyleSetHeightPercent(root, 75);
|
||||||
@@ -42,27 +53,37 @@ TEST(YogaTest, logger_node_with_percentage_absolute_position_and_margin) {
|
|||||||
YGNodeStyleSetMargin(root, YGEdgeRight, 10);
|
YGNodeStyleSetMargin(root, YGEdgeRight, 10);
|
||||||
YGNodeStyleSetMarginAuto(root, YGEdgeLeft);
|
YGNodeStyleSetMarginAuto(root, YGEdgeLeft);
|
||||||
YGNodeCalculateLayout(root, YGUnitUndefined, YGUnitUndefined, YGDirectionLTR);
|
YGNodeCalculateLayout(root, YGUnitUndefined, YGUnitUndefined, YGDirectionLTR);
|
||||||
YGNodePrint(root, (YGPrintOptions)(YGPrintOptionsLayout | YGPrintOptionsChildren | YGPrintOptionsStyle));
|
YGNodePrint(root,
|
||||||
YGSetLogger(NULL);
|
(YGPrintOptions)(YGPrintOptionsLayout | YGPrintOptionsChildren |
|
||||||
|
YGPrintOptionsStyle));
|
||||||
|
YGConfigSetLogger(config, NULL);
|
||||||
YGNodeFree(root);
|
YGNodeFree(root);
|
||||||
|
|
||||||
const char * expected = "<div layout=\"width: 0; height: 0; top: 0; left: 0;\" style=\"flex: 1; margin-left: auto; margin-right: 10px; width: 50%; height: 75%; position: absolute; \" ></div>";
|
const char *expected = "<div layout=\"width: 0; height: 0; top: 0; left: 0;\" style=\"flex: 1; "
|
||||||
|
"margin-left: auto; margin-right: 10px; width: 50%; height: 75%; "
|
||||||
|
"position: absolute; \" ></div>";
|
||||||
ASSERT_STREQ(expected, writeBuffer);
|
ASSERT_STREQ(expected, writeBuffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST(YogaTest, logger_node_with_children_should_print_indented) {
|
TEST(YogaTest, logger_node_with_children_should_print_indented) {
|
||||||
writeBuffer[0] = '\0';
|
writeBuffer[0] = '\0';
|
||||||
YGSetLogger(_unmanagedLogger);
|
const YGConfigRef config = YGConfigNew();
|
||||||
const YGNodeRef root = YGNodeNew();
|
YGConfigSetLogger(config, _unmanagedLogger);
|
||||||
const YGNodeRef child0 = YGNodeNew();
|
const YGNodeRef root = YGNodeNewWithConfig(config);
|
||||||
const YGNodeRef child1 = YGNodeNew();
|
const YGNodeRef child0 = YGNodeNewWithConfig(config);
|
||||||
|
const YGNodeRef child1 = YGNodeNewWithConfig(config);
|
||||||
YGNodeInsertChild(root, child0, 0);
|
YGNodeInsertChild(root, child0, 0);
|
||||||
YGNodeInsertChild(root, child1, 1);
|
YGNodeInsertChild(root, child1, 1);
|
||||||
YGNodeCalculateLayout(root, YGUnitUndefined, YGUnitUndefined, YGDirectionLTR);
|
YGNodeCalculateLayout(root, YGUnitUndefined, YGUnitUndefined, YGDirectionLTR);
|
||||||
YGNodePrint(root, (YGPrintOptions)(YGPrintOptionsLayout | YGPrintOptionsChildren | YGPrintOptionsStyle));
|
YGNodePrint(root,
|
||||||
YGSetLogger(NULL);
|
(YGPrintOptions)(YGPrintOptionsLayout | YGPrintOptionsChildren |
|
||||||
|
YGPrintOptionsStyle));
|
||||||
|
YGConfigSetLogger(config, NULL);
|
||||||
YGNodeFreeRecursive(root);
|
YGNodeFreeRecursive(root);
|
||||||
|
|
||||||
const char * expected = "<div layout=\"width: 0; height: 0; top: 0; left: 0;\" style=\"\" >\n <div layout=\"width: 0; height: 0; top: 0; left: 0;\" style=\"\" ></div>\n <div layout=\"width: 0; height: 0; top: 0; left: 0;\" style=\"\" ></div>\n</div>";
|
const char *expected = "<div layout=\"width: 0; height: 0; top: 0; left: 0;\" style=\"\" >\n "
|
||||||
|
"<div layout=\"width: 0; height: 0; top: 0; left: 0;\" style=\"\" "
|
||||||
|
"></div>\n <div layout=\"width: 0; height: 0; top: 0; left: 0;\" "
|
||||||
|
"style=\"\" ></div>\n</div>";
|
||||||
ASSERT_STREQ(expected, writeBuffer);
|
ASSERT_STREQ(expected, writeBuffer);
|
||||||
}
|
}
|
||||||
|
@@ -25,6 +25,20 @@ static YGSize _measure(YGNodeRef node,
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static YGSize _simulate_wrapping_text(YGNodeRef node,
|
||||||
|
float width,
|
||||||
|
YGMeasureMode widthMode,
|
||||||
|
float height,
|
||||||
|
YGMeasureMode heightMode) {
|
||||||
|
if (widthMode == YGMeasureModeUndefined || width >= 68) {
|
||||||
|
return YGSize{.width = 68, .height = 16};
|
||||||
|
}
|
||||||
|
|
||||||
|
return YGSize{
|
||||||
|
.width = 50, .height = 32,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
TEST(YogaTest, dont_measure_single_grow_shrink_child) {
|
TEST(YogaTest, dont_measure_single_grow_shrink_child) {
|
||||||
const YGNodeRef root = YGNodeNew();
|
const YGNodeRef root = YGNodeNew();
|
||||||
YGNodeStyleSetWidth(root, 100);
|
YGNodeStyleSetWidth(root, 100);
|
||||||
@@ -179,6 +193,346 @@ TEST(YogaTest, dont_measure_when_min_equals_max_mixed_height_percent) {
|
|||||||
YGNodeFreeRecursive(root);
|
YGNodeFreeRecursive(root);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST(YogaTest, measure_enough_size_should_be_in_single_line) {
|
||||||
|
const YGNodeRef root = YGNodeNew();
|
||||||
|
YGNodeStyleSetWidth(root, 100);
|
||||||
|
|
||||||
|
const YGNodeRef root_child0 = YGNodeNew();
|
||||||
|
YGNodeStyleSetAlignSelf(root_child0, YGAlignFlexStart);
|
||||||
|
YGNodeSetMeasureFunc(root_child0, _simulate_wrapping_text);
|
||||||
|
|
||||||
|
YGNodeInsertChild(root, root_child0, 0);
|
||||||
|
|
||||||
|
YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
|
||||||
|
|
||||||
|
ASSERT_FLOAT_EQ(68, YGNodeLayoutGetWidth(root_child0));
|
||||||
|
ASSERT_FLOAT_EQ(16, YGNodeLayoutGetHeight(root_child0));
|
||||||
|
|
||||||
|
YGNodeFreeRecursive(root);
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST(YogaTest, measure_not_enough_size_should_wrap) {
|
||||||
|
const YGNodeRef root = YGNodeNew();
|
||||||
|
YGNodeStyleSetWidth(root, 55);
|
||||||
|
|
||||||
|
const YGNodeRef root_child0 = YGNodeNew();
|
||||||
|
YGNodeStyleSetAlignSelf(root_child0, YGAlignFlexStart);
|
||||||
|
YGNodeSetMeasureFunc(root_child0, _simulate_wrapping_text);
|
||||||
|
|
||||||
|
YGNodeInsertChild(root, root_child0, 0);
|
||||||
|
|
||||||
|
YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
|
||||||
|
|
||||||
|
ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));
|
||||||
|
ASSERT_FLOAT_EQ(32, YGNodeLayoutGetHeight(root_child0));
|
||||||
|
|
||||||
|
YGNodeFreeRecursive(root);
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST(YogaTest, measure_zero_space_should_grow) {
|
||||||
|
const YGNodeRef root = YGNodeNew();
|
||||||
|
YGNodeStyleSetHeight(root, 200);
|
||||||
|
YGNodeStyleSetFlexDirection(root, YGFlexDirectionColumn);
|
||||||
|
YGNodeStyleSetFlexGrow(root, 0);
|
||||||
|
|
||||||
|
int measureCount = 0;
|
||||||
|
|
||||||
|
const YGNodeRef root_child0 = YGNodeNew();
|
||||||
|
YGNodeStyleSetFlexDirection(root_child0, YGFlexDirectionColumn);
|
||||||
|
YGNodeStyleSetPadding(root_child0, YGEdgeAll, 100);
|
||||||
|
YGNodeSetContext(root_child0, &measureCount);
|
||||||
|
YGNodeSetMeasureFunc(root_child0, _measure);
|
||||||
|
|
||||||
|
YGNodeInsertChild(root, root_child0, 0);
|
||||||
|
|
||||||
|
YGNodeCalculateLayout(root, 282, YGUndefined, YGDirectionLTR);
|
||||||
|
|
||||||
|
ASSERT_FLOAT_EQ(282, YGNodeLayoutGetWidth(root_child0));
|
||||||
|
ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
|
||||||
|
|
||||||
|
YGNodeFreeRecursive(root);
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST(YogaTest, measure_flex_direction_row_and_padding) {
|
||||||
|
const YGConfigRef config = YGConfigNew();
|
||||||
|
|
||||||
|
const YGNodeRef root = YGNodeNewWithConfig(config);
|
||||||
|
YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);
|
||||||
|
YGNodeStyleSetPadding(root, YGEdgeLeft, 25);
|
||||||
|
YGNodeStyleSetPadding(root, YGEdgeTop, 25);
|
||||||
|
YGNodeStyleSetPadding(root, YGEdgeRight, 25);
|
||||||
|
YGNodeStyleSetPadding(root, YGEdgeBottom, 25);
|
||||||
|
YGNodeStyleSetWidth(root, 50);
|
||||||
|
YGNodeStyleSetHeight(root, 50);
|
||||||
|
|
||||||
|
const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
|
||||||
|
YGNodeSetMeasureFunc(root_child0, _simulate_wrapping_text);
|
||||||
|
YGNodeInsertChild(root, root_child0, 0);
|
||||||
|
|
||||||
|
const YGNodeRef root_child1 = YGNodeNewWithConfig(config);
|
||||||
|
YGNodeStyleSetWidth(root_child1, 5);
|
||||||
|
YGNodeStyleSetHeight(root_child1, 5);
|
||||||
|
YGNodeInsertChild(root, root_child1, 1);
|
||||||
|
YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
|
||||||
|
|
||||||
|
ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
|
||||||
|
ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
|
||||||
|
ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root));
|
||||||
|
ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root));
|
||||||
|
|
||||||
|
ASSERT_FLOAT_EQ(25, YGNodeLayoutGetLeft(root_child0));
|
||||||
|
ASSERT_FLOAT_EQ(25, YGNodeLayoutGetTop(root_child0));
|
||||||
|
ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));
|
||||||
|
ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0));
|
||||||
|
|
||||||
|
ASSERT_FLOAT_EQ(75, YGNodeLayoutGetLeft(root_child1));
|
||||||
|
ASSERT_FLOAT_EQ(25, YGNodeLayoutGetTop(root_child1));
|
||||||
|
ASSERT_FLOAT_EQ(5, YGNodeLayoutGetWidth(root_child1));
|
||||||
|
ASSERT_FLOAT_EQ(5, YGNodeLayoutGetHeight(root_child1));
|
||||||
|
|
||||||
|
YGNodeFreeRecursive(root);
|
||||||
|
|
||||||
|
YGConfigFree(config);
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST(YogaTest, measure_flex_direction_column_and_padding) {
|
||||||
|
const YGConfigRef config = YGConfigNew();
|
||||||
|
|
||||||
|
const YGNodeRef root = YGNodeNewWithConfig(config);
|
||||||
|
YGNodeStyleSetMargin(root, YGEdgeTop, 20);
|
||||||
|
YGNodeStyleSetPadding(root, YGEdgeAll, 25);
|
||||||
|
YGNodeStyleSetWidth(root, 50);
|
||||||
|
YGNodeStyleSetHeight(root, 50);
|
||||||
|
|
||||||
|
const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
|
||||||
|
YGNodeSetMeasureFunc(root_child0, _simulate_wrapping_text);
|
||||||
|
YGNodeInsertChild(root, root_child0, 0);
|
||||||
|
|
||||||
|
const YGNodeRef root_child1 = YGNodeNewWithConfig(config);
|
||||||
|
YGNodeStyleSetWidth(root_child1, 5);
|
||||||
|
YGNodeStyleSetHeight(root_child1, 5);
|
||||||
|
YGNodeInsertChild(root, root_child1, 1);
|
||||||
|
YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
|
||||||
|
|
||||||
|
ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
|
||||||
|
ASSERT_FLOAT_EQ(20, YGNodeLayoutGetTop(root));
|
||||||
|
ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root));
|
||||||
|
ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root));
|
||||||
|
|
||||||
|
ASSERT_FLOAT_EQ(25, YGNodeLayoutGetLeft(root_child0));
|
||||||
|
ASSERT_FLOAT_EQ(25, YGNodeLayoutGetTop(root_child0));
|
||||||
|
ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root_child0));
|
||||||
|
ASSERT_FLOAT_EQ(32, YGNodeLayoutGetHeight(root_child0));
|
||||||
|
|
||||||
|
ASSERT_FLOAT_EQ(25, YGNodeLayoutGetLeft(root_child1));
|
||||||
|
ASSERT_FLOAT_EQ(57, YGNodeLayoutGetTop(root_child1));
|
||||||
|
ASSERT_FLOAT_EQ(5, YGNodeLayoutGetWidth(root_child1));
|
||||||
|
ASSERT_FLOAT_EQ(5, YGNodeLayoutGetHeight(root_child1));
|
||||||
|
|
||||||
|
YGNodeFreeRecursive(root);
|
||||||
|
|
||||||
|
YGConfigFree(config);
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST(YogaTest, measure_flex_direction_row_no_padding) {
|
||||||
|
const YGConfigRef config = YGConfigNew();
|
||||||
|
|
||||||
|
const YGNodeRef root = YGNodeNewWithConfig(config);
|
||||||
|
YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);
|
||||||
|
YGNodeStyleSetMargin(root, YGEdgeTop, 20);
|
||||||
|
YGNodeStyleSetWidth(root, 50);
|
||||||
|
YGNodeStyleSetHeight(root, 50);
|
||||||
|
|
||||||
|
const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
|
||||||
|
YGNodeSetMeasureFunc(root_child0, _simulate_wrapping_text);
|
||||||
|
YGNodeInsertChild(root, root_child0, 0);
|
||||||
|
|
||||||
|
const YGNodeRef root_child1 = YGNodeNewWithConfig(config);
|
||||||
|
YGNodeStyleSetWidth(root_child1, 5);
|
||||||
|
YGNodeStyleSetHeight(root_child1, 5);
|
||||||
|
YGNodeInsertChild(root, root_child1, 1);
|
||||||
|
YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
|
||||||
|
|
||||||
|
ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
|
||||||
|
ASSERT_FLOAT_EQ(20, YGNodeLayoutGetTop(root));
|
||||||
|
ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root));
|
||||||
|
ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root));
|
||||||
|
|
||||||
|
ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
|
||||||
|
ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
|
||||||
|
ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));
|
||||||
|
ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));
|
||||||
|
|
||||||
|
ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child1));
|
||||||
|
ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));
|
||||||
|
ASSERT_FLOAT_EQ(5, YGNodeLayoutGetWidth(root_child1));
|
||||||
|
ASSERT_FLOAT_EQ(5, YGNodeLayoutGetHeight(root_child1));
|
||||||
|
|
||||||
|
YGNodeFreeRecursive(root);
|
||||||
|
|
||||||
|
YGConfigFree(config);
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST(YogaTest, measure_flex_direction_row_no_padding_align_items_flexstart) {
|
||||||
|
const YGConfigRef config = YGConfigNew();
|
||||||
|
|
||||||
|
const YGNodeRef root = YGNodeNewWithConfig(config);
|
||||||
|
YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);
|
||||||
|
YGNodeStyleSetMargin(root, YGEdgeTop, 20);
|
||||||
|
YGNodeStyleSetWidth(root, 50);
|
||||||
|
YGNodeStyleSetHeight(root, 50);
|
||||||
|
YGNodeStyleSetAlignItems(root, YGAlignFlexStart);
|
||||||
|
|
||||||
|
const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
|
||||||
|
YGNodeSetMeasureFunc(root_child0, _simulate_wrapping_text);
|
||||||
|
YGNodeInsertChild(root, root_child0, 0);
|
||||||
|
|
||||||
|
const YGNodeRef root_child1 = YGNodeNewWithConfig(config);
|
||||||
|
YGNodeStyleSetWidth(root_child1, 5);
|
||||||
|
YGNodeStyleSetHeight(root_child1, 5);
|
||||||
|
YGNodeInsertChild(root, root_child1, 1);
|
||||||
|
YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
|
||||||
|
|
||||||
|
ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
|
||||||
|
ASSERT_FLOAT_EQ(20, YGNodeLayoutGetTop(root));
|
||||||
|
ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root));
|
||||||
|
ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root));
|
||||||
|
|
||||||
|
ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
|
||||||
|
ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
|
||||||
|
ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));
|
||||||
|
ASSERT_FLOAT_EQ(32, YGNodeLayoutGetHeight(root_child0));
|
||||||
|
|
||||||
|
ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child1));
|
||||||
|
ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));
|
||||||
|
ASSERT_FLOAT_EQ(5, YGNodeLayoutGetWidth(root_child1));
|
||||||
|
ASSERT_FLOAT_EQ(5, YGNodeLayoutGetHeight(root_child1));
|
||||||
|
|
||||||
|
YGNodeFreeRecursive(root);
|
||||||
|
|
||||||
|
YGConfigFree(config);
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST(YogaTest, measure_with_fixed_size) {
|
||||||
|
const YGConfigRef config = YGConfigNew();
|
||||||
|
|
||||||
|
const YGNodeRef root = YGNodeNewWithConfig(config);
|
||||||
|
YGNodeStyleSetMargin(root, YGEdgeTop, 20);
|
||||||
|
YGNodeStyleSetPadding(root, YGEdgeAll, 25);
|
||||||
|
YGNodeStyleSetWidth(root, 50);
|
||||||
|
YGNodeStyleSetHeight(root, 50);
|
||||||
|
|
||||||
|
const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
|
||||||
|
YGNodeSetMeasureFunc(root_child0, _simulate_wrapping_text);
|
||||||
|
YGNodeStyleSetWidth(root_child0, 10);
|
||||||
|
YGNodeStyleSetHeight(root_child0, 10);
|
||||||
|
YGNodeInsertChild(root, root_child0, 0);
|
||||||
|
|
||||||
|
const YGNodeRef root_child1 = YGNodeNewWithConfig(config);
|
||||||
|
YGNodeStyleSetWidth(root_child1, 5);
|
||||||
|
YGNodeStyleSetHeight(root_child1, 5);
|
||||||
|
YGNodeInsertChild(root, root_child1, 1);
|
||||||
|
YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
|
||||||
|
|
||||||
|
ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
|
||||||
|
ASSERT_FLOAT_EQ(20, YGNodeLayoutGetTop(root));
|
||||||
|
ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root));
|
||||||
|
ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root));
|
||||||
|
|
||||||
|
ASSERT_FLOAT_EQ(25, YGNodeLayoutGetLeft(root_child0));
|
||||||
|
ASSERT_FLOAT_EQ(25, YGNodeLayoutGetTop(root_child0));
|
||||||
|
ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0));
|
||||||
|
ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));
|
||||||
|
|
||||||
|
ASSERT_FLOAT_EQ(25, YGNodeLayoutGetLeft(root_child1));
|
||||||
|
ASSERT_FLOAT_EQ(35, YGNodeLayoutGetTop(root_child1));
|
||||||
|
ASSERT_FLOAT_EQ(5, YGNodeLayoutGetWidth(root_child1));
|
||||||
|
ASSERT_FLOAT_EQ(5, YGNodeLayoutGetHeight(root_child1));
|
||||||
|
|
||||||
|
YGNodeFreeRecursive(root);
|
||||||
|
|
||||||
|
YGConfigFree(config);
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST(YogaTest, measure_with_flex_shrink) {
|
||||||
|
const YGConfigRef config = YGConfigNew();
|
||||||
|
|
||||||
|
const YGNodeRef root = YGNodeNewWithConfig(config);
|
||||||
|
YGNodeStyleSetMargin(root, YGEdgeTop, 20);
|
||||||
|
YGNodeStyleSetPadding(root, YGEdgeAll, 25);
|
||||||
|
YGNodeStyleSetWidth(root, 50);
|
||||||
|
YGNodeStyleSetHeight(root, 50);
|
||||||
|
|
||||||
|
const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
|
||||||
|
YGNodeSetMeasureFunc(root_child0, _simulate_wrapping_text);
|
||||||
|
YGNodeStyleSetFlexShrink(root_child0, 1);
|
||||||
|
YGNodeInsertChild(root, root_child0, 0);
|
||||||
|
|
||||||
|
const YGNodeRef root_child1 = YGNodeNewWithConfig(config);
|
||||||
|
YGNodeStyleSetWidth(root_child1, 5);
|
||||||
|
YGNodeStyleSetHeight(root_child1, 5);
|
||||||
|
YGNodeInsertChild(root, root_child1, 1);
|
||||||
|
YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
|
||||||
|
|
||||||
|
ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
|
||||||
|
ASSERT_FLOAT_EQ(20, YGNodeLayoutGetTop(root));
|
||||||
|
ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root));
|
||||||
|
ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root));
|
||||||
|
|
||||||
|
ASSERT_FLOAT_EQ(25, YGNodeLayoutGetLeft(root_child0));
|
||||||
|
ASSERT_FLOAT_EQ(25, YGNodeLayoutGetTop(root_child0));
|
||||||
|
ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root_child0));
|
||||||
|
ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0));
|
||||||
|
|
||||||
|
ASSERT_FLOAT_EQ(25, YGNodeLayoutGetLeft(root_child1));
|
||||||
|
ASSERT_FLOAT_EQ(25, YGNodeLayoutGetTop(root_child1));
|
||||||
|
ASSERT_FLOAT_EQ(5, YGNodeLayoutGetWidth(root_child1));
|
||||||
|
ASSERT_FLOAT_EQ(5, YGNodeLayoutGetHeight(root_child1));
|
||||||
|
|
||||||
|
YGNodeFreeRecursive(root);
|
||||||
|
|
||||||
|
YGConfigFree(config);
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST(YogaTest, measure_no_padding) {
|
||||||
|
const YGConfigRef config = YGConfigNew();
|
||||||
|
|
||||||
|
const YGNodeRef root = YGNodeNewWithConfig(config);
|
||||||
|
YGNodeStyleSetMargin(root, YGEdgeTop, 20);
|
||||||
|
YGNodeStyleSetWidth(root, 50);
|
||||||
|
YGNodeStyleSetHeight(root, 50);
|
||||||
|
|
||||||
|
const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
|
||||||
|
YGNodeSetMeasureFunc(root_child0, _simulate_wrapping_text);
|
||||||
|
YGNodeStyleSetFlexShrink(root_child0, 1);
|
||||||
|
YGNodeInsertChild(root, root_child0, 0);
|
||||||
|
|
||||||
|
const YGNodeRef root_child1 = YGNodeNewWithConfig(config);
|
||||||
|
YGNodeStyleSetWidth(root_child1, 5);
|
||||||
|
YGNodeStyleSetHeight(root_child1, 5);
|
||||||
|
YGNodeInsertChild(root, root_child1, 1);
|
||||||
|
YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
|
||||||
|
|
||||||
|
ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
|
||||||
|
ASSERT_FLOAT_EQ(20, YGNodeLayoutGetTop(root));
|
||||||
|
ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root));
|
||||||
|
ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root));
|
||||||
|
|
||||||
|
ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
|
||||||
|
ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
|
||||||
|
ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));
|
||||||
|
ASSERT_FLOAT_EQ(32, YGNodeLayoutGetHeight(root_child0));
|
||||||
|
|
||||||
|
ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));
|
||||||
|
ASSERT_FLOAT_EQ(32, YGNodeLayoutGetTop(root_child1));
|
||||||
|
ASSERT_FLOAT_EQ(5, YGNodeLayoutGetWidth(root_child1));
|
||||||
|
ASSERT_FLOAT_EQ(5, YGNodeLayoutGetHeight(root_child1));
|
||||||
|
|
||||||
|
YGNodeFreeRecursive(root);
|
||||||
|
|
||||||
|
YGConfigFree(config);
|
||||||
|
}
|
||||||
|
|
||||||
#if GTEST_HAS_DEATH_TEST
|
#if GTEST_HAS_DEATH_TEST
|
||||||
TEST(YogaDeathTest, cannot_add_child_to_node_with_measure_func) {
|
TEST(YogaDeathTest, cannot_add_child_to_node_with_measure_func) {
|
||||||
const YGNodeRef root = YGNodeNew();
|
const YGNodeRef root = YGNodeNew();
|
||||||
@@ -209,4 +563,3 @@ TEST(YogaTest, can_nullify_measure_func_on_any_node) {
|
|||||||
ASSERT_TRUE(YGNodeGetMeasureFunc(root) == NULL);
|
ASSERT_TRUE(YGNodeGetMeasureFunc(root) == NULL);
|
||||||
YGNodeFreeRecursive(root);
|
YGNodeFreeRecursive(root);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -11,6 +11,7 @@
|
|||||||
#include <yoga/Yoga.h>
|
#include <yoga/Yoga.h>
|
||||||
|
|
||||||
extern int32_t gNodeInstanceCount;
|
extern int32_t gNodeInstanceCount;
|
||||||
|
extern int32_t gConfigInstanceCount;
|
||||||
|
|
||||||
static int testMallocCount;
|
static int testMallocCount;
|
||||||
static int testCallocCount;
|
static int testCallocCount;
|
||||||
@@ -39,6 +40,7 @@ static void testFree(void *ptr) {
|
|||||||
|
|
||||||
TEST(YogaTest, memory_func_default) {
|
TEST(YogaTest, memory_func_default) {
|
||||||
gNodeInstanceCount = 0; // Reset YGNode instance count for memory func test
|
gNodeInstanceCount = 0; // Reset YGNode instance count for memory func test
|
||||||
|
gConfigInstanceCount = 0; // Reset YGConfig instance count for memory func test
|
||||||
YGSetMemoryFuncs(NULL, NULL, NULL, NULL);
|
YGSetMemoryFuncs(NULL, NULL, NULL, NULL);
|
||||||
const YGNodeRef root = YGNodeNew();
|
const YGNodeRef root = YGNodeNew();
|
||||||
const YGNodeRef root_child0 = YGNodeNew();
|
const YGNodeRef root_child0 = YGNodeNew();
|
||||||
@@ -48,6 +50,7 @@ TEST(YogaTest, memory_func_default) {
|
|||||||
|
|
||||||
TEST(YogaTest, memory_func_test_funcs) {
|
TEST(YogaTest, memory_func_test_funcs) {
|
||||||
gNodeInstanceCount = 0; // Reset YGNode instance count for memory func test
|
gNodeInstanceCount = 0; // Reset YGNode instance count for memory func test
|
||||||
|
gConfigInstanceCount = 0; // Reset YGConfig instance count for memory func test
|
||||||
YGSetMemoryFuncs(&testMalloc, &testCalloc, &testRealloc, &testFree);
|
YGSetMemoryFuncs(&testMalloc, &testCalloc, &testRealloc, &testFree);
|
||||||
const YGNodeRef root = YGNodeNew();
|
const YGNodeRef root = YGNodeNew();
|
||||||
for (int i = 0; i < 10; i++) {
|
for (int i = 0; i < 10; i++) {
|
||||||
@@ -65,6 +68,7 @@ TEST(YogaTest, memory_func_test_funcs) {
|
|||||||
#if GTEST_HAS_DEATH_TEST
|
#if GTEST_HAS_DEATH_TEST
|
||||||
TEST(YogaDeathTest, memory_func_assert_zero_nodes) {
|
TEST(YogaDeathTest, memory_func_assert_zero_nodes) {
|
||||||
gNodeInstanceCount = 0; // Reset YGNode instance count for memory func test
|
gNodeInstanceCount = 0; // Reset YGNode instance count for memory func test
|
||||||
|
gConfigInstanceCount = 0; // Reset YGConfig instance count for memory func test
|
||||||
const YGNodeRef root = YGNodeNew();
|
const YGNodeRef root = YGNodeNew();
|
||||||
ASSERT_DEATH(YGSetMemoryFuncs(&testMalloc, &testCalloc, &testRealloc, &testFree),
|
ASSERT_DEATH(YGSetMemoryFuncs(&testMalloc, &testCalloc, &testRealloc, &testFree),
|
||||||
"Cannot set memory functions: all node must be freed first");
|
"Cannot set memory functions: all node must be freed first");
|
||||||
@@ -73,6 +77,7 @@ TEST(YogaDeathTest, memory_func_assert_zero_nodes) {
|
|||||||
|
|
||||||
TEST(YogaDeathTest, memory_func_assert_all_non_null) {
|
TEST(YogaDeathTest, memory_func_assert_all_non_null) {
|
||||||
gNodeInstanceCount = 0; // Reset YGNode instance count for memory func test
|
gNodeInstanceCount = 0; // Reset YGNode instance count for memory func test
|
||||||
|
gConfigInstanceCount = 0; // Reset YGConfig instance count for memory func test
|
||||||
ASSERT_DEATH(YGSetMemoryFuncs(NULL, &testCalloc, &testRealloc, &testFree),
|
ASSERT_DEATH(YGSetMemoryFuncs(NULL, &testCalloc, &testRealloc, &testFree),
|
||||||
"Cannot set memory functions: functions must be all NULL or Non-NULL");
|
"Cannot set memory functions: functions must be all NULL or Non-NULL");
|
||||||
}
|
}
|
||||||
|
@@ -359,7 +359,6 @@ TEST(YogaTest, justify_content_overflow_min_max) {
|
|||||||
|
|
||||||
TEST(YogaTest, flex_grow_to_min) {
|
TEST(YogaTest, flex_grow_to_min) {
|
||||||
const YGConfigRef config = YGConfigNew();
|
const YGConfigRef config = YGConfigNew();
|
||||||
YGConfigSetExperimentalFeatureEnabled(config, YGExperimentalFeatureMinFlexFix, true);
|
|
||||||
|
|
||||||
const YGNodeRef root = YGNodeNewWithConfig(config);
|
const YGNodeRef root = YGNodeNewWithConfig(config);
|
||||||
YGNodeStyleSetWidth(root, 100);
|
YGNodeStyleSetWidth(root, 100);
|
||||||
@@ -415,7 +414,6 @@ TEST(YogaTest, flex_grow_to_min) {
|
|||||||
|
|
||||||
TEST(YogaTest, flex_grow_in_at_most_container) {
|
TEST(YogaTest, flex_grow_in_at_most_container) {
|
||||||
const YGConfigRef config = YGConfigNew();
|
const YGConfigRef config = YGConfigNew();
|
||||||
YGConfigSetExperimentalFeatureEnabled(config, YGExperimentalFeatureMinFlexFix, true);
|
|
||||||
|
|
||||||
const YGNodeRef root = YGNodeNewWithConfig(config);
|
const YGNodeRef root = YGNodeNewWithConfig(config);
|
||||||
YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);
|
YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user