Compare commits
45 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
24e2fc95dd | ||
|
ce3f99939f | ||
|
11bc97b16c | ||
|
4804bcd594 | ||
|
ca2c607f90 | ||
|
6c67684fa6 | ||
|
835b2bbae8 | ||
|
47edd2586c | ||
|
ca483cae00 | ||
|
a20bde8444 | ||
|
ac885626b3 | ||
|
976ecc6816 | ||
|
d2f22283bb | ||
|
56b10fc35b | ||
|
5a3ceffba1 | ||
|
b378a685a4 | ||
|
fa50f048f1 | ||
|
f68b50bb4b | ||
|
aad1c3055c | ||
|
cd1dbc3f0f | ||
|
bf4ff0769d | ||
|
a141ebfb50 | ||
|
2fb01daf70 | ||
|
e9e1e084da | ||
|
629e401deb | ||
|
f4c2b6ae63 | ||
|
4487862227 | ||
|
927eca6604 | ||
|
f2612192c5 | ||
|
49bccf47fa | ||
|
fa54167a20 | ||
|
50feb21cb3 | ||
|
52ce5828c9 | ||
|
9cdaedfcb5 | ||
|
adad054cad | ||
|
b2b0c7ee37 | ||
|
488a7c1fe0 | ||
|
85c2e406e4 | ||
|
dcf57d2f7e | ||
|
3fefe9fc49 | ||
|
626a05fb6f | ||
|
ffcd2cfc8a | ||
|
181101c92d | ||
|
3db6804202 | ||
|
3fb135829d |
11
.editorconfig
Normal file
11
.editorconfig
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
root = true
|
||||||
|
|
||||||
|
[*]
|
||||||
|
indent_style = space
|
||||||
|
indent_size = 2
|
||||||
|
charset = utf-8
|
||||||
|
trim_trailing_whitespace = true
|
||||||
|
insert_final_newline = true
|
||||||
|
|
||||||
|
[*.md]
|
||||||
|
trim_trailing_whitespace = false
|
22
.travis.yml
22
.travis.yml
@@ -9,6 +9,9 @@ os: osx
|
|||||||
osx_image: xcode8.2
|
osx_image: xcode8.2
|
||||||
language: cpp
|
language: cpp
|
||||||
compiler: clang
|
compiler: clang
|
||||||
|
cache:
|
||||||
|
directories:
|
||||||
|
- $HOME/Library/Caches/Homebrew
|
||||||
|
|
||||||
env:
|
env:
|
||||||
- TARGET=c
|
- TARGET=c
|
||||||
@@ -19,7 +22,11 @@ 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
|
- |
|
||||||
|
if [[ -n "$encrypted_d27e803291ff_iv" ]]; then
|
||||||
|
openssl aes-256-cbc -K $encrypted_d27e803291ff_key -iv $encrypted_d27e803291ff_iv -in scripts/setup-keys.enc -d >> gradle.properties;
|
||||||
|
fi
|
||||||
|
|
||||||
- brew update > /dev/null
|
- brew update > /dev/null
|
||||||
- brew install --HEAD facebook/fb/buck
|
- brew install --HEAD facebook/fb/buck
|
||||||
|
|
||||||
@@ -63,12 +70,9 @@ 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 caskroom/cask/android-sdk;
|
export TERMINAL=dumb;
|
||||||
export ANDROID_SDK=/usr/local/Cellar/android-sdk/24.4.1_1;
|
source scripts/android-setup.sh && installAndroidSDK
|
||||||
export ANDROID_HOME=/usr/local/Cellar/android-sdk/24.4.1_1;
|
export ANDROID_SDK=$ANDROID_HOME
|
||||||
brew install lib32stdc++6 lib32z1;
|
|
||||||
echo y | $ANDROID_SDK/tools/android update sdk --filter android-19,addon-google_apis-google-19,build-tools-19.1.0 --no-ui;
|
|
||||||
echo y | $ANDROID_SDK/tools/android update sdk -u;
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# JavaScript
|
# JavaScript
|
||||||
@@ -114,7 +118,9 @@ script:
|
|||||||
# Android
|
# Android
|
||||||
- |
|
- |
|
||||||
if [[ $TARGET = "android" ]]; then
|
if [[ $TARGET = "android" ]]; then
|
||||||
buck build --verbose 0 //android/sample:sample
|
buck build --verbose 0 //android/sample:sample &&
|
||||||
|
./gradlew testDebugUnit &&
|
||||||
|
scripts/publish-snapshot.sh
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# JavaScript
|
# JavaScript
|
||||||
|
23
README.md
23
README.md
@@ -38,3 +38,26 @@ For the main C implementation of Yoga clang-format is used to ensure a consisten
|
|||||||
|
|
||||||
## Benchmarks
|
## Benchmarks
|
||||||
Benchmarks are located in `benchmark/YGBenchmark.c` and can be run with `buck run //benchmark:benchmark`. If you think your change has affected performance please run this before and after your change to validate that nothing has regressed. Benchmarks are run on every commit in CI.
|
Benchmarks are located in `benchmark/YGBenchmark.c` and can be run with `buck run //benchmark:benchmark`. If you think your change has affected performance please run this before and after your change to validate that nothing has regressed. Benchmarks are run on every commit in CI.
|
||||||
|
|
||||||
|
### JavaScript
|
||||||
|
Installing through NPM
|
||||||
|
```sh
|
||||||
|
npm install yoga-layout
|
||||||
|
```
|
||||||
|
By default this will install the library and try to build for all platforms (node, browser asm, and standalone webpack). You may receive errors if you do not have the required platform development tools already installed. To preset the platform you'd like to build for you can set a .npmrc property first.
|
||||||
|
```sh
|
||||||
|
npm config set yoga-layout:platform standalone
|
||||||
|
```
|
||||||
|
This will now only run the standalone webpack build upon install.
|
||||||
|
|
||||||
|
## Build Platforms
|
||||||
|
|
||||||
|
| name | description |
|
||||||
|
|----------------|-------------------------------------------------|
|
||||||
|
| all (default) | Builds all of these platforms. |
|
||||||
|
| browser | Builds asm js browser version. |
|
||||||
|
| node | Builds node js version. |
|
||||||
|
| standalone | Runs webpack. |
|
||||||
|
| none | Does nothing. You can use the prepackaged libs. |
|
||||||
|
|
||||||
|
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
Pod::Spec.new do |spec|
|
Pod::Spec.new do |spec|
|
||||||
spec.name = 'Yoga'
|
spec.name = 'Yoga'
|
||||||
spec.version = '1.3.0'
|
spec.version = '1.5.0'
|
||||||
spec.license = { :type => 'BSD', :file => "LICENSE" }
|
spec.license = { :type => 'BSD', :file => "LICENSE" }
|
||||||
spec.homepage = 'https://facebook.github.io/yoga/'
|
spec.homepage = 'https://facebook.github.io/yoga/'
|
||||||
spec.documentation_url = 'https://facebook.github.io/yoga/docs/api/c/'
|
spec.documentation_url = 'https://facebook.github.io/yoga/docs/api/c/'
|
||||||
@@ -11,7 +11,7 @@ Pod::Spec.new do |spec|
|
|||||||
spec.authors = 'Facebook'
|
spec.authors = 'Facebook'
|
||||||
spec.source = {
|
spec.source = {
|
||||||
:git => 'https://github.com/facebook/yoga.git',
|
:git => 'https://github.com/facebook/yoga.git',
|
||||||
:tag => '1.3.0',
|
:tag => '1.5.0',
|
||||||
}
|
}
|
||||||
|
|
||||||
spec.module_name = 'yoga'
|
spec.module_name = 'yoga'
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
podspec = Pod::Spec.new do |spec|
|
podspec = Pod::Spec.new do |spec|
|
||||||
spec.name = 'YogaKit'
|
spec.name = 'YogaKit'
|
||||||
spec.version = '1.3.0'
|
spec.version = '1.5.0'
|
||||||
spec.license = { :type => 'BSD', :file => "LICENSE" }
|
spec.license = { :type => 'BSD', :file => "LICENSE" }
|
||||||
spec.homepage = 'https://facebook.github.io/yoga/'
|
spec.homepage = 'https://facebook.github.io/yoga/'
|
||||||
spec.documentation_url = 'https://facebook.github.io/yoga/docs/api/yogakit/'
|
spec.documentation_url = 'https://facebook.github.io/yoga/docs/api/yogakit/'
|
||||||
@@ -11,14 +11,14 @@ podspec = Pod::Spec.new do |spec|
|
|||||||
spec.authors = 'Facebook'
|
spec.authors = 'Facebook'
|
||||||
spec.source = {
|
spec.source = {
|
||||||
:git => 'https://github.com/facebook/yoga.git',
|
:git => 'https://github.com/facebook/yoga.git',
|
||||||
:tag => '1.3.0',
|
:tag => '1.5.0',
|
||||||
}
|
}
|
||||||
|
|
||||||
spec.platform = :ios
|
spec.platform = :ios
|
||||||
spec.ios.deployment_target = '7.0'
|
spec.ios.deployment_target = '8.0'
|
||||||
spec.ios.frameworks = 'UIKit'
|
spec.ios.frameworks = 'UIKit'
|
||||||
|
|
||||||
spec.dependency 'Yoga', '~> 1.3'
|
spec.dependency 'Yoga', '~> 1.5'
|
||||||
spec.source_files = 'YogaKit/Source/*.{h,m,swift}'
|
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'
|
||||||
|
@@ -1,46 +0,0 @@
|
|||||||
# CHANGELOG
|
|
||||||
|
|
||||||
The changelog for `YogaKit`.
|
|
||||||
|
|
||||||
1.2.0 (**upcoming release**)
|
|
||||||
-----
|
|
||||||
|
|
||||||
### Breaking Changes
|
|
||||||
|
|
||||||
- `applyLayout()` has now been changed to `applyLayout(preservingOrigin:)`.
|
|
||||||
|
|
||||||
- Computed properties are no longer reflected in getter's of the affected properties.
|
|
||||||
```swift
|
|
||||||
// OLD
|
|
||||||
view.yoga.margin = 10
|
|
||||||
view.yoga.marginTop // 10
|
|
||||||
view.yoga.marginLeft // 10
|
|
||||||
|
|
||||||
// NEW
|
|
||||||
view.yoga.margin = 10
|
|
||||||
view.yoga.marginTop // 0
|
|
||||||
view.yoga.marginLeft // 0
|
|
||||||
```
|
|
||||||
|
|
||||||
### Enhancements
|
|
||||||
|
|
||||||
- Pixel Rounding now uses `roundf()` instead of `round()`.
|
|
||||||
|
|
||||||
- There is now a method that allows "bulk" updates to YGLayout.
|
|
||||||
```objc
|
|
||||||
[view configureLayoutWithBlock:^(YGLayout *layout) {
|
|
||||||
layout.isEnabled = YES;
|
|
||||||
layout.width = 50;
|
|
||||||
layout.height = 50;
|
|
||||||
}];
|
|
||||||
```
|
|
||||||
|
|
||||||
```swift
|
|
||||||
view.configureLayout { (layout) in
|
|
||||||
layout.isEnabled = true
|
|
||||||
layout.width = 50
|
|
||||||
layout.height = 50
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
- Added new `isDirty` property, and make `markDirty` a little more performant.
|
|
@@ -8,7 +8,7 @@
|
|||||||
YogaKit is available to install via [CocoaPods](https://cocoapods.org/).
|
YogaKit is available to install via [CocoaPods](https://cocoapods.org/).
|
||||||
|
|
||||||
```
|
```
|
||||||
pod 'YogaKit', '~> 1.3'
|
pod 'YogaKit', '~> 1.5'
|
||||||
```
|
```
|
||||||
|
|
||||||
## Getting Started
|
## Getting Started
|
||||||
|
@@ -10,12 +10,17 @@
|
|||||||
#import <UIKit/UIKit.h>
|
#import <UIKit/UIKit.h>
|
||||||
#import <yoga/YGEnums.h>
|
#import <yoga/YGEnums.h>
|
||||||
#import <yoga/Yoga.h>
|
#import <yoga/Yoga.h>
|
||||||
|
#import <yoga/YGMacros.h>
|
||||||
|
|
||||||
|
YG_EXTERN_C_BEGIN
|
||||||
|
|
||||||
extern YGValue YGPointValue(CGFloat value)
|
extern YGValue YGPointValue(CGFloat value)
|
||||||
NS_SWIFT_UNAVAILABLE("Use the swift Int and FloatingPoint extensions instead");
|
NS_SWIFT_UNAVAILABLE("Use the swift Int and FloatingPoint extensions instead");
|
||||||
extern YGValue YGPercentValue(CGFloat value)
|
extern YGValue YGPercentValue(CGFloat value)
|
||||||
NS_SWIFT_UNAVAILABLE("Use the swift Int and FloatingPoint extensions instead");
|
NS_SWIFT_UNAVAILABLE("Use the swift Int and FloatingPoint extensions instead");
|
||||||
|
|
||||||
|
YG_EXTERN_C_END
|
||||||
|
|
||||||
typedef NS_OPTIONS(NSInteger, YGDimensionFlexibility) {
|
typedef NS_OPTIONS(NSInteger, YGDimensionFlexibility) {
|
||||||
YGDimensionFlexibilityFlexibleWidth = 1 << 0,
|
YGDimensionFlexibilityFlexibleWidth = 1 << 0,
|
||||||
YGDimensionFlexibilityFlexibleHeigth = 1 << 1,
|
YGDimensionFlexibilityFlexibleHeigth = 1 << 1,
|
||||||
@@ -120,6 +125,12 @@ typedef NS_OPTIONS(NSInteger, YGDimensionFlexibility) {
|
|||||||
*/
|
*/
|
||||||
@property (nonatomic, readonly, assign) CGSize intrinsicSize;
|
@property (nonatomic, readonly, assign) CGSize intrinsicSize;
|
||||||
|
|
||||||
|
/**
|
||||||
|
Returns the size of the view based on provided constraints. Pass NaN for an unconstrained dimension.
|
||||||
|
*/
|
||||||
|
- (CGSize)calculateLayoutWithSize:(CGSize)size
|
||||||
|
NS_SWIFT_NAME(calculateLayout(with:));
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Returns the number of children that are using Flexbox.
|
Returns the number of children that are using Flexbox.
|
||||||
*/
|
*/
|
||||||
|
@@ -271,8 +271,6 @@ YG_PROPERTY(CGFloat, aspectRatio, AspectRatio)
|
|||||||
return [self calculateLayoutWithSize:constrainedSize];
|
return [self calculateLayoutWithSize:constrainedSize];
|
||||||
}
|
}
|
||||||
|
|
||||||
#pragma mark - Private
|
|
||||||
|
|
||||||
- (CGSize)calculateLayoutWithSize:(CGSize)size
|
- (CGSize)calculateLayoutWithSize:(CGSize)size
|
||||||
{
|
{
|
||||||
NSAssert([NSThread isMainThread], @"Yoga calculation must be done on main.");
|
NSAssert([NSThread isMainThread], @"Yoga calculation must be done on main.");
|
||||||
@@ -293,6 +291,8 @@ YG_PROPERTY(CGFloat, aspectRatio, AspectRatio)
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#pragma mark - Private
|
||||||
|
|
||||||
static YGSize YGMeasureView(
|
static YGSize YGMeasureView(
|
||||||
YGNodeRef node,
|
YGNodeRef node,
|
||||||
float width,
|
float width,
|
||||||
|
@@ -4,9 +4,9 @@ PODS:
|
|||||||
- IGListKit/Default (2.1.0):
|
- IGListKit/Default (2.1.0):
|
||||||
- IGListKit/Diffing
|
- IGListKit/Diffing
|
||||||
- IGListKit/Diffing (2.1.0)
|
- IGListKit/Diffing (2.1.0)
|
||||||
- Yoga (1.3.0)
|
- Yoga (1.5.0)
|
||||||
- YogaKit (1.3.0):
|
- YogaKit (1.5.0):
|
||||||
- Yoga (~> 1.3)
|
- Yoga (~> 1.5)
|
||||||
|
|
||||||
DEPENDENCIES:
|
DEPENDENCIES:
|
||||||
- IGListKit (~> 2.1.0)
|
- IGListKit (~> 2.1.0)
|
||||||
|
31
build.gradle
31
build.gradle
@@ -5,7 +5,7 @@ buildscript {
|
|||||||
jcenter()
|
jcenter()
|
||||||
}
|
}
|
||||||
dependencies {
|
dependencies {
|
||||||
classpath 'com.android.tools.build:gradle:2.3.1'
|
classpath 'com.android.tools.build:gradle:2.3.3'
|
||||||
classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.7.3'
|
classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.7.3'
|
||||||
classpath 'com.github.dcendents:android-maven-gradle-plugin:1.4.1'
|
classpath 'com.github.dcendents:android-maven-gradle-plugin:1.4.1'
|
||||||
classpath 'com.nabilhachicha:android-native-dependencies:0.1'
|
classpath 'com.nabilhachicha:android-native-dependencies:0.1'
|
||||||
@@ -22,7 +22,7 @@ allprojects {
|
|||||||
}
|
}
|
||||||
|
|
||||||
ext {
|
ext {
|
||||||
minSdkVersion = 15
|
minSdkVersion = 14
|
||||||
targetSdkVersion = 25
|
targetSdkVersion = 25
|
||||||
compileSdkVersion = 25
|
compileSdkVersion = 25
|
||||||
buildToolsVersion = '25.0.2'
|
buildToolsVersion = '25.0.2'
|
||||||
@@ -30,6 +30,33 @@ ext {
|
|||||||
targetCompatibilityVersion = JavaVersion.VERSION_1_7
|
targetCompatibilityVersion = JavaVersion.VERSION_1_7
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// If you have an idea on how to avoid this, please get in touch or
|
||||||
|
// answer https://stackoverflow.com/questions/43867014/how-to-use-the-gradle-ndk-build-to-compile-for-the-host-machine.
|
||||||
|
task copyNativeLibs(type: Copy, dependsOn: ':buckBuildNative') {
|
||||||
|
from "${rootDir}/buck-out/gen/java/tests#default,shared-library-symlink-tree/"
|
||||||
|
include '*.so'
|
||||||
|
include '*.dylib'
|
||||||
|
into "$buildDir/jniLibs"
|
||||||
|
}
|
||||||
|
|
||||||
|
task buckBuildNative(type: Exec) {
|
||||||
|
workingDir rootDir
|
||||||
|
environment BUCKVERSION: 'last'
|
||||||
|
commandLine 'buck', 'build', '//java/...'
|
||||||
|
}
|
||||||
|
|
||||||
|
allprojects {
|
||||||
|
afterEvaluate {
|
||||||
|
tasks.withType(Test) {
|
||||||
|
dependsOn copyNativeLibs
|
||||||
|
def libDir = "${rootDir}/build/jniLibs"
|
||||||
|
systemProperty 'java.library.path', libDir
|
||||||
|
environment 'LD_LIBRARY_PATH', libDir
|
||||||
|
environment 'DYLD_LIBRARY_PATH', libDir
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
task clean(type: Delete) {
|
task clean(type: Delete) {
|
||||||
delete rootProject.buildDir
|
delete rootProject.buildDir
|
||||||
}
|
}
|
||||||
|
3
csharp/.gitignore
vendored
3
csharp/.gitignore
vendored
@@ -267,3 +267,6 @@ paket-files/
|
|||||||
# Python Tools for Visual Studio (PTVS)
|
# Python Tools for Visual Studio (PTVS)
|
||||||
__pycache__/
|
__pycache__/
|
||||||
*.pyc
|
*.pyc
|
||||||
|
|
||||||
|
# local buck build
|
||||||
|
lib/
|
||||||
|
@@ -267,3 +267,6 @@ paket-files/
|
|||||||
# Python Tools for Visual Studio (PTVS)
|
# Python Tools for Visual Studio (PTVS)
|
||||||
__pycache__/
|
__pycache__/
|
||||||
*.pyc
|
*.pyc
|
||||||
|
|
||||||
|
# local buck build
|
||||||
|
lib/
|
||||||
|
@@ -4,17 +4,17 @@
|
|||||||
<BuildDependsOn>NativeLibraryARMV7;NativeLibraryX86;$(BuildDependsOn)</BuildDependsOn>
|
<BuildDependsOn>NativeLibraryARMV7;NativeLibraryX86;$(BuildDependsOn)</BuildDependsOn>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<Target Name="NativeLibraryARMV7" Outputs="$(ProjectDir)/lib/armeabi-v7a/libyoga.so">
|
<Target Name="NativeLibraryARMV7" Outputs="$(ProjectDir)/lib/armeabi-v7a/libyoga.so">
|
||||||
<Exec WorkingDirectory="$(ProjectDir)" Command="$(ProjectDir)../../Mac/buck-build.sh //csharp:yoganet#android-armv7,shared" />
|
<Exec WorkingDirectory="$(ProjectDir)" Command="$(ProjectDir)../../build-native.sh" />
|
||||||
<Copy SourceFiles="$(ProjectDir)../../../buck-out/gen/csharp/yoganet#android-armv7,shared/libyoga.so" DestinationFiles="$(ProjectDir)/lib/armeabi-v7a/libyoga.so" SkipUnchangedFiles="true" />
|
<Copy SourceFiles="$(ProjectDir)../../../buck-out/gen/csharp/yoganet#android-armv7,shared/libyoga.so" DestinationFiles="$(ProjectDir)/lib/armeabi-v7a/libyoga.so" SkipUnchangedFiles="true" />
|
||||||
</Target>
|
</Target>
|
||||||
<!--
|
<!--
|
||||||
<Target Name="NativeLibraryARM64" Outputs="$(ProjectDir)/lib/arm64-v8a/libyoga.so">
|
<Target Name="NativeLibraryARM64" Outputs="$(ProjectDir)/lib/arm64-v8a/libyoga.so">
|
||||||
<Exec WorkingDirectory="$(ProjectDir)" Command="$(ProjectDir)../../Mac/buck-build.sh //csharp:yoganet#android-arm64,shared" />
|
<Exec WorkingDirectory="$(ProjectDir)" Command="$(ProjectDir)../../build-native.sh" />
|
||||||
<Copy SourceFiles="$(ProjectDir)../../../buck-out/gen/csharp/yoganet#android-arm64,shared/libyoga.so" DestinationFiles="$(ProjectDir)/lib/arm64-v8/libyoga.so" SkipUnchangedFiles="true" />
|
<Copy SourceFiles="$(ProjectDir)../../../buck-out/gen/csharp/yoganet#android-arm64,shared/libyoga.so" DestinationFiles="$(ProjectDir)/lib/arm64-v8/libyoga.so" SkipUnchangedFiles="true" />
|
||||||
</Target>
|
</Target>
|
||||||
-->
|
-->
|
||||||
<Target Name="NativeLibraryX86" Outputs="$(ProjectDir)/lib/x86/libyoga.so">
|
<Target Name="NativeLibraryX86" Outputs="$(ProjectDir)/lib/x86/libyoga.so">
|
||||||
<Exec WorkingDirectory="$(ProjectDir)" Command="$(ProjectDir)../../Mac/buck-build.sh //csharp:yoganet#android-x86,shared" />
|
<Exec WorkingDirectory="$(ProjectDir)" Command="$(ProjectDir)../../build-native.sh" />
|
||||||
<Copy SourceFiles="$(ProjectDir)../../../buck-out/gen/csharp/yoganet#android-x86,shared/libyoga.so" DestinationFiles="$(ProjectDir)/lib/x86/libyoga.so" SkipUnchangedFiles="true" />
|
<Copy SourceFiles="$(ProjectDir)../../../buck-out/gen/csharp/yoganet#android-x86,shared/libyoga.so" DestinationFiles="$(ProjectDir)/lib/x86/libyoga.so" SkipUnchangedFiles="true" />
|
||||||
</Target>
|
</Target>
|
||||||
</Project>
|
</Project>
|
||||||
|
@@ -69,7 +69,7 @@ namespace Facebook.Yoga
|
|||||||
if (config == null || config._logger == null)
|
if (config == null || config._logger == null)
|
||||||
{
|
{
|
||||||
// Default logger
|
// Default logger
|
||||||
Console.WriteLine(message);
|
System.Diagnostics.Debug.WriteLine(message);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
17
csharp/Facebook.Yoga/YogaNodeType.cs
Normal file
17
csharp/Facebook.Yoga/YogaNodeType.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 enum YogaNodeType
|
||||||
|
{
|
||||||
|
Default,
|
||||||
|
Text,
|
||||||
|
}
|
||||||
|
}
|
@@ -4,7 +4,7 @@
|
|||||||
<CompileDependsOn>NativeLibrary;$(CompileDependsOn)</CompileDependsOn>
|
<CompileDependsOn>NativeLibrary;$(CompileDependsOn)</CompileDependsOn>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<Target Name="NativeLibrary" Outputs="$(ProjectDir)libyoga.dylib">
|
<Target Name="NativeLibrary" Outputs="$(ProjectDir)libyoga.dylib">
|
||||||
<Exec WorkingDirectory="$(ProjectDir)" Command="$(ProjectDir)buck-build.sh //csharp:yoganet-macosx" />
|
<Exec WorkingDirectory="$(ProjectDir)" Command="$(ProjectDir)../build-native.sh" />
|
||||||
<Copy SourceFiles="$(ProjectDir)..\..\buck-out\gen\csharp\yoganet-macosx\libyoga.dylib" DestinationFiles="$(ProjectDir)libyoga.dylib" SkipUnchangedFiles="true" />
|
<Copy SourceFiles="$(ProjectDir)..\..\buck-out\gen\csharp\yoganet-macosx\libyoga.dylib" DestinationFiles="$(ProjectDir)libyoga.dylib" SkipUnchangedFiles="true" />
|
||||||
</Target>
|
</Target>
|
||||||
</Project>
|
</Project>
|
@@ -33,6 +33,9 @@ namespace Facebook.Yoga.Mac.Tests
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[System.Runtime.InteropServices.DllImport("/usr/lib/libSystem.dylib")]
|
||||||
|
static extern void _exit(int exit_code);
|
||||||
|
|
||||||
class NSRunLoopIntegration : NSObject, IMainLoopIntegration
|
class NSRunLoopIntegration : NSObject, IMainLoopIntegration
|
||||||
{
|
{
|
||||||
public void InitializeToolkit()
|
public void InitializeToolkit()
|
||||||
@@ -51,7 +54,7 @@ namespace Facebook.Yoga.Mac.Tests
|
|||||||
|
|
||||||
public void Shutdown()
|
public void Shutdown()
|
||||||
{
|
{
|
||||||
Environment.Exit(TestRunner.ExitCode);
|
_exit(TestRunner.ExitCode);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -1,6 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
if buck --version >/dev/null 2>&1; then true; else
|
|
||||||
echo "SKIP: Need to install buck https://buckbuild.com/setup/getting_started.html"
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
buck build $1
|
|
@@ -104,7 +104,7 @@
|
|||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||||
<LinkIncremental>true</LinkIncremental>
|
<LinkIncremental>true</LinkIncremental>
|
||||||
<OutDir>bin\Universal\$(PlatformTarget)\$(Configuration)\</OutDir>
|
<OutDir>bin\Universal\$(PlatformTarget)\$(Configuration)\</OutDir>
|
||||||
<IntDir>obj\$(PlatformTarget)\$(Configuration)\</IntDir>
|
<IntDir>obj\Universal\$(PlatformTarget)\$(Configuration)\</IntDir>
|
||||||
<TargetName>yoga</TargetName>
|
<TargetName>yoga</TargetName>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">
|
||||||
@@ -242,8 +242,8 @@
|
|||||||
</Link>
|
</Link>
|
||||||
</ItemDefinitionGroup>
|
</ItemDefinitionGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
<ClInclude Include="..\..\yoga\YGEnums.h" />
|
||||||
<ClInclude Include="..\..\yoga\Yoga.h" />
|
<ClInclude Include="..\..\yoga\Yoga.h" />
|
||||||
<ClInclude Include="..\..\yoga\YGEnums.c" />
|
|
||||||
<ClInclude Include="..\..\yoga\YGMacros.h" />
|
<ClInclude Include="..\..\yoga\YGMacros.h" />
|
||||||
<ClInclude Include="..\..\yoga\YGNodeList.h" />
|
<ClInclude Include="..\..\yoga\YGNodeList.h" />
|
||||||
<ClInclude Include="resource.h" />
|
<ClInclude Include="resource.h" />
|
||||||
@@ -252,8 +252,8 @@
|
|||||||
<ClInclude Include="targetver.h" />
|
<ClInclude Include="targetver.h" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClCompile Include="..\..\yoga\Yoga.c" />
|
|
||||||
<ClCompile Include="..\..\yoga\YGEnums.c" />
|
<ClCompile Include="..\..\yoga\YGEnums.c" />
|
||||||
|
<ClCompile Include="..\..\yoga\Yoga.c" />
|
||||||
<ClCompile Include="..\..\yoga\YGNodeList.c" />
|
<ClCompile Include="..\..\yoga\YGNodeList.c" />
|
||||||
<ClCompile Include="YGInterop.cpp" />
|
<ClCompile Include="YGInterop.cpp" />
|
||||||
<ClCompile Include="dllmain.cpp">
|
<ClCompile Include="dllmain.cpp">
|
||||||
|
@@ -36,6 +36,9 @@
|
|||||||
<ClInclude Include="resource.h">
|
<ClInclude Include="resource.h">
|
||||||
<Filter>Header Files</Filter>
|
<Filter>Header Files</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\..\yoga\YGEnums.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClCompile Include="stdafx.cpp">
|
<ClCompile Include="stdafx.cpp">
|
||||||
@@ -53,6 +56,9 @@
|
|||||||
<ClCompile Include="YGInterop.cpp">
|
<ClCompile Include="YGInterop.cpp">
|
||||||
<Filter>Source Files</Filter>
|
<Filter>Source Files</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\yoga\YGEnums.c">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ResourceCompile Include="Yoga.rc">
|
<ResourceCompile Include="Yoga.rc">
|
||||||
|
@@ -1,17 +1,25 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
cd `dirname "$0"`
|
||||||
echo $ANDROID_SDK
|
echo $ANDROID_SDK
|
||||||
if buck --version >/dev/null 2>&1; then true; else
|
BUCK_RELEASE=2017.05.09.01
|
||||||
|
echo "buck $BUCK_RELEASE"
|
||||||
|
BUCK=lib/buck-$BUCK_RELEASE/bin/buck
|
||||||
|
if $BUCK --version >/dev/null 2>&1; then true; else
|
||||||
echo "Building Buck!"
|
echo "Building Buck!"
|
||||||
mkdir lib
|
BUCK_PATH=buck-$BUCK_RELEASE
|
||||||
|
mkdir -p lib
|
||||||
cd lib
|
cd lib
|
||||||
git clone https://github.com/facebook/buck.git --depth 1
|
rm -f $BUCK_PATH.tar.gz
|
||||||
cd buck
|
curl -O -J -L https://github.com/facebook/buck/archive/v$BUCK_RELEASE.tar.gz
|
||||||
|
tar xzf $BUCK_PATH.tar.gz
|
||||||
|
cd $BUCK_PATH
|
||||||
ant
|
ant
|
||||||
cd ..
|
cd ../..
|
||||||
cd ..
|
|
||||||
fi
|
fi
|
||||||
buck build //:yoga
|
|
||||||
buck build //csharp:yoganet-ios
|
$BUCK build \
|
||||||
buck build //csharp:yoganet-macosx
|
//csharp:yoganet-ios \
|
||||||
buck build //csharp:yoganet#android-x86,shared
|
//csharp:yoganet-macosx \
|
||||||
buck build //csharp:yoganet#android-armv7,shared
|
//csharp:yoganet#android-armv7,shared \
|
||||||
|
//csharp:yoganet#android-x86,shared
|
||||||
|
|
||||||
|
@@ -4,7 +4,7 @@
|
|||||||
<CompileDependsOn>NativeLibrary;$(CompileDependsOn)</CompileDependsOn>
|
<CompileDependsOn>NativeLibrary;$(CompileDependsOn)</CompileDependsOn>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<Target Name="NativeLibrary" Outputs="$(ProjectDir)libyoga.a">
|
<Target Name="NativeLibrary" Outputs="$(ProjectDir)libyoga.a">
|
||||||
<Exec WorkingDirectory="$(ProjectDir)" Command="$(ProjectDir)../../Mac/buck-build.sh //csharp:yoganet-ios" />
|
<Exec WorkingDirectory="$(ProjectDir)" Command="$(ProjectDir)../../build-native.sh" />
|
||||||
<Copy SourceFiles="$(ProjectDir)..\..\..\buck-out\gen\csharp\yoganet-ios\libyoga.a" DestinationFiles="$(ProjectDir)libyoga.a" SkipUnchangedFiles="true" />
|
<Copy SourceFiles="$(ProjectDir)..\..\..\buck-out\gen\csharp\yoganet-ios\libyoga.a" DestinationFiles="$(ProjectDir)libyoga.a" SkipUnchangedFiles="true" />
|
||||||
</Target>
|
</Target>
|
||||||
</Project>
|
</Project>
|
||||||
|
@@ -285,6 +285,30 @@ namespace Facebook.Yoga
|
|||||||
root_child1.Width = 50;
|
root_child1.Width = 50;
|
||||||
root_child1.Height = 50;
|
root_child1.Height = 50;
|
||||||
root.Insert(1, root_child1);
|
root.Insert(1, root_child1);
|
||||||
|
|
||||||
|
YogaNode root_child2 = new YogaNode(config);
|
||||||
|
root_child2.PositionType = YogaPositionType.Absolute;
|
||||||
|
root_child2.Left = 0;
|
||||||
|
root_child2.Top = 0;
|
||||||
|
root_child2.MarginLeft = 10;
|
||||||
|
root_child2.MarginTop = 10;
|
||||||
|
root_child2.MarginRight = 10;
|
||||||
|
root_child2.MarginBottom = 10;
|
||||||
|
root_child2.Width = 50;
|
||||||
|
root_child2.Height = 50;
|
||||||
|
root.Insert(2, root_child2);
|
||||||
|
|
||||||
|
YogaNode root_child3 = new YogaNode(config);
|
||||||
|
root_child3.PositionType = YogaPositionType.Absolute;
|
||||||
|
root_child3.Right = 0;
|
||||||
|
root_child3.Bottom = 0;
|
||||||
|
root_child3.MarginLeft = 10;
|
||||||
|
root_child3.MarginTop = 10;
|
||||||
|
root_child3.MarginRight = 10;
|
||||||
|
root_child3.MarginBottom = 10;
|
||||||
|
root_child3.Width = 50;
|
||||||
|
root_child3.Height = 50;
|
||||||
|
root.Insert(3, root_child3);
|
||||||
root.StyleDirection = YogaDirection.LTR;
|
root.StyleDirection = YogaDirection.LTR;
|
||||||
root.CalculateLayout();
|
root.CalculateLayout();
|
||||||
|
|
||||||
@@ -303,6 +327,16 @@ namespace Facebook.Yoga
|
|||||||
Assert.AreEqual(50f, root_child1.LayoutWidth);
|
Assert.AreEqual(50f, root_child1.LayoutWidth);
|
||||||
Assert.AreEqual(50f, root_child1.LayoutHeight);
|
Assert.AreEqual(50f, root_child1.LayoutHeight);
|
||||||
|
|
||||||
|
Assert.AreEqual(20f, root_child2.LayoutX);
|
||||||
|
Assert.AreEqual(20f, root_child2.LayoutY);
|
||||||
|
Assert.AreEqual(50f, root_child2.LayoutWidth);
|
||||||
|
Assert.AreEqual(50f, root_child2.LayoutHeight);
|
||||||
|
|
||||||
|
Assert.AreEqual(30f, root_child3.LayoutX);
|
||||||
|
Assert.AreEqual(30f, root_child3.LayoutY);
|
||||||
|
Assert.AreEqual(50f, root_child3.LayoutWidth);
|
||||||
|
Assert.AreEqual(50f, root_child3.LayoutHeight);
|
||||||
|
|
||||||
root.StyleDirection = YogaDirection.RTL;
|
root.StyleDirection = YogaDirection.RTL;
|
||||||
root.CalculateLayout();
|
root.CalculateLayout();
|
||||||
|
|
||||||
@@ -320,6 +354,16 @@ namespace Facebook.Yoga
|
|||||||
Assert.AreEqual(40f, root_child1.LayoutY);
|
Assert.AreEqual(40f, root_child1.LayoutY);
|
||||||
Assert.AreEqual(50f, root_child1.LayoutWidth);
|
Assert.AreEqual(50f, root_child1.LayoutWidth);
|
||||||
Assert.AreEqual(50f, root_child1.LayoutHeight);
|
Assert.AreEqual(50f, root_child1.LayoutHeight);
|
||||||
|
|
||||||
|
Assert.AreEqual(20f, root_child2.LayoutX);
|
||||||
|
Assert.AreEqual(20f, root_child2.LayoutY);
|
||||||
|
Assert.AreEqual(50f, root_child2.LayoutWidth);
|
||||||
|
Assert.AreEqual(50f, root_child2.LayoutHeight);
|
||||||
|
|
||||||
|
Assert.AreEqual(30f, root_child3.LayoutX);
|
||||||
|
Assert.AreEqual(30f, root_child3.LayoutY);
|
||||||
|
Assert.AreEqual(50f, root_child3.LayoutWidth);
|
||||||
|
Assert.AreEqual(50f, root_child3.LayoutHeight);
|
||||||
}
|
}
|
||||||
|
|
||||||
[Test]
|
[Test]
|
||||||
@@ -745,5 +789,253 @@ namespace Facebook.Yoga
|
|||||||
Assert.AreEqual(52f, root.LayoutHeight);
|
Assert.AreEqual(52f, root.LayoutHeight);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void Test_absolute_layout_percentage_bottom_based_on_parent_height()
|
||||||
|
{
|
||||||
|
YogaConfig config = new YogaConfig();
|
||||||
|
|
||||||
|
YogaNode root = new YogaNode(config);
|
||||||
|
root.Width = 100;
|
||||||
|
root.Height = 200;
|
||||||
|
|
||||||
|
YogaNode root_child0 = new YogaNode(config);
|
||||||
|
root_child0.PositionType = YogaPositionType.Absolute;
|
||||||
|
root_child0.Top = 50.Percent();
|
||||||
|
root_child0.Width = 10;
|
||||||
|
root_child0.Height = 10;
|
||||||
|
root.Insert(0, root_child0);
|
||||||
|
|
||||||
|
YogaNode root_child1 = new YogaNode(config);
|
||||||
|
root_child1.PositionType = YogaPositionType.Absolute;
|
||||||
|
root_child1.Bottom = 50.Percent();
|
||||||
|
root_child1.Width = 10;
|
||||||
|
root_child1.Height = 10;
|
||||||
|
root.Insert(1, root_child1);
|
||||||
|
|
||||||
|
YogaNode root_child2 = new YogaNode(config);
|
||||||
|
root_child2.PositionType = YogaPositionType.Absolute;
|
||||||
|
root_child2.Top = 10.Percent();
|
||||||
|
root_child2.Bottom = 10.Percent();
|
||||||
|
root_child2.Width = 10;
|
||||||
|
root.Insert(2, root_child2);
|
||||||
|
root.StyleDirection = YogaDirection.LTR;
|
||||||
|
root.CalculateLayout();
|
||||||
|
|
||||||
|
Assert.AreEqual(0f, root.LayoutX);
|
||||||
|
Assert.AreEqual(0f, root.LayoutY);
|
||||||
|
Assert.AreEqual(100f, root.LayoutWidth);
|
||||||
|
Assert.AreEqual(200f, root.LayoutHeight);
|
||||||
|
|
||||||
|
Assert.AreEqual(0f, root_child0.LayoutX);
|
||||||
|
Assert.AreEqual(100f, root_child0.LayoutY);
|
||||||
|
Assert.AreEqual(10f, root_child0.LayoutWidth);
|
||||||
|
Assert.AreEqual(10f, root_child0.LayoutHeight);
|
||||||
|
|
||||||
|
Assert.AreEqual(0f, root_child1.LayoutX);
|
||||||
|
Assert.AreEqual(90f, root_child1.LayoutY);
|
||||||
|
Assert.AreEqual(10f, root_child1.LayoutWidth);
|
||||||
|
Assert.AreEqual(10f, root_child1.LayoutHeight);
|
||||||
|
|
||||||
|
Assert.AreEqual(0f, root_child2.LayoutX);
|
||||||
|
Assert.AreEqual(20f, root_child2.LayoutY);
|
||||||
|
Assert.AreEqual(10f, root_child2.LayoutWidth);
|
||||||
|
Assert.AreEqual(160f, root_child2.LayoutHeight);
|
||||||
|
|
||||||
|
root.StyleDirection = YogaDirection.RTL;
|
||||||
|
root.CalculateLayout();
|
||||||
|
|
||||||
|
Assert.AreEqual(0f, root.LayoutX);
|
||||||
|
Assert.AreEqual(0f, root.LayoutY);
|
||||||
|
Assert.AreEqual(100f, root.LayoutWidth);
|
||||||
|
Assert.AreEqual(200f, root.LayoutHeight);
|
||||||
|
|
||||||
|
Assert.AreEqual(90f, root_child0.LayoutX);
|
||||||
|
Assert.AreEqual(100f, root_child0.LayoutY);
|
||||||
|
Assert.AreEqual(10f, root_child0.LayoutWidth);
|
||||||
|
Assert.AreEqual(10f, root_child0.LayoutHeight);
|
||||||
|
|
||||||
|
Assert.AreEqual(90f, root_child1.LayoutX);
|
||||||
|
Assert.AreEqual(90f, root_child1.LayoutY);
|
||||||
|
Assert.AreEqual(10f, root_child1.LayoutWidth);
|
||||||
|
Assert.AreEqual(10f, root_child1.LayoutHeight);
|
||||||
|
|
||||||
|
Assert.AreEqual(90f, root_child2.LayoutX);
|
||||||
|
Assert.AreEqual(20f, root_child2.LayoutY);
|
||||||
|
Assert.AreEqual(10f, root_child2.LayoutWidth);
|
||||||
|
Assert.AreEqual(160f, root_child2.LayoutHeight);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void Test_absolute_layout_in_wrap_reverse_column_container()
|
||||||
|
{
|
||||||
|
YogaConfig config = new YogaConfig();
|
||||||
|
|
||||||
|
YogaNode root = new YogaNode(config);
|
||||||
|
root.Wrap = YogaWrap.WrapReverse;
|
||||||
|
root.Width = 100;
|
||||||
|
root.Height = 100;
|
||||||
|
|
||||||
|
YogaNode root_child0 = new YogaNode(config);
|
||||||
|
root_child0.PositionType = YogaPositionType.Absolute;
|
||||||
|
root_child0.Width = 20;
|
||||||
|
root_child0.Height = 20;
|
||||||
|
root.Insert(0, root_child0);
|
||||||
|
root.StyleDirection = YogaDirection.LTR;
|
||||||
|
root.CalculateLayout();
|
||||||
|
|
||||||
|
Assert.AreEqual(0f, root.LayoutX);
|
||||||
|
Assert.AreEqual(0f, root.LayoutY);
|
||||||
|
Assert.AreEqual(100f, root.LayoutWidth);
|
||||||
|
Assert.AreEqual(100f, root.LayoutHeight);
|
||||||
|
|
||||||
|
Assert.AreEqual(80f, root_child0.LayoutX);
|
||||||
|
Assert.AreEqual(0f, root_child0.LayoutY);
|
||||||
|
Assert.AreEqual(20f, root_child0.LayoutWidth);
|
||||||
|
Assert.AreEqual(20f, root_child0.LayoutHeight);
|
||||||
|
|
||||||
|
root.StyleDirection = YogaDirection.RTL;
|
||||||
|
root.CalculateLayout();
|
||||||
|
|
||||||
|
Assert.AreEqual(0f, root.LayoutX);
|
||||||
|
Assert.AreEqual(0f, 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(20f, root_child0.LayoutWidth);
|
||||||
|
Assert.AreEqual(20f, root_child0.LayoutHeight);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void Test_absolute_layout_in_wrap_reverse_row_container()
|
||||||
|
{
|
||||||
|
YogaConfig config = new YogaConfig();
|
||||||
|
|
||||||
|
YogaNode root = new YogaNode(config);
|
||||||
|
root.FlexDirection = YogaFlexDirection.Row;
|
||||||
|
root.Wrap = YogaWrap.WrapReverse;
|
||||||
|
root.Width = 100;
|
||||||
|
root.Height = 100;
|
||||||
|
|
||||||
|
YogaNode root_child0 = new YogaNode(config);
|
||||||
|
root_child0.PositionType = YogaPositionType.Absolute;
|
||||||
|
root_child0.Width = 20;
|
||||||
|
root_child0.Height = 20;
|
||||||
|
root.Insert(0, root_child0);
|
||||||
|
root.StyleDirection = YogaDirection.LTR;
|
||||||
|
root.CalculateLayout();
|
||||||
|
|
||||||
|
Assert.AreEqual(0f, root.LayoutX);
|
||||||
|
Assert.AreEqual(0f, root.LayoutY);
|
||||||
|
Assert.AreEqual(100f, root.LayoutWidth);
|
||||||
|
Assert.AreEqual(100f, root.LayoutHeight);
|
||||||
|
|
||||||
|
Assert.AreEqual(0f, root_child0.LayoutX);
|
||||||
|
Assert.AreEqual(80f, root_child0.LayoutY);
|
||||||
|
Assert.AreEqual(20f, root_child0.LayoutWidth);
|
||||||
|
Assert.AreEqual(20f, root_child0.LayoutHeight);
|
||||||
|
|
||||||
|
root.StyleDirection = YogaDirection.RTL;
|
||||||
|
root.CalculateLayout();
|
||||||
|
|
||||||
|
Assert.AreEqual(0f, root.LayoutX);
|
||||||
|
Assert.AreEqual(0f, root.LayoutY);
|
||||||
|
Assert.AreEqual(100f, root.LayoutWidth);
|
||||||
|
Assert.AreEqual(100f, root.LayoutHeight);
|
||||||
|
|
||||||
|
Assert.AreEqual(80f, root_child0.LayoutX);
|
||||||
|
Assert.AreEqual(80f, root_child0.LayoutY);
|
||||||
|
Assert.AreEqual(20f, root_child0.LayoutWidth);
|
||||||
|
Assert.AreEqual(20f, root_child0.LayoutHeight);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void Test_absolute_layout_in_wrap_reverse_column_container_flex_end()
|
||||||
|
{
|
||||||
|
YogaConfig config = new YogaConfig();
|
||||||
|
|
||||||
|
YogaNode root = new YogaNode(config);
|
||||||
|
root.Wrap = YogaWrap.WrapReverse;
|
||||||
|
root.Width = 100;
|
||||||
|
root.Height = 100;
|
||||||
|
|
||||||
|
YogaNode root_child0 = new YogaNode(config);
|
||||||
|
root_child0.AlignSelf = YogaAlign.FlexEnd;
|
||||||
|
root_child0.PositionType = YogaPositionType.Absolute;
|
||||||
|
root_child0.Width = 20;
|
||||||
|
root_child0.Height = 20;
|
||||||
|
root.Insert(0, root_child0);
|
||||||
|
root.StyleDirection = YogaDirection.LTR;
|
||||||
|
root.CalculateLayout();
|
||||||
|
|
||||||
|
Assert.AreEqual(0f, root.LayoutX);
|
||||||
|
Assert.AreEqual(0f, 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(20f, root_child0.LayoutWidth);
|
||||||
|
Assert.AreEqual(20f, root_child0.LayoutHeight);
|
||||||
|
|
||||||
|
root.StyleDirection = YogaDirection.RTL;
|
||||||
|
root.CalculateLayout();
|
||||||
|
|
||||||
|
Assert.AreEqual(0f, root.LayoutX);
|
||||||
|
Assert.AreEqual(0f, root.LayoutY);
|
||||||
|
Assert.AreEqual(100f, root.LayoutWidth);
|
||||||
|
Assert.AreEqual(100f, root.LayoutHeight);
|
||||||
|
|
||||||
|
Assert.AreEqual(80f, root_child0.LayoutX);
|
||||||
|
Assert.AreEqual(0f, root_child0.LayoutY);
|
||||||
|
Assert.AreEqual(20f, root_child0.LayoutWidth);
|
||||||
|
Assert.AreEqual(20f, root_child0.LayoutHeight);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void Test_absolute_layout_in_wrap_reverse_row_container_flex_end()
|
||||||
|
{
|
||||||
|
YogaConfig config = new YogaConfig();
|
||||||
|
|
||||||
|
YogaNode root = new YogaNode(config);
|
||||||
|
root.FlexDirection = YogaFlexDirection.Row;
|
||||||
|
root.Wrap = YogaWrap.WrapReverse;
|
||||||
|
root.Width = 100;
|
||||||
|
root.Height = 100;
|
||||||
|
|
||||||
|
YogaNode root_child0 = new YogaNode(config);
|
||||||
|
root_child0.AlignSelf = YogaAlign.FlexEnd;
|
||||||
|
root_child0.PositionType = YogaPositionType.Absolute;
|
||||||
|
root_child0.Width = 20;
|
||||||
|
root_child0.Height = 20;
|
||||||
|
root.Insert(0, root_child0);
|
||||||
|
root.StyleDirection = YogaDirection.LTR;
|
||||||
|
root.CalculateLayout();
|
||||||
|
|
||||||
|
Assert.AreEqual(0f, root.LayoutX);
|
||||||
|
Assert.AreEqual(0f, 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(20f, root_child0.LayoutWidth);
|
||||||
|
Assert.AreEqual(20f, root_child0.LayoutHeight);
|
||||||
|
|
||||||
|
root.StyleDirection = YogaDirection.RTL;
|
||||||
|
root.CalculateLayout();
|
||||||
|
|
||||||
|
Assert.AreEqual(0f, root.LayoutX);
|
||||||
|
Assert.AreEqual(0f, root.LayoutY);
|
||||||
|
Assert.AreEqual(100f, root.LayoutWidth);
|
||||||
|
Assert.AreEqual(100f, root.LayoutHeight);
|
||||||
|
|
||||||
|
Assert.AreEqual(80f, root_child0.LayoutX);
|
||||||
|
Assert.AreEqual(0f, root_child0.LayoutY);
|
||||||
|
Assert.AreEqual(20f, root_child0.LayoutWidth);
|
||||||
|
Assert.AreEqual(20f, root_child0.LayoutHeight);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -429,5 +429,73 @@ namespace Facebook.Yoga
|
|||||||
Assert.AreEqual(0f, root_child0_child0.LayoutHeight);
|
Assert.AreEqual(0f, root_child0_child0.LayoutHeight);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void Test_flex_grow_less_than_factor_one()
|
||||||
|
{
|
||||||
|
YogaConfig config = new YogaConfig();
|
||||||
|
|
||||||
|
YogaNode root = new YogaNode(config);
|
||||||
|
root.Width = 200;
|
||||||
|
root.Height = 500;
|
||||||
|
|
||||||
|
YogaNode root_child0 = new YogaNode(config);
|
||||||
|
root_child0.FlexGrow = 0.2f;
|
||||||
|
root_child0.FlexBasis = 40;
|
||||||
|
root.Insert(0, root_child0);
|
||||||
|
|
||||||
|
YogaNode root_child1 = new YogaNode(config);
|
||||||
|
root_child1.FlexGrow = 0.2f;
|
||||||
|
root.Insert(1, root_child1);
|
||||||
|
|
||||||
|
YogaNode root_child2 = new YogaNode(config);
|
||||||
|
root_child2.FlexGrow = 0.4f;
|
||||||
|
root.Insert(2, root_child2);
|
||||||
|
root.StyleDirection = YogaDirection.LTR;
|
||||||
|
root.CalculateLayout();
|
||||||
|
|
||||||
|
Assert.AreEqual(0f, root.LayoutX);
|
||||||
|
Assert.AreEqual(0f, root.LayoutY);
|
||||||
|
Assert.AreEqual(200f, root.LayoutWidth);
|
||||||
|
Assert.AreEqual(500f, root.LayoutHeight);
|
||||||
|
|
||||||
|
Assert.AreEqual(0f, root_child0.LayoutX);
|
||||||
|
Assert.AreEqual(0f, root_child0.LayoutY);
|
||||||
|
Assert.AreEqual(200f, root_child0.LayoutWidth);
|
||||||
|
Assert.AreEqual(132f, root_child0.LayoutHeight);
|
||||||
|
|
||||||
|
Assert.AreEqual(0f, root_child1.LayoutX);
|
||||||
|
Assert.AreEqual(132f, root_child1.LayoutY);
|
||||||
|
Assert.AreEqual(200f, root_child1.LayoutWidth);
|
||||||
|
Assert.AreEqual(92f, root_child1.LayoutHeight);
|
||||||
|
|
||||||
|
Assert.AreEqual(0f, root_child2.LayoutX);
|
||||||
|
Assert.AreEqual(224f, root_child2.LayoutY);
|
||||||
|
Assert.AreEqual(200f, root_child2.LayoutWidth);
|
||||||
|
Assert.AreEqual(184f, root_child2.LayoutHeight);
|
||||||
|
|
||||||
|
root.StyleDirection = YogaDirection.RTL;
|
||||||
|
root.CalculateLayout();
|
||||||
|
|
||||||
|
Assert.AreEqual(0f, root.LayoutX);
|
||||||
|
Assert.AreEqual(0f, root.LayoutY);
|
||||||
|
Assert.AreEqual(200f, root.LayoutWidth);
|
||||||
|
Assert.AreEqual(500f, root.LayoutHeight);
|
||||||
|
|
||||||
|
Assert.AreEqual(0f, root_child0.LayoutX);
|
||||||
|
Assert.AreEqual(0f, root_child0.LayoutY);
|
||||||
|
Assert.AreEqual(200f, root_child0.LayoutWidth);
|
||||||
|
Assert.AreEqual(132f, root_child0.LayoutHeight);
|
||||||
|
|
||||||
|
Assert.AreEqual(0f, root_child1.LayoutX);
|
||||||
|
Assert.AreEqual(132f, root_child1.LayoutY);
|
||||||
|
Assert.AreEqual(200f, root_child1.LayoutWidth);
|
||||||
|
Assert.AreEqual(92f, root_child1.LayoutHeight);
|
||||||
|
|
||||||
|
Assert.AreEqual(0f, root_child2.LayoutX);
|
||||||
|
Assert.AreEqual(224f, root_child2.LayoutY);
|
||||||
|
Assert.AreEqual(200f, root_child2.LayoutWidth);
|
||||||
|
Assert.AreEqual(184f, root_child2.LayoutHeight);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -1545,5 +1545,201 @@ namespace Facebook.Yoga
|
|||||||
Assert.AreEqual(100f, root_child2.LayoutHeight);
|
Assert.AreEqual(100f, root_child2.LayoutHeight);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void Test_wrap_nodes_with_content_sizing_overflowing_margin()
|
||||||
|
{
|
||||||
|
YogaConfig config = new YogaConfig();
|
||||||
|
|
||||||
|
YogaNode root = new YogaNode(config);
|
||||||
|
root.Width = 500;
|
||||||
|
root.Height = 500;
|
||||||
|
|
||||||
|
YogaNode root_child0 = new YogaNode(config);
|
||||||
|
root_child0.FlexDirection = YogaFlexDirection.Row;
|
||||||
|
root_child0.Wrap = YogaWrap.Wrap;
|
||||||
|
root_child0.Width = 85;
|
||||||
|
root.Insert(0, root_child0);
|
||||||
|
|
||||||
|
YogaNode root_child0_child0 = new YogaNode(config);
|
||||||
|
root_child0.Insert(0, root_child0_child0);
|
||||||
|
|
||||||
|
YogaNode root_child0_child0_child0 = new YogaNode(config);
|
||||||
|
root_child0_child0_child0.Width = 40;
|
||||||
|
root_child0_child0_child0.Height = 40;
|
||||||
|
root_child0_child0.Insert(0, root_child0_child0_child0);
|
||||||
|
|
||||||
|
YogaNode root_child0_child1 = new YogaNode(config);
|
||||||
|
root_child0_child1.MarginRight = 10;
|
||||||
|
root_child0.Insert(1, root_child0_child1);
|
||||||
|
|
||||||
|
YogaNode root_child0_child1_child0 = new YogaNode(config);
|
||||||
|
root_child0_child1_child0.Width = 40;
|
||||||
|
root_child0_child1_child0.Height = 40;
|
||||||
|
root_child0_child1.Insert(0, root_child0_child1_child0);
|
||||||
|
root.StyleDirection = YogaDirection.LTR;
|
||||||
|
root.CalculateLayout();
|
||||||
|
|
||||||
|
Assert.AreEqual(0f, root.LayoutX);
|
||||||
|
Assert.AreEqual(0f, root.LayoutY);
|
||||||
|
Assert.AreEqual(500f, root.LayoutWidth);
|
||||||
|
Assert.AreEqual(500f, root.LayoutHeight);
|
||||||
|
|
||||||
|
Assert.AreEqual(0f, root_child0.LayoutX);
|
||||||
|
Assert.AreEqual(0f, root_child0.LayoutY);
|
||||||
|
Assert.AreEqual(85f, root_child0.LayoutWidth);
|
||||||
|
Assert.AreEqual(80f, root_child0.LayoutHeight);
|
||||||
|
|
||||||
|
Assert.AreEqual(0f, root_child0_child0.LayoutX);
|
||||||
|
Assert.AreEqual(0f, root_child0_child0.LayoutY);
|
||||||
|
Assert.AreEqual(40f, root_child0_child0.LayoutWidth);
|
||||||
|
Assert.AreEqual(40f, root_child0_child0.LayoutHeight);
|
||||||
|
|
||||||
|
Assert.AreEqual(0f, root_child0_child0_child0.LayoutX);
|
||||||
|
Assert.AreEqual(0f, root_child0_child0_child0.LayoutY);
|
||||||
|
Assert.AreEqual(40f, root_child0_child0_child0.LayoutWidth);
|
||||||
|
Assert.AreEqual(40f, root_child0_child0_child0.LayoutHeight);
|
||||||
|
|
||||||
|
Assert.AreEqual(0f, root_child0_child1.LayoutX);
|
||||||
|
Assert.AreEqual(40f, root_child0_child1.LayoutY);
|
||||||
|
Assert.AreEqual(40f, root_child0_child1.LayoutWidth);
|
||||||
|
Assert.AreEqual(40f, root_child0_child1.LayoutHeight);
|
||||||
|
|
||||||
|
Assert.AreEqual(0f, root_child0_child1_child0.LayoutX);
|
||||||
|
Assert.AreEqual(0f, root_child0_child1_child0.LayoutY);
|
||||||
|
Assert.AreEqual(40f, root_child0_child1_child0.LayoutWidth);
|
||||||
|
Assert.AreEqual(40f, root_child0_child1_child0.LayoutHeight);
|
||||||
|
|
||||||
|
root.StyleDirection = YogaDirection.RTL;
|
||||||
|
root.CalculateLayout();
|
||||||
|
|
||||||
|
Assert.AreEqual(0f, root.LayoutX);
|
||||||
|
Assert.AreEqual(0f, root.LayoutY);
|
||||||
|
Assert.AreEqual(500f, root.LayoutWidth);
|
||||||
|
Assert.AreEqual(500f, root.LayoutHeight);
|
||||||
|
|
||||||
|
Assert.AreEqual(415f, root_child0.LayoutX);
|
||||||
|
Assert.AreEqual(0f, root_child0.LayoutY);
|
||||||
|
Assert.AreEqual(85f, root_child0.LayoutWidth);
|
||||||
|
Assert.AreEqual(80f, root_child0.LayoutHeight);
|
||||||
|
|
||||||
|
Assert.AreEqual(45f, root_child0_child0.LayoutX);
|
||||||
|
Assert.AreEqual(0f, root_child0_child0.LayoutY);
|
||||||
|
Assert.AreEqual(40f, root_child0_child0.LayoutWidth);
|
||||||
|
Assert.AreEqual(40f, root_child0_child0.LayoutHeight);
|
||||||
|
|
||||||
|
Assert.AreEqual(0f, root_child0_child0_child0.LayoutX);
|
||||||
|
Assert.AreEqual(0f, root_child0_child0_child0.LayoutY);
|
||||||
|
Assert.AreEqual(40f, root_child0_child0_child0.LayoutWidth);
|
||||||
|
Assert.AreEqual(40f, root_child0_child0_child0.LayoutHeight);
|
||||||
|
|
||||||
|
Assert.AreEqual(35f, root_child0_child1.LayoutX);
|
||||||
|
Assert.AreEqual(40f, root_child0_child1.LayoutY);
|
||||||
|
Assert.AreEqual(40f, root_child0_child1.LayoutWidth);
|
||||||
|
Assert.AreEqual(40f, root_child0_child1.LayoutHeight);
|
||||||
|
|
||||||
|
Assert.AreEqual(0f, root_child0_child1_child0.LayoutX);
|
||||||
|
Assert.AreEqual(0f, root_child0_child1_child0.LayoutY);
|
||||||
|
Assert.AreEqual(40f, root_child0_child1_child0.LayoutWidth);
|
||||||
|
Assert.AreEqual(40f, root_child0_child1_child0.LayoutHeight);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void Test_wrap_nodes_with_content_sizing_margin_cross()
|
||||||
|
{
|
||||||
|
YogaConfig config = new YogaConfig();
|
||||||
|
|
||||||
|
YogaNode root = new YogaNode(config);
|
||||||
|
root.Width = 500;
|
||||||
|
root.Height = 500;
|
||||||
|
|
||||||
|
YogaNode root_child0 = new YogaNode(config);
|
||||||
|
root_child0.FlexDirection = YogaFlexDirection.Row;
|
||||||
|
root_child0.Wrap = YogaWrap.Wrap;
|
||||||
|
root_child0.Width = 70;
|
||||||
|
root.Insert(0, root_child0);
|
||||||
|
|
||||||
|
YogaNode root_child0_child0 = new YogaNode(config);
|
||||||
|
root_child0.Insert(0, root_child0_child0);
|
||||||
|
|
||||||
|
YogaNode root_child0_child0_child0 = new YogaNode(config);
|
||||||
|
root_child0_child0_child0.Width = 40;
|
||||||
|
root_child0_child0_child0.Height = 40;
|
||||||
|
root_child0_child0.Insert(0, root_child0_child0_child0);
|
||||||
|
|
||||||
|
YogaNode root_child0_child1 = new YogaNode(config);
|
||||||
|
root_child0_child1.MarginTop = 10;
|
||||||
|
root_child0.Insert(1, root_child0_child1);
|
||||||
|
|
||||||
|
YogaNode root_child0_child1_child0 = new YogaNode(config);
|
||||||
|
root_child0_child1_child0.Width = 40;
|
||||||
|
root_child0_child1_child0.Height = 40;
|
||||||
|
root_child0_child1.Insert(0, root_child0_child1_child0);
|
||||||
|
root.StyleDirection = YogaDirection.LTR;
|
||||||
|
root.CalculateLayout();
|
||||||
|
|
||||||
|
Assert.AreEqual(0f, root.LayoutX);
|
||||||
|
Assert.AreEqual(0f, root.LayoutY);
|
||||||
|
Assert.AreEqual(500f, root.LayoutWidth);
|
||||||
|
Assert.AreEqual(500f, root.LayoutHeight);
|
||||||
|
|
||||||
|
Assert.AreEqual(0f, root_child0.LayoutX);
|
||||||
|
Assert.AreEqual(0f, root_child0.LayoutY);
|
||||||
|
Assert.AreEqual(70f, root_child0.LayoutWidth);
|
||||||
|
Assert.AreEqual(90f, root_child0.LayoutHeight);
|
||||||
|
|
||||||
|
Assert.AreEqual(0f, root_child0_child0.LayoutX);
|
||||||
|
Assert.AreEqual(0f, root_child0_child0.LayoutY);
|
||||||
|
Assert.AreEqual(40f, root_child0_child0.LayoutWidth);
|
||||||
|
Assert.AreEqual(40f, root_child0_child0.LayoutHeight);
|
||||||
|
|
||||||
|
Assert.AreEqual(0f, root_child0_child0_child0.LayoutX);
|
||||||
|
Assert.AreEqual(0f, root_child0_child0_child0.LayoutY);
|
||||||
|
Assert.AreEqual(40f, root_child0_child0_child0.LayoutWidth);
|
||||||
|
Assert.AreEqual(40f, root_child0_child0_child0.LayoutHeight);
|
||||||
|
|
||||||
|
Assert.AreEqual(0f, root_child0_child1.LayoutX);
|
||||||
|
Assert.AreEqual(50f, root_child0_child1.LayoutY);
|
||||||
|
Assert.AreEqual(40f, root_child0_child1.LayoutWidth);
|
||||||
|
Assert.AreEqual(40f, root_child0_child1.LayoutHeight);
|
||||||
|
|
||||||
|
Assert.AreEqual(0f, root_child0_child1_child0.LayoutX);
|
||||||
|
Assert.AreEqual(0f, root_child0_child1_child0.LayoutY);
|
||||||
|
Assert.AreEqual(40f, root_child0_child1_child0.LayoutWidth);
|
||||||
|
Assert.AreEqual(40f, root_child0_child1_child0.LayoutHeight);
|
||||||
|
|
||||||
|
root.StyleDirection = YogaDirection.RTL;
|
||||||
|
root.CalculateLayout();
|
||||||
|
|
||||||
|
Assert.AreEqual(0f, root.LayoutX);
|
||||||
|
Assert.AreEqual(0f, root.LayoutY);
|
||||||
|
Assert.AreEqual(500f, root.LayoutWidth);
|
||||||
|
Assert.AreEqual(500f, root.LayoutHeight);
|
||||||
|
|
||||||
|
Assert.AreEqual(430f, root_child0.LayoutX);
|
||||||
|
Assert.AreEqual(0f, root_child0.LayoutY);
|
||||||
|
Assert.AreEqual(70f, root_child0.LayoutWidth);
|
||||||
|
Assert.AreEqual(90f, root_child0.LayoutHeight);
|
||||||
|
|
||||||
|
Assert.AreEqual(30f, root_child0_child0.LayoutX);
|
||||||
|
Assert.AreEqual(0f, root_child0_child0.LayoutY);
|
||||||
|
Assert.AreEqual(40f, root_child0_child0.LayoutWidth);
|
||||||
|
Assert.AreEqual(40f, root_child0_child0.LayoutHeight);
|
||||||
|
|
||||||
|
Assert.AreEqual(0f, root_child0_child0_child0.LayoutX);
|
||||||
|
Assert.AreEqual(0f, root_child0_child0_child0.LayoutY);
|
||||||
|
Assert.AreEqual(40f, root_child0_child0_child0.LayoutWidth);
|
||||||
|
Assert.AreEqual(40f, root_child0_child0_child0.LayoutHeight);
|
||||||
|
|
||||||
|
Assert.AreEqual(30f, root_child0_child1.LayoutX);
|
||||||
|
Assert.AreEqual(50f, root_child0_child1.LayoutY);
|
||||||
|
Assert.AreEqual(40f, root_child0_child1.LayoutWidth);
|
||||||
|
Assert.AreEqual(40f, root_child0_child1.LayoutHeight);
|
||||||
|
|
||||||
|
Assert.AreEqual(0f, root_child0_child1_child0.LayoutX);
|
||||||
|
Assert.AreEqual(0f, root_child0_child1_child0.LayoutY);
|
||||||
|
Assert.AreEqual(40f, root_child0_child1_child0.LayoutWidth);
|
||||||
|
Assert.AreEqual(40f, root_child0_child1_child0.LayoutHeight);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -676,6 +676,203 @@ namespace Facebook.Yoga
|
|||||||
Assert.AreEqual(20f, root_child0_child0.LayoutHeight);
|
Assert.AreEqual(20f, root_child0_child0.LayoutHeight);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void Test_flex_root_ignored()
|
||||||
|
{
|
||||||
|
YogaConfig config = new YogaConfig();
|
||||||
|
|
||||||
|
YogaNode root = new YogaNode(config);
|
||||||
|
root.FlexGrow = 1;
|
||||||
|
root.Width = 100;
|
||||||
|
root.MinHeight = 100;
|
||||||
|
root.MaxHeight = 500;
|
||||||
|
|
||||||
|
YogaNode root_child0 = new YogaNode(config);
|
||||||
|
root_child0.FlexGrow = 1;
|
||||||
|
root_child0.FlexBasis = 200;
|
||||||
|
root.Insert(0, root_child0);
|
||||||
|
|
||||||
|
YogaNode root_child1 = new YogaNode(config);
|
||||||
|
root_child1.Height = 100;
|
||||||
|
root.Insert(1, root_child1);
|
||||||
|
root.StyleDirection = YogaDirection.LTR;
|
||||||
|
root.CalculateLayout();
|
||||||
|
|
||||||
|
Assert.AreEqual(0f, root.LayoutX);
|
||||||
|
Assert.AreEqual(0f, root.LayoutY);
|
||||||
|
Assert.AreEqual(100f, root.LayoutWidth);
|
||||||
|
Assert.AreEqual(300f, root.LayoutHeight);
|
||||||
|
|
||||||
|
Assert.AreEqual(0f, root_child0.LayoutX);
|
||||||
|
Assert.AreEqual(0f, root_child0.LayoutY);
|
||||||
|
Assert.AreEqual(100f, root_child0.LayoutWidth);
|
||||||
|
Assert.AreEqual(200f, root_child0.LayoutHeight);
|
||||||
|
|
||||||
|
Assert.AreEqual(0f, root_child1.LayoutX);
|
||||||
|
Assert.AreEqual(200f, root_child1.LayoutY);
|
||||||
|
Assert.AreEqual(100f, root_child1.LayoutWidth);
|
||||||
|
Assert.AreEqual(100f, root_child1.LayoutHeight);
|
||||||
|
|
||||||
|
root.StyleDirection = YogaDirection.RTL;
|
||||||
|
root.CalculateLayout();
|
||||||
|
|
||||||
|
Assert.AreEqual(0f, root.LayoutX);
|
||||||
|
Assert.AreEqual(0f, root.LayoutY);
|
||||||
|
Assert.AreEqual(100f, root.LayoutWidth);
|
||||||
|
Assert.AreEqual(300f, root.LayoutHeight);
|
||||||
|
|
||||||
|
Assert.AreEqual(0f, root_child0.LayoutX);
|
||||||
|
Assert.AreEqual(0f, root_child0.LayoutY);
|
||||||
|
Assert.AreEqual(100f, root_child0.LayoutWidth);
|
||||||
|
Assert.AreEqual(200f, root_child0.LayoutHeight);
|
||||||
|
|
||||||
|
Assert.AreEqual(0f, root_child1.LayoutX);
|
||||||
|
Assert.AreEqual(200f, root_child1.LayoutY);
|
||||||
|
Assert.AreEqual(100f, root_child1.LayoutWidth);
|
||||||
|
Assert.AreEqual(100f, root_child1.LayoutHeight);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void Test_flex_grow_root_minimized()
|
||||||
|
{
|
||||||
|
YogaConfig config = new YogaConfig();
|
||||||
|
|
||||||
|
YogaNode root = new YogaNode(config);
|
||||||
|
root.Width = 100;
|
||||||
|
root.MinHeight = 100;
|
||||||
|
root.MaxHeight = 500;
|
||||||
|
|
||||||
|
YogaNode root_child0 = new YogaNode(config);
|
||||||
|
root_child0.FlexGrow = 1;
|
||||||
|
root_child0.MinHeight = 100;
|
||||||
|
root_child0.MaxHeight = 500;
|
||||||
|
root.Insert(0, root_child0);
|
||||||
|
|
||||||
|
YogaNode root_child0_child0 = new YogaNode(config);
|
||||||
|
root_child0_child0.FlexGrow = 1;
|
||||||
|
root_child0_child0.FlexBasis = 200;
|
||||||
|
root_child0.Insert(0, root_child0_child0);
|
||||||
|
|
||||||
|
YogaNode root_child0_child1 = new YogaNode(config);
|
||||||
|
root_child0_child1.Height = 100;
|
||||||
|
root_child0.Insert(1, root_child0_child1);
|
||||||
|
root.StyleDirection = YogaDirection.LTR;
|
||||||
|
root.CalculateLayout();
|
||||||
|
|
||||||
|
Assert.AreEqual(0f, root.LayoutX);
|
||||||
|
Assert.AreEqual(0f, root.LayoutY);
|
||||||
|
Assert.AreEqual(100f, root.LayoutWidth);
|
||||||
|
Assert.AreEqual(300f, root.LayoutHeight);
|
||||||
|
|
||||||
|
Assert.AreEqual(0f, root_child0.LayoutX);
|
||||||
|
Assert.AreEqual(0f, root_child0.LayoutY);
|
||||||
|
Assert.AreEqual(100f, root_child0.LayoutWidth);
|
||||||
|
Assert.AreEqual(300f, 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(200f, root_child0_child0.LayoutHeight);
|
||||||
|
|
||||||
|
Assert.AreEqual(0f, root_child0_child1.LayoutX);
|
||||||
|
Assert.AreEqual(200f, root_child0_child1.LayoutY);
|
||||||
|
Assert.AreEqual(100f, root_child0_child1.LayoutWidth);
|
||||||
|
Assert.AreEqual(100f, root_child0_child1.LayoutHeight);
|
||||||
|
|
||||||
|
root.StyleDirection = YogaDirection.RTL;
|
||||||
|
root.CalculateLayout();
|
||||||
|
|
||||||
|
Assert.AreEqual(0f, root.LayoutX);
|
||||||
|
Assert.AreEqual(0f, root.LayoutY);
|
||||||
|
Assert.AreEqual(100f, root.LayoutWidth);
|
||||||
|
Assert.AreEqual(300f, root.LayoutHeight);
|
||||||
|
|
||||||
|
Assert.AreEqual(0f, root_child0.LayoutX);
|
||||||
|
Assert.AreEqual(0f, root_child0.LayoutY);
|
||||||
|
Assert.AreEqual(100f, root_child0.LayoutWidth);
|
||||||
|
Assert.AreEqual(300f, 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(200f, root_child0_child0.LayoutHeight);
|
||||||
|
|
||||||
|
Assert.AreEqual(0f, root_child0_child1.LayoutX);
|
||||||
|
Assert.AreEqual(200f, root_child0_child1.LayoutY);
|
||||||
|
Assert.AreEqual(100f, root_child0_child1.LayoutWidth);
|
||||||
|
Assert.AreEqual(100f, root_child0_child1.LayoutHeight);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void Test_flex_grow_height_maximized()
|
||||||
|
{
|
||||||
|
YogaConfig config = new YogaConfig();
|
||||||
|
|
||||||
|
YogaNode root = new YogaNode(config);
|
||||||
|
root.Width = 100;
|
||||||
|
root.Height = 500;
|
||||||
|
|
||||||
|
YogaNode root_child0 = new YogaNode(config);
|
||||||
|
root_child0.FlexGrow = 1;
|
||||||
|
root_child0.MinHeight = 100;
|
||||||
|
root_child0.MaxHeight = 500;
|
||||||
|
root.Insert(0, root_child0);
|
||||||
|
|
||||||
|
YogaNode root_child0_child0 = new YogaNode(config);
|
||||||
|
root_child0_child0.FlexGrow = 1;
|
||||||
|
root_child0_child0.FlexBasis = 200;
|
||||||
|
root_child0.Insert(0, root_child0_child0);
|
||||||
|
|
||||||
|
YogaNode root_child0_child1 = new YogaNode(config);
|
||||||
|
root_child0_child1.Height = 100;
|
||||||
|
root_child0.Insert(1, root_child0_child1);
|
||||||
|
root.StyleDirection = YogaDirection.LTR;
|
||||||
|
root.CalculateLayout();
|
||||||
|
|
||||||
|
Assert.AreEqual(0f, root.LayoutX);
|
||||||
|
Assert.AreEqual(0f, root.LayoutY);
|
||||||
|
Assert.AreEqual(100f, root.LayoutWidth);
|
||||||
|
Assert.AreEqual(500f, root.LayoutHeight);
|
||||||
|
|
||||||
|
Assert.AreEqual(0f, root_child0.LayoutX);
|
||||||
|
Assert.AreEqual(0f, root_child0.LayoutY);
|
||||||
|
Assert.AreEqual(100f, root_child0.LayoutWidth);
|
||||||
|
Assert.AreEqual(500f, 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(400f, root_child0_child0.LayoutHeight);
|
||||||
|
|
||||||
|
Assert.AreEqual(0f, root_child0_child1.LayoutX);
|
||||||
|
Assert.AreEqual(400f, root_child0_child1.LayoutY);
|
||||||
|
Assert.AreEqual(100f, root_child0_child1.LayoutWidth);
|
||||||
|
Assert.AreEqual(100f, root_child0_child1.LayoutHeight);
|
||||||
|
|
||||||
|
root.StyleDirection = YogaDirection.RTL;
|
||||||
|
root.CalculateLayout();
|
||||||
|
|
||||||
|
Assert.AreEqual(0f, root.LayoutX);
|
||||||
|
Assert.AreEqual(0f, root.LayoutY);
|
||||||
|
Assert.AreEqual(100f, root.LayoutWidth);
|
||||||
|
Assert.AreEqual(500f, root.LayoutHeight);
|
||||||
|
|
||||||
|
Assert.AreEqual(0f, root_child0.LayoutX);
|
||||||
|
Assert.AreEqual(0f, root_child0.LayoutY);
|
||||||
|
Assert.AreEqual(100f, root_child0.LayoutWidth);
|
||||||
|
Assert.AreEqual(500f, 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(400f, root_child0_child0.LayoutHeight);
|
||||||
|
|
||||||
|
Assert.AreEqual(0f, root_child0_child1.LayoutX);
|
||||||
|
Assert.AreEqual(400f, root_child0_child1.LayoutY);
|
||||||
|
Assert.AreEqual(100f, root_child0_child1.LayoutWidth);
|
||||||
|
Assert.AreEqual(100f, root_child0_child1.LayoutHeight);
|
||||||
|
}
|
||||||
|
|
||||||
[Test]
|
[Test]
|
||||||
public void Test_flex_grow_within_constrained_min_row()
|
public void Test_flex_grow_within_constrained_min_row()
|
||||||
{
|
{
|
||||||
@@ -905,6 +1102,64 @@ namespace Facebook.Yoga
|
|||||||
Assert.AreEqual(50f, root_child1.LayoutHeight);
|
Assert.AreEqual(50f, root_child1.LayoutHeight);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void Test_child_min_max_width_flexing()
|
||||||
|
{
|
||||||
|
YogaConfig config = new YogaConfig();
|
||||||
|
|
||||||
|
YogaNode root = new YogaNode(config);
|
||||||
|
root.FlexDirection = YogaFlexDirection.Row;
|
||||||
|
root.Width = 120;
|
||||||
|
root.Height = 50;
|
||||||
|
|
||||||
|
YogaNode root_child0 = new YogaNode(config);
|
||||||
|
root_child0.FlexGrow = 1;
|
||||||
|
root_child0.FlexBasis = 0;
|
||||||
|
root_child0.MinWidth = 60;
|
||||||
|
root.Insert(0, root_child0);
|
||||||
|
|
||||||
|
YogaNode root_child1 = new YogaNode(config);
|
||||||
|
root_child1.FlexGrow = 1;
|
||||||
|
root_child1.FlexBasis = 50.Percent();
|
||||||
|
root_child1.MaxWidth = 20;
|
||||||
|
root.Insert(1, root_child1);
|
||||||
|
root.StyleDirection = YogaDirection.LTR;
|
||||||
|
root.CalculateLayout();
|
||||||
|
|
||||||
|
Assert.AreEqual(0f, root.LayoutX);
|
||||||
|
Assert.AreEqual(0f, root.LayoutY);
|
||||||
|
Assert.AreEqual(120f, root.LayoutWidth);
|
||||||
|
Assert.AreEqual(50f, root.LayoutHeight);
|
||||||
|
|
||||||
|
Assert.AreEqual(0f, root_child0.LayoutX);
|
||||||
|
Assert.AreEqual(0f, root_child0.LayoutY);
|
||||||
|
Assert.AreEqual(100f, root_child0.LayoutWidth);
|
||||||
|
Assert.AreEqual(50f, root_child0.LayoutHeight);
|
||||||
|
|
||||||
|
Assert.AreEqual(100f, root_child1.LayoutX);
|
||||||
|
Assert.AreEqual(0f, root_child1.LayoutY);
|
||||||
|
Assert.AreEqual(20f, root_child1.LayoutWidth);
|
||||||
|
Assert.AreEqual(50f, root_child1.LayoutHeight);
|
||||||
|
|
||||||
|
root.StyleDirection = YogaDirection.RTL;
|
||||||
|
root.CalculateLayout();
|
||||||
|
|
||||||
|
Assert.AreEqual(0f, root.LayoutX);
|
||||||
|
Assert.AreEqual(0f, root.LayoutY);
|
||||||
|
Assert.AreEqual(120f, root.LayoutWidth);
|
||||||
|
Assert.AreEqual(50f, root.LayoutHeight);
|
||||||
|
|
||||||
|
Assert.AreEqual(20f, root_child0.LayoutX);
|
||||||
|
Assert.AreEqual(0f, root_child0.LayoutY);
|
||||||
|
Assert.AreEqual(100f, root_child0.LayoutWidth);
|
||||||
|
Assert.AreEqual(50f, root_child0.LayoutHeight);
|
||||||
|
|
||||||
|
Assert.AreEqual(0f, root_child1.LayoutX);
|
||||||
|
Assert.AreEqual(0f, root_child1.LayoutY);
|
||||||
|
Assert.AreEqual(20f, root_child1.LayoutWidth);
|
||||||
|
Assert.AreEqual(50f, root_child1.LayoutHeight);
|
||||||
|
}
|
||||||
|
|
||||||
[Test]
|
[Test]
|
||||||
public void Test_min_width_overrides_width()
|
public void Test_min_width_overrides_width()
|
||||||
{
|
{
|
||||||
|
@@ -8,7 +8,7 @@ permalink: /docs/api/android/
|
|||||||
To include the java bindings and `.so` libraries, add to your build:
|
To include the java bindings and `.so` libraries, add to your build:
|
||||||
|
|
||||||
```java
|
```java
|
||||||
compile 'com.facebook.yoga:yoga:1.2.0'
|
compile 'com.facebook.yoga:yoga:1.5.0'
|
||||||
```
|
```
|
||||||
|
|
||||||
There is an easy interface to Yoga called `YogaLayout`. This is a view group that lays out its children using Yoga. We recommend looking at the sample app for details on its usage. However, as an overview you can simply define XML layouts such as:
|
There is an easy interface to Yoga called `YogaLayout`. This is a view group that lays out its children using Yoga. We recommend looking at the sample app for details on its usage. However, as an overview you can simply define XML layouts such as:
|
||||||
@@ -54,7 +54,26 @@ Note that there are some caveats, such as requiring the custom `YogaLayoutViewFa
|
|||||||
To include this in your project, add to your build:
|
To include this in your project, add to your build:
|
||||||
|
|
||||||
```java
|
```java
|
||||||
compile 'com.facebook.yoga.android:yoga-layout:1.2.0'
|
compile 'com.facebook.yoga.android:yoga-layout:1.5.0'
|
||||||
|
```
|
||||||
|
|
||||||
|
## Snapshot releases
|
||||||
|
|
||||||
|
> IMPORTANT: This will break and may set your house on fire. Snapshots are unsigned and automatically published by our CI system. Use them for testing purposes only.
|
||||||
|
|
||||||
|
If you want to live on the bleeding edge, you can use the SNAPSHOT releases
|
||||||
|
which represent the most recent commit on `master` by adding these targets to
|
||||||
|
your gradle config:
|
||||||
|
|
||||||
|
```gradle
|
||||||
|
repositories {
|
||||||
|
maven { url "https://oss.sonatype.org/content/repositories/snapshots/" }
|
||||||
|
}
|
||||||
|
|
||||||
|
dependencies {
|
||||||
|
compile 'com.facebook.yoga:yoga:1.5.1-SNAPSHOT'
|
||||||
|
compile 'com.facebook.yoga.android:yoga-layout:1.5.1-SNAPSHOT'
|
||||||
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
## layout\_width and layout\_height
|
## layout\_width and layout\_height
|
||||||
|
@@ -9,6 +9,27 @@ The `yoga-layout` module offers two different implementations of Yoga. The first
|
|||||||
|
|
||||||
> Because this module is compiled from a C++ codebase, the function prototypes below will use the C++-syntax. Nevertheless, the corresponding methods all exist on the JS side, with the same arguments (`Node *` being a node object).
|
> Because this module is compiled from a C++ codebase, the function prototypes below will use the C++-syntax. Nevertheless, the corresponding methods all exist on the JS side, with the same arguments (`Node *` being a node object).
|
||||||
|
|
||||||
|
### Installing
|
||||||
|
Installing through NPM
|
||||||
|
```sh
|
||||||
|
npm install yoga-layout
|
||||||
|
```
|
||||||
|
By default this will install the library and try to build for all platforms (node, browser asm, and standalone webpack). You may receive errors if you do not have the required platform development tools already installed. To preset the platform you'd like to build for you can set a .npmrc property first.
|
||||||
|
```sh
|
||||||
|
npm config set yoga-layout:platform standalone
|
||||||
|
```
|
||||||
|
This will now only run the standalone webpack build upon install.
|
||||||
|
|
||||||
|
### Build Platforms
|
||||||
|
|
||||||
|
| name | description |
|
||||||
|
|----------------|-------------------------------------------------|
|
||||||
|
| all (default) | Builds all of these platforms. |
|
||||||
|
| browser | Builds asm js browser version. |
|
||||||
|
| node | Builds node js version. |
|
||||||
|
| standalone | Runs webpack. |
|
||||||
|
| none | Does nothing. You can use the prepackaged libs. |
|
||||||
|
|
||||||
### Lifecycle
|
### Lifecycle
|
||||||
|
|
||||||
Create a node via `Yoga.Node.create()`, and destroy it by using its `free()` or `freeRecursive()` method. Note that unlike most objects in your Javascript applications, your nodes will not get automatically garbage collected, which means that it is especially important you keep track of them so you can free them when you no longer need them.
|
Create a node via `Yoga.Node.create()`, and destroy it by using its `free()` or `freeRecursive()` method. Note that unlike most objects in your Javascript applications, your nodes will not get automatically garbage collected, which means that it is especially important you keep track of them so you can free them when you no longer need them.
|
||||||
@@ -51,3 +72,63 @@ Certain nodes need to ability to measure themselves, the most common example is
|
|||||||
Yoga has the concept of experiments. An experiment is a feature which is not yet stable. To enable a feature use the following functions. Once a feature has been tested and is ready to be released as a stable API we will remove its feature flag.
|
Yoga has the concept of experiments. An experiment is a feature which is not yet stable. To enable a feature use the following functions. Once a feature has been tested and is ready to be released as a stable API we will remove its feature flag.
|
||||||
|
|
||||||
<script src="http://gist-it.appspot.com/facebook/yoga/raw/master/javascript/sources/global.hh?slice=3:4"></script>
|
<script src="http://gist-it.appspot.com/facebook/yoga/raw/master/javascript/sources/global.hh?slice=3:4"></script>
|
||||||
|
|
||||||
|
### Example Usage
|
||||||
|
|
||||||
|
```javascript
|
||||||
|
import yoga, { Node } from 'yoga-layout';
|
||||||
|
|
||||||
|
let rootNode = Node.create();
|
||||||
|
rootNode.setWidth(1024);
|
||||||
|
rootNode.setHeight(768);
|
||||||
|
rootNode.setPadding(yoga.EDGE_ALL, 20);
|
||||||
|
rootNode.setDisplay(yoga.DISPLAY_FLEX);
|
||||||
|
rootNode.setFlexDirection(yoga.FLEX_DIRECTION_ROW);
|
||||||
|
|
||||||
|
let child1 = Node.create();
|
||||||
|
child1.setWidth(250);
|
||||||
|
child1.setHeight(400);
|
||||||
|
child1.setFlex(0);
|
||||||
|
|
||||||
|
let child2 = Node.create();
|
||||||
|
child2.setWidth(400);
|
||||||
|
child2.setHeight(500);
|
||||||
|
child2.setFlex(1);
|
||||||
|
|
||||||
|
rootNode.insertChild(child1, 0);
|
||||||
|
rootNode.insertChild(child2, 1);
|
||||||
|
|
||||||
|
rootNode.calculateLayout(1024, 768, yoga.DIRECTION_LTR);
|
||||||
|
|
||||||
|
console.log(`root pos: {${rootNode.getComputedLeft()}, ${rootNode.getComputedTop()}, ${rootNode.getComputedWidth()}, ${rootNode.getComputedHeight()}}`);
|
||||||
|
for (let i = 0, l = rootNode.getChildCount(); i < l; ++i) {
|
||||||
|
let child = rootNode.getChild(i);
|
||||||
|
console.log(`child ${i} pos: {${child.getComputedLeft()}, ${child.getComputedTop()}, ${child.getComputedWidth()}, ${child.getComputedHeight()}}`);
|
||||||
|
console.log(child.getComputedLayout().toString());
|
||||||
|
}
|
||||||
|
|
||||||
|
rootNode.removeChild(child1);
|
||||||
|
rootNode.removeChild(child2);
|
||||||
|
|
||||||
|
console.log(`There are ${yoga.getInstanceCount()} nodes`);
|
||||||
|
Node.destroy(child2);
|
||||||
|
console.log(`There are ${yoga.getInstanceCount()} nodes left`);
|
||||||
|
child1.free();
|
||||||
|
console.log(`There are ${yoga.getInstanceCount()} nodes left`);
|
||||||
|
rootNode.freeRecursive();
|
||||||
|
console.log(`There are ${yoga.getInstanceCount()} nodes left`);
|
||||||
|
|
||||||
|
---------------------------------
|
||||||
|
Output:
|
||||||
|
|
||||||
|
root pos: {0, 0, 1024, 768}
|
||||||
|
child 0 pos: {20, 20, 250, 400}
|
||||||
|
<Layout#20:0;20:0;250:400>
|
||||||
|
child 1 pos: {270, 20, 734, 500}
|
||||||
|
<Layout#270:0;20:0;734:500>
|
||||||
|
There are 3 nodes
|
||||||
|
There are 2 nodes left
|
||||||
|
There are 1 nodes left
|
||||||
|
There are 0 nodes left
|
||||||
|
|
||||||
|
```
|
||||||
|
@@ -7,7 +7,7 @@ permalink: /docs/min-max-dimen/
|
|||||||
|
|
||||||
Using `MinWidth`, `MinHeight`, `MaxWidth`, and `MaxHeight` gives you increased control over the final size of items in a layout. By mixing these properties with `FlexGrow`, `FlexShrink`, and `AlignItems = Stretch`, you are able to have items with dynamic size within a range which you control.
|
Using `MinWidth`, `MinHeight`, `MaxWidth`, and `MaxHeight` gives you increased control over the final size of items in a layout. By mixing these properties with `FlexGrow`, `FlexShrink`, and `AlignItems = Stretch`, you are able to have items with dynamic size within a range which you control.
|
||||||
|
|
||||||
An example of when `Max` properties can be useful is if you are using `AlignItems = Stretch` but your know that your item won't look good after it increases past a certain point. In this case, your item will stretch to the size of its parent or until it is as big as specified in the `Max` property.
|
An example of when `Max` properties can be useful is if you are using `AlignItems = Stretch` but you know that your item won't look good after it increases past a certain point. In this case, your item will stretch to the size of its parent or until it is as big as specified in the `Max` property.
|
||||||
|
|
||||||
Same goes for the `Min` properties when using `FlexShrink`. For example, you may want children of a container to shrink to fit on one row, but if you specify a minimum width, they will break to the next line after a certain point (if you are using `FlexWrap = Wrap`).
|
Same goes for the `Min` properties when using `FlexShrink`. For example, you may want children of a container to shrink to fit on one row, but if you specify a minimum width, they will break to the next line after a certain point (if you are using `FlexWrap = Wrap`).
|
||||||
|
|
||||||
|
4
enums.py
4
enums.py
@@ -84,6 +84,10 @@ ENUMS = {
|
|||||||
'Vertical',
|
'Vertical',
|
||||||
'All',
|
'All',
|
||||||
],
|
],
|
||||||
|
'NodeType': [
|
||||||
|
'Default',
|
||||||
|
'Text',
|
||||||
|
],
|
||||||
'LogLevel': [
|
'LogLevel': [
|
||||||
'Error',
|
'Error',
|
||||||
'Warn',
|
'Warn',
|
||||||
|
@@ -23,6 +23,8 @@
|
|||||||
<div id="absolute_layout_within_border" style="height:100px; width:100px; border-width: 10px; margin: 10px; padding: 10px;">
|
<div id="absolute_layout_within_border" style="height:100px; width:100px; border-width: 10px; margin: 10px; padding: 10px;">
|
||||||
<div style="position: absolute; width: 50px; height: 50px; left: 0px; top: 0px;"></div>
|
<div style="position: absolute; width: 50px; height: 50px; left: 0px; top: 0px;"></div>
|
||||||
<div style="position: absolute; width: 50px; height: 50px; right: 0px; bottom: 0px;"></div>
|
<div style="position: absolute; width: 50px; height: 50px; right: 0px; bottom: 0px;"></div>
|
||||||
|
<div style="position: absolute; width: 50px; height: 50px; left: 0px; top: 0px; margin: 10px;"></div>
|
||||||
|
<div style="position: absolute; width: 50px; height: 50px; right: 0px; bottom: 0px; margin: 10px;"></div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="absolute_layout_align_items_and_justify_content_center" style="height: 100px; width: 110px; flex-grow: 1; align-items: center; justify-content: center;">
|
<div id="absolute_layout_align_items_and_justify_content_center" style="height: 100px; width: 110px; flex-grow: 1; align-items: center; justify-content: center;">
|
||||||
@@ -63,3 +65,26 @@
|
|||||||
|
|
||||||
<div id="position_root_with_rtl_should_position_withoutdirection" style="height: 52px; width: 52px; left: 72px; ">
|
<div id="position_root_with_rtl_should_position_withoutdirection" style="height: 52px; width: 52px; left: 72px; ">
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<div id="absolute_layout_percentage_bottom_based_on_parent_height" style="width: 100px; height: 200px;">
|
||||||
|
<div style="position: absolute; top: 50%; width: 10px; height: 10px;"></div>
|
||||||
|
<div style="position: absolute; bottom: 50%; width: 10px; height: 10px;"></div>
|
||||||
|
<div style="position: absolute; top: 10%; width: 10px; bottom: 10%;"></div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="absolute_layout_in_wrap_reverse_column_container" style="flex-direction:column; width:100px; height:100px; flex-wrap: wrap-reverse;">
|
||||||
|
<div style="width:20px; height:20px; position: absolute;"></div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="absolute_layout_in_wrap_reverse_row_container" style="flex-direction:row; width:100px; height:100px; flex-wrap: wrap-reverse;">
|
||||||
|
<div style="width:20px; height:20px; position: absolute;"></div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="absolute_layout_in_wrap_reverse_column_container_flex_end" style="flex-direction:column; width:100px; height:100px; flex-wrap: wrap-reverse;">
|
||||||
|
<div style="width:20px; height:20px; position: absolute; align-self: flex-end;"></div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="absolute_layout_in_wrap_reverse_row_container_flex_end" style="flex-direction:row; width:100px; height:100px; flex-wrap: wrap-reverse;">
|
||||||
|
<div style="width:20px; height:20px; position: absolute; align-self: flex-end;"></div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
@@ -35,3 +35,9 @@
|
|||||||
<div style="flex-grow:1; flex-shrink:1;"></div>
|
<div style="flex-grow:1; flex-shrink:1;"></div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<div id="flex_grow_less_than_factor_one" style="height: 500px; width: 200px; flex-direction:column;">
|
||||||
|
<div style="flex-grow:0.2; flex-shrink:0; flex-basis: 40px;"></div>
|
||||||
|
<div style="flex-grow:0.2; flex-shrink:0;"></div>
|
||||||
|
<div style="flex-grow:0.4; flex-shrink:0;"></div>
|
||||||
|
</div>
|
||||||
|
@@ -125,3 +125,25 @@
|
|||||||
<div style="width: 200px; height: 200px; margin: 20px; flex: 1"></div>
|
<div style="width: 200px; height: 200px; margin: 20px; flex: 1"></div>
|
||||||
<div style="width: 100px; height: 100px;"></div>
|
<div style="width: 100px; height: 100px;"></div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<div id="wrap_nodes_with_content_sizing_overflowing_margin" style="width: 500px; height: 500px;">
|
||||||
|
<div style="flex-direction: row; flex-wrap: wrap; width: 85px;">
|
||||||
|
<div>
|
||||||
|
<div style="height: 40px; width: 40px;"></div>
|
||||||
|
</div>
|
||||||
|
<div style="margin-right: 10px;">
|
||||||
|
<div style="height: 40px; width: 40px;"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="wrap_nodes_with_content_sizing_margin_cross" style="width: 500px; height: 500px;">
|
||||||
|
<div style="flex-direction: row; flex-wrap: wrap; width: 70px;">
|
||||||
|
<div>
|
||||||
|
<div style="height: 40px; width: 40px;"></div>
|
||||||
|
</div>
|
||||||
|
<div style="margin-top: 10px;">
|
||||||
|
<div style="height: 40px; width: 40px;"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
@@ -62,6 +62,25 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<div id="flex_root_ignored" style="width: 100px; min-height: 100px; max-height:500px;flex-grow:1">
|
||||||
|
<div style="flex-basis:200px; flex-grow:1;"></div>
|
||||||
|
<div style="height:100px; "></div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="flex_grow_root_minimized" style="width: 100px; min-height: 100px; max-height:500px">
|
||||||
|
<div style="min-height: 100px; max-height:500px;flex-grow:1">
|
||||||
|
<div style="flex-basis:200px; flex-grow:1;"></div>
|
||||||
|
<div style="height:100px; "></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="flex_grow_height_maximized" style="width: 100px; height:500px">
|
||||||
|
<div style="min-height: 100px; max-height:500px;flex-grow:1">
|
||||||
|
<div style="flex-basis:200px; flex-grow:1;"></div>
|
||||||
|
<div style="height:100px; "></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
<div id="flex_grow_within_constrained_min_row" style="min-width: 100px; height:100px; flex-direction: row;">
|
<div id="flex_grow_within_constrained_min_row" style="min-width: 100px; height:100px; flex-direction: row;">
|
||||||
<div style="flex-grow:1;"></div>
|
<div style="flex-grow:1;"></div>
|
||||||
<div style="width: 50px;"></div>
|
<div style="width: 50px;"></div>
|
||||||
@@ -84,6 +103,11 @@
|
|||||||
<div style="height: 50px;"></div>
|
<div style="height: 50px;"></div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<div id="child_min_max_width_flexing" style="width: 120px; height: 50px; flex-direction: row; align-items:stretch">
|
||||||
|
<div style="min-width: 60px; flex-grow:1; flex-shrink:0; flex-basis: 0px"></div>
|
||||||
|
<div style="max-width: 20px; flex-grow:1; flex-shrink:0; flex-basis: 50%"></div>
|
||||||
|
</div>
|
||||||
|
|
||||||
<div id="min_width_overrides_width" style="min-width: 100px; width: 50px;">
|
<div id="min_width_overrides_width" style="min-width: 100px; width: 50px;">
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
org.gradle.jvmargs=-Xmx1536M
|
org.gradle.jvmargs=-Xmx1536M
|
||||||
|
|
||||||
VERSION_NAME=1.4.3-SNAPSHOT
|
VERSION_NAME=1.5.2-SNAPSHOT
|
||||||
POM_URL=https://github.com/facebook/yoga
|
POM_URL=https://github.com/facebook/yoga
|
||||||
POM_SCM_URL=https://github.com/facebook/yoga.git
|
POM_SCM_URL=https://github.com/facebook/yoga.git
|
||||||
POM_SCM_CONNECTION=scm:git:https://github.com/facebook/yoga.git
|
POM_SCM_CONNECTION=scm:git:https://github.com/facebook/yoga.git
|
||||||
|
@@ -41,7 +41,10 @@ android {
|
|||||||
java.srcDir 'com'
|
java.srcDir 'com'
|
||||||
manifest.srcFile 'AndroidManifest.xml'
|
manifest.srcFile 'AndroidManifest.xml'
|
||||||
res.srcDirs = ['res']
|
res.srcDirs = ['res']
|
||||||
jniLibs.srcDirs = ['build/buck-out/jniLibs']
|
}
|
||||||
|
|
||||||
|
test {
|
||||||
|
java.srcDirs 'tests'
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -50,6 +53,7 @@ dependencies {
|
|||||||
compile 'com.google.code.findbugs:jsr305:3.0.1'
|
compile 'com.google.code.findbugs:jsr305:3.0.1'
|
||||||
compile 'com.facebook.soloader:soloader:0.2.0'
|
compile 'com.facebook.soloader:soloader:0.2.0'
|
||||||
provided project(':yoga:proguard-annotations')
|
provided project(':yoga:proguard-annotations')
|
||||||
|
testCompile 'junit:junit:4.12'
|
||||||
}
|
}
|
||||||
|
|
||||||
task sourcesJar(type: Jar) {
|
task sourcesJar(type: Jar) {
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
/**
|
/*
|
||||||
* Copyright (c) 2014-present, Facebook, Inc.
|
* Copyright (c) 2014-present, Facebook, Inc.
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
/**
|
/*
|
||||||
* Copyright (c) 2014-present, Facebook, Inc.
|
* Copyright (c) 2014-present, Facebook, Inc.
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
/**
|
/*
|
||||||
* Copyright (c) 2014-present, Facebook, Inc.
|
* Copyright (c) 2014-present, Facebook, Inc.
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
/**
|
/*
|
||||||
* Copyright (c) 2014-present, Facebook, Inc.
|
* Copyright (c) 2014-present, Facebook, Inc.
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
/**
|
/*
|
||||||
* Copyright (c) 2014-present, Facebook, Inc.
|
* Copyright (c) 2014-present, Facebook, Inc.
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
/**
|
/*
|
||||||
* Copyright (c) 2014-present, Facebook, Inc.
|
* Copyright (c) 2014-present, Facebook, Inc.
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
/**
|
/*
|
||||||
* Copyright (c) 2014-present, Facebook, Inc.
|
* Copyright (c) 2014-present, Facebook, Inc.
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
/**
|
/*
|
||||||
* Copyright (c) 2014-present, Facebook, Inc.
|
* Copyright (c) 2014-present, Facebook, Inc.
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
/**
|
/*
|
||||||
* Copyright (c) 2014-present, Facebook, Inc.
|
* Copyright (c) 2014-present, Facebook, Inc.
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
/**
|
/*
|
||||||
* Copyright (c) 2014-present, Facebook, Inc.
|
* Copyright (c) 2014-present, Facebook, Inc.
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
/**
|
/*
|
||||||
* Copyright (c) 2014-present, Facebook, Inc.
|
* Copyright (c) 2014-present, Facebook, Inc.
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
/**
|
/*
|
||||||
* Copyright (c) 2014-present, Facebook, Inc.
|
* Copyright (c) 2014-present, Facebook, Inc.
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
/**
|
/*
|
||||||
* Copyright (c) 2014-present, Facebook, Inc.
|
* Copyright (c) 2014-present, Facebook, Inc.
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
/**
|
/*
|
||||||
* Copyright (c) 2014-present, Facebook, Inc.
|
* Copyright (c) 2014-present, Facebook, Inc.
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
/**
|
/*
|
||||||
* Copyright (c) 2014-present, Facebook, Inc.
|
* Copyright (c) 2014-present, Facebook, Inc.
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
/**
|
/*
|
||||||
* Copyright (c) 2014-present, Facebook, Inc.
|
* Copyright (c) 2014-present, Facebook, Inc.
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
/**
|
/*
|
||||||
* Copyright (c) 2014-present, Facebook, Inc.
|
* Copyright (c) 2014-present, Facebook, Inc.
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
|
36
java/com/facebook/yoga/YogaNodeType.java
Normal file
36
java/com/facebook/yoga/YogaNodeType.java
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
/*
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.facebook.yoga;
|
||||||
|
|
||||||
|
import com.facebook.proguard.annotations.DoNotStrip;
|
||||||
|
|
||||||
|
@DoNotStrip
|
||||||
|
public enum YogaNodeType {
|
||||||
|
DEFAULT(0),
|
||||||
|
TEXT(1);
|
||||||
|
|
||||||
|
private int mIntValue;
|
||||||
|
|
||||||
|
YogaNodeType(int intValue) {
|
||||||
|
mIntValue = intValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int intValue() {
|
||||||
|
return mIntValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static YogaNodeType fromInt(int value) {
|
||||||
|
switch (value) {
|
||||||
|
case 0: return DEFAULT;
|
||||||
|
case 1: return TEXT;
|
||||||
|
default: throw new IllegalArgumentException("Unknown enum value: " + value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@@ -1,4 +1,4 @@
|
|||||||
/**
|
/*
|
||||||
* Copyright (c) 2014-present, Facebook, Inc.
|
* Copyright (c) 2014-present, Facebook, Inc.
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
/**
|
/*
|
||||||
* Copyright (c) 2014-present, Facebook, Inc.
|
* Copyright (c) 2014-present, Facebook, Inc.
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
/**
|
/*
|
||||||
* Copyright (c) 2014-present, Facebook, Inc.
|
* Copyright (c) 2014-present, Facebook, Inc.
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
/**
|
/*
|
||||||
* Copyright (c) 2014-present, Facebook, Inc.
|
* Copyright (c) 2014-present, Facebook, Inc.
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
/**
|
/*
|
||||||
* Copyright (c) 2014-present, Facebook, Inc.
|
* Copyright (c) 2014-present, Facebook, Inc.
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
@@ -15,6 +15,7 @@ import com.facebook.proguard.annotations.DoNotStrip;
|
|||||||
public class YogaValue {
|
public class YogaValue {
|
||||||
static final YogaValue UNDEFINED = new YogaValue(YogaConstants.UNDEFINED, YogaUnit.UNDEFINED);
|
static final YogaValue UNDEFINED = new YogaValue(YogaConstants.UNDEFINED, YogaUnit.UNDEFINED);
|
||||||
static final YogaValue ZERO = new YogaValue(0, YogaUnit.POINT);
|
static final YogaValue ZERO = new YogaValue(0, YogaUnit.POINT);
|
||||||
|
static final YogaValue AUTO = new YogaValue(YogaConstants.UNDEFINED, YogaUnit.AUTO);
|
||||||
|
|
||||||
public final float value;
|
public final float value;
|
||||||
public final YogaUnit unit;
|
public final YogaUnit unit;
|
||||||
@@ -44,4 +45,40 @@ public class YogaValue {
|
|||||||
public int hashCode() {
|
public int hashCode() {
|
||||||
return Float.floatToIntBits(value) + unit.intValue();
|
return Float.floatToIntBits(value) + unit.intValue();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
switch (unit) {
|
||||||
|
case UNDEFINED:
|
||||||
|
return "undefined";
|
||||||
|
case POINT:
|
||||||
|
return Float.toString(value);
|
||||||
|
case PERCENT:
|
||||||
|
return value + "%";
|
||||||
|
case AUTO:
|
||||||
|
return "auto";
|
||||||
|
default:
|
||||||
|
throw new IllegalStateException();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static YogaValue parse(String s) {
|
||||||
|
if (s == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ("undefined".equals(s)) {
|
||||||
|
return UNDEFINED;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ("auto".equals(s)) {
|
||||||
|
return AUTO;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (s.endsWith("%")) {
|
||||||
|
return new YogaValue(Float.parseFloat(s.substring(0, s.length() - 1)), YogaUnit.PERCENT);
|
||||||
|
}
|
||||||
|
|
||||||
|
return new YogaValue(Float.parseFloat(s), YogaUnit.POINT);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
/**
|
/*
|
||||||
* Copyright (c) 2014-present, Facebook, Inc.
|
* Copyright (c) 2014-present, Facebook, Inc.
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
|
@@ -278,6 +278,30 @@ public class YGAbsolutePositionTest {
|
|||||||
root_child1.setWidth(50f);
|
root_child1.setWidth(50f);
|
||||||
root_child1.setHeight(50f);
|
root_child1.setHeight(50f);
|
||||||
root.addChildAt(root_child1, 1);
|
root.addChildAt(root_child1, 1);
|
||||||
|
|
||||||
|
final YogaNode root_child2 = new YogaNode(config);
|
||||||
|
root_child2.setPositionType(YogaPositionType.ABSOLUTE);
|
||||||
|
root_child2.setPosition(YogaEdge.LEFT, 0f);
|
||||||
|
root_child2.setPosition(YogaEdge.TOP, 0f);
|
||||||
|
root_child2.setMargin(YogaEdge.LEFT, 10f);
|
||||||
|
root_child2.setMargin(YogaEdge.TOP, 10f);
|
||||||
|
root_child2.setMargin(YogaEdge.RIGHT, 10f);
|
||||||
|
root_child2.setMargin(YogaEdge.BOTTOM, 10f);
|
||||||
|
root_child2.setWidth(50f);
|
||||||
|
root_child2.setHeight(50f);
|
||||||
|
root.addChildAt(root_child2, 2);
|
||||||
|
|
||||||
|
final YogaNode root_child3 = new YogaNode(config);
|
||||||
|
root_child3.setPositionType(YogaPositionType.ABSOLUTE);
|
||||||
|
root_child3.setPosition(YogaEdge.RIGHT, 0f);
|
||||||
|
root_child3.setPosition(YogaEdge.BOTTOM, 0f);
|
||||||
|
root_child3.setMargin(YogaEdge.LEFT, 10f);
|
||||||
|
root_child3.setMargin(YogaEdge.TOP, 10f);
|
||||||
|
root_child3.setMargin(YogaEdge.RIGHT, 10f);
|
||||||
|
root_child3.setMargin(YogaEdge.BOTTOM, 10f);
|
||||||
|
root_child3.setWidth(50f);
|
||||||
|
root_child3.setHeight(50f);
|
||||||
|
root.addChildAt(root_child3, 3);
|
||||||
root.setDirection(YogaDirection.LTR);
|
root.setDirection(YogaDirection.LTR);
|
||||||
root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);
|
root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);
|
||||||
|
|
||||||
@@ -296,6 +320,16 @@ public class YGAbsolutePositionTest {
|
|||||||
assertEquals(50f, root_child1.getLayoutWidth(), 0.0f);
|
assertEquals(50f, root_child1.getLayoutWidth(), 0.0f);
|
||||||
assertEquals(50f, root_child1.getLayoutHeight(), 0.0f);
|
assertEquals(50f, root_child1.getLayoutHeight(), 0.0f);
|
||||||
|
|
||||||
|
assertEquals(20f, root_child2.getLayoutX(), 0.0f);
|
||||||
|
assertEquals(20f, root_child2.getLayoutY(), 0.0f);
|
||||||
|
assertEquals(50f, root_child2.getLayoutWidth(), 0.0f);
|
||||||
|
assertEquals(50f, root_child2.getLayoutHeight(), 0.0f);
|
||||||
|
|
||||||
|
assertEquals(30f, root_child3.getLayoutX(), 0.0f);
|
||||||
|
assertEquals(30f, root_child3.getLayoutY(), 0.0f);
|
||||||
|
assertEquals(50f, root_child3.getLayoutWidth(), 0.0f);
|
||||||
|
assertEquals(50f, root_child3.getLayoutHeight(), 0.0f);
|
||||||
|
|
||||||
root.setDirection(YogaDirection.RTL);
|
root.setDirection(YogaDirection.RTL);
|
||||||
root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);
|
root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);
|
||||||
|
|
||||||
@@ -313,6 +347,16 @@ public class YGAbsolutePositionTest {
|
|||||||
assertEquals(40f, root_child1.getLayoutY(), 0.0f);
|
assertEquals(40f, root_child1.getLayoutY(), 0.0f);
|
||||||
assertEquals(50f, root_child1.getLayoutWidth(), 0.0f);
|
assertEquals(50f, root_child1.getLayoutWidth(), 0.0f);
|
||||||
assertEquals(50f, root_child1.getLayoutHeight(), 0.0f);
|
assertEquals(50f, root_child1.getLayoutHeight(), 0.0f);
|
||||||
|
|
||||||
|
assertEquals(20f, root_child2.getLayoutX(), 0.0f);
|
||||||
|
assertEquals(20f, root_child2.getLayoutY(), 0.0f);
|
||||||
|
assertEquals(50f, root_child2.getLayoutWidth(), 0.0f);
|
||||||
|
assertEquals(50f, root_child2.getLayoutHeight(), 0.0f);
|
||||||
|
|
||||||
|
assertEquals(30f, root_child3.getLayoutX(), 0.0f);
|
||||||
|
assertEquals(30f, root_child3.getLayoutY(), 0.0f);
|
||||||
|
assertEquals(50f, root_child3.getLayoutWidth(), 0.0f);
|
||||||
|
assertEquals(50f, root_child3.getLayoutHeight(), 0.0f);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -728,4 +772,247 @@ public class YGAbsolutePositionTest {
|
|||||||
assertEquals(52f, root.getLayoutHeight(), 0.0f);
|
assertEquals(52f, root.getLayoutHeight(), 0.0f);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void test_absolute_layout_percentage_bottom_based_on_parent_height() {
|
||||||
|
YogaConfig config = new YogaConfig();
|
||||||
|
|
||||||
|
final YogaNode root = new YogaNode(config);
|
||||||
|
root.setWidth(100f);
|
||||||
|
root.setHeight(200f);
|
||||||
|
|
||||||
|
final YogaNode root_child0 = new YogaNode(config);
|
||||||
|
root_child0.setPositionType(YogaPositionType.ABSOLUTE);
|
||||||
|
root_child0.setPositionPercent(YogaEdge.TOP, 50f);
|
||||||
|
root_child0.setWidth(10f);
|
||||||
|
root_child0.setHeight(10f);
|
||||||
|
root.addChildAt(root_child0, 0);
|
||||||
|
|
||||||
|
final YogaNode root_child1 = new YogaNode(config);
|
||||||
|
root_child1.setPositionType(YogaPositionType.ABSOLUTE);
|
||||||
|
root_child1.setPositionPercent(YogaEdge.BOTTOM, 50f);
|
||||||
|
root_child1.setWidth(10f);
|
||||||
|
root_child1.setHeight(10f);
|
||||||
|
root.addChildAt(root_child1, 1);
|
||||||
|
|
||||||
|
final YogaNode root_child2 = new YogaNode(config);
|
||||||
|
root_child2.setPositionType(YogaPositionType.ABSOLUTE);
|
||||||
|
root_child2.setPositionPercent(YogaEdge.TOP, 10f);
|
||||||
|
root_child2.setPositionPercent(YogaEdge.BOTTOM, 10f);
|
||||||
|
root_child2.setWidth(10f);
|
||||||
|
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(100f, root.getLayoutWidth(), 0.0f);
|
||||||
|
assertEquals(200f, root.getLayoutHeight(), 0.0f);
|
||||||
|
|
||||||
|
assertEquals(0f, root_child0.getLayoutX(), 0.0f);
|
||||||
|
assertEquals(100f, root_child0.getLayoutY(), 0.0f);
|
||||||
|
assertEquals(10f, root_child0.getLayoutWidth(), 0.0f);
|
||||||
|
assertEquals(10f, root_child0.getLayoutHeight(), 0.0f);
|
||||||
|
|
||||||
|
assertEquals(0f, root_child1.getLayoutX(), 0.0f);
|
||||||
|
assertEquals(90f, root_child1.getLayoutY(), 0.0f);
|
||||||
|
assertEquals(10f, root_child1.getLayoutWidth(), 0.0f);
|
||||||
|
assertEquals(10f, root_child1.getLayoutHeight(), 0.0f);
|
||||||
|
|
||||||
|
assertEquals(0f, root_child2.getLayoutX(), 0.0f);
|
||||||
|
assertEquals(20f, root_child2.getLayoutY(), 0.0f);
|
||||||
|
assertEquals(10f, root_child2.getLayoutWidth(), 0.0f);
|
||||||
|
assertEquals(160f, 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(100f, root.getLayoutWidth(), 0.0f);
|
||||||
|
assertEquals(200f, root.getLayoutHeight(), 0.0f);
|
||||||
|
|
||||||
|
assertEquals(90f, root_child0.getLayoutX(), 0.0f);
|
||||||
|
assertEquals(100f, root_child0.getLayoutY(), 0.0f);
|
||||||
|
assertEquals(10f, root_child0.getLayoutWidth(), 0.0f);
|
||||||
|
assertEquals(10f, root_child0.getLayoutHeight(), 0.0f);
|
||||||
|
|
||||||
|
assertEquals(90f, root_child1.getLayoutX(), 0.0f);
|
||||||
|
assertEquals(90f, root_child1.getLayoutY(), 0.0f);
|
||||||
|
assertEquals(10f, root_child1.getLayoutWidth(), 0.0f);
|
||||||
|
assertEquals(10f, root_child1.getLayoutHeight(), 0.0f);
|
||||||
|
|
||||||
|
assertEquals(90f, root_child2.getLayoutX(), 0.0f);
|
||||||
|
assertEquals(20f, root_child2.getLayoutY(), 0.0f);
|
||||||
|
assertEquals(10f, root_child2.getLayoutWidth(), 0.0f);
|
||||||
|
assertEquals(160f, root_child2.getLayoutHeight(), 0.0f);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void test_absolute_layout_in_wrap_reverse_column_container() {
|
||||||
|
YogaConfig config = new YogaConfig();
|
||||||
|
|
||||||
|
final YogaNode root = new YogaNode(config);
|
||||||
|
root.setWrap(YogaWrap.WRAP_REVERSE);
|
||||||
|
root.setWidth(100f);
|
||||||
|
root.setHeight(100f);
|
||||||
|
|
||||||
|
final YogaNode root_child0 = new YogaNode(config);
|
||||||
|
root_child0.setPositionType(YogaPositionType.ABSOLUTE);
|
||||||
|
root_child0.setWidth(20f);
|
||||||
|
root_child0.setHeight(20f);
|
||||||
|
root.addChildAt(root_child0, 0);
|
||||||
|
root.setDirection(YogaDirection.LTR);
|
||||||
|
root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);
|
||||||
|
|
||||||
|
assertEquals(0f, root.getLayoutX(), 0.0f);
|
||||||
|
assertEquals(0f, root.getLayoutY(), 0.0f);
|
||||||
|
assertEquals(100f, root.getLayoutWidth(), 0.0f);
|
||||||
|
assertEquals(100f, root.getLayoutHeight(), 0.0f);
|
||||||
|
|
||||||
|
assertEquals(80f, 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);
|
||||||
|
|
||||||
|
root.setDirection(YogaDirection.RTL);
|
||||||
|
root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);
|
||||||
|
|
||||||
|
assertEquals(0f, root.getLayoutX(), 0.0f);
|
||||||
|
assertEquals(0f, 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(20f, root_child0.getLayoutWidth(), 0.0f);
|
||||||
|
assertEquals(20f, root_child0.getLayoutHeight(), 0.0f);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void test_absolute_layout_in_wrap_reverse_row_container() {
|
||||||
|
YogaConfig config = new YogaConfig();
|
||||||
|
|
||||||
|
final YogaNode root = new YogaNode(config);
|
||||||
|
root.setFlexDirection(YogaFlexDirection.ROW);
|
||||||
|
root.setWrap(YogaWrap.WRAP_REVERSE);
|
||||||
|
root.setWidth(100f);
|
||||||
|
root.setHeight(100f);
|
||||||
|
|
||||||
|
final YogaNode root_child0 = new YogaNode(config);
|
||||||
|
root_child0.setPositionType(YogaPositionType.ABSOLUTE);
|
||||||
|
root_child0.setWidth(20f);
|
||||||
|
root_child0.setHeight(20f);
|
||||||
|
root.addChildAt(root_child0, 0);
|
||||||
|
root.setDirection(YogaDirection.LTR);
|
||||||
|
root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);
|
||||||
|
|
||||||
|
assertEquals(0f, root.getLayoutX(), 0.0f);
|
||||||
|
assertEquals(0f, root.getLayoutY(), 0.0f);
|
||||||
|
assertEquals(100f, root.getLayoutWidth(), 0.0f);
|
||||||
|
assertEquals(100f, root.getLayoutHeight(), 0.0f);
|
||||||
|
|
||||||
|
assertEquals(0f, root_child0.getLayoutX(), 0.0f);
|
||||||
|
assertEquals(80f, root_child0.getLayoutY(), 0.0f);
|
||||||
|
assertEquals(20f, root_child0.getLayoutWidth(), 0.0f);
|
||||||
|
assertEquals(20f, root_child0.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(100f, root.getLayoutWidth(), 0.0f);
|
||||||
|
assertEquals(100f, root.getLayoutHeight(), 0.0f);
|
||||||
|
|
||||||
|
assertEquals(80f, root_child0.getLayoutX(), 0.0f);
|
||||||
|
assertEquals(80f, root_child0.getLayoutY(), 0.0f);
|
||||||
|
assertEquals(20f, root_child0.getLayoutWidth(), 0.0f);
|
||||||
|
assertEquals(20f, root_child0.getLayoutHeight(), 0.0f);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void test_absolute_layout_in_wrap_reverse_column_container_flex_end() {
|
||||||
|
YogaConfig config = new YogaConfig();
|
||||||
|
|
||||||
|
final YogaNode root = new YogaNode(config);
|
||||||
|
root.setWrap(YogaWrap.WRAP_REVERSE);
|
||||||
|
root.setWidth(100f);
|
||||||
|
root.setHeight(100f);
|
||||||
|
|
||||||
|
final YogaNode root_child0 = new YogaNode(config);
|
||||||
|
root_child0.setAlignSelf(YogaAlign.FLEX_END);
|
||||||
|
root_child0.setPositionType(YogaPositionType.ABSOLUTE);
|
||||||
|
root_child0.setWidth(20f);
|
||||||
|
root_child0.setHeight(20f);
|
||||||
|
root.addChildAt(root_child0, 0);
|
||||||
|
root.setDirection(YogaDirection.LTR);
|
||||||
|
root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);
|
||||||
|
|
||||||
|
assertEquals(0f, root.getLayoutX(), 0.0f);
|
||||||
|
assertEquals(0f, 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(20f, root_child0.getLayoutWidth(), 0.0f);
|
||||||
|
assertEquals(20f, root_child0.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(100f, root.getLayoutWidth(), 0.0f);
|
||||||
|
assertEquals(100f, root.getLayoutHeight(), 0.0f);
|
||||||
|
|
||||||
|
assertEquals(80f, 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);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void test_absolute_layout_in_wrap_reverse_row_container_flex_end() {
|
||||||
|
YogaConfig config = new YogaConfig();
|
||||||
|
|
||||||
|
final YogaNode root = new YogaNode(config);
|
||||||
|
root.setFlexDirection(YogaFlexDirection.ROW);
|
||||||
|
root.setWrap(YogaWrap.WRAP_REVERSE);
|
||||||
|
root.setWidth(100f);
|
||||||
|
root.setHeight(100f);
|
||||||
|
|
||||||
|
final YogaNode root_child0 = new YogaNode(config);
|
||||||
|
root_child0.setAlignSelf(YogaAlign.FLEX_END);
|
||||||
|
root_child0.setPositionType(YogaPositionType.ABSOLUTE);
|
||||||
|
root_child0.setWidth(20f);
|
||||||
|
root_child0.setHeight(20f);
|
||||||
|
root.addChildAt(root_child0, 0);
|
||||||
|
root.setDirection(YogaDirection.LTR);
|
||||||
|
root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);
|
||||||
|
|
||||||
|
assertEquals(0f, root.getLayoutX(), 0.0f);
|
||||||
|
assertEquals(0f, 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(20f, root_child0.getLayoutWidth(), 0.0f);
|
||||||
|
assertEquals(20f, root_child0.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(100f, root.getLayoutWidth(), 0.0f);
|
||||||
|
assertEquals(100f, root.getLayoutHeight(), 0.0f);
|
||||||
|
|
||||||
|
assertEquals(80f, 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);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@@ -421,4 +421,71 @@ public class YGFlexTest {
|
|||||||
assertEquals(0f, root_child0_child0.getLayoutHeight(), 0.0f);
|
assertEquals(0f, root_child0_child0.getLayoutHeight(), 0.0f);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void test_flex_grow_less_than_factor_one() {
|
||||||
|
YogaConfig config = new YogaConfig();
|
||||||
|
|
||||||
|
final YogaNode root = new YogaNode(config);
|
||||||
|
root.setWidth(200f);
|
||||||
|
root.setHeight(500f);
|
||||||
|
|
||||||
|
final YogaNode root_child0 = new YogaNode(config);
|
||||||
|
root_child0.setFlexGrow(0.2f);
|
||||||
|
root_child0.setFlexBasis(40f);
|
||||||
|
root.addChildAt(root_child0, 0);
|
||||||
|
|
||||||
|
final YogaNode root_child1 = new YogaNode(config);
|
||||||
|
root_child1.setFlexGrow(0.2f);
|
||||||
|
root.addChildAt(root_child1, 1);
|
||||||
|
|
||||||
|
final YogaNode root_child2 = new YogaNode(config);
|
||||||
|
root_child2.setFlexGrow(0.4f);
|
||||||
|
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(200f, root.getLayoutWidth(), 0.0f);
|
||||||
|
assertEquals(500f, root.getLayoutHeight(), 0.0f);
|
||||||
|
|
||||||
|
assertEquals(0f, root_child0.getLayoutX(), 0.0f);
|
||||||
|
assertEquals(0f, root_child0.getLayoutY(), 0.0f);
|
||||||
|
assertEquals(200f, root_child0.getLayoutWidth(), 0.0f);
|
||||||
|
assertEquals(132f, root_child0.getLayoutHeight(), 0.0f);
|
||||||
|
|
||||||
|
assertEquals(0f, root_child1.getLayoutX(), 0.0f);
|
||||||
|
assertEquals(132f, root_child1.getLayoutY(), 0.0f);
|
||||||
|
assertEquals(200f, root_child1.getLayoutWidth(), 0.0f);
|
||||||
|
assertEquals(92f, root_child1.getLayoutHeight(), 0.0f);
|
||||||
|
|
||||||
|
assertEquals(0f, root_child2.getLayoutX(), 0.0f);
|
||||||
|
assertEquals(224f, root_child2.getLayoutY(), 0.0f);
|
||||||
|
assertEquals(200f, root_child2.getLayoutWidth(), 0.0f);
|
||||||
|
assertEquals(184f, 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(200f, root.getLayoutWidth(), 0.0f);
|
||||||
|
assertEquals(500f, root.getLayoutHeight(), 0.0f);
|
||||||
|
|
||||||
|
assertEquals(0f, root_child0.getLayoutX(), 0.0f);
|
||||||
|
assertEquals(0f, root_child0.getLayoutY(), 0.0f);
|
||||||
|
assertEquals(200f, root_child0.getLayoutWidth(), 0.0f);
|
||||||
|
assertEquals(132f, root_child0.getLayoutHeight(), 0.0f);
|
||||||
|
|
||||||
|
assertEquals(0f, root_child1.getLayoutX(), 0.0f);
|
||||||
|
assertEquals(132f, root_child1.getLayoutY(), 0.0f);
|
||||||
|
assertEquals(200f, root_child1.getLayoutWidth(), 0.0f);
|
||||||
|
assertEquals(92f, root_child1.getLayoutHeight(), 0.0f);
|
||||||
|
|
||||||
|
assertEquals(0f, root_child2.getLayoutX(), 0.0f);
|
||||||
|
assertEquals(224f, root_child2.getLayoutY(), 0.0f);
|
||||||
|
assertEquals(200f, root_child2.getLayoutWidth(), 0.0f);
|
||||||
|
assertEquals(184f, root_child2.getLayoutHeight(), 0.0f);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@@ -1526,4 +1526,198 @@ public class YGFlexWrapTest {
|
|||||||
assertEquals(100f, root_child2.getLayoutHeight(), 0.0f);
|
assertEquals(100f, root_child2.getLayoutHeight(), 0.0f);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void test_wrap_nodes_with_content_sizing_overflowing_margin() {
|
||||||
|
YogaConfig config = new YogaConfig();
|
||||||
|
|
||||||
|
final YogaNode root = new YogaNode(config);
|
||||||
|
root.setWidth(500f);
|
||||||
|
root.setHeight(500f);
|
||||||
|
|
||||||
|
final YogaNode root_child0 = new YogaNode(config);
|
||||||
|
root_child0.setFlexDirection(YogaFlexDirection.ROW);
|
||||||
|
root_child0.setWrap(YogaWrap.WRAP);
|
||||||
|
root_child0.setWidth(85f);
|
||||||
|
root.addChildAt(root_child0, 0);
|
||||||
|
|
||||||
|
final YogaNode root_child0_child0 = new YogaNode(config);
|
||||||
|
root_child0.addChildAt(root_child0_child0, 0);
|
||||||
|
|
||||||
|
final YogaNode root_child0_child0_child0 = new YogaNode(config);
|
||||||
|
root_child0_child0_child0.setWidth(40f);
|
||||||
|
root_child0_child0_child0.setHeight(40f);
|
||||||
|
root_child0_child0.addChildAt(root_child0_child0_child0, 0);
|
||||||
|
|
||||||
|
final YogaNode root_child0_child1 = new YogaNode(config);
|
||||||
|
root_child0_child1.setMargin(YogaEdge.RIGHT, 10f);
|
||||||
|
root_child0.addChildAt(root_child0_child1, 1);
|
||||||
|
|
||||||
|
final YogaNode root_child0_child1_child0 = new YogaNode(config);
|
||||||
|
root_child0_child1_child0.setWidth(40f);
|
||||||
|
root_child0_child1_child0.setHeight(40f);
|
||||||
|
root_child0_child1.addChildAt(root_child0_child1_child0, 0);
|
||||||
|
root.setDirection(YogaDirection.LTR);
|
||||||
|
root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);
|
||||||
|
|
||||||
|
assertEquals(0f, root.getLayoutX(), 0.0f);
|
||||||
|
assertEquals(0f, root.getLayoutY(), 0.0f);
|
||||||
|
assertEquals(500f, root.getLayoutWidth(), 0.0f);
|
||||||
|
assertEquals(500f, root.getLayoutHeight(), 0.0f);
|
||||||
|
|
||||||
|
assertEquals(0f, root_child0.getLayoutX(), 0.0f);
|
||||||
|
assertEquals(0f, root_child0.getLayoutY(), 0.0f);
|
||||||
|
assertEquals(85f, root_child0.getLayoutWidth(), 0.0f);
|
||||||
|
assertEquals(80f, root_child0.getLayoutHeight(), 0.0f);
|
||||||
|
|
||||||
|
assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);
|
||||||
|
assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);
|
||||||
|
assertEquals(40f, root_child0_child0.getLayoutWidth(), 0.0f);
|
||||||
|
assertEquals(40f, 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(40f, root_child0_child0_child0.getLayoutWidth(), 0.0f);
|
||||||
|
assertEquals(40f, root_child0_child0_child0.getLayoutHeight(), 0.0f);
|
||||||
|
|
||||||
|
assertEquals(0f, root_child0_child1.getLayoutX(), 0.0f);
|
||||||
|
assertEquals(40f, root_child0_child1.getLayoutY(), 0.0f);
|
||||||
|
assertEquals(40f, root_child0_child1.getLayoutWidth(), 0.0f);
|
||||||
|
assertEquals(40f, root_child0_child1.getLayoutHeight(), 0.0f);
|
||||||
|
|
||||||
|
assertEquals(0f, root_child0_child1_child0.getLayoutX(), 0.0f);
|
||||||
|
assertEquals(0f, root_child0_child1_child0.getLayoutY(), 0.0f);
|
||||||
|
assertEquals(40f, root_child0_child1_child0.getLayoutWidth(), 0.0f);
|
||||||
|
assertEquals(40f, root_child0_child1_child0.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(500f, root.getLayoutWidth(), 0.0f);
|
||||||
|
assertEquals(500f, root.getLayoutHeight(), 0.0f);
|
||||||
|
|
||||||
|
assertEquals(415f, root_child0.getLayoutX(), 0.0f);
|
||||||
|
assertEquals(0f, root_child0.getLayoutY(), 0.0f);
|
||||||
|
assertEquals(85f, root_child0.getLayoutWidth(), 0.0f);
|
||||||
|
assertEquals(80f, root_child0.getLayoutHeight(), 0.0f);
|
||||||
|
|
||||||
|
assertEquals(45f, root_child0_child0.getLayoutX(), 0.0f);
|
||||||
|
assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);
|
||||||
|
assertEquals(40f, root_child0_child0.getLayoutWidth(), 0.0f);
|
||||||
|
assertEquals(40f, 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(40f, root_child0_child0_child0.getLayoutWidth(), 0.0f);
|
||||||
|
assertEquals(40f, root_child0_child0_child0.getLayoutHeight(), 0.0f);
|
||||||
|
|
||||||
|
assertEquals(35f, root_child0_child1.getLayoutX(), 0.0f);
|
||||||
|
assertEquals(40f, root_child0_child1.getLayoutY(), 0.0f);
|
||||||
|
assertEquals(40f, root_child0_child1.getLayoutWidth(), 0.0f);
|
||||||
|
assertEquals(40f, root_child0_child1.getLayoutHeight(), 0.0f);
|
||||||
|
|
||||||
|
assertEquals(0f, root_child0_child1_child0.getLayoutX(), 0.0f);
|
||||||
|
assertEquals(0f, root_child0_child1_child0.getLayoutY(), 0.0f);
|
||||||
|
assertEquals(40f, root_child0_child1_child0.getLayoutWidth(), 0.0f);
|
||||||
|
assertEquals(40f, root_child0_child1_child0.getLayoutHeight(), 0.0f);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void test_wrap_nodes_with_content_sizing_margin_cross() {
|
||||||
|
YogaConfig config = new YogaConfig();
|
||||||
|
|
||||||
|
final YogaNode root = new YogaNode(config);
|
||||||
|
root.setWidth(500f);
|
||||||
|
root.setHeight(500f);
|
||||||
|
|
||||||
|
final YogaNode root_child0 = new YogaNode(config);
|
||||||
|
root_child0.setFlexDirection(YogaFlexDirection.ROW);
|
||||||
|
root_child0.setWrap(YogaWrap.WRAP);
|
||||||
|
root_child0.setWidth(70f);
|
||||||
|
root.addChildAt(root_child0, 0);
|
||||||
|
|
||||||
|
final YogaNode root_child0_child0 = new YogaNode(config);
|
||||||
|
root_child0.addChildAt(root_child0_child0, 0);
|
||||||
|
|
||||||
|
final YogaNode root_child0_child0_child0 = new YogaNode(config);
|
||||||
|
root_child0_child0_child0.setWidth(40f);
|
||||||
|
root_child0_child0_child0.setHeight(40f);
|
||||||
|
root_child0_child0.addChildAt(root_child0_child0_child0, 0);
|
||||||
|
|
||||||
|
final YogaNode root_child0_child1 = new YogaNode(config);
|
||||||
|
root_child0_child1.setMargin(YogaEdge.TOP, 10f);
|
||||||
|
root_child0.addChildAt(root_child0_child1, 1);
|
||||||
|
|
||||||
|
final YogaNode root_child0_child1_child0 = new YogaNode(config);
|
||||||
|
root_child0_child1_child0.setWidth(40f);
|
||||||
|
root_child0_child1_child0.setHeight(40f);
|
||||||
|
root_child0_child1.addChildAt(root_child0_child1_child0, 0);
|
||||||
|
root.setDirection(YogaDirection.LTR);
|
||||||
|
root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);
|
||||||
|
|
||||||
|
assertEquals(0f, root.getLayoutX(), 0.0f);
|
||||||
|
assertEquals(0f, root.getLayoutY(), 0.0f);
|
||||||
|
assertEquals(500f, root.getLayoutWidth(), 0.0f);
|
||||||
|
assertEquals(500f, root.getLayoutHeight(), 0.0f);
|
||||||
|
|
||||||
|
assertEquals(0f, root_child0.getLayoutX(), 0.0f);
|
||||||
|
assertEquals(0f, root_child0.getLayoutY(), 0.0f);
|
||||||
|
assertEquals(70f, root_child0.getLayoutWidth(), 0.0f);
|
||||||
|
assertEquals(90f, root_child0.getLayoutHeight(), 0.0f);
|
||||||
|
|
||||||
|
assertEquals(0f, root_child0_child0.getLayoutX(), 0.0f);
|
||||||
|
assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);
|
||||||
|
assertEquals(40f, root_child0_child0.getLayoutWidth(), 0.0f);
|
||||||
|
assertEquals(40f, 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(40f, root_child0_child0_child0.getLayoutWidth(), 0.0f);
|
||||||
|
assertEquals(40f, root_child0_child0_child0.getLayoutHeight(), 0.0f);
|
||||||
|
|
||||||
|
assertEquals(0f, root_child0_child1.getLayoutX(), 0.0f);
|
||||||
|
assertEquals(50f, root_child0_child1.getLayoutY(), 0.0f);
|
||||||
|
assertEquals(40f, root_child0_child1.getLayoutWidth(), 0.0f);
|
||||||
|
assertEquals(40f, root_child0_child1.getLayoutHeight(), 0.0f);
|
||||||
|
|
||||||
|
assertEquals(0f, root_child0_child1_child0.getLayoutX(), 0.0f);
|
||||||
|
assertEquals(0f, root_child0_child1_child0.getLayoutY(), 0.0f);
|
||||||
|
assertEquals(40f, root_child0_child1_child0.getLayoutWidth(), 0.0f);
|
||||||
|
assertEquals(40f, root_child0_child1_child0.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(500f, root.getLayoutWidth(), 0.0f);
|
||||||
|
assertEquals(500f, root.getLayoutHeight(), 0.0f);
|
||||||
|
|
||||||
|
assertEquals(430f, root_child0.getLayoutX(), 0.0f);
|
||||||
|
assertEquals(0f, root_child0.getLayoutY(), 0.0f);
|
||||||
|
assertEquals(70f, root_child0.getLayoutWidth(), 0.0f);
|
||||||
|
assertEquals(90f, root_child0.getLayoutHeight(), 0.0f);
|
||||||
|
|
||||||
|
assertEquals(30f, root_child0_child0.getLayoutX(), 0.0f);
|
||||||
|
assertEquals(0f, root_child0_child0.getLayoutY(), 0.0f);
|
||||||
|
assertEquals(40f, root_child0_child0.getLayoutWidth(), 0.0f);
|
||||||
|
assertEquals(40f, 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(40f, root_child0_child0_child0.getLayoutWidth(), 0.0f);
|
||||||
|
assertEquals(40f, root_child0_child0_child0.getLayoutHeight(), 0.0f);
|
||||||
|
|
||||||
|
assertEquals(30f, root_child0_child1.getLayoutX(), 0.0f);
|
||||||
|
assertEquals(50f, root_child0_child1.getLayoutY(), 0.0f);
|
||||||
|
assertEquals(40f, root_child0_child1.getLayoutWidth(), 0.0f);
|
||||||
|
assertEquals(40f, root_child0_child1.getLayoutHeight(), 0.0f);
|
||||||
|
|
||||||
|
assertEquals(0f, root_child0_child1_child0.getLayoutX(), 0.0f);
|
||||||
|
assertEquals(0f, root_child0_child1_child0.getLayoutY(), 0.0f);
|
||||||
|
assertEquals(40f, root_child0_child1_child0.getLayoutWidth(), 0.0f);
|
||||||
|
assertEquals(40f, root_child0_child1_child0.getLayoutHeight(), 0.0f);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@@ -662,6 +662,200 @@ public class YGMinMaxDimensionTest {
|
|||||||
assertEquals(20f, root_child0_child0.getLayoutHeight(), 0.0f);
|
assertEquals(20f, root_child0_child0.getLayoutHeight(), 0.0f);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void test_flex_root_ignored() {
|
||||||
|
YogaConfig config = new YogaConfig();
|
||||||
|
|
||||||
|
final YogaNode root = new YogaNode(config);
|
||||||
|
root.setFlexGrow(1f);
|
||||||
|
root.setWidth(100f);
|
||||||
|
root.setMinHeight(100f);
|
||||||
|
root.setMaxHeight(500f);
|
||||||
|
|
||||||
|
final YogaNode root_child0 = new YogaNode(config);
|
||||||
|
root_child0.setFlexGrow(1f);
|
||||||
|
root_child0.setFlexBasis(200f);
|
||||||
|
root.addChildAt(root_child0, 0);
|
||||||
|
|
||||||
|
final YogaNode root_child1 = new YogaNode(config);
|
||||||
|
root_child1.setHeight(100f);
|
||||||
|
root.addChildAt(root_child1, 1);
|
||||||
|
root.setDirection(YogaDirection.LTR);
|
||||||
|
root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);
|
||||||
|
|
||||||
|
assertEquals(0f, root.getLayoutX(), 0.0f);
|
||||||
|
assertEquals(0f, root.getLayoutY(), 0.0f);
|
||||||
|
assertEquals(100f, root.getLayoutWidth(), 0.0f);
|
||||||
|
assertEquals(300f, 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(200f, root_child0.getLayoutHeight(), 0.0f);
|
||||||
|
|
||||||
|
assertEquals(0f, root_child1.getLayoutX(), 0.0f);
|
||||||
|
assertEquals(200f, root_child1.getLayoutY(), 0.0f);
|
||||||
|
assertEquals(100f, root_child1.getLayoutWidth(), 0.0f);
|
||||||
|
assertEquals(100f, root_child1.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(100f, root.getLayoutWidth(), 0.0f);
|
||||||
|
assertEquals(300f, 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(200f, root_child0.getLayoutHeight(), 0.0f);
|
||||||
|
|
||||||
|
assertEquals(0f, root_child1.getLayoutX(), 0.0f);
|
||||||
|
assertEquals(200f, root_child1.getLayoutY(), 0.0f);
|
||||||
|
assertEquals(100f, root_child1.getLayoutWidth(), 0.0f);
|
||||||
|
assertEquals(100f, root_child1.getLayoutHeight(), 0.0f);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void test_flex_grow_root_minimized() {
|
||||||
|
YogaConfig config = new YogaConfig();
|
||||||
|
|
||||||
|
final YogaNode root = new YogaNode(config);
|
||||||
|
root.setWidth(100f);
|
||||||
|
root.setMinHeight(100f);
|
||||||
|
root.setMaxHeight(500f);
|
||||||
|
|
||||||
|
final YogaNode root_child0 = new YogaNode(config);
|
||||||
|
root_child0.setFlexGrow(1f);
|
||||||
|
root_child0.setMinHeight(100f);
|
||||||
|
root_child0.setMaxHeight(500f);
|
||||||
|
root.addChildAt(root_child0, 0);
|
||||||
|
|
||||||
|
final YogaNode root_child0_child0 = new YogaNode(config);
|
||||||
|
root_child0_child0.setFlexGrow(1f);
|
||||||
|
root_child0_child0.setFlexBasis(200f);
|
||||||
|
root_child0.addChildAt(root_child0_child0, 0);
|
||||||
|
|
||||||
|
final YogaNode root_child0_child1 = new YogaNode(config);
|
||||||
|
root_child0_child1.setHeight(100f);
|
||||||
|
root_child0.addChildAt(root_child0_child1, 1);
|
||||||
|
root.setDirection(YogaDirection.LTR);
|
||||||
|
root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);
|
||||||
|
|
||||||
|
assertEquals(0f, root.getLayoutX(), 0.0f);
|
||||||
|
assertEquals(0f, root.getLayoutY(), 0.0f);
|
||||||
|
assertEquals(100f, root.getLayoutWidth(), 0.0f);
|
||||||
|
assertEquals(300f, 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(300f, 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(200f, root_child0_child0.getLayoutHeight(), 0.0f);
|
||||||
|
|
||||||
|
assertEquals(0f, root_child0_child1.getLayoutX(), 0.0f);
|
||||||
|
assertEquals(200f, root_child0_child1.getLayoutY(), 0.0f);
|
||||||
|
assertEquals(100f, root_child0_child1.getLayoutWidth(), 0.0f);
|
||||||
|
assertEquals(100f, root_child0_child1.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(100f, root.getLayoutWidth(), 0.0f);
|
||||||
|
assertEquals(300f, 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(300f, 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(200f, root_child0_child0.getLayoutHeight(), 0.0f);
|
||||||
|
|
||||||
|
assertEquals(0f, root_child0_child1.getLayoutX(), 0.0f);
|
||||||
|
assertEquals(200f, root_child0_child1.getLayoutY(), 0.0f);
|
||||||
|
assertEquals(100f, root_child0_child1.getLayoutWidth(), 0.0f);
|
||||||
|
assertEquals(100f, root_child0_child1.getLayoutHeight(), 0.0f);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void test_flex_grow_height_maximized() {
|
||||||
|
YogaConfig config = new YogaConfig();
|
||||||
|
|
||||||
|
final YogaNode root = new YogaNode(config);
|
||||||
|
root.setWidth(100f);
|
||||||
|
root.setHeight(500f);
|
||||||
|
|
||||||
|
final YogaNode root_child0 = new YogaNode(config);
|
||||||
|
root_child0.setFlexGrow(1f);
|
||||||
|
root_child0.setMinHeight(100f);
|
||||||
|
root_child0.setMaxHeight(500f);
|
||||||
|
root.addChildAt(root_child0, 0);
|
||||||
|
|
||||||
|
final YogaNode root_child0_child0 = new YogaNode(config);
|
||||||
|
root_child0_child0.setFlexGrow(1f);
|
||||||
|
root_child0_child0.setFlexBasis(200f);
|
||||||
|
root_child0.addChildAt(root_child0_child0, 0);
|
||||||
|
|
||||||
|
final YogaNode root_child0_child1 = new YogaNode(config);
|
||||||
|
root_child0_child1.setHeight(100f);
|
||||||
|
root_child0.addChildAt(root_child0_child1, 1);
|
||||||
|
root.setDirection(YogaDirection.LTR);
|
||||||
|
root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);
|
||||||
|
|
||||||
|
assertEquals(0f, root.getLayoutX(), 0.0f);
|
||||||
|
assertEquals(0f, root.getLayoutY(), 0.0f);
|
||||||
|
assertEquals(100f, root.getLayoutWidth(), 0.0f);
|
||||||
|
assertEquals(500f, 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(500f, 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(400f, root_child0_child0.getLayoutHeight(), 0.0f);
|
||||||
|
|
||||||
|
assertEquals(0f, root_child0_child1.getLayoutX(), 0.0f);
|
||||||
|
assertEquals(400f, root_child0_child1.getLayoutY(), 0.0f);
|
||||||
|
assertEquals(100f, root_child0_child1.getLayoutWidth(), 0.0f);
|
||||||
|
assertEquals(100f, root_child0_child1.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(100f, root.getLayoutWidth(), 0.0f);
|
||||||
|
assertEquals(500f, 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(500f, 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(400f, root_child0_child0.getLayoutHeight(), 0.0f);
|
||||||
|
|
||||||
|
assertEquals(0f, root_child0_child1.getLayoutX(), 0.0f);
|
||||||
|
assertEquals(400f, root_child0_child1.getLayoutY(), 0.0f);
|
||||||
|
assertEquals(100f, root_child0_child1.getLayoutWidth(), 0.0f);
|
||||||
|
assertEquals(100f, root_child0_child1.getLayoutHeight(), 0.0f);
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void test_flex_grow_within_constrained_min_row() {
|
public void test_flex_grow_within_constrained_min_row() {
|
||||||
YogaConfig config = new YogaConfig();
|
YogaConfig config = new YogaConfig();
|
||||||
@@ -887,6 +1081,63 @@ public class YGMinMaxDimensionTest {
|
|||||||
assertEquals(50f, root_child1.getLayoutHeight(), 0.0f);
|
assertEquals(50f, root_child1.getLayoutHeight(), 0.0f);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void test_child_min_max_width_flexing() {
|
||||||
|
YogaConfig config = new YogaConfig();
|
||||||
|
|
||||||
|
final YogaNode root = new YogaNode(config);
|
||||||
|
root.setFlexDirection(YogaFlexDirection.ROW);
|
||||||
|
root.setWidth(120f);
|
||||||
|
root.setHeight(50f);
|
||||||
|
|
||||||
|
final YogaNode root_child0 = new YogaNode(config);
|
||||||
|
root_child0.setFlexGrow(1f);
|
||||||
|
root_child0.setFlexBasis(0f);
|
||||||
|
root_child0.setMinWidth(60f);
|
||||||
|
root.addChildAt(root_child0, 0);
|
||||||
|
|
||||||
|
final YogaNode root_child1 = new YogaNode(config);
|
||||||
|
root_child1.setFlexGrow(1f);
|
||||||
|
root_child1.setFlexBasisPercent(50f);
|
||||||
|
root_child1.setMaxWidth(20f);
|
||||||
|
root.addChildAt(root_child1, 1);
|
||||||
|
root.setDirection(YogaDirection.LTR);
|
||||||
|
root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);
|
||||||
|
|
||||||
|
assertEquals(0f, root.getLayoutX(), 0.0f);
|
||||||
|
assertEquals(0f, root.getLayoutY(), 0.0f);
|
||||||
|
assertEquals(120f, root.getLayoutWidth(), 0.0f);
|
||||||
|
assertEquals(50f, 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(50f, root_child0.getLayoutHeight(), 0.0f);
|
||||||
|
|
||||||
|
assertEquals(100f, root_child1.getLayoutX(), 0.0f);
|
||||||
|
assertEquals(0f, root_child1.getLayoutY(), 0.0f);
|
||||||
|
assertEquals(20f, root_child1.getLayoutWidth(), 0.0f);
|
||||||
|
assertEquals(50f, root_child1.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(120f, root.getLayoutWidth(), 0.0f);
|
||||||
|
assertEquals(50f, root.getLayoutHeight(), 0.0f);
|
||||||
|
|
||||||
|
assertEquals(20f, root_child0.getLayoutX(), 0.0f);
|
||||||
|
assertEquals(0f, root_child0.getLayoutY(), 0.0f);
|
||||||
|
assertEquals(100f, root_child0.getLayoutWidth(), 0.0f);
|
||||||
|
assertEquals(50f, root_child0.getLayoutHeight(), 0.0f);
|
||||||
|
|
||||||
|
assertEquals(0f, root_child1.getLayoutX(), 0.0f);
|
||||||
|
assertEquals(0f, root_child1.getLayoutY(), 0.0f);
|
||||||
|
assertEquals(20f, root_child1.getLayoutWidth(), 0.0f);
|
||||||
|
assertEquals(50f, root_child1.getLayoutHeight(), 0.0f);
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void test_min_width_overrides_width() {
|
public void test_min_width_overrides_width() {
|
||||||
YogaConfig config = new YogaConfig();
|
YogaConfig config = new YogaConfig();
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "yoga-layout",
|
"name": "yoga-layout",
|
||||||
"version": "1.2.0",
|
"version": "1.5.0",
|
||||||
"description": "Yoga is a cross-platform layout engine enabling maximum collaboration within your team by implementing an API many designers are familiar with, and opening it up to developers across different platforms.",
|
"description": "Yoga is a cross-platform layout engine enabling maximum collaboration within your team by implementing an API many designers are familiar with, and opening it up to developers across different platforms.",
|
||||||
"license": "BSD-3-Clause",
|
"license": "BSD-3-Clause",
|
||||||
"repository": {
|
"repository": {
|
||||||
@@ -11,6 +11,10 @@
|
|||||||
"main": "./sources/entry-node",
|
"main": "./sources/entry-node",
|
||||||
"browser": "./sources/entry-browser",
|
"browser": "./sources/entry-browser",
|
||||||
|
|
||||||
|
"config": {
|
||||||
|
"platform": "all"
|
||||||
|
},
|
||||||
|
|
||||||
"scripts": {
|
"scripts": {
|
||||||
|
|
||||||
"which": "which",
|
"which": "which",
|
||||||
@@ -25,7 +29,7 @@
|
|||||||
"build:browser": "npm -- run copy-sources && npm -- run node-gyp configure build --asmjs=1",
|
"build:browser": "npm -- run copy-sources && npm -- run node-gyp configure build --asmjs=1",
|
||||||
"build:standalone": "webpack",
|
"build:standalone": "webpack",
|
||||||
"build:all": "npm -- run build:node && npm -- run build:browser && npm -- run build:standalone",
|
"build:all": "npm -- run build:node && npm -- run build:browser && npm -- run build:standalone",
|
||||||
"build": "npm -- run build:all",
|
"build": "cross-env \"npm --if-present -- run build:$npm_package_config_platform\"",
|
||||||
|
|
||||||
"test:node": "TEST_ENTRY=node time mocha --expose-gc -r tests/tools.js tests/Facebook.Yoga/**/*.js",
|
"test:node": "TEST_ENTRY=node time mocha --expose-gc -r tests/tools.js tests/Facebook.Yoga/**/*.js",
|
||||||
"test:browser": "TEST_ENTRY=browser time mocha --expose-gc -r tests/tools.js tests/Facebook.Yoga/**/*.js",
|
"test:browser": "TEST_ENTRY=browser time mocha --expose-gc -r tests/tools.js tests/Facebook.Yoga/**/*.js",
|
||||||
@@ -50,8 +54,8 @@
|
|||||||
|
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
|
|
||||||
|
"cross-env": "^4.0.0",
|
||||||
"mocha": "^3.2.0",
|
"mocha": "^3.2.0",
|
||||||
"webpack": "^2.2.0-rc.2"
|
"webpack": "^2.2.0-rc.2"
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -72,6 +72,10 @@ module.exports = {
|
|||||||
MEASURE_MODE_EXACTLY: 1,
|
MEASURE_MODE_EXACTLY: 1,
|
||||||
MEASURE_MODE_AT_MOST: 2,
|
MEASURE_MODE_AT_MOST: 2,
|
||||||
|
|
||||||
|
NODE_TYPE_COUNT: 2,
|
||||||
|
NODE_TYPE_DEFAULT: 0,
|
||||||
|
NODE_TYPE_TEXT: 1,
|
||||||
|
|
||||||
OVERFLOW_COUNT: 3,
|
OVERFLOW_COUNT: 3,
|
||||||
OVERFLOW_VISIBLE: 0,
|
OVERFLOW_VISIBLE: 0,
|
||||||
OVERFLOW_HIDDEN: 1,
|
OVERFLOW_HIDDEN: 1,
|
||||||
|
@@ -293,6 +293,30 @@ it("absolute_layout_within_border", function () {
|
|||||||
root_child1.setWidth(50);
|
root_child1.setWidth(50);
|
||||||
root_child1.setHeight(50);
|
root_child1.setHeight(50);
|
||||||
root.insertChild(root_child1, 1);
|
root.insertChild(root_child1, 1);
|
||||||
|
|
||||||
|
var root_child2 = Yoga.Node.create(config);
|
||||||
|
root_child2.setPositionType(Yoga.POSITION_TYPE_ABSOLUTE);
|
||||||
|
root_child2.setPosition(Yoga.EDGE_LEFT, 0);
|
||||||
|
root_child2.setPosition(Yoga.EDGE_TOP, 0);
|
||||||
|
root_child2.setMargin(Yoga.EDGE_LEFT, 10);
|
||||||
|
root_child2.setMargin(Yoga.EDGE_TOP, 10);
|
||||||
|
root_child2.setMargin(Yoga.EDGE_RIGHT, 10);
|
||||||
|
root_child2.setMargin(Yoga.EDGE_BOTTOM, 10);
|
||||||
|
root_child2.setWidth(50);
|
||||||
|
root_child2.setHeight(50);
|
||||||
|
root.insertChild(root_child2, 2);
|
||||||
|
|
||||||
|
var root_child3 = Yoga.Node.create(config);
|
||||||
|
root_child3.setPositionType(Yoga.POSITION_TYPE_ABSOLUTE);
|
||||||
|
root_child3.setPosition(Yoga.EDGE_RIGHT, 0);
|
||||||
|
root_child3.setPosition(Yoga.EDGE_BOTTOM, 0);
|
||||||
|
root_child3.setMargin(Yoga.EDGE_LEFT, 10);
|
||||||
|
root_child3.setMargin(Yoga.EDGE_TOP, 10);
|
||||||
|
root_child3.setMargin(Yoga.EDGE_RIGHT, 10);
|
||||||
|
root_child3.setMargin(Yoga.EDGE_BOTTOM, 10);
|
||||||
|
root_child3.setWidth(50);
|
||||||
|
root_child3.setHeight(50);
|
||||||
|
root.insertChild(root_child3, 3);
|
||||||
root.calculateLayout(Yoga.UNDEFINED, Yoga.UNDEFINED, Yoga.DIRECTION_LTR);
|
root.calculateLayout(Yoga.UNDEFINED, Yoga.UNDEFINED, Yoga.DIRECTION_LTR);
|
||||||
|
|
||||||
console.assert(10 === root.getComputedLeft(), "10 === root.getComputedLeft() (" + root.getComputedLeft() + ")");
|
console.assert(10 === root.getComputedLeft(), "10 === root.getComputedLeft() (" + root.getComputedLeft() + ")");
|
||||||
@@ -310,6 +334,16 @@ it("absolute_layout_within_border", function () {
|
|||||||
console.assert(50 === root_child1.getComputedWidth(), "50 === root_child1.getComputedWidth() (" + root_child1.getComputedWidth() + ")");
|
console.assert(50 === root_child1.getComputedWidth(), "50 === root_child1.getComputedWidth() (" + root_child1.getComputedWidth() + ")");
|
||||||
console.assert(50 === root_child1.getComputedHeight(), "50 === root_child1.getComputedHeight() (" + root_child1.getComputedHeight() + ")");
|
console.assert(50 === root_child1.getComputedHeight(), "50 === root_child1.getComputedHeight() (" + root_child1.getComputedHeight() + ")");
|
||||||
|
|
||||||
|
console.assert(20 === root_child2.getComputedLeft(), "20 === root_child2.getComputedLeft() (" + root_child2.getComputedLeft() + ")");
|
||||||
|
console.assert(20 === root_child2.getComputedTop(), "20 === root_child2.getComputedTop() (" + root_child2.getComputedTop() + ")");
|
||||||
|
console.assert(50 === root_child2.getComputedWidth(), "50 === root_child2.getComputedWidth() (" + root_child2.getComputedWidth() + ")");
|
||||||
|
console.assert(50 === root_child2.getComputedHeight(), "50 === root_child2.getComputedHeight() (" + root_child2.getComputedHeight() + ")");
|
||||||
|
|
||||||
|
console.assert(30 === root_child3.getComputedLeft(), "30 === root_child3.getComputedLeft() (" + root_child3.getComputedLeft() + ")");
|
||||||
|
console.assert(30 === root_child3.getComputedTop(), "30 === root_child3.getComputedTop() (" + root_child3.getComputedTop() + ")");
|
||||||
|
console.assert(50 === root_child3.getComputedWidth(), "50 === root_child3.getComputedWidth() (" + root_child3.getComputedWidth() + ")");
|
||||||
|
console.assert(50 === root_child3.getComputedHeight(), "50 === root_child3.getComputedHeight() (" + root_child3.getComputedHeight() + ")");
|
||||||
|
|
||||||
root.calculateLayout(Yoga.UNDEFINED, Yoga.UNDEFINED, Yoga.DIRECTION_RTL);
|
root.calculateLayout(Yoga.UNDEFINED, Yoga.UNDEFINED, Yoga.DIRECTION_RTL);
|
||||||
|
|
||||||
console.assert(10 === root.getComputedLeft(), "10 === root.getComputedLeft() (" + root.getComputedLeft() + ")");
|
console.assert(10 === root.getComputedLeft(), "10 === root.getComputedLeft() (" + root.getComputedLeft() + ")");
|
||||||
@@ -326,6 +360,16 @@ it("absolute_layout_within_border", function () {
|
|||||||
console.assert(40 === root_child1.getComputedTop(), "40 === root_child1.getComputedTop() (" + root_child1.getComputedTop() + ")");
|
console.assert(40 === root_child1.getComputedTop(), "40 === root_child1.getComputedTop() (" + root_child1.getComputedTop() + ")");
|
||||||
console.assert(50 === root_child1.getComputedWidth(), "50 === root_child1.getComputedWidth() (" + root_child1.getComputedWidth() + ")");
|
console.assert(50 === root_child1.getComputedWidth(), "50 === root_child1.getComputedWidth() (" + root_child1.getComputedWidth() + ")");
|
||||||
console.assert(50 === root_child1.getComputedHeight(), "50 === root_child1.getComputedHeight() (" + root_child1.getComputedHeight() + ")");
|
console.assert(50 === root_child1.getComputedHeight(), "50 === root_child1.getComputedHeight() (" + root_child1.getComputedHeight() + ")");
|
||||||
|
|
||||||
|
console.assert(20 === root_child2.getComputedLeft(), "20 === root_child2.getComputedLeft() (" + root_child2.getComputedLeft() + ")");
|
||||||
|
console.assert(20 === root_child2.getComputedTop(), "20 === root_child2.getComputedTop() (" + root_child2.getComputedTop() + ")");
|
||||||
|
console.assert(50 === root_child2.getComputedWidth(), "50 === root_child2.getComputedWidth() (" + root_child2.getComputedWidth() + ")");
|
||||||
|
console.assert(50 === root_child2.getComputedHeight(), "50 === root_child2.getComputedHeight() (" + root_child2.getComputedHeight() + ")");
|
||||||
|
|
||||||
|
console.assert(30 === root_child3.getComputedLeft(), "30 === root_child3.getComputedLeft() (" + root_child3.getComputedLeft() + ")");
|
||||||
|
console.assert(30 === root_child3.getComputedTop(), "30 === root_child3.getComputedTop() (" + root_child3.getComputedTop() + ")");
|
||||||
|
console.assert(50 === root_child3.getComputedWidth(), "50 === root_child3.getComputedWidth() (" + root_child3.getComputedWidth() + ")");
|
||||||
|
console.assert(50 === root_child3.getComputedHeight(), "50 === root_child3.getComputedHeight() (" + root_child3.getComputedHeight() + ")");
|
||||||
} finally {
|
} finally {
|
||||||
if (typeof root !== "undefined") {
|
if (typeof root !== "undefined") {
|
||||||
root.freeRecursive();
|
root.freeRecursive();
|
||||||
@@ -787,3 +831,266 @@ it("position_root_with_rtl_should_position_withoutdirection", function () {
|
|||||||
config.free();
|
config.free();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
it("absolute_layout_percentage_bottom_based_on_parent_height", function () {
|
||||||
|
var config = Yoga.Config.create();
|
||||||
|
|
||||||
|
try {
|
||||||
|
var root = Yoga.Node.create(config);
|
||||||
|
root.setWidth(100);
|
||||||
|
root.setHeight(200);
|
||||||
|
|
||||||
|
var root_child0 = Yoga.Node.create(config);
|
||||||
|
root_child0.setPositionType(Yoga.POSITION_TYPE_ABSOLUTE);
|
||||||
|
root_child0.setPosition(Yoga.EDGE_TOP, "50%");
|
||||||
|
root_child0.setWidth(10);
|
||||||
|
root_child0.setHeight(10);
|
||||||
|
root.insertChild(root_child0, 0);
|
||||||
|
|
||||||
|
var root_child1 = Yoga.Node.create(config);
|
||||||
|
root_child1.setPositionType(Yoga.POSITION_TYPE_ABSOLUTE);
|
||||||
|
root_child1.setPosition(Yoga.EDGE_BOTTOM, "50%");
|
||||||
|
root_child1.setWidth(10);
|
||||||
|
root_child1.setHeight(10);
|
||||||
|
root.insertChild(root_child1, 1);
|
||||||
|
|
||||||
|
var root_child2 = Yoga.Node.create(config);
|
||||||
|
root_child2.setPositionType(Yoga.POSITION_TYPE_ABSOLUTE);
|
||||||
|
root_child2.setPosition(Yoga.EDGE_TOP, "10%");
|
||||||
|
root_child2.setPosition(Yoga.EDGE_BOTTOM, "10%");
|
||||||
|
root_child2.setWidth(10);
|
||||||
|
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(100 === root.getComputedWidth(), "100 === root.getComputedWidth() (" + root.getComputedWidth() + ")");
|
||||||
|
console.assert(200 === root.getComputedHeight(), "200 === root.getComputedHeight() (" + root.getComputedHeight() + ")");
|
||||||
|
|
||||||
|
console.assert(0 === root_child0.getComputedLeft(), "0 === root_child0.getComputedLeft() (" + root_child0.getComputedLeft() + ")");
|
||||||
|
console.assert(100 === root_child0.getComputedTop(), "100 === root_child0.getComputedTop() (" + root_child0.getComputedTop() + ")");
|
||||||
|
console.assert(10 === root_child0.getComputedWidth(), "10 === root_child0.getComputedWidth() (" + root_child0.getComputedWidth() + ")");
|
||||||
|
console.assert(10 === root_child0.getComputedHeight(), "10 === root_child0.getComputedHeight() (" + root_child0.getComputedHeight() + ")");
|
||||||
|
|
||||||
|
console.assert(0 === root_child1.getComputedLeft(), "0 === root_child1.getComputedLeft() (" + root_child1.getComputedLeft() + ")");
|
||||||
|
console.assert(90 === root_child1.getComputedTop(), "90 === root_child1.getComputedTop() (" + root_child1.getComputedTop() + ")");
|
||||||
|
console.assert(10 === root_child1.getComputedWidth(), "10 === root_child1.getComputedWidth() (" + root_child1.getComputedWidth() + ")");
|
||||||
|
console.assert(10 === root_child1.getComputedHeight(), "10 === root_child1.getComputedHeight() (" + root_child1.getComputedHeight() + ")");
|
||||||
|
|
||||||
|
console.assert(0 === root_child2.getComputedLeft(), "0 === root_child2.getComputedLeft() (" + root_child2.getComputedLeft() + ")");
|
||||||
|
console.assert(20 === root_child2.getComputedTop(), "20 === root_child2.getComputedTop() (" + root_child2.getComputedTop() + ")");
|
||||||
|
console.assert(10 === root_child2.getComputedWidth(), "10 === root_child2.getComputedWidth() (" + root_child2.getComputedWidth() + ")");
|
||||||
|
console.assert(160 === root_child2.getComputedHeight(), "160 === 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(100 === root.getComputedWidth(), "100 === root.getComputedWidth() (" + root.getComputedWidth() + ")");
|
||||||
|
console.assert(200 === root.getComputedHeight(), "200 === root.getComputedHeight() (" + root.getComputedHeight() + ")");
|
||||||
|
|
||||||
|
console.assert(90 === root_child0.getComputedLeft(), "90 === root_child0.getComputedLeft() (" + root_child0.getComputedLeft() + ")");
|
||||||
|
console.assert(100 === root_child0.getComputedTop(), "100 === root_child0.getComputedTop() (" + root_child0.getComputedTop() + ")");
|
||||||
|
console.assert(10 === root_child0.getComputedWidth(), "10 === root_child0.getComputedWidth() (" + root_child0.getComputedWidth() + ")");
|
||||||
|
console.assert(10 === root_child0.getComputedHeight(), "10 === root_child0.getComputedHeight() (" + root_child0.getComputedHeight() + ")");
|
||||||
|
|
||||||
|
console.assert(90 === root_child1.getComputedLeft(), "90 === root_child1.getComputedLeft() (" + root_child1.getComputedLeft() + ")");
|
||||||
|
console.assert(90 === root_child1.getComputedTop(), "90 === root_child1.getComputedTop() (" + root_child1.getComputedTop() + ")");
|
||||||
|
console.assert(10 === root_child1.getComputedWidth(), "10 === root_child1.getComputedWidth() (" + root_child1.getComputedWidth() + ")");
|
||||||
|
console.assert(10 === root_child1.getComputedHeight(), "10 === root_child1.getComputedHeight() (" + root_child1.getComputedHeight() + ")");
|
||||||
|
|
||||||
|
console.assert(90 === root_child2.getComputedLeft(), "90 === root_child2.getComputedLeft() (" + root_child2.getComputedLeft() + ")");
|
||||||
|
console.assert(20 === root_child2.getComputedTop(), "20 === root_child2.getComputedTop() (" + root_child2.getComputedTop() + ")");
|
||||||
|
console.assert(10 === root_child2.getComputedWidth(), "10 === root_child2.getComputedWidth() (" + root_child2.getComputedWidth() + ")");
|
||||||
|
console.assert(160 === root_child2.getComputedHeight(), "160 === root_child2.getComputedHeight() (" + root_child2.getComputedHeight() + ")");
|
||||||
|
} finally {
|
||||||
|
if (typeof root !== "undefined") {
|
||||||
|
root.freeRecursive();
|
||||||
|
}
|
||||||
|
|
||||||
|
config.free();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
it("absolute_layout_in_wrap_reverse_column_container", function () {
|
||||||
|
var config = Yoga.Config.create();
|
||||||
|
|
||||||
|
try {
|
||||||
|
var root = Yoga.Node.create(config);
|
||||||
|
root.setFlexWrap(Yoga.WRAP_WRAP_REVERSE);
|
||||||
|
root.setWidth(100);
|
||||||
|
root.setHeight(100);
|
||||||
|
|
||||||
|
var root_child0 = Yoga.Node.create(config);
|
||||||
|
root_child0.setPositionType(Yoga.POSITION_TYPE_ABSOLUTE);
|
||||||
|
root_child0.setWidth(20);
|
||||||
|
root_child0.setHeight(20);
|
||||||
|
root.insertChild(root_child0, 0);
|
||||||
|
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(100 === root.getComputedWidth(), "100 === root.getComputedWidth() (" + root.getComputedWidth() + ")");
|
||||||
|
console.assert(100 === root.getComputedHeight(), "100 === root.getComputedHeight() (" + root.getComputedHeight() + ")");
|
||||||
|
|
||||||
|
console.assert(80 === root_child0.getComputedLeft(), "80 === 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() + ")");
|
||||||
|
|
||||||
|
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(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(20 === root_child0.getComputedWidth(), "20 === root_child0.getComputedWidth() (" + root_child0.getComputedWidth() + ")");
|
||||||
|
console.assert(20 === root_child0.getComputedHeight(), "20 === root_child0.getComputedHeight() (" + root_child0.getComputedHeight() + ")");
|
||||||
|
} finally {
|
||||||
|
if (typeof root !== "undefined") {
|
||||||
|
root.freeRecursive();
|
||||||
|
}
|
||||||
|
|
||||||
|
config.free();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
it("absolute_layout_in_wrap_reverse_row_container", function () {
|
||||||
|
var config = Yoga.Config.create();
|
||||||
|
|
||||||
|
try {
|
||||||
|
var root = Yoga.Node.create(config);
|
||||||
|
root.setFlexDirection(Yoga.FLEX_DIRECTION_ROW);
|
||||||
|
root.setFlexWrap(Yoga.WRAP_WRAP_REVERSE);
|
||||||
|
root.setWidth(100);
|
||||||
|
root.setHeight(100);
|
||||||
|
|
||||||
|
var root_child0 = Yoga.Node.create(config);
|
||||||
|
root_child0.setPositionType(Yoga.POSITION_TYPE_ABSOLUTE);
|
||||||
|
root_child0.setWidth(20);
|
||||||
|
root_child0.setHeight(20);
|
||||||
|
root.insertChild(root_child0, 0);
|
||||||
|
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(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(80 === root_child0.getComputedTop(), "80 === 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() + ")");
|
||||||
|
|
||||||
|
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(100 === root.getComputedWidth(), "100 === root.getComputedWidth() (" + root.getComputedWidth() + ")");
|
||||||
|
console.assert(100 === root.getComputedHeight(), "100 === root.getComputedHeight() (" + root.getComputedHeight() + ")");
|
||||||
|
|
||||||
|
console.assert(80 === root_child0.getComputedLeft(), "80 === root_child0.getComputedLeft() (" + root_child0.getComputedLeft() + ")");
|
||||||
|
console.assert(80 === root_child0.getComputedTop(), "80 === 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() + ")");
|
||||||
|
} finally {
|
||||||
|
if (typeof root !== "undefined") {
|
||||||
|
root.freeRecursive();
|
||||||
|
}
|
||||||
|
|
||||||
|
config.free();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
it("absolute_layout_in_wrap_reverse_column_container_flex_end", function () {
|
||||||
|
var config = Yoga.Config.create();
|
||||||
|
|
||||||
|
try {
|
||||||
|
var root = Yoga.Node.create(config);
|
||||||
|
root.setFlexWrap(Yoga.WRAP_WRAP_REVERSE);
|
||||||
|
root.setWidth(100);
|
||||||
|
root.setHeight(100);
|
||||||
|
|
||||||
|
var root_child0 = Yoga.Node.create(config);
|
||||||
|
root_child0.setAlignSelf(Yoga.ALIGN_FLEX_END);
|
||||||
|
root_child0.setPositionType(Yoga.POSITION_TYPE_ABSOLUTE);
|
||||||
|
root_child0.setWidth(20);
|
||||||
|
root_child0.setHeight(20);
|
||||||
|
root.insertChild(root_child0, 0);
|
||||||
|
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(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(20 === root_child0.getComputedWidth(), "20 === root_child0.getComputedWidth() (" + root_child0.getComputedWidth() + ")");
|
||||||
|
console.assert(20 === root_child0.getComputedHeight(), "20 === root_child0.getComputedHeight() (" + root_child0.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(100 === root.getComputedWidth(), "100 === root.getComputedWidth() (" + root.getComputedWidth() + ")");
|
||||||
|
console.assert(100 === root.getComputedHeight(), "100 === root.getComputedHeight() (" + root.getComputedHeight() + ")");
|
||||||
|
|
||||||
|
console.assert(80 === root_child0.getComputedLeft(), "80 === 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() + ")");
|
||||||
|
} finally {
|
||||||
|
if (typeof root !== "undefined") {
|
||||||
|
root.freeRecursive();
|
||||||
|
}
|
||||||
|
|
||||||
|
config.free();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
it("absolute_layout_in_wrap_reverse_row_container_flex_end", function () {
|
||||||
|
var config = Yoga.Config.create();
|
||||||
|
|
||||||
|
try {
|
||||||
|
var root = Yoga.Node.create(config);
|
||||||
|
root.setFlexDirection(Yoga.FLEX_DIRECTION_ROW);
|
||||||
|
root.setFlexWrap(Yoga.WRAP_WRAP_REVERSE);
|
||||||
|
root.setWidth(100);
|
||||||
|
root.setHeight(100);
|
||||||
|
|
||||||
|
var root_child0 = Yoga.Node.create(config);
|
||||||
|
root_child0.setAlignSelf(Yoga.ALIGN_FLEX_END);
|
||||||
|
root_child0.setPositionType(Yoga.POSITION_TYPE_ABSOLUTE);
|
||||||
|
root_child0.setWidth(20);
|
||||||
|
root_child0.setHeight(20);
|
||||||
|
root.insertChild(root_child0, 0);
|
||||||
|
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(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(20 === root_child0.getComputedWidth(), "20 === root_child0.getComputedWidth() (" + root_child0.getComputedWidth() + ")");
|
||||||
|
console.assert(20 === root_child0.getComputedHeight(), "20 === root_child0.getComputedHeight() (" + root_child0.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(100 === root.getComputedWidth(), "100 === root.getComputedWidth() (" + root.getComputedWidth() + ")");
|
||||||
|
console.assert(100 === root.getComputedHeight(), "100 === root.getComputedHeight() (" + root.getComputedHeight() + ")");
|
||||||
|
|
||||||
|
console.assert(80 === root_child0.getComputedLeft(), "80 === 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() + ")");
|
||||||
|
} finally {
|
||||||
|
if (typeof root !== "undefined") {
|
||||||
|
root.freeRecursive();
|
||||||
|
}
|
||||||
|
|
||||||
|
config.free();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
@@ -444,3 +444,74 @@ it("flex_grow_shrink_at_most", function () {
|
|||||||
config.free();
|
config.free();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
it("flex_grow_less_than_factor_one", function () {
|
||||||
|
var config = Yoga.Config.create();
|
||||||
|
|
||||||
|
try {
|
||||||
|
var root = Yoga.Node.create(config);
|
||||||
|
root.setWidth(200);
|
||||||
|
root.setHeight(500);
|
||||||
|
|
||||||
|
var root_child0 = Yoga.Node.create(config);
|
||||||
|
root_child0.setFlexGrow(0.2);
|
||||||
|
root_child0.setFlexBasis(40);
|
||||||
|
root.insertChild(root_child0, 0);
|
||||||
|
|
||||||
|
var root_child1 = Yoga.Node.create(config);
|
||||||
|
root_child1.setFlexGrow(0.2);
|
||||||
|
root.insertChild(root_child1, 1);
|
||||||
|
|
||||||
|
var root_child2 = Yoga.Node.create(config);
|
||||||
|
root_child2.setFlexGrow(0.4);
|
||||||
|
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(200 === root.getComputedWidth(), "200 === root.getComputedWidth() (" + root.getComputedWidth() + ")");
|
||||||
|
console.assert(500 === root.getComputedHeight(), "500 === 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(200 === root_child0.getComputedWidth(), "200 === root_child0.getComputedWidth() (" + root_child0.getComputedWidth() + ")");
|
||||||
|
console.assert(132 === root_child0.getComputedHeight(), "132 === root_child0.getComputedHeight() (" + root_child0.getComputedHeight() + ")");
|
||||||
|
|
||||||
|
console.assert(0 === root_child1.getComputedLeft(), "0 === root_child1.getComputedLeft() (" + root_child1.getComputedLeft() + ")");
|
||||||
|
console.assert(132 === root_child1.getComputedTop(), "132 === root_child1.getComputedTop() (" + root_child1.getComputedTop() + ")");
|
||||||
|
console.assert(200 === root_child1.getComputedWidth(), "200 === root_child1.getComputedWidth() (" + root_child1.getComputedWidth() + ")");
|
||||||
|
console.assert(92 === root_child1.getComputedHeight(), "92 === root_child1.getComputedHeight() (" + root_child1.getComputedHeight() + ")");
|
||||||
|
|
||||||
|
console.assert(0 === root_child2.getComputedLeft(), "0 === root_child2.getComputedLeft() (" + root_child2.getComputedLeft() + ")");
|
||||||
|
console.assert(224 === root_child2.getComputedTop(), "224 === root_child2.getComputedTop() (" + root_child2.getComputedTop() + ")");
|
||||||
|
console.assert(200 === root_child2.getComputedWidth(), "200 === root_child2.getComputedWidth() (" + root_child2.getComputedWidth() + ")");
|
||||||
|
console.assert(184 === root_child2.getComputedHeight(), "184 === 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(200 === root.getComputedWidth(), "200 === root.getComputedWidth() (" + root.getComputedWidth() + ")");
|
||||||
|
console.assert(500 === root.getComputedHeight(), "500 === 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(200 === root_child0.getComputedWidth(), "200 === root_child0.getComputedWidth() (" + root_child0.getComputedWidth() + ")");
|
||||||
|
console.assert(132 === root_child0.getComputedHeight(), "132 === root_child0.getComputedHeight() (" + root_child0.getComputedHeight() + ")");
|
||||||
|
|
||||||
|
console.assert(0 === root_child1.getComputedLeft(), "0 === root_child1.getComputedLeft() (" + root_child1.getComputedLeft() + ")");
|
||||||
|
console.assert(132 === root_child1.getComputedTop(), "132 === root_child1.getComputedTop() (" + root_child1.getComputedTop() + ")");
|
||||||
|
console.assert(200 === root_child1.getComputedWidth(), "200 === root_child1.getComputedWidth() (" + root_child1.getComputedWidth() + ")");
|
||||||
|
console.assert(92 === root_child1.getComputedHeight(), "92 === root_child1.getComputedHeight() (" + root_child1.getComputedHeight() + ")");
|
||||||
|
|
||||||
|
console.assert(0 === root_child2.getComputedLeft(), "0 === root_child2.getComputedLeft() (" + root_child2.getComputedLeft() + ")");
|
||||||
|
console.assert(224 === root_child2.getComputedTop(), "224 === root_child2.getComputedTop() (" + root_child2.getComputedTop() + ")");
|
||||||
|
console.assert(200 === root_child2.getComputedWidth(), "200 === root_child2.getComputedWidth() (" + root_child2.getComputedWidth() + ")");
|
||||||
|
console.assert(184 === root_child2.getComputedHeight(), "184 === root_child2.getComputedHeight() (" + root_child2.getComputedHeight() + ")");
|
||||||
|
} finally {
|
||||||
|
if (typeof root !== "undefined") {
|
||||||
|
root.freeRecursive();
|
||||||
|
}
|
||||||
|
|
||||||
|
config.free();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
@@ -1593,3 +1593,205 @@ it("wrapped_column_max_height_flex", function () {
|
|||||||
config.free();
|
config.free();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
it("wrap_nodes_with_content_sizing_overflowing_margin", function () {
|
||||||
|
var config = Yoga.Config.create();
|
||||||
|
|
||||||
|
try {
|
||||||
|
var root = Yoga.Node.create(config);
|
||||||
|
root.setWidth(500);
|
||||||
|
root.setHeight(500);
|
||||||
|
|
||||||
|
var root_child0 = Yoga.Node.create(config);
|
||||||
|
root_child0.setFlexDirection(Yoga.FLEX_DIRECTION_ROW);
|
||||||
|
root_child0.setFlexWrap(Yoga.WRAP_WRAP);
|
||||||
|
root_child0.setWidth(85);
|
||||||
|
root.insertChild(root_child0, 0);
|
||||||
|
|
||||||
|
var root_child0_child0 = Yoga.Node.create(config);
|
||||||
|
root_child0.insertChild(root_child0_child0, 0);
|
||||||
|
|
||||||
|
var root_child0_child0_child0 = Yoga.Node.create(config);
|
||||||
|
root_child0_child0_child0.setWidth(40);
|
||||||
|
root_child0_child0_child0.setHeight(40);
|
||||||
|
root_child0_child0.insertChild(root_child0_child0_child0, 0);
|
||||||
|
|
||||||
|
var root_child0_child1 = Yoga.Node.create(config);
|
||||||
|
root_child0_child1.setMargin(Yoga.EDGE_RIGHT, 10);
|
||||||
|
root_child0.insertChild(root_child0_child1, 1);
|
||||||
|
|
||||||
|
var root_child0_child1_child0 = Yoga.Node.create(config);
|
||||||
|
root_child0_child1_child0.setWidth(40);
|
||||||
|
root_child0_child1_child0.setHeight(40);
|
||||||
|
root_child0_child1.insertChild(root_child0_child1_child0, 0);
|
||||||
|
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(500 === root.getComputedWidth(), "500 === root.getComputedWidth() (" + root.getComputedWidth() + ")");
|
||||||
|
console.assert(500 === root.getComputedHeight(), "500 === 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(85 === root_child0.getComputedWidth(), "85 === root_child0.getComputedWidth() (" + root_child0.getComputedWidth() + ")");
|
||||||
|
console.assert(80 === root_child0.getComputedHeight(), "80 === 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(40 === root_child0_child0.getComputedWidth(), "40 === root_child0_child0.getComputedWidth() (" + root_child0_child0.getComputedWidth() + ")");
|
||||||
|
console.assert(40 === root_child0_child0.getComputedHeight(), "40 === 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(40 === root_child0_child0_child0.getComputedWidth(), "40 === root_child0_child0_child0.getComputedWidth() (" + root_child0_child0_child0.getComputedWidth() + ")");
|
||||||
|
console.assert(40 === root_child0_child0_child0.getComputedHeight(), "40 === root_child0_child0_child0.getComputedHeight() (" + root_child0_child0_child0.getComputedHeight() + ")");
|
||||||
|
|
||||||
|
console.assert(0 === root_child0_child1.getComputedLeft(), "0 === root_child0_child1.getComputedLeft() (" + root_child0_child1.getComputedLeft() + ")");
|
||||||
|
console.assert(40 === root_child0_child1.getComputedTop(), "40 === root_child0_child1.getComputedTop() (" + root_child0_child1.getComputedTop() + ")");
|
||||||
|
console.assert(40 === root_child0_child1.getComputedWidth(), "40 === root_child0_child1.getComputedWidth() (" + root_child0_child1.getComputedWidth() + ")");
|
||||||
|
console.assert(40 === root_child0_child1.getComputedHeight(), "40 === root_child0_child1.getComputedHeight() (" + root_child0_child1.getComputedHeight() + ")");
|
||||||
|
|
||||||
|
console.assert(0 === root_child0_child1_child0.getComputedLeft(), "0 === root_child0_child1_child0.getComputedLeft() (" + root_child0_child1_child0.getComputedLeft() + ")");
|
||||||
|
console.assert(0 === root_child0_child1_child0.getComputedTop(), "0 === root_child0_child1_child0.getComputedTop() (" + root_child0_child1_child0.getComputedTop() + ")");
|
||||||
|
console.assert(40 === root_child0_child1_child0.getComputedWidth(), "40 === root_child0_child1_child0.getComputedWidth() (" + root_child0_child1_child0.getComputedWidth() + ")");
|
||||||
|
console.assert(40 === root_child0_child1_child0.getComputedHeight(), "40 === root_child0_child1_child0.getComputedHeight() (" + root_child0_child1_child0.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(500 === root.getComputedWidth(), "500 === root.getComputedWidth() (" + root.getComputedWidth() + ")");
|
||||||
|
console.assert(500 === root.getComputedHeight(), "500 === root.getComputedHeight() (" + root.getComputedHeight() + ")");
|
||||||
|
|
||||||
|
console.assert(415 === root_child0.getComputedLeft(), "415 === root_child0.getComputedLeft() (" + root_child0.getComputedLeft() + ")");
|
||||||
|
console.assert(0 === root_child0.getComputedTop(), "0 === root_child0.getComputedTop() (" + root_child0.getComputedTop() + ")");
|
||||||
|
console.assert(85 === root_child0.getComputedWidth(), "85 === root_child0.getComputedWidth() (" + root_child0.getComputedWidth() + ")");
|
||||||
|
console.assert(80 === root_child0.getComputedHeight(), "80 === root_child0.getComputedHeight() (" + root_child0.getComputedHeight() + ")");
|
||||||
|
|
||||||
|
console.assert(45 === root_child0_child0.getComputedLeft(), "45 === 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(40 === root_child0_child0.getComputedWidth(), "40 === root_child0_child0.getComputedWidth() (" + root_child0_child0.getComputedWidth() + ")");
|
||||||
|
console.assert(40 === root_child0_child0.getComputedHeight(), "40 === 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(40 === root_child0_child0_child0.getComputedWidth(), "40 === root_child0_child0_child0.getComputedWidth() (" + root_child0_child0_child0.getComputedWidth() + ")");
|
||||||
|
console.assert(40 === root_child0_child0_child0.getComputedHeight(), "40 === root_child0_child0_child0.getComputedHeight() (" + root_child0_child0_child0.getComputedHeight() + ")");
|
||||||
|
|
||||||
|
console.assert(35 === root_child0_child1.getComputedLeft(), "35 === root_child0_child1.getComputedLeft() (" + root_child0_child1.getComputedLeft() + ")");
|
||||||
|
console.assert(40 === root_child0_child1.getComputedTop(), "40 === root_child0_child1.getComputedTop() (" + root_child0_child1.getComputedTop() + ")");
|
||||||
|
console.assert(40 === root_child0_child1.getComputedWidth(), "40 === root_child0_child1.getComputedWidth() (" + root_child0_child1.getComputedWidth() + ")");
|
||||||
|
console.assert(40 === root_child0_child1.getComputedHeight(), "40 === root_child0_child1.getComputedHeight() (" + root_child0_child1.getComputedHeight() + ")");
|
||||||
|
|
||||||
|
console.assert(0 === root_child0_child1_child0.getComputedLeft(), "0 === root_child0_child1_child0.getComputedLeft() (" + root_child0_child1_child0.getComputedLeft() + ")");
|
||||||
|
console.assert(0 === root_child0_child1_child0.getComputedTop(), "0 === root_child0_child1_child0.getComputedTop() (" + root_child0_child1_child0.getComputedTop() + ")");
|
||||||
|
console.assert(40 === root_child0_child1_child0.getComputedWidth(), "40 === root_child0_child1_child0.getComputedWidth() (" + root_child0_child1_child0.getComputedWidth() + ")");
|
||||||
|
console.assert(40 === root_child0_child1_child0.getComputedHeight(), "40 === root_child0_child1_child0.getComputedHeight() (" + root_child0_child1_child0.getComputedHeight() + ")");
|
||||||
|
} finally {
|
||||||
|
if (typeof root !== "undefined") {
|
||||||
|
root.freeRecursive();
|
||||||
|
}
|
||||||
|
|
||||||
|
config.free();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
it("wrap_nodes_with_content_sizing_margin_cross", function () {
|
||||||
|
var config = Yoga.Config.create();
|
||||||
|
|
||||||
|
try {
|
||||||
|
var root = Yoga.Node.create(config);
|
||||||
|
root.setWidth(500);
|
||||||
|
root.setHeight(500);
|
||||||
|
|
||||||
|
var root_child0 = Yoga.Node.create(config);
|
||||||
|
root_child0.setFlexDirection(Yoga.FLEX_DIRECTION_ROW);
|
||||||
|
root_child0.setFlexWrap(Yoga.WRAP_WRAP);
|
||||||
|
root_child0.setWidth(70);
|
||||||
|
root.insertChild(root_child0, 0);
|
||||||
|
|
||||||
|
var root_child0_child0 = Yoga.Node.create(config);
|
||||||
|
root_child0.insertChild(root_child0_child0, 0);
|
||||||
|
|
||||||
|
var root_child0_child0_child0 = Yoga.Node.create(config);
|
||||||
|
root_child0_child0_child0.setWidth(40);
|
||||||
|
root_child0_child0_child0.setHeight(40);
|
||||||
|
root_child0_child0.insertChild(root_child0_child0_child0, 0);
|
||||||
|
|
||||||
|
var root_child0_child1 = Yoga.Node.create(config);
|
||||||
|
root_child0_child1.setMargin(Yoga.EDGE_TOP, 10);
|
||||||
|
root_child0.insertChild(root_child0_child1, 1);
|
||||||
|
|
||||||
|
var root_child0_child1_child0 = Yoga.Node.create(config);
|
||||||
|
root_child0_child1_child0.setWidth(40);
|
||||||
|
root_child0_child1_child0.setHeight(40);
|
||||||
|
root_child0_child1.insertChild(root_child0_child1_child0, 0);
|
||||||
|
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(500 === root.getComputedWidth(), "500 === root.getComputedWidth() (" + root.getComputedWidth() + ")");
|
||||||
|
console.assert(500 === root.getComputedHeight(), "500 === 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(70 === root_child0.getComputedWidth(), "70 === root_child0.getComputedWidth() (" + root_child0.getComputedWidth() + ")");
|
||||||
|
console.assert(90 === root_child0.getComputedHeight(), "90 === 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(40 === root_child0_child0.getComputedWidth(), "40 === root_child0_child0.getComputedWidth() (" + root_child0_child0.getComputedWidth() + ")");
|
||||||
|
console.assert(40 === root_child0_child0.getComputedHeight(), "40 === 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(40 === root_child0_child0_child0.getComputedWidth(), "40 === root_child0_child0_child0.getComputedWidth() (" + root_child0_child0_child0.getComputedWidth() + ")");
|
||||||
|
console.assert(40 === root_child0_child0_child0.getComputedHeight(), "40 === root_child0_child0_child0.getComputedHeight() (" + root_child0_child0_child0.getComputedHeight() + ")");
|
||||||
|
|
||||||
|
console.assert(0 === root_child0_child1.getComputedLeft(), "0 === root_child0_child1.getComputedLeft() (" + root_child0_child1.getComputedLeft() + ")");
|
||||||
|
console.assert(50 === root_child0_child1.getComputedTop(), "50 === root_child0_child1.getComputedTop() (" + root_child0_child1.getComputedTop() + ")");
|
||||||
|
console.assert(40 === root_child0_child1.getComputedWidth(), "40 === root_child0_child1.getComputedWidth() (" + root_child0_child1.getComputedWidth() + ")");
|
||||||
|
console.assert(40 === root_child0_child1.getComputedHeight(), "40 === root_child0_child1.getComputedHeight() (" + root_child0_child1.getComputedHeight() + ")");
|
||||||
|
|
||||||
|
console.assert(0 === root_child0_child1_child0.getComputedLeft(), "0 === root_child0_child1_child0.getComputedLeft() (" + root_child0_child1_child0.getComputedLeft() + ")");
|
||||||
|
console.assert(0 === root_child0_child1_child0.getComputedTop(), "0 === root_child0_child1_child0.getComputedTop() (" + root_child0_child1_child0.getComputedTop() + ")");
|
||||||
|
console.assert(40 === root_child0_child1_child0.getComputedWidth(), "40 === root_child0_child1_child0.getComputedWidth() (" + root_child0_child1_child0.getComputedWidth() + ")");
|
||||||
|
console.assert(40 === root_child0_child1_child0.getComputedHeight(), "40 === root_child0_child1_child0.getComputedHeight() (" + root_child0_child1_child0.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(500 === root.getComputedWidth(), "500 === root.getComputedWidth() (" + root.getComputedWidth() + ")");
|
||||||
|
console.assert(500 === root.getComputedHeight(), "500 === root.getComputedHeight() (" + root.getComputedHeight() + ")");
|
||||||
|
|
||||||
|
console.assert(430 === root_child0.getComputedLeft(), "430 === root_child0.getComputedLeft() (" + root_child0.getComputedLeft() + ")");
|
||||||
|
console.assert(0 === root_child0.getComputedTop(), "0 === root_child0.getComputedTop() (" + root_child0.getComputedTop() + ")");
|
||||||
|
console.assert(70 === root_child0.getComputedWidth(), "70 === root_child0.getComputedWidth() (" + root_child0.getComputedWidth() + ")");
|
||||||
|
console.assert(90 === root_child0.getComputedHeight(), "90 === root_child0.getComputedHeight() (" + root_child0.getComputedHeight() + ")");
|
||||||
|
|
||||||
|
console.assert(30 === root_child0_child0.getComputedLeft(), "30 === 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(40 === root_child0_child0.getComputedWidth(), "40 === root_child0_child0.getComputedWidth() (" + root_child0_child0.getComputedWidth() + ")");
|
||||||
|
console.assert(40 === root_child0_child0.getComputedHeight(), "40 === 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(40 === root_child0_child0_child0.getComputedWidth(), "40 === root_child0_child0_child0.getComputedWidth() (" + root_child0_child0_child0.getComputedWidth() + ")");
|
||||||
|
console.assert(40 === root_child0_child0_child0.getComputedHeight(), "40 === root_child0_child0_child0.getComputedHeight() (" + root_child0_child0_child0.getComputedHeight() + ")");
|
||||||
|
|
||||||
|
console.assert(30 === root_child0_child1.getComputedLeft(), "30 === root_child0_child1.getComputedLeft() (" + root_child0_child1.getComputedLeft() + ")");
|
||||||
|
console.assert(50 === root_child0_child1.getComputedTop(), "50 === root_child0_child1.getComputedTop() (" + root_child0_child1.getComputedTop() + ")");
|
||||||
|
console.assert(40 === root_child0_child1.getComputedWidth(), "40 === root_child0_child1.getComputedWidth() (" + root_child0_child1.getComputedWidth() + ")");
|
||||||
|
console.assert(40 === root_child0_child1.getComputedHeight(), "40 === root_child0_child1.getComputedHeight() (" + root_child0_child1.getComputedHeight() + ")");
|
||||||
|
|
||||||
|
console.assert(0 === root_child0_child1_child0.getComputedLeft(), "0 === root_child0_child1_child0.getComputedLeft() (" + root_child0_child1_child0.getComputedLeft() + ")");
|
||||||
|
console.assert(0 === root_child0_child1_child0.getComputedTop(), "0 === root_child0_child1_child0.getComputedTop() (" + root_child0_child1_child0.getComputedTop() + ")");
|
||||||
|
console.assert(40 === root_child0_child1_child0.getComputedWidth(), "40 === root_child0_child1_child0.getComputedWidth() (" + root_child0_child1_child0.getComputedWidth() + ")");
|
||||||
|
console.assert(40 === root_child0_child1_child0.getComputedHeight(), "40 === root_child0_child1_child0.getComputedHeight() (" + root_child0_child1_child0.getComputedHeight() + ")");
|
||||||
|
} finally {
|
||||||
|
if (typeof root !== "undefined") {
|
||||||
|
root.freeRecursive();
|
||||||
|
}
|
||||||
|
|
||||||
|
config.free();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
@@ -709,6 +709,212 @@ it("flex_grow_within_constrained_max_width", function () {
|
|||||||
config.free();
|
config.free();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
it("flex_root_ignored", function () {
|
||||||
|
var config = Yoga.Config.create();
|
||||||
|
|
||||||
|
try {
|
||||||
|
var root = Yoga.Node.create(config);
|
||||||
|
root.setFlexGrow(1);
|
||||||
|
root.setWidth(100);
|
||||||
|
root.setMinHeight(100);
|
||||||
|
root.setMaxHeight(500);
|
||||||
|
|
||||||
|
var root_child0 = Yoga.Node.create(config);
|
||||||
|
root_child0.setFlexGrow(1);
|
||||||
|
root_child0.setFlexBasis(200);
|
||||||
|
root.insertChild(root_child0, 0);
|
||||||
|
|
||||||
|
var root_child1 = Yoga.Node.create(config);
|
||||||
|
root_child1.setHeight(100);
|
||||||
|
root.insertChild(root_child1, 1);
|
||||||
|
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(100 === root.getComputedWidth(), "100 === root.getComputedWidth() (" + root.getComputedWidth() + ")");
|
||||||
|
console.assert(300 === root.getComputedHeight(), "300 === 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(200 === root_child0.getComputedHeight(), "200 === root_child0.getComputedHeight() (" + root_child0.getComputedHeight() + ")");
|
||||||
|
|
||||||
|
console.assert(0 === root_child1.getComputedLeft(), "0 === root_child1.getComputedLeft() (" + root_child1.getComputedLeft() + ")");
|
||||||
|
console.assert(200 === root_child1.getComputedTop(), "200 === root_child1.getComputedTop() (" + root_child1.getComputedTop() + ")");
|
||||||
|
console.assert(100 === root_child1.getComputedWidth(), "100 === root_child1.getComputedWidth() (" + root_child1.getComputedWidth() + ")");
|
||||||
|
console.assert(100 === root_child1.getComputedHeight(), "100 === root_child1.getComputedHeight() (" + root_child1.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(100 === root.getComputedWidth(), "100 === root.getComputedWidth() (" + root.getComputedWidth() + ")");
|
||||||
|
console.assert(300 === root.getComputedHeight(), "300 === 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(200 === root_child0.getComputedHeight(), "200 === root_child0.getComputedHeight() (" + root_child0.getComputedHeight() + ")");
|
||||||
|
|
||||||
|
console.assert(0 === root_child1.getComputedLeft(), "0 === root_child1.getComputedLeft() (" + root_child1.getComputedLeft() + ")");
|
||||||
|
console.assert(200 === root_child1.getComputedTop(), "200 === root_child1.getComputedTop() (" + root_child1.getComputedTop() + ")");
|
||||||
|
console.assert(100 === root_child1.getComputedWidth(), "100 === root_child1.getComputedWidth() (" + root_child1.getComputedWidth() + ")");
|
||||||
|
console.assert(100 === root_child1.getComputedHeight(), "100 === root_child1.getComputedHeight() (" + root_child1.getComputedHeight() + ")");
|
||||||
|
} finally {
|
||||||
|
if (typeof root !== "undefined") {
|
||||||
|
root.freeRecursive();
|
||||||
|
}
|
||||||
|
|
||||||
|
config.free();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
it("flex_grow_root_minimized", function () {
|
||||||
|
var config = Yoga.Config.create();
|
||||||
|
|
||||||
|
try {
|
||||||
|
var root = Yoga.Node.create(config);
|
||||||
|
root.setWidth(100);
|
||||||
|
root.setMinHeight(100);
|
||||||
|
root.setMaxHeight(500);
|
||||||
|
|
||||||
|
var root_child0 = Yoga.Node.create(config);
|
||||||
|
root_child0.setFlexGrow(1);
|
||||||
|
root_child0.setMinHeight(100);
|
||||||
|
root_child0.setMaxHeight(500);
|
||||||
|
root.insertChild(root_child0, 0);
|
||||||
|
|
||||||
|
var root_child0_child0 = Yoga.Node.create(config);
|
||||||
|
root_child0_child0.setFlexGrow(1);
|
||||||
|
root_child0_child0.setFlexBasis(200);
|
||||||
|
root_child0.insertChild(root_child0_child0, 0);
|
||||||
|
|
||||||
|
var root_child0_child1 = Yoga.Node.create(config);
|
||||||
|
root_child0_child1.setHeight(100);
|
||||||
|
root_child0.insertChild(root_child0_child1, 1);
|
||||||
|
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(100 === root.getComputedWidth(), "100 === root.getComputedWidth() (" + root.getComputedWidth() + ")");
|
||||||
|
console.assert(300 === root.getComputedHeight(), "300 === 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(300 === root_child0.getComputedHeight(), "300 === 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(200 === root_child0_child0.getComputedHeight(), "200 === root_child0_child0.getComputedHeight() (" + root_child0_child0.getComputedHeight() + ")");
|
||||||
|
|
||||||
|
console.assert(0 === root_child0_child1.getComputedLeft(), "0 === root_child0_child1.getComputedLeft() (" + root_child0_child1.getComputedLeft() + ")");
|
||||||
|
console.assert(200 === root_child0_child1.getComputedTop(), "200 === root_child0_child1.getComputedTop() (" + root_child0_child1.getComputedTop() + ")");
|
||||||
|
console.assert(100 === root_child0_child1.getComputedWidth(), "100 === root_child0_child1.getComputedWidth() (" + root_child0_child1.getComputedWidth() + ")");
|
||||||
|
console.assert(100 === root_child0_child1.getComputedHeight(), "100 === root_child0_child1.getComputedHeight() (" + root_child0_child1.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(100 === root.getComputedWidth(), "100 === root.getComputedWidth() (" + root.getComputedWidth() + ")");
|
||||||
|
console.assert(300 === root.getComputedHeight(), "300 === 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(300 === root_child0.getComputedHeight(), "300 === 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(200 === root_child0_child0.getComputedHeight(), "200 === root_child0_child0.getComputedHeight() (" + root_child0_child0.getComputedHeight() + ")");
|
||||||
|
|
||||||
|
console.assert(0 === root_child0_child1.getComputedLeft(), "0 === root_child0_child1.getComputedLeft() (" + root_child0_child1.getComputedLeft() + ")");
|
||||||
|
console.assert(200 === root_child0_child1.getComputedTop(), "200 === root_child0_child1.getComputedTop() (" + root_child0_child1.getComputedTop() + ")");
|
||||||
|
console.assert(100 === root_child0_child1.getComputedWidth(), "100 === root_child0_child1.getComputedWidth() (" + root_child0_child1.getComputedWidth() + ")");
|
||||||
|
console.assert(100 === root_child0_child1.getComputedHeight(), "100 === root_child0_child1.getComputedHeight() (" + root_child0_child1.getComputedHeight() + ")");
|
||||||
|
} finally {
|
||||||
|
if (typeof root !== "undefined") {
|
||||||
|
root.freeRecursive();
|
||||||
|
}
|
||||||
|
|
||||||
|
config.free();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
it("flex_grow_height_maximized", function () {
|
||||||
|
var config = Yoga.Config.create();
|
||||||
|
|
||||||
|
try {
|
||||||
|
var root = Yoga.Node.create(config);
|
||||||
|
root.setWidth(100);
|
||||||
|
root.setHeight(500);
|
||||||
|
|
||||||
|
var root_child0 = Yoga.Node.create(config);
|
||||||
|
root_child0.setFlexGrow(1);
|
||||||
|
root_child0.setMinHeight(100);
|
||||||
|
root_child0.setMaxHeight(500);
|
||||||
|
root.insertChild(root_child0, 0);
|
||||||
|
|
||||||
|
var root_child0_child0 = Yoga.Node.create(config);
|
||||||
|
root_child0_child0.setFlexGrow(1);
|
||||||
|
root_child0_child0.setFlexBasis(200);
|
||||||
|
root_child0.insertChild(root_child0_child0, 0);
|
||||||
|
|
||||||
|
var root_child0_child1 = Yoga.Node.create(config);
|
||||||
|
root_child0_child1.setHeight(100);
|
||||||
|
root_child0.insertChild(root_child0_child1, 1);
|
||||||
|
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(100 === root.getComputedWidth(), "100 === root.getComputedWidth() (" + root.getComputedWidth() + ")");
|
||||||
|
console.assert(500 === root.getComputedHeight(), "500 === 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(500 === root_child0.getComputedHeight(), "500 === 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(400 === root_child0_child0.getComputedHeight(), "400 === root_child0_child0.getComputedHeight() (" + root_child0_child0.getComputedHeight() + ")");
|
||||||
|
|
||||||
|
console.assert(0 === root_child0_child1.getComputedLeft(), "0 === root_child0_child1.getComputedLeft() (" + root_child0_child1.getComputedLeft() + ")");
|
||||||
|
console.assert(400 === root_child0_child1.getComputedTop(), "400 === root_child0_child1.getComputedTop() (" + root_child0_child1.getComputedTop() + ")");
|
||||||
|
console.assert(100 === root_child0_child1.getComputedWidth(), "100 === root_child0_child1.getComputedWidth() (" + root_child0_child1.getComputedWidth() + ")");
|
||||||
|
console.assert(100 === root_child0_child1.getComputedHeight(), "100 === root_child0_child1.getComputedHeight() (" + root_child0_child1.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(100 === root.getComputedWidth(), "100 === root.getComputedWidth() (" + root.getComputedWidth() + ")");
|
||||||
|
console.assert(500 === root.getComputedHeight(), "500 === 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(500 === root_child0.getComputedHeight(), "500 === 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(400 === root_child0_child0.getComputedHeight(), "400 === root_child0_child0.getComputedHeight() (" + root_child0_child0.getComputedHeight() + ")");
|
||||||
|
|
||||||
|
console.assert(0 === root_child0_child1.getComputedLeft(), "0 === root_child0_child1.getComputedLeft() (" + root_child0_child1.getComputedLeft() + ")");
|
||||||
|
console.assert(400 === root_child0_child1.getComputedTop(), "400 === root_child0_child1.getComputedTop() (" + root_child0_child1.getComputedTop() + ")");
|
||||||
|
console.assert(100 === root_child0_child1.getComputedWidth(), "100 === root_child0_child1.getComputedWidth() (" + root_child0_child1.getComputedWidth() + ")");
|
||||||
|
console.assert(100 === root_child0_child1.getComputedHeight(), "100 === root_child0_child1.getComputedHeight() (" + root_child0_child1.getComputedHeight() + ")");
|
||||||
|
} finally {
|
||||||
|
if (typeof root !== "undefined") {
|
||||||
|
root.freeRecursive();
|
||||||
|
}
|
||||||
|
|
||||||
|
config.free();
|
||||||
|
}
|
||||||
|
});
|
||||||
it("flex_grow_within_constrained_min_row", function () {
|
it("flex_grow_within_constrained_min_row", function () {
|
||||||
var config = Yoga.Config.create();
|
var config = Yoga.Config.create();
|
||||||
|
|
||||||
@@ -950,6 +1156,67 @@ it("flex_grow_within_constrained_max_column", function () {
|
|||||||
config.free();
|
config.free();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
it("child_min_max_width_flexing", function () {
|
||||||
|
var config = Yoga.Config.create();
|
||||||
|
|
||||||
|
try {
|
||||||
|
var root = Yoga.Node.create(config);
|
||||||
|
root.setFlexDirection(Yoga.FLEX_DIRECTION_ROW);
|
||||||
|
root.setWidth(120);
|
||||||
|
root.setHeight(50);
|
||||||
|
|
||||||
|
var root_child0 = Yoga.Node.create(config);
|
||||||
|
root_child0.setFlexGrow(1);
|
||||||
|
root_child0.setFlexBasis(0);
|
||||||
|
root_child0.setMinWidth(60);
|
||||||
|
root.insertChild(root_child0, 0);
|
||||||
|
|
||||||
|
var root_child1 = Yoga.Node.create(config);
|
||||||
|
root_child1.setFlexGrow(1);
|
||||||
|
root_child1.setFlexBasis("50%");
|
||||||
|
root_child1.setMaxWidth(20);
|
||||||
|
root.insertChild(root_child1, 1);
|
||||||
|
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(120 === root.getComputedWidth(), "120 === root.getComputedWidth() (" + root.getComputedWidth() + ")");
|
||||||
|
console.assert(50 === root.getComputedHeight(), "50 === 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(50 === root_child0.getComputedHeight(), "50 === root_child0.getComputedHeight() (" + root_child0.getComputedHeight() + ")");
|
||||||
|
|
||||||
|
console.assert(100 === root_child1.getComputedLeft(), "100 === root_child1.getComputedLeft() (" + root_child1.getComputedLeft() + ")");
|
||||||
|
console.assert(0 === root_child1.getComputedTop(), "0 === root_child1.getComputedTop() (" + root_child1.getComputedTop() + ")");
|
||||||
|
console.assert(20 === root_child1.getComputedWidth(), "20 === root_child1.getComputedWidth() (" + root_child1.getComputedWidth() + ")");
|
||||||
|
console.assert(50 === root_child1.getComputedHeight(), "50 === root_child1.getComputedHeight() (" + root_child1.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(120 === root.getComputedWidth(), "120 === root.getComputedWidth() (" + root.getComputedWidth() + ")");
|
||||||
|
console.assert(50 === root.getComputedHeight(), "50 === root.getComputedHeight() (" + root.getComputedHeight() + ")");
|
||||||
|
|
||||||
|
console.assert(20 === root_child0.getComputedLeft(), "20 === 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(50 === root_child0.getComputedHeight(), "50 === root_child0.getComputedHeight() (" + root_child0.getComputedHeight() + ")");
|
||||||
|
|
||||||
|
console.assert(0 === root_child1.getComputedLeft(), "0 === root_child1.getComputedLeft() (" + root_child1.getComputedLeft() + ")");
|
||||||
|
console.assert(0 === root_child1.getComputedTop(), "0 === root_child1.getComputedTop() (" + root_child1.getComputedTop() + ")");
|
||||||
|
console.assert(20 === root_child1.getComputedWidth(), "20 === root_child1.getComputedWidth() (" + root_child1.getComputedWidth() + ")");
|
||||||
|
console.assert(50 === root_child1.getComputedHeight(), "50 === root_child1.getComputedHeight() (" + root_child1.getComputedHeight() + ")");
|
||||||
|
} finally {
|
||||||
|
if (typeof root !== "undefined") {
|
||||||
|
root.freeRecursive();
|
||||||
|
}
|
||||||
|
|
||||||
|
config.free();
|
||||||
|
}
|
||||||
|
});
|
||||||
it("min_width_overrides_width", function () {
|
it("min_width_overrides_width", function () {
|
||||||
var config = Yoga.Config.create();
|
var config = Yoga.Config.create();
|
||||||
|
|
||||||
|
@@ -9,6 +9,6 @@ include_defs("//YOGA_DEFS")
|
|||||||
|
|
||||||
android_prebuilt_aar(
|
android_prebuilt_aar(
|
||||||
name = "appcompat",
|
name = "appcompat",
|
||||||
aar = "appcompat-v7-19.1.0.aar",
|
aar = "appcompat-v7-24.2.1.aar",
|
||||||
visibility = YOGA_ROOTS,
|
visibility = YOGA_ROOTS,
|
||||||
)
|
)
|
||||||
|
Binary file not shown.
BIN
lib/appcompat/appcompat-v7-24.2.1.aar
Normal file
BIN
lib/appcompat/appcompat-v7-24.2.1.aar
Normal file
Binary file not shown.
@@ -25,10 +25,10 @@ class FBEXPORT JByteBuffer : public JavaClass<JByteBuffer> {
|
|||||||
|
|
||||||
static local_ref<JByteBuffer> wrapBytes(uint8_t* data, size_t size);
|
static local_ref<JByteBuffer> wrapBytes(uint8_t* data, size_t size);
|
||||||
|
|
||||||
bool isDirect();
|
bool isDirect() const;
|
||||||
|
|
||||||
uint8_t* getDirectBytes();
|
uint8_t* getDirectBytes() const;
|
||||||
size_t getDirectSize();
|
size_t getDirectSize() const;
|
||||||
};
|
};
|
||||||
|
|
||||||
}}
|
}}
|
||||||
|
@@ -3,7 +3,6 @@
|
|||||||
package com.facebook.jni;
|
package com.facebook.jni;
|
||||||
|
|
||||||
import com.facebook.proguard.annotations.DoNotStrip;
|
import com.facebook.proguard.annotations.DoNotStrip;
|
||||||
import com.facebook.soloader.SoLoader;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A Java Object that has native memory allocated corresponding to this instance.
|
* A Java Object that has native memory allocated corresponding to this instance.
|
||||||
@@ -18,10 +17,6 @@ import com.facebook.soloader.SoLoader;
|
|||||||
@DoNotStrip
|
@DoNotStrip
|
||||||
public class Countable {
|
public class Countable {
|
||||||
|
|
||||||
static {
|
|
||||||
SoLoader.loadLibrary("fb");
|
|
||||||
}
|
|
||||||
|
|
||||||
// Private C++ instance
|
// Private C++ instance
|
||||||
@DoNotStrip
|
@DoNotStrip
|
||||||
private long mInstance = 0;
|
private long mInstance = 0;
|
||||||
|
@@ -3,7 +3,6 @@
|
|||||||
package com.facebook.jni;
|
package com.facebook.jni;
|
||||||
|
|
||||||
import com.facebook.proguard.annotations.DoNotStrip;
|
import com.facebook.proguard.annotations.DoNotStrip;
|
||||||
import com.facebook.soloader.SoLoader;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This object holds a native C++ member for hybrid Java/C++ objects.
|
* This object holds a native C++ member for hybrid Java/C++ objects.
|
||||||
@@ -19,10 +18,6 @@ import com.facebook.soloader.SoLoader;
|
|||||||
@DoNotStrip
|
@DoNotStrip
|
||||||
public class HybridData {
|
public class HybridData {
|
||||||
|
|
||||||
static {
|
|
||||||
SoLoader.loadLibrary("fb");
|
|
||||||
}
|
|
||||||
|
|
||||||
// Private C++ instance
|
// Private C++ instance
|
||||||
@DoNotStrip
|
@DoNotStrip
|
||||||
private long mNativePointer = 0;
|
private long mNativePointer = 0;
|
||||||
|
@@ -3,14 +3,9 @@
|
|||||||
package com.facebook.jni;
|
package com.facebook.jni;
|
||||||
|
|
||||||
import com.facebook.proguard.annotations.DoNotStrip;
|
import com.facebook.proguard.annotations.DoNotStrip;
|
||||||
import com.facebook.soloader.SoLoader;
|
|
||||||
|
|
||||||
@DoNotStrip
|
@DoNotStrip
|
||||||
public class ThreadScopeSupport {
|
public class ThreadScopeSupport {
|
||||||
static {
|
|
||||||
SoLoader.loadLibrary("fb");
|
|
||||||
}
|
|
||||||
|
|
||||||
// This is just used for ThreadScope::withClassLoader to have a java function
|
// This is just used for ThreadScope::withClassLoader to have a java function
|
||||||
// in the stack so that jni has access to the correct classloader.
|
// in the stack so that jni has access to the correct classloader.
|
||||||
@DoNotStrip
|
@DoNotStrip
|
||||||
|
37
scripts/android-setup.sh
Normal file
37
scripts/android-setup.sh
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
function download() {
|
||||||
|
if hash curl 2>/dev/null; then
|
||||||
|
curl -L -o $2 $1
|
||||||
|
elif hash wget 2>/dev/null; then
|
||||||
|
wget -O $2 $1
|
||||||
|
else
|
||||||
|
echo >&2 "No supported download tool installed. Please get either wget or curl."
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
function installsdk() {
|
||||||
|
PROXY_ARGS=""
|
||||||
|
if [[ ! -z "$https_proxy" ]]; then
|
||||||
|
PROXY_HOST="$(cut -d : "$https_proxy" -f 1,1)"
|
||||||
|
PROXY_PORT="$(cut -d : "$https_proxy" -f 2,2)"
|
||||||
|
PROXY_ARGS="--proxy=http --proxy_host=$PROXY_HOST --proxy_port=$PROXY_PORT"
|
||||||
|
fi
|
||||||
|
|
||||||
|
yes | $ANDROID_HOME/tools/bin/sdkmanager $PROXY_ARGS $@
|
||||||
|
}
|
||||||
|
|
||||||
|
function installAndroidSDK {
|
||||||
|
TMP=/tmp/sdk$$.zip
|
||||||
|
download 'https://dl.google.com/android/repository/tools_r25.2.3-linux.zip' $TMP
|
||||||
|
unzip -d $HOME/android-sdk $TMP
|
||||||
|
rm $TMP
|
||||||
|
|
||||||
|
export ANDROID_HOME=$HOME/android-sdk
|
||||||
|
export PATH="$ANDROID_HOME/platform-tools:$ANDROID_HOME/tools:$ANDROID_HOME/tools/bin:$PATH"
|
||||||
|
|
||||||
|
mkdir -p $ANDROID_HOME/licenses/
|
||||||
|
echo > $ANDROID_HOME/licenses/android-sdk-license
|
||||||
|
echo -n 8933bad161af4178b1185d1a37fbf41ea5269c55 > $ANDROID_HOME/licenses/android-sdk-license
|
||||||
|
|
||||||
|
installsdk 'build-tools;23.0.2' 'build-tools;25.0.2' 'build-tools;25.0.1' 'platforms;android-23' 'platforms;android-25' 'ndk-bundle' 'extras;android;m2repository'
|
||||||
|
}
|
@@ -1,25 +0,0 @@
|
|||||||
#!/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
|
|
24
scripts/publish-snapshot.sh
Executable file
24
scripts/publish-snapshot.sh
Executable file
@@ -0,0 +1,24 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
#
|
||||||
|
# Deploy a SNAPSHOT JAR after every successful CI run To Sonatype.
|
||||||
|
#
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
BASEDIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )/.." && pwd )"
|
||||||
|
IS_SNAPSHOT="$(grep 'VERSION_NAME=[0-9\.]\+-SNAPSHOT' "$BASEDIR/gradle.properties")"
|
||||||
|
|
||||||
|
if [ "$TRAVIS_REPO_SLUG" != "facebook/yoga" ]; then
|
||||||
|
echo >&2 "Skipping repository. Expected project to be 'facebook/yoga', but was '$TRAVIS_REPO_SLUG'."
|
||||||
|
exit
|
||||||
|
elif [ "$TRAVIS_BRANCH" != "master" ]; then
|
||||||
|
echo >&2 "Skipping build. Expected branch name to be 'master', but was '$TRAVIS_BRANCH'."
|
||||||
|
exit
|
||||||
|
elif [ "$TRAVIS_PULL_REQUEST" != "false" ]; then
|
||||||
|
echo >&2 "Skipping build. Only considering non-PR builds, but URL was '$TRAVIS_PULL_REQUEST'."
|
||||||
|
exit
|
||||||
|
elif [ "$IS_SNAPSHOT" == "" ]; then
|
||||||
|
echo >&2 "Skipping build. Given build doesn't appear to be a SNAPSHOT release."
|
||||||
|
else
|
||||||
|
env TERMINAL=dumb "$BASEDIR/gradlew" uploadArchives
|
||||||
|
fi
|
@@ -278,6 +278,30 @@ TEST(YogaTest, absolute_layout_within_border) {
|
|||||||
YGNodeStyleSetWidth(root_child1, 50);
|
YGNodeStyleSetWidth(root_child1, 50);
|
||||||
YGNodeStyleSetHeight(root_child1, 50);
|
YGNodeStyleSetHeight(root_child1, 50);
|
||||||
YGNodeInsertChild(root, root_child1, 1);
|
YGNodeInsertChild(root, root_child1, 1);
|
||||||
|
|
||||||
|
const YGNodeRef root_child2 = YGNodeNewWithConfig(config);
|
||||||
|
YGNodeStyleSetPositionType(root_child2, YGPositionTypeAbsolute);
|
||||||
|
YGNodeStyleSetPosition(root_child2, YGEdgeLeft, 0);
|
||||||
|
YGNodeStyleSetPosition(root_child2, YGEdgeTop, 0);
|
||||||
|
YGNodeStyleSetMargin(root_child2, YGEdgeLeft, 10);
|
||||||
|
YGNodeStyleSetMargin(root_child2, YGEdgeTop, 10);
|
||||||
|
YGNodeStyleSetMargin(root_child2, YGEdgeRight, 10);
|
||||||
|
YGNodeStyleSetMargin(root_child2, YGEdgeBottom, 10);
|
||||||
|
YGNodeStyleSetWidth(root_child2, 50);
|
||||||
|
YGNodeStyleSetHeight(root_child2, 50);
|
||||||
|
YGNodeInsertChild(root, root_child2, 2);
|
||||||
|
|
||||||
|
const YGNodeRef root_child3 = YGNodeNewWithConfig(config);
|
||||||
|
YGNodeStyleSetPositionType(root_child3, YGPositionTypeAbsolute);
|
||||||
|
YGNodeStyleSetPosition(root_child3, YGEdgeRight, 0);
|
||||||
|
YGNodeStyleSetPosition(root_child3, YGEdgeBottom, 0);
|
||||||
|
YGNodeStyleSetMargin(root_child3, YGEdgeLeft, 10);
|
||||||
|
YGNodeStyleSetMargin(root_child3, YGEdgeTop, 10);
|
||||||
|
YGNodeStyleSetMargin(root_child3, YGEdgeRight, 10);
|
||||||
|
YGNodeStyleSetMargin(root_child3, YGEdgeBottom, 10);
|
||||||
|
YGNodeStyleSetWidth(root_child3, 50);
|
||||||
|
YGNodeStyleSetHeight(root_child3, 50);
|
||||||
|
YGNodeInsertChild(root, root_child3, 3);
|
||||||
YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
|
YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
|
||||||
|
|
||||||
ASSERT_FLOAT_EQ(10, YGNodeLayoutGetLeft(root));
|
ASSERT_FLOAT_EQ(10, YGNodeLayoutGetLeft(root));
|
||||||
@@ -295,6 +319,16 @@ TEST(YogaTest, absolute_layout_within_border) {
|
|||||||
ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));
|
ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));
|
||||||
ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child1));
|
ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child1));
|
||||||
|
|
||||||
|
ASSERT_FLOAT_EQ(20, YGNodeLayoutGetLeft(root_child2));
|
||||||
|
ASSERT_FLOAT_EQ(20, YGNodeLayoutGetTop(root_child2));
|
||||||
|
ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child2));
|
||||||
|
ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child2));
|
||||||
|
|
||||||
|
ASSERT_FLOAT_EQ(30, YGNodeLayoutGetLeft(root_child3));
|
||||||
|
ASSERT_FLOAT_EQ(30, YGNodeLayoutGetTop(root_child3));
|
||||||
|
ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child3));
|
||||||
|
ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child3));
|
||||||
|
|
||||||
YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
|
YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
|
||||||
|
|
||||||
ASSERT_FLOAT_EQ(10, YGNodeLayoutGetLeft(root));
|
ASSERT_FLOAT_EQ(10, YGNodeLayoutGetLeft(root));
|
||||||
@@ -312,6 +346,16 @@ TEST(YogaTest, absolute_layout_within_border) {
|
|||||||
ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));
|
ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));
|
||||||
ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child1));
|
ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child1));
|
||||||
|
|
||||||
|
ASSERT_FLOAT_EQ(20, YGNodeLayoutGetLeft(root_child2));
|
||||||
|
ASSERT_FLOAT_EQ(20, YGNodeLayoutGetTop(root_child2));
|
||||||
|
ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child2));
|
||||||
|
ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child2));
|
||||||
|
|
||||||
|
ASSERT_FLOAT_EQ(30, YGNodeLayoutGetLeft(root_child3));
|
||||||
|
ASSERT_FLOAT_EQ(30, YGNodeLayoutGetTop(root_child3));
|
||||||
|
ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child3));
|
||||||
|
ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child3));
|
||||||
|
|
||||||
YGNodeFreeRecursive(root);
|
YGNodeFreeRecursive(root);
|
||||||
|
|
||||||
YGConfigFree(config);
|
YGConfigFree(config);
|
||||||
@@ -739,3 +783,251 @@ TEST(YogaTest, position_root_with_rtl_should_position_withoutdirection) {
|
|||||||
|
|
||||||
YGConfigFree(config);
|
YGConfigFree(config);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST(YogaTest, absolute_layout_percentage_bottom_based_on_parent_height) {
|
||||||
|
const YGConfigRef config = YGConfigNew();
|
||||||
|
|
||||||
|
const YGNodeRef root = YGNodeNewWithConfig(config);
|
||||||
|
YGNodeStyleSetWidth(root, 100);
|
||||||
|
YGNodeStyleSetHeight(root, 200);
|
||||||
|
|
||||||
|
const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
|
||||||
|
YGNodeStyleSetPositionType(root_child0, YGPositionTypeAbsolute);
|
||||||
|
YGNodeStyleSetPositionPercent(root_child0, YGEdgeTop, 50);
|
||||||
|
YGNodeStyleSetWidth(root_child0, 10);
|
||||||
|
YGNodeStyleSetHeight(root_child0, 10);
|
||||||
|
YGNodeInsertChild(root, root_child0, 0);
|
||||||
|
|
||||||
|
const YGNodeRef root_child1 = YGNodeNewWithConfig(config);
|
||||||
|
YGNodeStyleSetPositionType(root_child1, YGPositionTypeAbsolute);
|
||||||
|
YGNodeStyleSetPositionPercent(root_child1, YGEdgeBottom, 50);
|
||||||
|
YGNodeStyleSetWidth(root_child1, 10);
|
||||||
|
YGNodeStyleSetHeight(root_child1, 10);
|
||||||
|
YGNodeInsertChild(root, root_child1, 1);
|
||||||
|
|
||||||
|
const YGNodeRef root_child2 = YGNodeNewWithConfig(config);
|
||||||
|
YGNodeStyleSetPositionType(root_child2, YGPositionTypeAbsolute);
|
||||||
|
YGNodeStyleSetPositionPercent(root_child2, YGEdgeTop, 10);
|
||||||
|
YGNodeStyleSetPositionPercent(root_child2, YGEdgeBottom, 10);
|
||||||
|
YGNodeStyleSetWidth(root_child2, 10);
|
||||||
|
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(100, YGNodeLayoutGetWidth(root));
|
||||||
|
ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));
|
||||||
|
|
||||||
|
ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
|
||||||
|
ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child0));
|
||||||
|
ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0));
|
||||||
|
ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));
|
||||||
|
|
||||||
|
ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));
|
||||||
|
ASSERT_FLOAT_EQ(90, YGNodeLayoutGetTop(root_child1));
|
||||||
|
ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child1));
|
||||||
|
ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1));
|
||||||
|
|
||||||
|
ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));
|
||||||
|
ASSERT_FLOAT_EQ(20, YGNodeLayoutGetTop(root_child2));
|
||||||
|
ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child2));
|
||||||
|
ASSERT_FLOAT_EQ(160, YGNodeLayoutGetHeight(root_child2));
|
||||||
|
|
||||||
|
YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
|
||||||
|
|
||||||
|
ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
|
||||||
|
ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
|
||||||
|
ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
|
||||||
|
ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));
|
||||||
|
|
||||||
|
ASSERT_FLOAT_EQ(90, YGNodeLayoutGetLeft(root_child0));
|
||||||
|
ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child0));
|
||||||
|
ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0));
|
||||||
|
ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));
|
||||||
|
|
||||||
|
ASSERT_FLOAT_EQ(90, YGNodeLayoutGetLeft(root_child1));
|
||||||
|
ASSERT_FLOAT_EQ(90, YGNodeLayoutGetTop(root_child1));
|
||||||
|
ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child1));
|
||||||
|
ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1));
|
||||||
|
|
||||||
|
ASSERT_FLOAT_EQ(90, YGNodeLayoutGetLeft(root_child2));
|
||||||
|
ASSERT_FLOAT_EQ(20, YGNodeLayoutGetTop(root_child2));
|
||||||
|
ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child2));
|
||||||
|
ASSERT_FLOAT_EQ(160, YGNodeLayoutGetHeight(root_child2));
|
||||||
|
|
||||||
|
YGNodeFreeRecursive(root);
|
||||||
|
|
||||||
|
YGConfigFree(config);
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST(YogaTest, absolute_layout_in_wrap_reverse_column_container) {
|
||||||
|
const YGConfigRef config = YGConfigNew();
|
||||||
|
|
||||||
|
const YGNodeRef root = YGNodeNewWithConfig(config);
|
||||||
|
YGNodeStyleSetFlexWrap(root, YGWrapWrapReverse);
|
||||||
|
YGNodeStyleSetWidth(root, 100);
|
||||||
|
YGNodeStyleSetHeight(root, 100);
|
||||||
|
|
||||||
|
const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
|
||||||
|
YGNodeStyleSetPositionType(root_child0, YGPositionTypeAbsolute);
|
||||||
|
YGNodeStyleSetWidth(root_child0, 20);
|
||||||
|
YGNodeStyleSetHeight(root_child0, 20);
|
||||||
|
YGNodeInsertChild(root, root_child0, 0);
|
||||||
|
YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
|
||||||
|
|
||||||
|
ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
|
||||||
|
ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
|
||||||
|
ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
|
||||||
|
ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
|
||||||
|
|
||||||
|
ASSERT_FLOAT_EQ(80, YGNodeLayoutGetLeft(root_child0));
|
||||||
|
ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
|
||||||
|
ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child0));
|
||||||
|
ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0));
|
||||||
|
|
||||||
|
YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
|
||||||
|
|
||||||
|
ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
|
||||||
|
ASSERT_FLOAT_EQ(0, 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(20, YGNodeLayoutGetWidth(root_child0));
|
||||||
|
ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0));
|
||||||
|
|
||||||
|
YGNodeFreeRecursive(root);
|
||||||
|
|
||||||
|
YGConfigFree(config);
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST(YogaTest, absolute_layout_in_wrap_reverse_row_container) {
|
||||||
|
const YGConfigRef config = YGConfigNew();
|
||||||
|
|
||||||
|
const YGNodeRef root = YGNodeNewWithConfig(config);
|
||||||
|
YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);
|
||||||
|
YGNodeStyleSetFlexWrap(root, YGWrapWrapReverse);
|
||||||
|
YGNodeStyleSetWidth(root, 100);
|
||||||
|
YGNodeStyleSetHeight(root, 100);
|
||||||
|
|
||||||
|
const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
|
||||||
|
YGNodeStyleSetPositionType(root_child0, YGPositionTypeAbsolute);
|
||||||
|
YGNodeStyleSetWidth(root_child0, 20);
|
||||||
|
YGNodeStyleSetHeight(root_child0, 20);
|
||||||
|
YGNodeInsertChild(root, root_child0, 0);
|
||||||
|
YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
|
||||||
|
|
||||||
|
ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
|
||||||
|
ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
|
||||||
|
ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
|
||||||
|
ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
|
||||||
|
|
||||||
|
ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
|
||||||
|
ASSERT_FLOAT_EQ(80, YGNodeLayoutGetTop(root_child0));
|
||||||
|
ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child0));
|
||||||
|
ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0));
|
||||||
|
|
||||||
|
YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
|
||||||
|
|
||||||
|
ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
|
||||||
|
ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
|
||||||
|
ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
|
||||||
|
ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
|
||||||
|
|
||||||
|
ASSERT_FLOAT_EQ(80, YGNodeLayoutGetLeft(root_child0));
|
||||||
|
ASSERT_FLOAT_EQ(80, YGNodeLayoutGetTop(root_child0));
|
||||||
|
ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child0));
|
||||||
|
ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0));
|
||||||
|
|
||||||
|
YGNodeFreeRecursive(root);
|
||||||
|
|
||||||
|
YGConfigFree(config);
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST(YogaTest, absolute_layout_in_wrap_reverse_column_container_flex_end) {
|
||||||
|
const YGConfigRef config = YGConfigNew();
|
||||||
|
|
||||||
|
const YGNodeRef root = YGNodeNewWithConfig(config);
|
||||||
|
YGNodeStyleSetFlexWrap(root, YGWrapWrapReverse);
|
||||||
|
YGNodeStyleSetWidth(root, 100);
|
||||||
|
YGNodeStyleSetHeight(root, 100);
|
||||||
|
|
||||||
|
const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
|
||||||
|
YGNodeStyleSetAlignSelf(root_child0, YGAlignFlexEnd);
|
||||||
|
YGNodeStyleSetPositionType(root_child0, YGPositionTypeAbsolute);
|
||||||
|
YGNodeStyleSetWidth(root_child0, 20);
|
||||||
|
YGNodeStyleSetHeight(root_child0, 20);
|
||||||
|
YGNodeInsertChild(root, root_child0, 0);
|
||||||
|
YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
|
||||||
|
|
||||||
|
ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
|
||||||
|
ASSERT_FLOAT_EQ(0, 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(20, YGNodeLayoutGetWidth(root_child0));
|
||||||
|
ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0));
|
||||||
|
|
||||||
|
YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
|
||||||
|
|
||||||
|
ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
|
||||||
|
ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
|
||||||
|
ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
|
||||||
|
ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
|
||||||
|
|
||||||
|
ASSERT_FLOAT_EQ(80, YGNodeLayoutGetLeft(root_child0));
|
||||||
|
ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
|
||||||
|
ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child0));
|
||||||
|
ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0));
|
||||||
|
|
||||||
|
YGNodeFreeRecursive(root);
|
||||||
|
|
||||||
|
YGConfigFree(config);
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST(YogaTest, absolute_layout_in_wrap_reverse_row_container_flex_end) {
|
||||||
|
const YGConfigRef config = YGConfigNew();
|
||||||
|
|
||||||
|
const YGNodeRef root = YGNodeNewWithConfig(config);
|
||||||
|
YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);
|
||||||
|
YGNodeStyleSetFlexWrap(root, YGWrapWrapReverse);
|
||||||
|
YGNodeStyleSetWidth(root, 100);
|
||||||
|
YGNodeStyleSetHeight(root, 100);
|
||||||
|
|
||||||
|
const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
|
||||||
|
YGNodeStyleSetAlignSelf(root_child0, YGAlignFlexEnd);
|
||||||
|
YGNodeStyleSetPositionType(root_child0, YGPositionTypeAbsolute);
|
||||||
|
YGNodeStyleSetWidth(root_child0, 20);
|
||||||
|
YGNodeStyleSetHeight(root_child0, 20);
|
||||||
|
YGNodeInsertChild(root, root_child0, 0);
|
||||||
|
YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
|
||||||
|
|
||||||
|
ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
|
||||||
|
ASSERT_FLOAT_EQ(0, 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(20, YGNodeLayoutGetWidth(root_child0));
|
||||||
|
ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0));
|
||||||
|
|
||||||
|
YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
|
||||||
|
|
||||||
|
ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
|
||||||
|
ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
|
||||||
|
ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
|
||||||
|
ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
|
||||||
|
|
||||||
|
ASSERT_FLOAT_EQ(80, YGNodeLayoutGetLeft(root_child0));
|
||||||
|
ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
|
||||||
|
ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child0));
|
||||||
|
ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0));
|
||||||
|
|
||||||
|
YGNodeFreeRecursive(root);
|
||||||
|
|
||||||
|
YGConfigFree(config);
|
||||||
|
}
|
||||||
|
@@ -276,7 +276,7 @@ TEST(YogaTest, aspect_ratio_with_max_main_defined) {
|
|||||||
|
|
||||||
ASSERT_EQ(0, YGNodeLayoutGetLeft(root_child0));
|
ASSERT_EQ(0, YGNodeLayoutGetLeft(root_child0));
|
||||||
ASSERT_EQ(0, YGNodeLayoutGetTop(root_child0));
|
ASSERT_EQ(0, YGNodeLayoutGetTop(root_child0));
|
||||||
ASSERT_EQ(50, YGNodeLayoutGetWidth(root_child0));
|
ASSERT_EQ(40, YGNodeLayoutGetWidth(root_child0));
|
||||||
ASSERT_EQ(40, YGNodeLayoutGetHeight(root_child0));
|
ASSERT_EQ(40, YGNodeLayoutGetHeight(root_child0));
|
||||||
|
|
||||||
YGNodeFreeRecursive(root);
|
YGNodeFreeRecursive(root);
|
||||||
@@ -320,7 +320,7 @@ TEST(YogaTest, aspect_ratio_with_min_main_defined) {
|
|||||||
|
|
||||||
ASSERT_EQ(0, YGNodeLayoutGetLeft(root_child0));
|
ASSERT_EQ(0, YGNodeLayoutGetLeft(root_child0));
|
||||||
ASSERT_EQ(0, YGNodeLayoutGetTop(root_child0));
|
ASSERT_EQ(0, YGNodeLayoutGetTop(root_child0));
|
||||||
ASSERT_EQ(30, YGNodeLayoutGetWidth(root_child0));
|
ASSERT_EQ(40, YGNodeLayoutGetWidth(root_child0));
|
||||||
ASSERT_EQ(40, YGNodeLayoutGetHeight(root_child0));
|
ASSERT_EQ(40, YGNodeLayoutGetHeight(root_child0));
|
||||||
|
|
||||||
YGNodeFreeRecursive(root);
|
YGNodeFreeRecursive(root);
|
||||||
|
@@ -423,3 +423,71 @@ TEST(YogaTest, flex_grow_shrink_at_most) {
|
|||||||
|
|
||||||
YGConfigFree(config);
|
YGConfigFree(config);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST(YogaTest, flex_grow_less_than_factor_one) {
|
||||||
|
const YGConfigRef config = YGConfigNew();
|
||||||
|
|
||||||
|
const YGNodeRef root = YGNodeNewWithConfig(config);
|
||||||
|
YGNodeStyleSetWidth(root, 200);
|
||||||
|
YGNodeStyleSetHeight(root, 500);
|
||||||
|
|
||||||
|
const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
|
||||||
|
YGNodeStyleSetFlexGrow(root_child0, 0.2f);
|
||||||
|
YGNodeStyleSetFlexBasis(root_child0, 40);
|
||||||
|
YGNodeInsertChild(root, root_child0, 0);
|
||||||
|
|
||||||
|
const YGNodeRef root_child1 = YGNodeNewWithConfig(config);
|
||||||
|
YGNodeStyleSetFlexGrow(root_child1, 0.2f);
|
||||||
|
YGNodeInsertChild(root, root_child1, 1);
|
||||||
|
|
||||||
|
const YGNodeRef root_child2 = YGNodeNewWithConfig(config);
|
||||||
|
YGNodeStyleSetFlexGrow(root_child2, 0.4f);
|
||||||
|
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(200, YGNodeLayoutGetWidth(root));
|
||||||
|
ASSERT_FLOAT_EQ(500, YGNodeLayoutGetHeight(root));
|
||||||
|
|
||||||
|
ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
|
||||||
|
ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
|
||||||
|
ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0));
|
||||||
|
ASSERT_FLOAT_EQ(132, YGNodeLayoutGetHeight(root_child0));
|
||||||
|
|
||||||
|
ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));
|
||||||
|
ASSERT_FLOAT_EQ(132, YGNodeLayoutGetTop(root_child1));
|
||||||
|
ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child1));
|
||||||
|
ASSERT_FLOAT_EQ(92, YGNodeLayoutGetHeight(root_child1));
|
||||||
|
|
||||||
|
ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));
|
||||||
|
ASSERT_FLOAT_EQ(224, YGNodeLayoutGetTop(root_child2));
|
||||||
|
ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child2));
|
||||||
|
ASSERT_FLOAT_EQ(184, YGNodeLayoutGetHeight(root_child2));
|
||||||
|
|
||||||
|
YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
|
||||||
|
|
||||||
|
ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
|
||||||
|
ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
|
||||||
|
ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));
|
||||||
|
ASSERT_FLOAT_EQ(500, YGNodeLayoutGetHeight(root));
|
||||||
|
|
||||||
|
ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
|
||||||
|
ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
|
||||||
|
ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0));
|
||||||
|
ASSERT_FLOAT_EQ(132, YGNodeLayoutGetHeight(root_child0));
|
||||||
|
|
||||||
|
ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));
|
||||||
|
ASSERT_FLOAT_EQ(132, YGNodeLayoutGetTop(root_child1));
|
||||||
|
ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child1));
|
||||||
|
ASSERT_FLOAT_EQ(92, YGNodeLayoutGetHeight(root_child1));
|
||||||
|
|
||||||
|
ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));
|
||||||
|
ASSERT_FLOAT_EQ(224, YGNodeLayoutGetTop(root_child2));
|
||||||
|
ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child2));
|
||||||
|
ASSERT_FLOAT_EQ(184, YGNodeLayoutGetHeight(root_child2));
|
||||||
|
|
||||||
|
YGNodeFreeRecursive(root);
|
||||||
|
|
||||||
|
YGConfigFree(config);
|
||||||
|
}
|
||||||
|
@@ -1539,3 +1539,199 @@ TEST(YogaTest, wrapped_column_max_height_flex) {
|
|||||||
|
|
||||||
YGConfigFree(config);
|
YGConfigFree(config);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST(YogaTest, wrap_nodes_with_content_sizing_overflowing_margin) {
|
||||||
|
const YGConfigRef config = YGConfigNew();
|
||||||
|
|
||||||
|
const YGNodeRef root = YGNodeNewWithConfig(config);
|
||||||
|
YGNodeStyleSetWidth(root, 500);
|
||||||
|
YGNodeStyleSetHeight(root, 500);
|
||||||
|
|
||||||
|
const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
|
||||||
|
YGNodeStyleSetFlexDirection(root_child0, YGFlexDirectionRow);
|
||||||
|
YGNodeStyleSetFlexWrap(root_child0, YGWrapWrap);
|
||||||
|
YGNodeStyleSetWidth(root_child0, 85);
|
||||||
|
YGNodeInsertChild(root, root_child0, 0);
|
||||||
|
|
||||||
|
const YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);
|
||||||
|
YGNodeInsertChild(root_child0, root_child0_child0, 0);
|
||||||
|
|
||||||
|
const YGNodeRef root_child0_child0_child0 = YGNodeNewWithConfig(config);
|
||||||
|
YGNodeStyleSetWidth(root_child0_child0_child0, 40);
|
||||||
|
YGNodeStyleSetHeight(root_child0_child0_child0, 40);
|
||||||
|
YGNodeInsertChild(root_child0_child0, root_child0_child0_child0, 0);
|
||||||
|
|
||||||
|
const YGNodeRef root_child0_child1 = YGNodeNewWithConfig(config);
|
||||||
|
YGNodeStyleSetMargin(root_child0_child1, YGEdgeRight, 10);
|
||||||
|
YGNodeInsertChild(root_child0, root_child0_child1, 1);
|
||||||
|
|
||||||
|
const YGNodeRef root_child0_child1_child0 = YGNodeNewWithConfig(config);
|
||||||
|
YGNodeStyleSetWidth(root_child0_child1_child0, 40);
|
||||||
|
YGNodeStyleSetHeight(root_child0_child1_child0, 40);
|
||||||
|
YGNodeInsertChild(root_child0_child1, root_child0_child1_child0, 0);
|
||||||
|
YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
|
||||||
|
|
||||||
|
ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
|
||||||
|
ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
|
||||||
|
ASSERT_FLOAT_EQ(500, YGNodeLayoutGetWidth(root));
|
||||||
|
ASSERT_FLOAT_EQ(500, YGNodeLayoutGetHeight(root));
|
||||||
|
|
||||||
|
ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
|
||||||
|
ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
|
||||||
|
ASSERT_FLOAT_EQ(85, YGNodeLayoutGetWidth(root_child0));
|
||||||
|
ASSERT_FLOAT_EQ(80, YGNodeLayoutGetHeight(root_child0));
|
||||||
|
|
||||||
|
ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));
|
||||||
|
ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));
|
||||||
|
ASSERT_FLOAT_EQ(40, YGNodeLayoutGetWidth(root_child0_child0));
|
||||||
|
ASSERT_FLOAT_EQ(40, 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(40, YGNodeLayoutGetWidth(root_child0_child0_child0));
|
||||||
|
ASSERT_FLOAT_EQ(40, YGNodeLayoutGetHeight(root_child0_child0_child0));
|
||||||
|
|
||||||
|
ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child1));
|
||||||
|
ASSERT_FLOAT_EQ(40, YGNodeLayoutGetTop(root_child0_child1));
|
||||||
|
ASSERT_FLOAT_EQ(40, YGNodeLayoutGetWidth(root_child0_child1));
|
||||||
|
ASSERT_FLOAT_EQ(40, YGNodeLayoutGetHeight(root_child0_child1));
|
||||||
|
|
||||||
|
ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child1_child0));
|
||||||
|
ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child1_child0));
|
||||||
|
ASSERT_FLOAT_EQ(40, YGNodeLayoutGetWidth(root_child0_child1_child0));
|
||||||
|
ASSERT_FLOAT_EQ(40, YGNodeLayoutGetHeight(root_child0_child1_child0));
|
||||||
|
|
||||||
|
YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
|
||||||
|
|
||||||
|
ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
|
||||||
|
ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
|
||||||
|
ASSERT_FLOAT_EQ(500, YGNodeLayoutGetWidth(root));
|
||||||
|
ASSERT_FLOAT_EQ(500, YGNodeLayoutGetHeight(root));
|
||||||
|
|
||||||
|
ASSERT_FLOAT_EQ(415, YGNodeLayoutGetLeft(root_child0));
|
||||||
|
ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
|
||||||
|
ASSERT_FLOAT_EQ(85, YGNodeLayoutGetWidth(root_child0));
|
||||||
|
ASSERT_FLOAT_EQ(80, YGNodeLayoutGetHeight(root_child0));
|
||||||
|
|
||||||
|
ASSERT_FLOAT_EQ(45, YGNodeLayoutGetLeft(root_child0_child0));
|
||||||
|
ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));
|
||||||
|
ASSERT_FLOAT_EQ(40, YGNodeLayoutGetWidth(root_child0_child0));
|
||||||
|
ASSERT_FLOAT_EQ(40, 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(40, YGNodeLayoutGetWidth(root_child0_child0_child0));
|
||||||
|
ASSERT_FLOAT_EQ(40, YGNodeLayoutGetHeight(root_child0_child0_child0));
|
||||||
|
|
||||||
|
ASSERT_FLOAT_EQ(35, YGNodeLayoutGetLeft(root_child0_child1));
|
||||||
|
ASSERT_FLOAT_EQ(40, YGNodeLayoutGetTop(root_child0_child1));
|
||||||
|
ASSERT_FLOAT_EQ(40, YGNodeLayoutGetWidth(root_child0_child1));
|
||||||
|
ASSERT_FLOAT_EQ(40, YGNodeLayoutGetHeight(root_child0_child1));
|
||||||
|
|
||||||
|
ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child1_child0));
|
||||||
|
ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child1_child0));
|
||||||
|
ASSERT_FLOAT_EQ(40, YGNodeLayoutGetWidth(root_child0_child1_child0));
|
||||||
|
ASSERT_FLOAT_EQ(40, YGNodeLayoutGetHeight(root_child0_child1_child0));
|
||||||
|
|
||||||
|
YGNodeFreeRecursive(root);
|
||||||
|
|
||||||
|
YGConfigFree(config);
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST(YogaTest, wrap_nodes_with_content_sizing_margin_cross) {
|
||||||
|
const YGConfigRef config = YGConfigNew();
|
||||||
|
|
||||||
|
const YGNodeRef root = YGNodeNewWithConfig(config);
|
||||||
|
YGNodeStyleSetWidth(root, 500);
|
||||||
|
YGNodeStyleSetHeight(root, 500);
|
||||||
|
|
||||||
|
const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
|
||||||
|
YGNodeStyleSetFlexDirection(root_child0, YGFlexDirectionRow);
|
||||||
|
YGNodeStyleSetFlexWrap(root_child0, YGWrapWrap);
|
||||||
|
YGNodeStyleSetWidth(root_child0, 70);
|
||||||
|
YGNodeInsertChild(root, root_child0, 0);
|
||||||
|
|
||||||
|
const YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);
|
||||||
|
YGNodeInsertChild(root_child0, root_child0_child0, 0);
|
||||||
|
|
||||||
|
const YGNodeRef root_child0_child0_child0 = YGNodeNewWithConfig(config);
|
||||||
|
YGNodeStyleSetWidth(root_child0_child0_child0, 40);
|
||||||
|
YGNodeStyleSetHeight(root_child0_child0_child0, 40);
|
||||||
|
YGNodeInsertChild(root_child0_child0, root_child0_child0_child0, 0);
|
||||||
|
|
||||||
|
const YGNodeRef root_child0_child1 = YGNodeNewWithConfig(config);
|
||||||
|
YGNodeStyleSetMargin(root_child0_child1, YGEdgeTop, 10);
|
||||||
|
YGNodeInsertChild(root_child0, root_child0_child1, 1);
|
||||||
|
|
||||||
|
const YGNodeRef root_child0_child1_child0 = YGNodeNewWithConfig(config);
|
||||||
|
YGNodeStyleSetWidth(root_child0_child1_child0, 40);
|
||||||
|
YGNodeStyleSetHeight(root_child0_child1_child0, 40);
|
||||||
|
YGNodeInsertChild(root_child0_child1, root_child0_child1_child0, 0);
|
||||||
|
YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
|
||||||
|
|
||||||
|
ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
|
||||||
|
ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
|
||||||
|
ASSERT_FLOAT_EQ(500, YGNodeLayoutGetWidth(root));
|
||||||
|
ASSERT_FLOAT_EQ(500, YGNodeLayoutGetHeight(root));
|
||||||
|
|
||||||
|
ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
|
||||||
|
ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
|
||||||
|
ASSERT_FLOAT_EQ(70, YGNodeLayoutGetWidth(root_child0));
|
||||||
|
ASSERT_FLOAT_EQ(90, YGNodeLayoutGetHeight(root_child0));
|
||||||
|
|
||||||
|
ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));
|
||||||
|
ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));
|
||||||
|
ASSERT_FLOAT_EQ(40, YGNodeLayoutGetWidth(root_child0_child0));
|
||||||
|
ASSERT_FLOAT_EQ(40, 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(40, YGNodeLayoutGetWidth(root_child0_child0_child0));
|
||||||
|
ASSERT_FLOAT_EQ(40, YGNodeLayoutGetHeight(root_child0_child0_child0));
|
||||||
|
|
||||||
|
ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child1));
|
||||||
|
ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child0_child1));
|
||||||
|
ASSERT_FLOAT_EQ(40, YGNodeLayoutGetWidth(root_child0_child1));
|
||||||
|
ASSERT_FLOAT_EQ(40, YGNodeLayoutGetHeight(root_child0_child1));
|
||||||
|
|
||||||
|
ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child1_child0));
|
||||||
|
ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child1_child0));
|
||||||
|
ASSERT_FLOAT_EQ(40, YGNodeLayoutGetWidth(root_child0_child1_child0));
|
||||||
|
ASSERT_FLOAT_EQ(40, YGNodeLayoutGetHeight(root_child0_child1_child0));
|
||||||
|
|
||||||
|
YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
|
||||||
|
|
||||||
|
ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
|
||||||
|
ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
|
||||||
|
ASSERT_FLOAT_EQ(500, YGNodeLayoutGetWidth(root));
|
||||||
|
ASSERT_FLOAT_EQ(500, YGNodeLayoutGetHeight(root));
|
||||||
|
|
||||||
|
ASSERT_FLOAT_EQ(430, YGNodeLayoutGetLeft(root_child0));
|
||||||
|
ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
|
||||||
|
ASSERT_FLOAT_EQ(70, YGNodeLayoutGetWidth(root_child0));
|
||||||
|
ASSERT_FLOAT_EQ(90, YGNodeLayoutGetHeight(root_child0));
|
||||||
|
|
||||||
|
ASSERT_FLOAT_EQ(30, YGNodeLayoutGetLeft(root_child0_child0));
|
||||||
|
ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));
|
||||||
|
ASSERT_FLOAT_EQ(40, YGNodeLayoutGetWidth(root_child0_child0));
|
||||||
|
ASSERT_FLOAT_EQ(40, 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(40, YGNodeLayoutGetWidth(root_child0_child0_child0));
|
||||||
|
ASSERT_FLOAT_EQ(40, YGNodeLayoutGetHeight(root_child0_child0_child0));
|
||||||
|
|
||||||
|
ASSERT_FLOAT_EQ(30, YGNodeLayoutGetLeft(root_child0_child1));
|
||||||
|
ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child0_child1));
|
||||||
|
ASSERT_FLOAT_EQ(40, YGNodeLayoutGetWidth(root_child0_child1));
|
||||||
|
ASSERT_FLOAT_EQ(40, YGNodeLayoutGetHeight(root_child0_child1));
|
||||||
|
|
||||||
|
ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child1_child0));
|
||||||
|
ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child1_child0));
|
||||||
|
ASSERT_FLOAT_EQ(40, YGNodeLayoutGetWidth(root_child0_child1_child0));
|
||||||
|
ASSERT_FLOAT_EQ(40, YGNodeLayoutGetHeight(root_child0_child1_child0));
|
||||||
|
|
||||||
|
YGNodeFreeRecursive(root);
|
||||||
|
|
||||||
|
YGConfigFree(config);
|
||||||
|
}
|
||||||
|
103
tests/YGHadOverflowTest.cpp
Normal file
103
tests/YGHadOverflowTest.cpp
Normal file
@@ -0,0 +1,103 @@
|
|||||||
|
// Copyright 2004-present Facebook. All Rights Reserved.
|
||||||
|
|
||||||
|
#include <gtest/gtest.h>
|
||||||
|
#include <yoga/Yoga.h>
|
||||||
|
|
||||||
|
using namespace ::testing;
|
||||||
|
|
||||||
|
class YogaTest_HadOverflowTests : public Test {
|
||||||
|
protected:
|
||||||
|
YogaTest_HadOverflowTests() {
|
||||||
|
config = YGConfigNew();
|
||||||
|
root = YGNodeNewWithConfig(config);
|
||||||
|
YGNodeStyleSetWidth(root, 200);
|
||||||
|
YGNodeStyleSetHeight(root, 100);
|
||||||
|
YGNodeStyleSetFlexDirection(root, YGFlexDirectionColumn);
|
||||||
|
YGNodeStyleSetFlexWrap(root, YGWrapNoWrap);
|
||||||
|
}
|
||||||
|
|
||||||
|
~YogaTest_HadOverflowTests() {
|
||||||
|
YGNodeFreeRecursive(root);
|
||||||
|
YGConfigFree(config);
|
||||||
|
}
|
||||||
|
|
||||||
|
YGNodeRef root;
|
||||||
|
YGConfigRef config;
|
||||||
|
};
|
||||||
|
|
||||||
|
TEST_F(YogaTest_HadOverflowTests, children_overflow_no_wrap_and_no_flex_children) {
|
||||||
|
const YGNodeRef child0 = YGNodeNewWithConfig(config);
|
||||||
|
YGNodeStyleSetWidth(child0, 80);
|
||||||
|
YGNodeStyleSetHeight(child0, 40);
|
||||||
|
YGNodeStyleSetMargin(child0, YGEdgeTop, 10);
|
||||||
|
YGNodeStyleSetMargin(child0, YGEdgeBottom, 15);
|
||||||
|
YGNodeInsertChild(root, child0, 0);
|
||||||
|
const YGNodeRef child1 = YGNodeNewWithConfig(config);
|
||||||
|
YGNodeStyleSetWidth(child1, 80);
|
||||||
|
YGNodeStyleSetHeight(child1, 40);
|
||||||
|
YGNodeStyleSetMargin(child1, YGEdgeBottom, 5);
|
||||||
|
YGNodeInsertChild(root, child1, 1);
|
||||||
|
|
||||||
|
YGNodeCalculateLayout(root, 200, 100, YGDirectionLTR);
|
||||||
|
|
||||||
|
ASSERT_TRUE(YGNodeLayoutGetHadOverflow(root));
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_F(YogaTest_HadOverflowTests, spacing_overflow_no_wrap_and_no_flex_children) {
|
||||||
|
const YGNodeRef child0 = YGNodeNewWithConfig(config);
|
||||||
|
YGNodeStyleSetWidth(child0, 80);
|
||||||
|
YGNodeStyleSetHeight(child0, 40);
|
||||||
|
YGNodeStyleSetMargin(child0, YGEdgeTop, 10);
|
||||||
|
YGNodeStyleSetMargin(child0, YGEdgeBottom, 10);
|
||||||
|
YGNodeInsertChild(root, child0, 0);
|
||||||
|
const YGNodeRef child1 = YGNodeNewWithConfig(config);
|
||||||
|
YGNodeStyleSetWidth(child1, 80);
|
||||||
|
YGNodeStyleSetHeight(child1, 40);
|
||||||
|
YGNodeStyleSetMargin(child1, YGEdgeBottom, 5);
|
||||||
|
YGNodeInsertChild(root, child1, 1);
|
||||||
|
|
||||||
|
YGNodeCalculateLayout(root, 200, 100, YGDirectionLTR);
|
||||||
|
|
||||||
|
ASSERT_TRUE(YGNodeLayoutGetHadOverflow(root));
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_F(YogaTest_HadOverflowTests, no_overflow_no_wrap_and_flex_children) {
|
||||||
|
const YGNodeRef child0 = YGNodeNewWithConfig(config);
|
||||||
|
YGNodeStyleSetWidth(child0, 80);
|
||||||
|
YGNodeStyleSetHeight(child0, 40);
|
||||||
|
YGNodeStyleSetMargin(child0, YGEdgeTop, 10);
|
||||||
|
YGNodeStyleSetMargin(child0, YGEdgeBottom, 10);
|
||||||
|
YGNodeInsertChild(root, child0, 0);
|
||||||
|
const YGNodeRef child1 = YGNodeNewWithConfig(config);
|
||||||
|
YGNodeStyleSetWidth(child1, 80);
|
||||||
|
YGNodeStyleSetHeight(child1, 40);
|
||||||
|
YGNodeStyleSetMargin(child1, YGEdgeBottom, 5);
|
||||||
|
YGNodeStyleSetFlexShrink(child1, 1);
|
||||||
|
YGNodeInsertChild(root, child1, 1);
|
||||||
|
|
||||||
|
YGNodeCalculateLayout(root, 200, 100, YGDirectionLTR);
|
||||||
|
|
||||||
|
ASSERT_FALSE(YGNodeLayoutGetHadOverflow(root));
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_F(YogaTest_HadOverflowTests, spacing_overflow_in_nested_nodes) {
|
||||||
|
const YGNodeRef child0 = YGNodeNewWithConfig(config);
|
||||||
|
YGNodeStyleSetWidth(child0, 80);
|
||||||
|
YGNodeStyleSetHeight(child0, 40);
|
||||||
|
YGNodeStyleSetMargin(child0, YGEdgeTop, 10);
|
||||||
|
YGNodeStyleSetMargin(child0, YGEdgeBottom, 10);
|
||||||
|
YGNodeInsertChild(root, child0, 0);
|
||||||
|
const YGNodeRef child1 = YGNodeNewWithConfig(config);
|
||||||
|
YGNodeStyleSetWidth(child1, 80);
|
||||||
|
YGNodeStyleSetHeight(child1, 40);
|
||||||
|
YGNodeInsertChild(root, child1, 1);
|
||||||
|
const YGNodeRef child1_1 = YGNodeNewWithConfig(config);
|
||||||
|
YGNodeStyleSetWidth(child1_1, 80);
|
||||||
|
YGNodeStyleSetHeight(child1_1, 40);
|
||||||
|
YGNodeStyleSetMargin(child1_1, YGEdgeBottom, 5);
|
||||||
|
YGNodeInsertChild(child1, child1_1, 0);
|
||||||
|
|
||||||
|
YGNodeCalculateLayout(root, 200, 100, YGDirectionLTR);
|
||||||
|
|
||||||
|
ASSERT_TRUE(YGNodeLayoutGetHadOverflow(root));
|
||||||
|
}
|
@@ -39,6 +39,19 @@ static YGSize _simulate_wrapping_text(YGNodeRef node,
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static YGSize _measure_assert_negative(YGNodeRef node,
|
||||||
|
float width,
|
||||||
|
YGMeasureMode widthMode,
|
||||||
|
float height,
|
||||||
|
YGMeasureMode heightMode) {
|
||||||
|
EXPECT_GE(width, 0);
|
||||||
|
EXPECT_GE(height, 0);
|
||||||
|
|
||||||
|
return YGSize{
|
||||||
|
.width = 0, .height = 0,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
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);
|
||||||
@@ -563,3 +576,41 @@ TEST(YogaTest, can_nullify_measure_func_on_any_node) {
|
|||||||
ASSERT_TRUE(YGNodeGetMeasureFunc(root) == NULL);
|
ASSERT_TRUE(YGNodeGetMeasureFunc(root) == NULL);
|
||||||
YGNodeFreeRecursive(root);
|
YGNodeFreeRecursive(root);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST(YogaTest, cant_call_negative_measure) {
|
||||||
|
const YGConfigRef config = YGConfigNew();
|
||||||
|
|
||||||
|
const YGNodeRef root = YGNodeNewWithConfig(config);
|
||||||
|
YGNodeStyleSetFlexDirection(root, YGFlexDirectionColumn);
|
||||||
|
YGNodeStyleSetWidth(root, 50);
|
||||||
|
YGNodeStyleSetHeight(root, 10);
|
||||||
|
|
||||||
|
const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
|
||||||
|
YGNodeSetMeasureFunc(root_child0, _measure_assert_negative);
|
||||||
|
YGNodeStyleSetMargin(root_child0, YGEdgeTop, 20);
|
||||||
|
YGNodeInsertChild(root, root_child0, 0);
|
||||||
|
|
||||||
|
YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
|
||||||
|
|
||||||
|
YGNodeFreeRecursive(root);
|
||||||
|
YGConfigFree(config);
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST(YogaTest, cant_call_negative_measure_horizontal) {
|
||||||
|
const YGConfigRef config = YGConfigNew();
|
||||||
|
|
||||||
|
const YGNodeRef root = YGNodeNewWithConfig(config);
|
||||||
|
YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);
|
||||||
|
YGNodeStyleSetWidth(root, 10);
|
||||||
|
YGNodeStyleSetHeight(root, 20);
|
||||||
|
|
||||||
|
const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
|
||||||
|
YGNodeSetMeasureFunc(root_child0, _measure_assert_negative);
|
||||||
|
YGNodeStyleSetMargin(root_child0, YGEdgeStart, 20);
|
||||||
|
YGNodeInsertChild(root, root_child0, 0);
|
||||||
|
|
||||||
|
YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
|
||||||
|
|
||||||
|
YGNodeFreeRecursive(root);
|
||||||
|
YGConfigFree(config);
|
||||||
|
}
|
||||||
|
@@ -671,6 +671,203 @@ TEST(YogaTest, flex_grow_within_constrained_max_width) {
|
|||||||
YGConfigFree(config);
|
YGConfigFree(config);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST(YogaTest, flex_root_ignored) {
|
||||||
|
const YGConfigRef config = YGConfigNew();
|
||||||
|
|
||||||
|
const YGNodeRef root = YGNodeNewWithConfig(config);
|
||||||
|
YGNodeStyleSetFlexGrow(root, 1);
|
||||||
|
YGNodeStyleSetWidth(root, 100);
|
||||||
|
YGNodeStyleSetMinHeight(root, 100);
|
||||||
|
YGNodeStyleSetMaxHeight(root, 500);
|
||||||
|
|
||||||
|
const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
|
||||||
|
YGNodeStyleSetFlexGrow(root_child0, 1);
|
||||||
|
YGNodeStyleSetFlexBasis(root_child0, 200);
|
||||||
|
YGNodeInsertChild(root, root_child0, 0);
|
||||||
|
|
||||||
|
const YGNodeRef root_child1 = YGNodeNewWithConfig(config);
|
||||||
|
YGNodeStyleSetHeight(root_child1, 100);
|
||||||
|
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(100, YGNodeLayoutGetWidth(root));
|
||||||
|
ASSERT_FLOAT_EQ(300, 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(200, YGNodeLayoutGetHeight(root_child0));
|
||||||
|
|
||||||
|
ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));
|
||||||
|
ASSERT_FLOAT_EQ(200, YGNodeLayoutGetTop(root_child1));
|
||||||
|
ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child1));
|
||||||
|
ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1));
|
||||||
|
|
||||||
|
YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
|
||||||
|
|
||||||
|
ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
|
||||||
|
ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
|
||||||
|
ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
|
||||||
|
ASSERT_FLOAT_EQ(300, 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(200, YGNodeLayoutGetHeight(root_child0));
|
||||||
|
|
||||||
|
ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));
|
||||||
|
ASSERT_FLOAT_EQ(200, YGNodeLayoutGetTop(root_child1));
|
||||||
|
ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child1));
|
||||||
|
ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1));
|
||||||
|
|
||||||
|
YGNodeFreeRecursive(root);
|
||||||
|
|
||||||
|
YGConfigFree(config);
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST(YogaTest, flex_grow_root_minimized) {
|
||||||
|
const YGConfigRef config = YGConfigNew();
|
||||||
|
|
||||||
|
const YGNodeRef root = YGNodeNewWithConfig(config);
|
||||||
|
YGNodeStyleSetWidth(root, 100);
|
||||||
|
YGNodeStyleSetMinHeight(root, 100);
|
||||||
|
YGNodeStyleSetMaxHeight(root, 500);
|
||||||
|
|
||||||
|
const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
|
||||||
|
YGNodeStyleSetFlexGrow(root_child0, 1);
|
||||||
|
YGNodeStyleSetMinHeight(root_child0, 100);
|
||||||
|
YGNodeStyleSetMaxHeight(root_child0, 500);
|
||||||
|
YGNodeInsertChild(root, root_child0, 0);
|
||||||
|
|
||||||
|
const YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);
|
||||||
|
YGNodeStyleSetFlexGrow(root_child0_child0, 1);
|
||||||
|
YGNodeStyleSetFlexBasis(root_child0_child0, 200);
|
||||||
|
YGNodeInsertChild(root_child0, root_child0_child0, 0);
|
||||||
|
|
||||||
|
const YGNodeRef root_child0_child1 = YGNodeNewWithConfig(config);
|
||||||
|
YGNodeStyleSetHeight(root_child0_child1, 100);
|
||||||
|
YGNodeInsertChild(root_child0, root_child0_child1, 1);
|
||||||
|
YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
|
||||||
|
|
||||||
|
ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
|
||||||
|
ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
|
||||||
|
ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
|
||||||
|
ASSERT_FLOAT_EQ(300, 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(300, 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(200, YGNodeLayoutGetHeight(root_child0_child0));
|
||||||
|
|
||||||
|
ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child1));
|
||||||
|
ASSERT_FLOAT_EQ(200, YGNodeLayoutGetTop(root_child0_child1));
|
||||||
|
ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child1));
|
||||||
|
ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child1));
|
||||||
|
|
||||||
|
YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
|
||||||
|
|
||||||
|
ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
|
||||||
|
ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
|
||||||
|
ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
|
||||||
|
ASSERT_FLOAT_EQ(300, 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(300, 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(200, YGNodeLayoutGetHeight(root_child0_child0));
|
||||||
|
|
||||||
|
ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child1));
|
||||||
|
ASSERT_FLOAT_EQ(200, YGNodeLayoutGetTop(root_child0_child1));
|
||||||
|
ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child1));
|
||||||
|
ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child1));
|
||||||
|
|
||||||
|
YGNodeFreeRecursive(root);
|
||||||
|
|
||||||
|
YGConfigFree(config);
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST(YogaTest, flex_grow_height_maximized) {
|
||||||
|
const YGConfigRef config = YGConfigNew();
|
||||||
|
|
||||||
|
const YGNodeRef root = YGNodeNewWithConfig(config);
|
||||||
|
YGNodeStyleSetWidth(root, 100);
|
||||||
|
YGNodeStyleSetHeight(root, 500);
|
||||||
|
|
||||||
|
const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
|
||||||
|
YGNodeStyleSetFlexGrow(root_child0, 1);
|
||||||
|
YGNodeStyleSetMinHeight(root_child0, 100);
|
||||||
|
YGNodeStyleSetMaxHeight(root_child0, 500);
|
||||||
|
YGNodeInsertChild(root, root_child0, 0);
|
||||||
|
|
||||||
|
const YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);
|
||||||
|
YGNodeStyleSetFlexGrow(root_child0_child0, 1);
|
||||||
|
YGNodeStyleSetFlexBasis(root_child0_child0, 200);
|
||||||
|
YGNodeInsertChild(root_child0, root_child0_child0, 0);
|
||||||
|
|
||||||
|
const YGNodeRef root_child0_child1 = YGNodeNewWithConfig(config);
|
||||||
|
YGNodeStyleSetHeight(root_child0_child1, 100);
|
||||||
|
YGNodeInsertChild(root_child0, root_child0_child1, 1);
|
||||||
|
YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
|
||||||
|
|
||||||
|
ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
|
||||||
|
ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
|
||||||
|
ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
|
||||||
|
ASSERT_FLOAT_EQ(500, 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(500, 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(400, YGNodeLayoutGetHeight(root_child0_child0));
|
||||||
|
|
||||||
|
ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child1));
|
||||||
|
ASSERT_FLOAT_EQ(400, YGNodeLayoutGetTop(root_child0_child1));
|
||||||
|
ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child1));
|
||||||
|
ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child1));
|
||||||
|
|
||||||
|
YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
|
||||||
|
|
||||||
|
ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
|
||||||
|
ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
|
||||||
|
ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
|
||||||
|
ASSERT_FLOAT_EQ(500, 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(500, 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(400, YGNodeLayoutGetHeight(root_child0_child0));
|
||||||
|
|
||||||
|
ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child1));
|
||||||
|
ASSERT_FLOAT_EQ(400, YGNodeLayoutGetTop(root_child0_child1));
|
||||||
|
ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child1));
|
||||||
|
ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child1));
|
||||||
|
|
||||||
|
YGNodeFreeRecursive(root);
|
||||||
|
|
||||||
|
YGConfigFree(config);
|
||||||
|
}
|
||||||
|
|
||||||
TEST(YogaTest, flex_grow_within_constrained_min_row) {
|
TEST(YogaTest, flex_grow_within_constrained_min_row) {
|
||||||
const YGConfigRef config = YGConfigNew();
|
const YGConfigRef config = YGConfigNew();
|
||||||
|
|
||||||
@@ -900,6 +1097,64 @@ TEST(YogaTest, flex_grow_within_constrained_max_column) {
|
|||||||
YGConfigFree(config);
|
YGConfigFree(config);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST(YogaTest, child_min_max_width_flexing) {
|
||||||
|
const YGConfigRef config = YGConfigNew();
|
||||||
|
|
||||||
|
const YGNodeRef root = YGNodeNewWithConfig(config);
|
||||||
|
YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);
|
||||||
|
YGNodeStyleSetWidth(root, 120);
|
||||||
|
YGNodeStyleSetHeight(root, 50);
|
||||||
|
|
||||||
|
const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
|
||||||
|
YGNodeStyleSetFlexGrow(root_child0, 1);
|
||||||
|
YGNodeStyleSetFlexBasis(root_child0, 0);
|
||||||
|
YGNodeStyleSetMinWidth(root_child0, 60);
|
||||||
|
YGNodeInsertChild(root, root_child0, 0);
|
||||||
|
|
||||||
|
const YGNodeRef root_child1 = YGNodeNewWithConfig(config);
|
||||||
|
YGNodeStyleSetFlexGrow(root_child1, 1);
|
||||||
|
YGNodeStyleSetFlexBasisPercent(root_child1, 50);
|
||||||
|
YGNodeStyleSetMaxWidth(root_child1, 20);
|
||||||
|
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(120, 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(100, YGNodeLayoutGetWidth(root_child0));
|
||||||
|
ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));
|
||||||
|
|
||||||
|
ASSERT_FLOAT_EQ(100, YGNodeLayoutGetLeft(root_child1));
|
||||||
|
ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));
|
||||||
|
ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child1));
|
||||||
|
ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child1));
|
||||||
|
|
||||||
|
YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
|
||||||
|
|
||||||
|
ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
|
||||||
|
ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
|
||||||
|
ASSERT_FLOAT_EQ(120, YGNodeLayoutGetWidth(root));
|
||||||
|
ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root));
|
||||||
|
|
||||||
|
ASSERT_FLOAT_EQ(20, YGNodeLayoutGetLeft(root_child0));
|
||||||
|
ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
|
||||||
|
ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));
|
||||||
|
ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));
|
||||||
|
|
||||||
|
ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));
|
||||||
|
ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));
|
||||||
|
ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child1));
|
||||||
|
ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child1));
|
||||||
|
|
||||||
|
YGNodeFreeRecursive(root);
|
||||||
|
|
||||||
|
YGConfigFree(config);
|
||||||
|
}
|
||||||
|
|
||||||
TEST(YogaTest, min_width_overrides_width) {
|
TEST(YogaTest, min_width_overrides_width) {
|
||||||
const YGConfigRef config = YGConfigNew();
|
const YGConfigRef config = YGConfigNew();
|
||||||
|
|
||||||
|
@@ -26,7 +26,17 @@ static YGSize _measureCeil(YGNodeRef node,
|
|||||||
float height,
|
float height,
|
||||||
YGMeasureMode heightMode) {
|
YGMeasureMode heightMode) {
|
||||||
return YGSize{
|
return YGSize{
|
||||||
width = 10.5, height = 10.5,
|
width = 10.5f, height = 10.5f,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
static YGSize _measureFractial(YGNodeRef node,
|
||||||
|
float width,
|
||||||
|
YGMeasureMode widthMode,
|
||||||
|
float height,
|
||||||
|
YGMeasureMode heightMode) {
|
||||||
|
return YGSize{
|
||||||
|
width = 0.5f, height = 0.5f,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -97,3 +107,25 @@ TEST(YogaTest, rounding_feature_with_custom_measure_func_ceil) {
|
|||||||
|
|
||||||
YGConfigFree(config);
|
YGConfigFree(config);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST(YogaTest, rounding_feature_with_custom_measure_and_fractial_matching_scale) {
|
||||||
|
const YGConfigRef config = YGConfigNew();
|
||||||
|
const YGNodeRef root = YGNodeNewWithConfig(config);
|
||||||
|
|
||||||
|
const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
|
||||||
|
YGNodeStyleSetPosition(root_child0, YGEdgeLeft, 73.625);
|
||||||
|
YGNodeSetMeasureFunc(root_child0, _measureFractial);
|
||||||
|
YGNodeInsertChild(root, root_child0, 0);
|
||||||
|
|
||||||
|
YGConfigSetPointScaleFactor(config, 2.0f);
|
||||||
|
|
||||||
|
YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
|
||||||
|
|
||||||
|
ASSERT_FLOAT_EQ(0.5, YGNodeLayoutGetWidth(root_child0));
|
||||||
|
ASSERT_FLOAT_EQ(0.5, YGNodeLayoutGetHeight(root_child0));
|
||||||
|
ASSERT_FLOAT_EQ(73.5, YGNodeLayoutGetLeft(root_child0));
|
||||||
|
|
||||||
|
YGNodeFreeRecursive(root);
|
||||||
|
|
||||||
|
YGConfigFree(config);
|
||||||
|
}
|
||||||
|
@@ -9,8 +9,8 @@
|
|||||||
|
|
||||||
#include "YGEnums.h"
|
#include "YGEnums.h"
|
||||||
|
|
||||||
const char *YGAlignToString(const YGAlign value) {
|
const char *YGAlignToString(const YGAlign value){
|
||||||
switch (value) {
|
switch(value){
|
||||||
case YGAlignAuto:
|
case YGAlignAuto:
|
||||||
return "auto";
|
return "auto";
|
||||||
case YGAlignFlexStart:
|
case YGAlignFlexStart:
|
||||||
@@ -31,8 +31,8 @@ const char *YGAlignToString(const YGAlign value) {
|
|||||||
return "unknown";
|
return "unknown";
|
||||||
}
|
}
|
||||||
|
|
||||||
const char *YGDimensionToString(const YGDimension value) {
|
const char *YGDimensionToString(const YGDimension value){
|
||||||
switch (value) {
|
switch(value){
|
||||||
case YGDimensionWidth:
|
case YGDimensionWidth:
|
||||||
return "width";
|
return "width";
|
||||||
case YGDimensionHeight:
|
case YGDimensionHeight:
|
||||||
@@ -41,8 +41,8 @@ const char *YGDimensionToString(const YGDimension value) {
|
|||||||
return "unknown";
|
return "unknown";
|
||||||
}
|
}
|
||||||
|
|
||||||
const char *YGDirectionToString(const YGDirection value) {
|
const char *YGDirectionToString(const YGDirection value){
|
||||||
switch (value) {
|
switch(value){
|
||||||
case YGDirectionInherit:
|
case YGDirectionInherit:
|
||||||
return "inherit";
|
return "inherit";
|
||||||
case YGDirectionLTR:
|
case YGDirectionLTR:
|
||||||
@@ -53,8 +53,8 @@ const char *YGDirectionToString(const YGDirection value) {
|
|||||||
return "unknown";
|
return "unknown";
|
||||||
}
|
}
|
||||||
|
|
||||||
const char *YGDisplayToString(const YGDisplay value) {
|
const char *YGDisplayToString(const YGDisplay value){
|
||||||
switch (value) {
|
switch(value){
|
||||||
case YGDisplayFlex:
|
case YGDisplayFlex:
|
||||||
return "flex";
|
return "flex";
|
||||||
case YGDisplayNone:
|
case YGDisplayNone:
|
||||||
@@ -63,8 +63,8 @@ const char *YGDisplayToString(const YGDisplay value) {
|
|||||||
return "unknown";
|
return "unknown";
|
||||||
}
|
}
|
||||||
|
|
||||||
const char *YGEdgeToString(const YGEdge value) {
|
const char *YGEdgeToString(const YGEdge value){
|
||||||
switch (value) {
|
switch(value){
|
||||||
case YGEdgeLeft:
|
case YGEdgeLeft:
|
||||||
return "left";
|
return "left";
|
||||||
case YGEdgeTop:
|
case YGEdgeTop:
|
||||||
@@ -87,16 +87,16 @@ const char *YGEdgeToString(const YGEdge value) {
|
|||||||
return "unknown";
|
return "unknown";
|
||||||
}
|
}
|
||||||
|
|
||||||
const char *YGExperimentalFeatureToString(const YGExperimentalFeature value) {
|
const char *YGExperimentalFeatureToString(const YGExperimentalFeature value){
|
||||||
switch (value) {
|
switch(value){
|
||||||
case YGExperimentalFeatureWebFlexBasis:
|
case YGExperimentalFeatureWebFlexBasis:
|
||||||
return "web-flex-basis";
|
return "web-flex-basis";
|
||||||
}
|
}
|
||||||
return "unknown";
|
return "unknown";
|
||||||
}
|
}
|
||||||
|
|
||||||
const char *YGFlexDirectionToString(const YGFlexDirection value) {
|
const char *YGFlexDirectionToString(const YGFlexDirection value){
|
||||||
switch (value) {
|
switch(value){
|
||||||
case YGFlexDirectionColumn:
|
case YGFlexDirectionColumn:
|
||||||
return "column";
|
return "column";
|
||||||
case YGFlexDirectionColumnReverse:
|
case YGFlexDirectionColumnReverse:
|
||||||
@@ -109,8 +109,8 @@ const char *YGFlexDirectionToString(const YGFlexDirection value) {
|
|||||||
return "unknown";
|
return "unknown";
|
||||||
}
|
}
|
||||||
|
|
||||||
const char *YGJustifyToString(const YGJustify value) {
|
const char *YGJustifyToString(const YGJustify value){
|
||||||
switch (value) {
|
switch(value){
|
||||||
case YGJustifyFlexStart:
|
case YGJustifyFlexStart:
|
||||||
return "flex-start";
|
return "flex-start";
|
||||||
case YGJustifyCenter:
|
case YGJustifyCenter:
|
||||||
@@ -125,8 +125,8 @@ const char *YGJustifyToString(const YGJustify value) {
|
|||||||
return "unknown";
|
return "unknown";
|
||||||
}
|
}
|
||||||
|
|
||||||
const char *YGLogLevelToString(const YGLogLevel value) {
|
const char *YGLogLevelToString(const YGLogLevel value){
|
||||||
switch (value) {
|
switch(value){
|
||||||
case YGLogLevelError:
|
case YGLogLevelError:
|
||||||
return "error";
|
return "error";
|
||||||
case YGLogLevelWarn:
|
case YGLogLevelWarn:
|
||||||
@@ -143,8 +143,8 @@ const char *YGLogLevelToString(const YGLogLevel value) {
|
|||||||
return "unknown";
|
return "unknown";
|
||||||
}
|
}
|
||||||
|
|
||||||
const char *YGMeasureModeToString(const YGMeasureMode value) {
|
const char *YGMeasureModeToString(const YGMeasureMode value){
|
||||||
switch (value) {
|
switch(value){
|
||||||
case YGMeasureModeUndefined:
|
case YGMeasureModeUndefined:
|
||||||
return "undefined";
|
return "undefined";
|
||||||
case YGMeasureModeExactly:
|
case YGMeasureModeExactly:
|
||||||
@@ -155,8 +155,18 @@ const char *YGMeasureModeToString(const YGMeasureMode value) {
|
|||||||
return "unknown";
|
return "unknown";
|
||||||
}
|
}
|
||||||
|
|
||||||
const char *YGOverflowToString(const YGOverflow value) {
|
const char *YGNodeTypeToString(const YGNodeType value){
|
||||||
switch (value) {
|
switch(value){
|
||||||
|
case YGNodeTypeDefault:
|
||||||
|
return "default";
|
||||||
|
case YGNodeTypeText:
|
||||||
|
return "text";
|
||||||
|
}
|
||||||
|
return "unknown";
|
||||||
|
}
|
||||||
|
|
||||||
|
const char *YGOverflowToString(const YGOverflow value){
|
||||||
|
switch(value){
|
||||||
case YGOverflowVisible:
|
case YGOverflowVisible:
|
||||||
return "visible";
|
return "visible";
|
||||||
case YGOverflowHidden:
|
case YGOverflowHidden:
|
||||||
@@ -167,8 +177,8 @@ const char *YGOverflowToString(const YGOverflow value) {
|
|||||||
return "unknown";
|
return "unknown";
|
||||||
}
|
}
|
||||||
|
|
||||||
const char *YGPositionTypeToString(const YGPositionType value) {
|
const char *YGPositionTypeToString(const YGPositionType value){
|
||||||
switch (value) {
|
switch(value){
|
||||||
case YGPositionTypeRelative:
|
case YGPositionTypeRelative:
|
||||||
return "relative";
|
return "relative";
|
||||||
case YGPositionTypeAbsolute:
|
case YGPositionTypeAbsolute:
|
||||||
@@ -177,8 +187,8 @@ const char *YGPositionTypeToString(const YGPositionType value) {
|
|||||||
return "unknown";
|
return "unknown";
|
||||||
}
|
}
|
||||||
|
|
||||||
const char *YGPrintOptionsToString(const YGPrintOptions value) {
|
const char *YGPrintOptionsToString(const YGPrintOptions value){
|
||||||
switch (value) {
|
switch(value){
|
||||||
case YGPrintOptionsLayout:
|
case YGPrintOptionsLayout:
|
||||||
return "layout";
|
return "layout";
|
||||||
case YGPrintOptionsStyle:
|
case YGPrintOptionsStyle:
|
||||||
@@ -189,8 +199,8 @@ const char *YGPrintOptionsToString(const YGPrintOptions value) {
|
|||||||
return "unknown";
|
return "unknown";
|
||||||
}
|
}
|
||||||
|
|
||||||
const char *YGUnitToString(const YGUnit value) {
|
const char *YGUnitToString(const YGUnit value){
|
||||||
switch (value) {
|
switch(value){
|
||||||
case YGUnitUndefined:
|
case YGUnitUndefined:
|
||||||
return "undefined";
|
return "undefined";
|
||||||
case YGUnitPoint:
|
case YGUnitPoint:
|
||||||
@@ -203,8 +213,8 @@ const char *YGUnitToString(const YGUnit value) {
|
|||||||
return "unknown";
|
return "unknown";
|
||||||
}
|
}
|
||||||
|
|
||||||
const char *YGWrapToString(const YGWrap value) {
|
const char *YGWrapToString(const YGWrap value){
|
||||||
switch (value) {
|
switch(value){
|
||||||
case YGWrapNoWrap:
|
case YGWrapNoWrap:
|
||||||
return "no-wrap";
|
return "no-wrap";
|
||||||
case YGWrapWrap:
|
case YGWrapWrap:
|
||||||
@@ -214,3 +224,4 @@ const char *YGWrapToString(const YGWrap value) {
|
|||||||
}
|
}
|
||||||
return "unknown";
|
return "unknown";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -106,6 +106,13 @@ typedef YG_ENUM_BEGIN(YGMeasureMode) {
|
|||||||
} YG_ENUM_END(YGMeasureMode);
|
} YG_ENUM_END(YGMeasureMode);
|
||||||
WIN_EXPORT const char *YGMeasureModeToString(const YGMeasureMode value);
|
WIN_EXPORT const char *YGMeasureModeToString(const YGMeasureMode value);
|
||||||
|
|
||||||
|
#define YGNodeTypeCount 2
|
||||||
|
typedef YG_ENUM_BEGIN(YGNodeType) {
|
||||||
|
YGNodeTypeDefault,
|
||||||
|
YGNodeTypeText,
|
||||||
|
} YG_ENUM_END(YGNodeType);
|
||||||
|
WIN_EXPORT const char *YGNodeTypeToString(const YGNodeType value);
|
||||||
|
|
||||||
#define YGOverflowCount 3
|
#define YGOverflowCount 3
|
||||||
typedef YG_ENUM_BEGIN(YGOverflow) {
|
typedef YG_ENUM_BEGIN(YGOverflow) {
|
||||||
YGOverflowVisible,
|
YGOverflowVisible,
|
||||||
|
189
yoga/Yoga.c
189
yoga/Yoga.c
@@ -54,6 +54,7 @@ typedef struct YGLayout {
|
|||||||
|
|
||||||
uint32_t computedFlexBasisGeneration;
|
uint32_t computedFlexBasisGeneration;
|
||||||
float computedFlexBasis;
|
float computedFlexBasis;
|
||||||
|
bool hadOverflow;
|
||||||
|
|
||||||
// Instead of recomputing the entire layout every single time, we
|
// Instead of recomputing the entire layout every single time, we
|
||||||
// cache some information to break early when nothing changed
|
// cache some information to break early when nothing changed
|
||||||
@@ -121,6 +122,7 @@ typedef struct YGNode {
|
|||||||
|
|
||||||
bool isDirty;
|
bool isDirty;
|
||||||
bool hasNewLayout;
|
bool hasNewLayout;
|
||||||
|
YGNodeType nodeType;
|
||||||
|
|
||||||
YGValue const *resolvedDimensions[2];
|
YGValue const *resolvedDimensions[2];
|
||||||
} YGNode;
|
} YGNode;
|
||||||
@@ -158,6 +160,7 @@ static YGNode gYGNodeDefaults = {
|
|||||||
.children = NULL,
|
.children = NULL,
|
||||||
.hasNewLayout = true,
|
.hasNewLayout = true,
|
||||||
.isDirty = false,
|
.isDirty = false,
|
||||||
|
.nodeType = YGNodeTypeDefault,
|
||||||
.resolvedDimensions = {[YGDimensionWidth] = &YGValueUndefined,
|
.resolvedDimensions = {[YGDimensionWidth] = &YGValueUndefined,
|
||||||
[YGDimensionHeight] = &YGValueUndefined},
|
[YGDimensionHeight] = &YGValueUndefined},
|
||||||
|
|
||||||
@@ -190,6 +193,7 @@ static YGNode gYGNodeDefaults = {
|
|||||||
.lastParentDirection = (YGDirection) -1,
|
.lastParentDirection = (YGDirection) -1,
|
||||||
.nextCachedMeasurementsIndex = 0,
|
.nextCachedMeasurementsIndex = 0,
|
||||||
.computedFlexBasis = YGUndefined,
|
.computedFlexBasis = YGUndefined,
|
||||||
|
.hadOverflow = false,
|
||||||
.measuredDimensions = YG_DEFAULT_DIMENSION_VALUES,
|
.measuredDimensions = YG_DEFAULT_DIMENSION_VALUES,
|
||||||
|
|
||||||
.cachedLayout =
|
.cachedLayout =
|
||||||
@@ -444,11 +448,16 @@ static void YGNodeMarkDirtyInternal(const YGNodeRef node) {
|
|||||||
void YGNodeSetMeasureFunc(const YGNodeRef node, YGMeasureFunc measureFunc) {
|
void YGNodeSetMeasureFunc(const YGNodeRef node, YGMeasureFunc measureFunc) {
|
||||||
if (measureFunc == NULL) {
|
if (measureFunc == NULL) {
|
||||||
node->measure = NULL;
|
node->measure = NULL;
|
||||||
|
// TODO: t18095186 Move nodeType to opt-in function and mark appropriate places in Litho
|
||||||
|
node->nodeType = YGNodeTypeDefault;
|
||||||
} else {
|
} else {
|
||||||
YGAssertWithNode(node,
|
YGAssertWithNode(
|
||||||
|
node,
|
||||||
YGNodeGetChildCount(node) == 0,
|
YGNodeGetChildCount(node) == 0,
|
||||||
"Cannot set measure function: Nodes with measure functions cannot have children.");
|
"Cannot set measure function: Nodes with measure functions cannot have children.");
|
||||||
node->measure = measureFunc;
|
node->measure = measureFunc;
|
||||||
|
// TODO: t18095186 Move nodeType to opt-in function and mark appropriate places in Litho
|
||||||
|
node->nodeType = YGNodeTypeText;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -465,7 +474,9 @@ YGBaselineFunc YGNodeGetBaselineFunc(const YGNodeRef node) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void YGNodeInsertChild(const YGNodeRef node, const YGNodeRef child, const uint32_t index) {
|
void YGNodeInsertChild(const YGNodeRef node, const YGNodeRef child, const uint32_t index) {
|
||||||
YGAssertWithNode(node, child->parent == NULL, "Child already has a parent, it must be removed first.");
|
YGAssertWithNode(node,
|
||||||
|
child->parent == NULL,
|
||||||
|
"Child already has a parent, it must be removed first.");
|
||||||
YGAssertWithNode(node,
|
YGAssertWithNode(node,
|
||||||
node->measure == NULL,
|
node->measure == NULL,
|
||||||
"Cannot add child: Nodes with measure functions cannot have children.");
|
"Cannot add child: Nodes with measure functions cannot have children.");
|
||||||
@@ -516,6 +527,10 @@ void YGNodeCopyStyle(const YGNodeRef dstNode, const YGNodeRef srcNode) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static inline float YGResolveFlexGrow(const YGNodeRef node) {
|
static inline float YGResolveFlexGrow(const YGNodeRef node) {
|
||||||
|
// Root nodes flexGrow should always be 0
|
||||||
|
if (node->parent == NULL) {
|
||||||
|
return 0.0;
|
||||||
|
}
|
||||||
if (!YGFloatIsUndefined(node->style.flexGrow)) {
|
if (!YGFloatIsUndefined(node->style.flexGrow)) {
|
||||||
return node->style.flexGrow;
|
return node->style.flexGrow;
|
||||||
}
|
}
|
||||||
@@ -536,6 +551,10 @@ float YGNodeStyleGetFlexShrink(const YGNodeRef node) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static inline float YGNodeResolveFlexShrink(const YGNodeRef node) {
|
static inline float YGNodeResolveFlexShrink(const YGNodeRef node) {
|
||||||
|
// Root nodes flexShrink should always be 0
|
||||||
|
if (node->parent == NULL) {
|
||||||
|
return 0.0;
|
||||||
|
}
|
||||||
if (!YGFloatIsUndefined(node->style.flexShrink)) {
|
if (!YGFloatIsUndefined(node->style.flexShrink)) {
|
||||||
return node->style.flexShrink;
|
return node->style.flexShrink;
|
||||||
}
|
}
|
||||||
@@ -698,7 +717,9 @@ static inline const YGValue *YGNodeResolveFlexBasisPtr(const YGNodeRef node) {
|
|||||||
|
|
||||||
#define YG_NODE_LAYOUT_RESOLVED_PROPERTY_IMPL(type, name, instanceName) \
|
#define YG_NODE_LAYOUT_RESOLVED_PROPERTY_IMPL(type, name, instanceName) \
|
||||||
type YGNodeLayoutGet##name(const YGNodeRef node, const YGEdge edge) { \
|
type YGNodeLayoutGet##name(const YGNodeRef node, const YGEdge edge) { \
|
||||||
YGAssertWithNode(node, edge < YGEdgeEnd, "Cannot get layout properties of multi-edge shorthands"); \
|
YGAssertWithNode(node, \
|
||||||
|
edge < YGEdgeEnd, \
|
||||||
|
"Cannot get layout properties of multi-edge shorthands"); \
|
||||||
\
|
\
|
||||||
if (edge == YGEdgeLeft) { \
|
if (edge == YGEdgeLeft) { \
|
||||||
if (node->layout.direction == YGDirectionRTL) { \
|
if (node->layout.direction == YGDirectionRTL) { \
|
||||||
@@ -722,6 +743,7 @@ static inline const YGValue *YGNodeResolveFlexBasisPtr(const YGNodeRef node) {
|
|||||||
YG_NODE_PROPERTY_IMPL(void *, Context, context, context);
|
YG_NODE_PROPERTY_IMPL(void *, Context, context, context);
|
||||||
YG_NODE_PROPERTY_IMPL(YGPrintFunc, PrintFunc, printFunc, print);
|
YG_NODE_PROPERTY_IMPL(YGPrintFunc, PrintFunc, printFunc, print);
|
||||||
YG_NODE_PROPERTY_IMPL(bool, HasNewLayout, hasNewLayout, hasNewLayout);
|
YG_NODE_PROPERTY_IMPL(bool, HasNewLayout, hasNewLayout, hasNewLayout);
|
||||||
|
YG_NODE_PROPERTY_IMPL(YGNodeType, NodeType, nodeType, nodeType);
|
||||||
|
|
||||||
YG_NODE_STYLE_PROPERTY_IMPL(YGDirection, Direction, direction, direction);
|
YG_NODE_STYLE_PROPERTY_IMPL(YGDirection, Direction, direction, direction);
|
||||||
YG_NODE_STYLE_PROPERTY_IMPL(YGFlexDirection, FlexDirection, flexDirection, flexDirection);
|
YG_NODE_STYLE_PROPERTY_IMPL(YGFlexDirection, FlexDirection, flexDirection, flexDirection);
|
||||||
@@ -762,6 +784,7 @@ YG_NODE_LAYOUT_PROPERTY_IMPL(float, Bottom, position[YGEdgeBottom]);
|
|||||||
YG_NODE_LAYOUT_PROPERTY_IMPL(float, Width, dimensions[YGDimensionWidth]);
|
YG_NODE_LAYOUT_PROPERTY_IMPL(float, Width, dimensions[YGDimensionWidth]);
|
||||||
YG_NODE_LAYOUT_PROPERTY_IMPL(float, Height, dimensions[YGDimensionHeight]);
|
YG_NODE_LAYOUT_PROPERTY_IMPL(float, Height, dimensions[YGDimensionHeight]);
|
||||||
YG_NODE_LAYOUT_PROPERTY_IMPL(YGDirection, Direction, direction);
|
YG_NODE_LAYOUT_PROPERTY_IMPL(YGDirection, Direction, direction);
|
||||||
|
YG_NODE_LAYOUT_PROPERTY_IMPL(bool, HadOverflow, hadOverflow);
|
||||||
|
|
||||||
YG_NODE_LAYOUT_RESOLVED_PROPERTY_IMPL(float, Margin, margin);
|
YG_NODE_LAYOUT_RESOLVED_PROPERTY_IMPL(float, Margin, margin);
|
||||||
YG_NODE_LAYOUT_RESOLVED_PROPERTY_IMPL(float, Border, border);
|
YG_NODE_LAYOUT_RESOLVED_PROPERTY_IMPL(float, Border, border);
|
||||||
@@ -854,7 +877,7 @@ static void YGPrintEdgeIfNotUndefined(const YGNodeRef node,
|
|||||||
const char *str,
|
const char *str,
|
||||||
const YGValue *edges,
|
const YGValue *edges,
|
||||||
const YGEdge edge) {
|
const YGEdge edge) {
|
||||||
YGPrintNumberIfNotUndefined(node, str, YGComputedEdgeValue(edges, YGEdgeLeft, &YGValueUndefined));
|
YGPrintNumberIfNotUndefined(node, str, YGComputedEdgeValue(edges, edge, &YGValueUndefined));
|
||||||
}
|
}
|
||||||
|
|
||||||
static void YGPrintNumberIfNotZero(const YGNodeRef node,
|
static void YGPrintNumberIfNotZero(const YGNodeRef node,
|
||||||
@@ -1667,7 +1690,8 @@ static void YGNodeAbsoluteLayoutChild(const YGNodeRef node,
|
|||||||
child->layout.position[leading[mainAxis]] = node->layout.measuredDimensions[dim[mainAxis]] -
|
child->layout.position[leading[mainAxis]] = node->layout.measuredDimensions[dim[mainAxis]] -
|
||||||
child->layout.measuredDimensions[dim[mainAxis]] -
|
child->layout.measuredDimensions[dim[mainAxis]] -
|
||||||
YGNodeTrailingBorder(node, mainAxis) -
|
YGNodeTrailingBorder(node, mainAxis) -
|
||||||
YGNodeTrailingPosition(child, mainAxis, width);
|
YGNodeTrailingMargin(child, mainAxis, width) -
|
||||||
|
YGNodeTrailingPosition(child, mainAxis, isMainAxisRow ? width : height);
|
||||||
} else if (!YGNodeIsLeadingPosDefined(child, mainAxis) &&
|
} else if (!YGNodeIsLeadingPosDefined(child, mainAxis) &&
|
||||||
node->style.justifyContent == YGJustifyCenter) {
|
node->style.justifyContent == YGJustifyCenter) {
|
||||||
child->layout.position[leading[mainAxis]] = (node->layout.measuredDimensions[dim[mainAxis]] -
|
child->layout.position[leading[mainAxis]] = (node->layout.measuredDimensions[dim[mainAxis]] -
|
||||||
@@ -1684,7 +1708,8 @@ static void YGNodeAbsoluteLayoutChild(const YGNodeRef node,
|
|||||||
child->layout.position[leading[crossAxis]] = node->layout.measuredDimensions[dim[crossAxis]] -
|
child->layout.position[leading[crossAxis]] = node->layout.measuredDimensions[dim[crossAxis]] -
|
||||||
child->layout.measuredDimensions[dim[crossAxis]] -
|
child->layout.measuredDimensions[dim[crossAxis]] -
|
||||||
YGNodeTrailingBorder(node, crossAxis) -
|
YGNodeTrailingBorder(node, crossAxis) -
|
||||||
YGNodeTrailingPosition(child, crossAxis, width);
|
YGNodeTrailingMargin(child, crossAxis, width) -
|
||||||
|
YGNodeTrailingPosition(child, crossAxis, isMainAxisRow ? height : width);
|
||||||
} else if (!YGNodeIsLeadingPosDefined(child, crossAxis) &&
|
} else if (!YGNodeIsLeadingPosDefined(child, crossAxis) &&
|
||||||
YGNodeAlignItem(node, child) == YGAlignCenter) {
|
YGNodeAlignItem(node, child) == YGAlignCenter) {
|
||||||
child->layout.position[leading[crossAxis]] =
|
child->layout.position[leading[crossAxis]] =
|
||||||
@@ -1692,7 +1717,7 @@ static void YGNodeAbsoluteLayoutChild(const YGNodeRef node,
|
|||||||
child->layout.measuredDimensions[dim[crossAxis]]) /
|
child->layout.measuredDimensions[dim[crossAxis]]) /
|
||||||
2.0f;
|
2.0f;
|
||||||
} else if (!YGNodeIsLeadingPosDefined(child, crossAxis) &&
|
} else if (!YGNodeIsLeadingPosDefined(child, crossAxis) &&
|
||||||
YGNodeAlignItem(node, child) == YGAlignFlexEnd) {
|
((YGNodeAlignItem(node, child) == YGAlignFlexEnd) ^ (node->style.flexWrap == YGWrapWrapReverse))) {
|
||||||
child->layout.position[leading[crossAxis]] = (node->layout.measuredDimensions[dim[crossAxis]] -
|
child->layout.position[leading[crossAxis]] = (node->layout.measuredDimensions[dim[crossAxis]] -
|
||||||
child->layout.measuredDimensions[dim[crossAxis]]);
|
child->layout.measuredDimensions[dim[crossAxis]]);
|
||||||
}
|
}
|
||||||
@@ -1714,8 +1739,13 @@ static void YGNodeWithMeasureFuncSetMeasuredDimensions(const YGNodeRef node,
|
|||||||
const float marginAxisRow = YGNodeMarginForAxis(node, YGFlexDirectionRow, availableWidth);
|
const float marginAxisRow = YGNodeMarginForAxis(node, YGFlexDirectionRow, availableWidth);
|
||||||
const float marginAxisColumn = YGNodeMarginForAxis(node, YGFlexDirectionColumn, availableWidth);
|
const float marginAxisColumn = YGNodeMarginForAxis(node, YGFlexDirectionColumn, availableWidth);
|
||||||
|
|
||||||
const float innerWidth = availableWidth - marginAxisRow - paddingAndBorderAxisRow;
|
// We want to make sure we don't call measure with negative size
|
||||||
const float innerHeight = availableHeight - marginAxisColumn - paddingAndBorderAxisColumn;
|
const float innerWidth = YGFloatIsUndefined(availableWidth)
|
||||||
|
? availableWidth
|
||||||
|
: fmaxf(0, availableWidth - marginAxisRow - paddingAndBorderAxisRow);
|
||||||
|
const float innerHeight = YGFloatIsUndefined(availableHeight)
|
||||||
|
? availableHeight
|
||||||
|
: fmaxf(0, availableHeight - marginAxisColumn - paddingAndBorderAxisColumn);
|
||||||
|
|
||||||
if (widthMeasureMode == YGMeasureModeExactly && heightMeasureMode == YGMeasureModeExactly) {
|
if (widthMeasureMode == YGMeasureModeExactly && heightMeasureMode == YGMeasureModeExactly) {
|
||||||
// Don't bother sizing the text if both dimensions are already defined.
|
// Don't bother sizing the text if both dimensions are already defined.
|
||||||
@@ -1942,11 +1972,13 @@ static void YGNodelayoutImpl(const YGNodeRef node,
|
|||||||
const bool performLayout,
|
const bool performLayout,
|
||||||
const YGConfigRef config) {
|
const YGConfigRef config) {
|
||||||
YGAssertWithNode(node,
|
YGAssertWithNode(node,
|
||||||
YGFloatIsUndefined(availableWidth) ? widthMeasureMode == YGMeasureModeUndefined : true,
|
YGFloatIsUndefined(availableWidth) ? widthMeasureMode == YGMeasureModeUndefined
|
||||||
|
: true,
|
||||||
"availableWidth is indefinite so widthMeasureMode must be "
|
"availableWidth is indefinite so widthMeasureMode must be "
|
||||||
"YGMeasureModeUndefined");
|
"YGMeasureModeUndefined");
|
||||||
YGAssertWithNode(node,
|
YGAssertWithNode(node,
|
||||||
YGFloatIsUndefined(availableHeight) ? heightMeasureMode == YGMeasureModeUndefined : true,
|
YGFloatIsUndefined(availableHeight) ? heightMeasureMode == YGMeasureModeUndefined
|
||||||
|
: true,
|
||||||
"availableHeight is indefinite so heightMeasureMode must be "
|
"availableHeight is indefinite so heightMeasureMode must be "
|
||||||
"YGMeasureModeUndefined");
|
"YGMeasureModeUndefined");
|
||||||
|
|
||||||
@@ -2095,7 +2127,7 @@ static void YGNodelayoutImpl(const YGNodeRef node,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
float totalFlexBasis = 0;
|
float totalOuterFlexBasis = 0;
|
||||||
|
|
||||||
// STEP 3: DETERMINE FLEX BASIS FOR EACH ITEM
|
// STEP 3: DETERMINE FLEX BASIS FOR EACH ITEM
|
||||||
for (uint32_t i = 0; i < childCount; i++) {
|
for (uint32_t i = 0; i < childCount; i++) {
|
||||||
@@ -2148,11 +2180,14 @@ static void YGNodelayoutImpl(const YGNodeRef node,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
totalFlexBasis += child->layout.computedFlexBasis;
|
totalOuterFlexBasis +=
|
||||||
|
child->layout.computedFlexBasis + YGNodeMarginForAxis(child, mainAxis, availableInnerWidth);
|
||||||
|
;
|
||||||
}
|
}
|
||||||
|
|
||||||
const bool flexBasisOverflows =
|
const bool flexBasisOverflows = measureModeMainDim == YGMeasureModeUndefined
|
||||||
measureModeMainDim == YGMeasureModeUndefined ? false : totalFlexBasis > availableInnerMainDim;
|
? false
|
||||||
|
: totalOuterFlexBasis > availableInnerMainDim;
|
||||||
if (isNodeFlexWrap && flexBasisOverflows && measureModeMainDim == YGMeasureModeAtMost) {
|
if (isNodeFlexWrap && flexBasisOverflows && measureModeMainDim == YGMeasureModeAtMost) {
|
||||||
measureModeMainDim = YGMeasureModeExactly;
|
measureModeMainDim = YGMeasureModeExactly;
|
||||||
}
|
}
|
||||||
@@ -2205,9 +2240,7 @@ static void YGNodelayoutImpl(const YGNodeRef node,
|
|||||||
const float childMarginMainAxis = YGNodeMarginForAxis(child, mainAxis, availableInnerWidth);
|
const float childMarginMainAxis = YGNodeMarginForAxis(child, mainAxis, availableInnerWidth);
|
||||||
const float flexBasisWithMaxConstraints =
|
const float flexBasisWithMaxConstraints =
|
||||||
fminf(YGResolveValue(&child->style.maxDimensions[dim[mainAxis]], mainAxisParentSize),
|
fminf(YGResolveValue(&child->style.maxDimensions[dim[mainAxis]], mainAxisParentSize),
|
||||||
fmaxf(YGResolveValue(&child->style.minDimensions[dim[mainAxis]],
|
child->layout.computedFlexBasis);
|
||||||
mainAxisParentSize),
|
|
||||||
child->layout.computedFlexBasis));
|
|
||||||
const float flexBasisWithMinAndMaxConstraints =
|
const float flexBasisWithMinAndMaxConstraints =
|
||||||
fmaxf(YGResolveValue(&child->style.minDimensions[dim[mainAxis]], mainAxisParentSize),
|
fmaxf(YGResolveValue(&child->style.minDimensions[dim[mainAxis]], mainAxisParentSize),
|
||||||
flexBasisWithMaxConstraints);
|
flexBasisWithMaxConstraints);
|
||||||
@@ -2225,15 +2258,13 @@ static void YGNodelayoutImpl(const YGNodeRef node,
|
|||||||
|
|
||||||
sizeConsumedOnCurrentLineIncludingMinConstraint +=
|
sizeConsumedOnCurrentLineIncludingMinConstraint +=
|
||||||
flexBasisWithMinAndMaxConstraints + childMarginMainAxis;
|
flexBasisWithMinAndMaxConstraints + childMarginMainAxis;
|
||||||
sizeConsumedOnCurrentLine += flexBasisWithMaxConstraints + childMarginMainAxis;
|
sizeConsumedOnCurrentLine += flexBasisWithMinAndMaxConstraints + childMarginMainAxis;
|
||||||
itemsOnLine++;
|
itemsOnLine++;
|
||||||
|
|
||||||
if (YGNodeIsFlex(child)) {
|
if (YGNodeIsFlex(child)) {
|
||||||
totalFlexGrowFactors += YGResolveFlexGrow(child);
|
totalFlexGrowFactors += YGResolveFlexGrow(child);
|
||||||
|
|
||||||
// Unlike the grow factor, the shrink factor is scaled relative to the
|
// Unlike the grow factor, the shrink factor is scaled relative to the child dimension.
|
||||||
// child
|
|
||||||
// dimension.
|
|
||||||
totalFlexShrinkScaledFactors +=
|
totalFlexShrinkScaledFactors +=
|
||||||
-YGNodeResolveFlexShrink(child) * child->layout.computedFlexBasis;
|
-YGNodeResolveFlexShrink(child) * child->layout.computedFlexBasis;
|
||||||
}
|
}
|
||||||
@@ -2250,6 +2281,16 @@ static void YGNodelayoutImpl(const YGNodeRef node,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// The total flex factor needs to be floored to 1.
|
||||||
|
if (totalFlexGrowFactors > 0 && totalFlexGrowFactors < 1) {
|
||||||
|
totalFlexGrowFactors = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// The total flex shrink factor needs to be floored to 1.
|
||||||
|
if (totalFlexShrinkScaledFactors > 0 && totalFlexShrinkScaledFactors < 1) {
|
||||||
|
totalFlexShrinkScaledFactors = 1;
|
||||||
|
}
|
||||||
|
|
||||||
// If we don't need to measure the cross axis, we can skip the entire flex
|
// If we don't need to measure the cross axis, we can skip the entire flex
|
||||||
// step.
|
// step.
|
||||||
const bool canSkipFlex = !performLayout && measureModeCrossDim == YGMeasureModeExactly;
|
const bool canSkipFlex = !performLayout && measureModeCrossDim == YGMeasureModeExactly;
|
||||||
@@ -2276,7 +2317,7 @@ static void YGNodelayoutImpl(const YGNodeRef node,
|
|||||||
if (!node->config->useLegacyStretchBehaviour &&
|
if (!node->config->useLegacyStretchBehaviour &&
|
||||||
(totalFlexGrowFactors == 0 || YGResolveFlexGrow(node) == 0)) {
|
(totalFlexGrowFactors == 0 || YGResolveFlexGrow(node) == 0)) {
|
||||||
// If we don't have any children to flex or we can't flex the node itself,
|
// If we don't have any children to flex or we can't flex the node itself,
|
||||||
// space we've used is all space we need
|
// space we've used is all space we need. Root node also should be shrunk to minimum
|
||||||
availableInnerMainDim = sizeConsumedOnCurrentLine;
|
availableInnerMainDim = sizeConsumedOnCurrentLine;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -2330,7 +2371,12 @@ static void YGNodelayoutImpl(const YGNodeRef node,
|
|||||||
float deltaFlexGrowFactors = 0;
|
float deltaFlexGrowFactors = 0;
|
||||||
currentRelativeChild = firstRelativeChild;
|
currentRelativeChild = firstRelativeChild;
|
||||||
while (currentRelativeChild != NULL) {
|
while (currentRelativeChild != NULL) {
|
||||||
childFlexBasis = currentRelativeChild->layout.computedFlexBasis;
|
childFlexBasis =
|
||||||
|
fminf(YGResolveValue(¤tRelativeChild->style.maxDimensions[dim[mainAxis]],
|
||||||
|
mainAxisParentSize),
|
||||||
|
fmaxf(YGResolveValue(¤tRelativeChild->style.minDimensions[dim[mainAxis]],
|
||||||
|
mainAxisParentSize),
|
||||||
|
currentRelativeChild->layout.computedFlexBasis));
|
||||||
|
|
||||||
if (remainingFreeSpace < 0) {
|
if (remainingFreeSpace < 0) {
|
||||||
flexShrinkScaledFactor = -YGNodeResolveFlexShrink(currentRelativeChild) * childFlexBasis;
|
flexShrinkScaledFactor = -YGNodeResolveFlexShrink(currentRelativeChild) * childFlexBasis;
|
||||||
@@ -2368,6 +2414,7 @@ static void YGNodelayoutImpl(const YGNodeRef node,
|
|||||||
baseMainSize,
|
baseMainSize,
|
||||||
availableInnerMainDim,
|
availableInnerMainDim,
|
||||||
availableInnerWidth);
|
availableInnerWidth);
|
||||||
|
|
||||||
if (baseMainSize != boundMainSize) {
|
if (baseMainSize != boundMainSize) {
|
||||||
// By excluding this item's size and flex factor from remaining,
|
// By excluding this item's size and flex factor from remaining,
|
||||||
// this item's
|
// this item's
|
||||||
@@ -2392,7 +2439,12 @@ static void YGNodelayoutImpl(const YGNodeRef node,
|
|||||||
deltaFreeSpace = 0;
|
deltaFreeSpace = 0;
|
||||||
currentRelativeChild = firstRelativeChild;
|
currentRelativeChild = firstRelativeChild;
|
||||||
while (currentRelativeChild != NULL) {
|
while (currentRelativeChild != NULL) {
|
||||||
childFlexBasis = currentRelativeChild->layout.computedFlexBasis;
|
childFlexBasis =
|
||||||
|
fminf(YGResolveValue(¤tRelativeChild->style.maxDimensions[dim[mainAxis]],
|
||||||
|
mainAxisParentSize),
|
||||||
|
fmaxf(YGResolveValue(¤tRelativeChild->style.minDimensions[dim[mainAxis]],
|
||||||
|
mainAxisParentSize),
|
||||||
|
currentRelativeChild->layout.computedFlexBasis));
|
||||||
float updatedMainSize = childFlexBasis;
|
float updatedMainSize = childFlexBasis;
|
||||||
|
|
||||||
if (remainingFreeSpace < 0) {
|
if (remainingFreeSpace < 0) {
|
||||||
@@ -2525,12 +2577,14 @@ static void YGNodelayoutImpl(const YGNodeRef node,
|
|||||||
performLayout && !requiresStretchLayout,
|
performLayout && !requiresStretchLayout,
|
||||||
"flex",
|
"flex",
|
||||||
config);
|
config);
|
||||||
|
node->layout.hadOverflow = node->layout.hadOverflow || currentRelativeChild->layout.hadOverflow;
|
||||||
|
|
||||||
currentRelativeChild = currentRelativeChild->nextChild;
|
currentRelativeChild = currentRelativeChild->nextChild;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
remainingFreeSpace = originalRemainingFreeSpace + deltaFreeSpace;
|
remainingFreeSpace = originalRemainingFreeSpace + deltaFreeSpace;
|
||||||
|
node->layout.hadOverflow = node->layout.hadOverflow || (remainingFreeSpace < 0);
|
||||||
|
|
||||||
// STEP 6: MAIN-AXIS JUSTIFICATION & CROSS-AXIS SIZE DETERMINATION
|
// STEP 6: MAIN-AXIS JUSTIFICATION & CROSS-AXIS SIZE DETERMINATION
|
||||||
|
|
||||||
@@ -2909,7 +2963,7 @@ static void YGNodelayoutImpl(const YGNodeRef node,
|
|||||||
if (!YGNodeIsStyleDimDefined(child, crossAxis, availableInnerCrossDim)) {
|
if (!YGNodeIsStyleDimDefined(child, crossAxis, availableInnerCrossDim)) {
|
||||||
const float childWidth =
|
const float childWidth =
|
||||||
isMainAxisRow ? (child->layout.measuredDimensions[YGDimensionWidth] +
|
isMainAxisRow ? (child->layout.measuredDimensions[YGDimensionWidth] +
|
||||||
YGNodeMarginForAxis(child, crossAxis, availableInnerWidth))
|
YGNodeMarginForAxis(child, mainAxis, availableInnerWidth))
|
||||||
: lineHeight;
|
: lineHeight;
|
||||||
|
|
||||||
const float childHeight =
|
const float childHeight =
|
||||||
@@ -3101,6 +3155,25 @@ static inline bool YGMeasureModeNewMeasureSizeIsStricterAndStillValid(YGMeasureM
|
|||||||
lastSize > size && (lastComputedSize <= size || YGFloatsEqual(size, lastComputedSize));
|
lastSize > size && (lastComputedSize <= size || YGFloatsEqual(size, lastComputedSize));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static float YGRoundValueToPixelGrid(const float value,
|
||||||
|
const float pointScaleFactor,
|
||||||
|
const bool forceCeil,
|
||||||
|
const bool forceFloor) {
|
||||||
|
float scaledValue = value * pointScaleFactor;
|
||||||
|
float fractial = fmodf(scaledValue, 1.0);
|
||||||
|
if (YGFloatsEqual(fractial, 0)) {
|
||||||
|
// Still remove fractial as fractial could be extremely small.
|
||||||
|
scaledValue = scaledValue - fractial;
|
||||||
|
} else if (forceCeil) {
|
||||||
|
scaledValue = scaledValue - fractial + 1.0;
|
||||||
|
} else if (forceFloor) {
|
||||||
|
scaledValue = scaledValue - fractial;
|
||||||
|
} else {
|
||||||
|
scaledValue = scaledValue - fractial + (fractial >= 0.5f ? 1.0 : 0);
|
||||||
|
}
|
||||||
|
return scaledValue / pointScaleFactor;
|
||||||
|
}
|
||||||
|
|
||||||
bool YGNodeCanUseCachedMeasurement(const YGMeasureMode widthMode,
|
bool YGNodeCanUseCachedMeasurement(const YGMeasureMode widthMode,
|
||||||
const float width,
|
const float width,
|
||||||
const YGMeasureMode heightMode,
|
const YGMeasureMode heightMode,
|
||||||
@@ -3112,13 +3185,19 @@ bool YGNodeCanUseCachedMeasurement(const YGMeasureMode widthMode,
|
|||||||
const float lastComputedWidth,
|
const float lastComputedWidth,
|
||||||
const float lastComputedHeight,
|
const float lastComputedHeight,
|
||||||
const float marginRow,
|
const float marginRow,
|
||||||
const float marginColumn) {
|
const float marginColumn,
|
||||||
|
const YGConfigRef config) {
|
||||||
if (lastComputedHeight < 0 || lastComputedWidth < 0) {
|
if (lastComputedHeight < 0 || lastComputedWidth < 0) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
bool useRoundedComparison = config != NULL && config->pointScaleFactor != 0;
|
||||||
|
const float effectiveWidth = useRoundedComparison ? YGRoundValueToPixelGrid(width, config->pointScaleFactor, false, false) : width;
|
||||||
|
const float effectiveHeight = useRoundedComparison ? YGRoundValueToPixelGrid(height, config->pointScaleFactor, false, false) : height;
|
||||||
|
const float effectiveLastWidth = useRoundedComparison ? YGRoundValueToPixelGrid(lastWidth, config->pointScaleFactor, false, false) : lastWidth;
|
||||||
|
const float effectiveLastHeight = useRoundedComparison ? YGRoundValueToPixelGrid(lastHeight, config->pointScaleFactor, false, false) : lastHeight;
|
||||||
|
|
||||||
const bool hasSameWidthSpec = lastWidthMode == widthMode && YGFloatsEqual(lastWidth, width);
|
const bool hasSameWidthSpec = lastWidthMode == widthMode && YGFloatsEqual(effectiveLastWidth, effectiveWidth);
|
||||||
const bool hasSameHeightSpec = lastHeightMode == heightMode && YGFloatsEqual(lastHeight, height);
|
const bool hasSameHeightSpec = lastHeightMode == heightMode && YGFloatsEqual(effectiveLastHeight, effectiveHeight);
|
||||||
|
|
||||||
const bool widthIsCompatible =
|
const bool widthIsCompatible =
|
||||||
hasSameWidthSpec || YGMeasureModeSizeIsExactAndMatchesOldMeasuredSize(widthMode,
|
hasSameWidthSpec || YGMeasureModeSizeIsExactAndMatchesOldMeasuredSize(widthMode,
|
||||||
@@ -3211,7 +3290,8 @@ bool YGLayoutNodeInternal(const YGNodeRef node,
|
|||||||
layout->cachedLayout.computedWidth,
|
layout->cachedLayout.computedWidth,
|
||||||
layout->cachedLayout.computedHeight,
|
layout->cachedLayout.computedHeight,
|
||||||
marginAxisRow,
|
marginAxisRow,
|
||||||
marginAxisColumn)) {
|
marginAxisColumn,
|
||||||
|
config)) {
|
||||||
cachedResults = &layout->cachedLayout;
|
cachedResults = &layout->cachedLayout;
|
||||||
} else {
|
} else {
|
||||||
// Try to use the measurement cache.
|
// Try to use the measurement cache.
|
||||||
@@ -3227,7 +3307,8 @@ bool YGLayoutNodeInternal(const YGNodeRef node,
|
|||||||
layout->cachedMeasurements[i].computedWidth,
|
layout->cachedMeasurements[i].computedWidth,
|
||||||
layout->cachedMeasurements[i].computedHeight,
|
layout->cachedMeasurements[i].computedHeight,
|
||||||
marginAxisRow,
|
marginAxisRow,
|
||||||
marginAxisColumn)) {
|
marginAxisColumn,
|
||||||
|
config)) {
|
||||||
cachedResults = &layout->cachedMeasurements[i];
|
cachedResults = &layout->cachedMeasurements[i];
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -3357,26 +3438,7 @@ void YGConfigSetPointScaleFactor(const YGConfigRef config, const float pixelsInP
|
|||||||
// Zero is used to skip rounding
|
// Zero is used to skip rounding
|
||||||
config->pointScaleFactor = 0.0f;
|
config->pointScaleFactor = 0.0f;
|
||||||
} else {
|
} else {
|
||||||
config->pointScaleFactor = 1.0f / pixelsInPoint;
|
config->pointScaleFactor = pixelsInPoint;
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static float YGRoundValueToPixelGrid(const float value,
|
|
||||||
const float pointScaleFactor,
|
|
||||||
const bool forceCeil,
|
|
||||||
const bool forceFloor) {
|
|
||||||
float fractial = fmodf(value, pointScaleFactor);
|
|
||||||
if (YGFloatsEqual(fractial, 0)) {
|
|
||||||
// Still remove fractial as fractial could be extremely small.
|
|
||||||
return value - fractial;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (forceCeil) {
|
|
||||||
return value - fractial + pointScaleFactor;
|
|
||||||
} else if (forceFloor) {
|
|
||||||
return value - fractial;
|
|
||||||
} else {
|
|
||||||
return value - fractial + (fractial >= pointScaleFactor / 2.0f ? pointScaleFactor : 0);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -3402,19 +3464,30 @@ static void YGRoundToPixelGrid(const YGNodeRef node,
|
|||||||
|
|
||||||
// If a node has a custom measure function we never want to round down its size as this could
|
// If a node has a custom measure function we never want to round down its size as this could
|
||||||
// lead to unwanted text truncation.
|
// lead to unwanted text truncation.
|
||||||
const bool hasMeasure = node->measure != NULL;
|
const bool textRounding = node->nodeType == YGNodeTypeText;
|
||||||
|
|
||||||
node->layout.position[YGEdgeLeft] =
|
node->layout.position[YGEdgeLeft] =
|
||||||
YGRoundValueToPixelGrid(nodeLeft, pointScaleFactor, false, hasMeasure);
|
YGRoundValueToPixelGrid(nodeLeft, pointScaleFactor, false, textRounding);
|
||||||
node->layout.position[YGEdgeTop] =
|
node->layout.position[YGEdgeTop] =
|
||||||
YGRoundValueToPixelGrid(nodeTop, pointScaleFactor, false, hasMeasure);
|
YGRoundValueToPixelGrid(nodeTop, pointScaleFactor, false, textRounding);
|
||||||
|
|
||||||
|
const bool hasFractionalWidth = !YGFloatsEqual(fmodf(nodeWidth, 1 / pointScaleFactor), 0);
|
||||||
|
const bool hasFractionalHeight = !YGFloatsEqual(fmodf(nodeHeight, 1 / pointScaleFactor), 0);
|
||||||
|
|
||||||
node->layout.dimensions[YGDimensionWidth] =
|
node->layout.dimensions[YGDimensionWidth] =
|
||||||
YGRoundValueToPixelGrid(absoluteNodeRight, pointScaleFactor, hasMeasure, false) -
|
YGRoundValueToPixelGrid(
|
||||||
YGRoundValueToPixelGrid(absoluteNodeLeft, pointScaleFactor, false, hasMeasure);
|
absoluteNodeRight,
|
||||||
|
pointScaleFactor,
|
||||||
|
(textRounding && hasFractionalWidth),
|
||||||
|
(textRounding && !hasFractionalWidth)) -
|
||||||
|
YGRoundValueToPixelGrid(absoluteNodeLeft, pointScaleFactor, false, textRounding);
|
||||||
node->layout.dimensions[YGDimensionHeight] =
|
node->layout.dimensions[YGDimensionHeight] =
|
||||||
YGRoundValueToPixelGrid(absoluteNodeBottom, pointScaleFactor, hasMeasure, false) -
|
YGRoundValueToPixelGrid(
|
||||||
YGRoundValueToPixelGrid(absoluteNodeTop, pointScaleFactor, false, hasMeasure);
|
absoluteNodeBottom,
|
||||||
|
pointScaleFactor,
|
||||||
|
(textRounding && hasFractionalHeight),
|
||||||
|
(textRounding && !hasFractionalHeight)) -
|
||||||
|
YGRoundValueToPixelGrid(absoluteNodeTop, pointScaleFactor, false, textRounding);
|
||||||
|
|
||||||
const uint32_t childCount = YGNodeListCount(node->children);
|
const uint32_t childCount = YGNodeListCount(node->children);
|
||||||
for (uint32_t i = 0; i < childCount; i++) {
|
for (uint32_t i = 0; i < childCount; i++) {
|
||||||
|
@@ -111,7 +111,8 @@ WIN_EXPORT bool YGNodeCanUseCachedMeasurement(const YGMeasureMode widthMode,
|
|||||||
const float lastComputedWidth,
|
const float lastComputedWidth,
|
||||||
const float lastComputedHeight,
|
const float lastComputedHeight,
|
||||||
const float marginRow,
|
const float marginRow,
|
||||||
const float marginColumn);
|
const float marginColumn,
|
||||||
|
YGConfigRef config);
|
||||||
|
|
||||||
WIN_EXPORT void YGNodeCopyStyle(const YGNodeRef dstNode, const YGNodeRef srcNode);
|
WIN_EXPORT void YGNodeCopyStyle(const YGNodeRef dstNode, const YGNodeRef srcNode);
|
||||||
|
|
||||||
@@ -161,6 +162,7 @@ YG_NODE_PROPERTY(YGMeasureFunc, MeasureFunc, measureFunc);
|
|||||||
YG_NODE_PROPERTY(YGBaselineFunc, BaselineFunc, baselineFunc)
|
YG_NODE_PROPERTY(YGBaselineFunc, BaselineFunc, baselineFunc)
|
||||||
YG_NODE_PROPERTY(YGPrintFunc, PrintFunc, printFunc);
|
YG_NODE_PROPERTY(YGPrintFunc, PrintFunc, printFunc);
|
||||||
YG_NODE_PROPERTY(bool, HasNewLayout, hasNewLayout);
|
YG_NODE_PROPERTY(bool, HasNewLayout, hasNewLayout);
|
||||||
|
YG_NODE_PROPERTY(YGNodeType, NodeType, nodeType);
|
||||||
|
|
||||||
YG_NODE_STYLE_PROPERTY(YGDirection, Direction, direction);
|
YG_NODE_STYLE_PROPERTY(YGDirection, Direction, direction);
|
||||||
YG_NODE_STYLE_PROPERTY(YGFlexDirection, FlexDirection, flexDirection);
|
YG_NODE_STYLE_PROPERTY(YGFlexDirection, FlexDirection, flexDirection);
|
||||||
@@ -213,6 +215,7 @@ YG_NODE_LAYOUT_PROPERTY(float, Bottom);
|
|||||||
YG_NODE_LAYOUT_PROPERTY(float, Width);
|
YG_NODE_LAYOUT_PROPERTY(float, Width);
|
||||||
YG_NODE_LAYOUT_PROPERTY(float, Height);
|
YG_NODE_LAYOUT_PROPERTY(float, Height);
|
||||||
YG_NODE_LAYOUT_PROPERTY(YGDirection, Direction);
|
YG_NODE_LAYOUT_PROPERTY(YGDirection, Direction);
|
||||||
|
YG_NODE_LAYOUT_PROPERTY(bool, HadOverflow);
|
||||||
|
|
||||||
// Get the computed values for these nodes after performing layout. If they were set using
|
// Get the computed values for these nodes after performing layout. If they were set using
|
||||||
// point values then the returned value will be the same as YGNodeStyleGetXXX. However if
|
// point values then the returned value will be the same as YGNodeStyleGetXXX. However if
|
||||||
|
Reference in New Issue
Block a user