Compare commits
1 Commits
v1.19.0
...
woehrl01/f
Author | SHA1 | Date | |
---|---|---|---|
|
999bd723d8 |
16
.github/workflows/ci.yml
vendored
16
.github/workflows/ci.yml
vendored
@@ -32,12 +32,6 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v2
|
||||||
- name: set up JDK 1.8
|
|
||||||
uses: actions/setup-java@v1
|
|
||||||
with:
|
|
||||||
java-version: 1.8
|
|
||||||
- name: Install NDK 21
|
|
||||||
run: echo "y" | sudo /usr/local/lib/android/sdk/tools/bin/sdkmanager --install "ndk;21.0.6113669" "ndk;20.0.5594570" --sdk_root=${ANDROID_SDK_ROOT}
|
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
run: |
|
run: |
|
||||||
if [[ -n "${{ secrets.encrypted_d27e803291ff_iv }}" ]]; then
|
if [[ -n "${{ secrets.encrypted_d27e803291ff_iv }}" ]]; then
|
||||||
@@ -50,9 +44,13 @@ jobs:
|
|||||||
cd buck
|
cd buck
|
||||||
ant
|
ant
|
||||||
popd
|
popd
|
||||||
echo "$HOME/buck/bin" >> $GITHUB_PATH
|
echo "::set-env name=PATH::$PATH:$HOME/buck/bin/"
|
||||||
export PATH=$PATH:$HOME/buck/bin/
|
export PATH=$PATH:$HOME/buck/bin/
|
||||||
buck --version
|
buck --version
|
||||||
|
export TERMINAL=dumb
|
||||||
|
source scripts/android-setup.sh && installAndroidSDK
|
||||||
|
echo "::set-env name=ANDROID_SDK::$ANDROID_HOME"
|
||||||
|
echo "::set-env name=ANDROID_NDK_REPOSITORY::$HOME/android-ndk"
|
||||||
|
echo "::set-env name=ANDROID_NDK_HOME::$ANDROID_NDK_REPOSITORY/android-ndk-r15c"
|
||||||
- name: Build
|
- name: Build
|
||||||
# TODO: Run the tests here again. They're currently crashing the JVM in GitHub Actions for some reason.
|
run: ./gradlew testDebugUnit && scripts/publish-snapshot.sh
|
||||||
run: ./gradlew :yoga-layout:assembleDebug && scripts/publish-snapshot.sh
|
|
||||||
|
32
.github/workflows/release.yml
vendored
32
.github/workflows/release.yml
vendored
@@ -1,32 +0,0 @@
|
|||||||
name: Publish
|
|
||||||
|
|
||||||
on:
|
|
||||||
release:
|
|
||||||
types:
|
|
||||||
- created
|
|
||||||
workflow_dispatch:
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
build:
|
|
||||||
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v1
|
|
||||||
- name: set up JDK 1.8
|
|
||||||
uses: actions/setup-java@v1
|
|
||||||
with:
|
|
||||||
java-version: 1.8
|
|
||||||
- name: Install dependencies
|
|
||||||
run: source scripts/android-setup.sh && installAndroidSDK
|
|
||||||
- name: Write GPG Sec Ring
|
|
||||||
run: echo '${{ secrets.GPG_KEY_CONTENTS }}' | base64 -d > /tmp/secring.gpg
|
|
||||||
- name: Update gradle.properties
|
|
||||||
run: echo -e "signing.secretKeyRingFile=/tmp/secring.gpg\nsigning.keyId=${{ secrets.SIGNING_KEY_ID }}\nsigning.password=${{ secrets.SIGNING_PASSWORD }}\nmavenCentralPassword=${{ secrets.SONATYPE_NEXUS_PASSWORD }}\nmavenCentralUsername=${{ secrets.SONATYPE_NEXUS_USERNAME }}" >> gradle.properties
|
|
||||||
- name: Upload Android Archives
|
|
||||||
run: ./gradlew :yoga:assembleRelease publish --info
|
|
||||||
- name: Release and close
|
|
||||||
run: ./gradlew closeAndReleaseRepository
|
|
||||||
- name: Clean secrets
|
|
||||||
if: always()
|
|
||||||
run: rm /tmp/secring.gpg
|
|
3
.gitignore
vendored
3
.gitignore
vendored
@@ -6,9 +6,6 @@
|
|||||||
/.buckd
|
/.buckd
|
||||||
/gentest/test.html
|
/gentest/test.html
|
||||||
.buckversion
|
.buckversion
|
||||||
.cxx
|
|
||||||
.idea
|
|
||||||
/local.properties
|
|
||||||
|
|
||||||
# Jekyll
|
# Jekyll
|
||||||
/.sass-cache/
|
/.sass-cache/
|
||||||
|
26
README.md
26
README.md
@@ -46,29 +46,3 @@ This will now only run the standalone webpack build upon install.
|
|||||||
| node | Builds node js version. |
|
| node | Builds node js version. |
|
||||||
| standalone | Runs webpack. |
|
| standalone | Runs webpack. |
|
||||||
| none | Does nothing. You can use the prepackaged libs. |
|
| none | Does nothing. You can use the prepackaged libs. |
|
||||||
|
|
||||||
## Maintainer Release Guide
|
|
||||||
|
|
||||||
To publish a new release, follow these steps:
|
|
||||||
|
|
||||||
1. Ensure you have your GPG key set up and your [OSS Sonatype](https://oss.sonatype.org/) credentials handy.
|
|
||||||
2. Add the follow entries to either your local `gradle.properties` (don't forget to revert) or your global `~/.gradle/gradle.properties`:
|
|
||||||
|
|
||||||
```
|
|
||||||
# You get these from https://oss.sonatype.org/#profile;User%20Token
|
|
||||||
mavenCentralRepositoryUsername=<username>
|
|
||||||
mavenCentralRepositoryPassword=<password>
|
|
||||||
|
|
||||||
# You can get the keyId (in GPG 1.4 format) by running `gpg1 --list-keys`.
|
|
||||||
signing.secretKeyRingFile=</path/to/secring.gpg>
|
|
||||||
signing.keyId=<key_id>
|
|
||||||
signing.password=<key_password>
|
|
||||||
```
|
|
||||||
|
|
||||||
3. Change the `VERSION_NAME` in `gradle.properties` to a non-SNAPSHOT release.
|
|
||||||
4. Commit and land the version change.
|
|
||||||
5. Run `./gradlew publishToMaven`.
|
|
||||||
6. Run `./gradlew closeAndReleaseRepository`.
|
|
||||||
7. Change the `VERSION_NAME` in `gradle.properties` back to a new SNAPSHOT release.
|
|
||||||
8. Commit and land the version change.
|
|
||||||
9. Celebrate! You've made a release!
|
|
||||||
|
@@ -191,6 +191,7 @@
|
|||||||
27595AD71E575C7800CCE2B1 /* SampleCxxModule.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D92B0D41E03699D0018521A /* SampleCxxModule.h */; };
|
27595AD71E575C7800CCE2B1 /* SampleCxxModule.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D92B0D41E03699D0018521A /* SampleCxxModule.h */; };
|
||||||
27595AD81E575C7800CCE2B1 /* SystraceSection.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D92B0D51E03699D0018521A /* SystraceSection.h */; };
|
27595AD81E575C7800CCE2B1 /* SystraceSection.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D92B0D51E03699D0018521A /* SystraceSection.h */; };
|
||||||
2D0EB9F32021067800CAF88A /* RCTUIUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = F1EFDA4E201F660F00EE6E4C /* RCTUIUtils.m */; };
|
2D0EB9F32021067800CAF88A /* RCTUIUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = F1EFDA4E201F660F00EE6E4C /* RCTUIUtils.m */; };
|
||||||
|
2D16E68E1FA4FD3900B85C8A /* RCTTVNavigationEventEmitter.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 3D0B842D1EC0B51200B2BD8E /* RCTTVNavigationEventEmitter.h */; };
|
||||||
2D1D83CE1F74E2DA00615550 /* libdouble-conversion.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3D383D621EBD27B9005632C8 /* libdouble-conversion.a */; };
|
2D1D83CE1F74E2DA00615550 /* libdouble-conversion.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3D383D621EBD27B9005632C8 /* libdouble-conversion.a */; };
|
||||||
2D3B5E931D9B087300451313 /* RCTErrorInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 3EDCA8A41D3591E700450C31 /* RCTErrorInfo.m */; };
|
2D3B5E931D9B087300451313 /* RCTErrorInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 3EDCA8A41D3591E700450C31 /* RCTErrorInfo.m */; };
|
||||||
2D3B5E941D9B087900451313 /* RCTBundleURLProvider.m in Sources */ = {isa = PBXBuildFile; fileRef = 68EFE4ED1CF6EB3900A1DE13 /* RCTBundleURLProvider.m */; };
|
2D3B5E941D9B087900451313 /* RCTBundleURLProvider.m in Sources */ = {isa = PBXBuildFile; fileRef = 68EFE4ED1CF6EB3900A1DE13 /* RCTBundleURLProvider.m */; };
|
||||||
@@ -268,6 +269,8 @@
|
|||||||
3D0B842A1EC0B49400B2BD8E /* RCTTVRemoteHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D0B84281EC0B49400B2BD8E /* RCTTVRemoteHandler.h */; };
|
3D0B842A1EC0B49400B2BD8E /* RCTTVRemoteHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D0B84281EC0B49400B2BD8E /* RCTTVRemoteHandler.h */; };
|
||||||
3D0B842B1EC0B49400B2BD8E /* RCTTVRemoteHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D0B84291EC0B49400B2BD8E /* RCTTVRemoteHandler.m */; };
|
3D0B842B1EC0B49400B2BD8E /* RCTTVRemoteHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D0B84291EC0B49400B2BD8E /* RCTTVRemoteHandler.m */; };
|
||||||
3D0B842C1EC0B4EA00B2BD8E /* RCTTVView.m in Sources */ = {isa = PBXBuildFile; fileRef = 130443D71E401AD800D93A67 /* RCTTVView.m */; };
|
3D0B842C1EC0B4EA00B2BD8E /* RCTTVView.m in Sources */ = {isa = PBXBuildFile; fileRef = 130443D71E401AD800D93A67 /* RCTTVView.m */; };
|
||||||
|
3D0B842F1EC0B51200B2BD8E /* RCTTVNavigationEventEmitter.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D0B842D1EC0B51200B2BD8E /* RCTTVNavigationEventEmitter.h */; };
|
||||||
|
3D0B84301EC0B51200B2BD8E /* RCTTVNavigationEventEmitter.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D0B842E1EC0B51200B2BD8E /* RCTTVNavigationEventEmitter.m */; };
|
||||||
3D0E378A1F1CC40000DCAC9F /* RCTWebSocketModule.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D0E37891F1CC40000DCAC9F /* RCTWebSocketModule.h */; };
|
3D0E378A1F1CC40000DCAC9F /* RCTWebSocketModule.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D0E37891F1CC40000DCAC9F /* RCTWebSocketModule.h */; };
|
||||||
3D0E378E1F1CC59100DCAC9F /* RCTWebSocketModule.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D0E37891F1CC40000DCAC9F /* RCTWebSocketModule.h */; };
|
3D0E378E1F1CC59100DCAC9F /* RCTWebSocketModule.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D0E37891F1CC40000DCAC9F /* RCTWebSocketModule.h */; };
|
||||||
3D0E378F1F1CC5CF00DCAC9F /* RCTWebSocketModule.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 3D0E37891F1CC40000DCAC9F /* RCTWebSocketModule.h */; };
|
3D0E378F1F1CC5CF00DCAC9F /* RCTWebSocketModule.h in Copy Headers */ = {isa = PBXBuildFile; fileRef = 3D0E37891F1CC40000DCAC9F /* RCTWebSocketModule.h */; };
|
||||||
@@ -1272,6 +1275,7 @@
|
|||||||
594F0A471FD233BD007FBE96 /* RCTSurfaceView.h in Copy Headers */,
|
594F0A471FD233BD007FBE96 /* RCTSurfaceView.h in Copy Headers */,
|
||||||
594F0A481FD233BD007FBE96 /* RCTSurfaceHostingView.h in Copy Headers */,
|
594F0A481FD233BD007FBE96 /* RCTSurfaceHostingView.h in Copy Headers */,
|
||||||
594F0A491FD233BD007FBE96 /* RCTSurfaceSizeMeasureMode.h in Copy Headers */,
|
594F0A491FD233BD007FBE96 /* RCTSurfaceSizeMeasureMode.h in Copy Headers */,
|
||||||
|
2D16E68E1FA4FD3900B85C8A /* RCTTVNavigationEventEmitter.h in Copy Headers */,
|
||||||
59500D481F71C67600B122B7 /* RCTUIManagerUtils.h in Copy Headers */,
|
59500D481F71C67600B122B7 /* RCTUIManagerUtils.h in Copy Headers */,
|
||||||
3D0E37901F1CC5E100DCAC9F /* RCTWebSocketModule.h in Copy Headers */,
|
3D0E37901F1CC5E100DCAC9F /* RCTWebSocketModule.h in Copy Headers */,
|
||||||
5960C1BF1F0804F50066FD5B /* RCTLayoutAnimation.h in Copy Headers */,
|
5960C1BF1F0804F50066FD5B /* RCTLayoutAnimation.h in Copy Headers */,
|
||||||
@@ -1872,6 +1876,8 @@
|
|||||||
39C50FFA2046EE3500CEE534 /* RCTVersion.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RCTVersion.m; sourceTree = "<group>"; };
|
39C50FFA2046EE3500CEE534 /* RCTVersion.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RCTVersion.m; sourceTree = "<group>"; };
|
||||||
3D0B84281EC0B49400B2BD8E /* RCTTVRemoteHandler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTTVRemoteHandler.h; sourceTree = "<group>"; };
|
3D0B84281EC0B49400B2BD8E /* RCTTVRemoteHandler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTTVRemoteHandler.h; sourceTree = "<group>"; };
|
||||||
3D0B84291EC0B49400B2BD8E /* RCTTVRemoteHandler.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RCTTVRemoteHandler.m; sourceTree = "<group>"; };
|
3D0B84291EC0B49400B2BD8E /* RCTTVRemoteHandler.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RCTTVRemoteHandler.m; sourceTree = "<group>"; };
|
||||||
|
3D0B842D1EC0B51200B2BD8E /* RCTTVNavigationEventEmitter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTTVNavigationEventEmitter.h; sourceTree = "<group>"; };
|
||||||
|
3D0B842E1EC0B51200B2BD8E /* RCTTVNavigationEventEmitter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RCTTVNavigationEventEmitter.m; sourceTree = "<group>"; };
|
||||||
3D0E37891F1CC40000DCAC9F /* RCTWebSocketModule.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = RCTWebSocketModule.h; path = WebSocket/RCTWebSocketModule.h; sourceTree = "<group>"; };
|
3D0E37891F1CC40000DCAC9F /* RCTWebSocketModule.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = RCTWebSocketModule.h; path = WebSocket/RCTWebSocketModule.h; sourceTree = "<group>"; };
|
||||||
3D1E68D81CABD13900DD7465 /* RCTDisplayLink.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTDisplayLink.h; sourceTree = "<group>"; };
|
3D1E68D81CABD13900DD7465 /* RCTDisplayLink.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTDisplayLink.h; sourceTree = "<group>"; };
|
||||||
3D1E68D91CABD13900DD7465 /* RCTDisplayLink.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RCTDisplayLink.m; sourceTree = "<group>"; };
|
3D1E68D91CABD13900DD7465 /* RCTDisplayLink.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RCTDisplayLink.m; sourceTree = "<group>"; };
|
||||||
@@ -2340,6 +2346,8 @@
|
|||||||
0EEEA8DE2239002200A8C82D /* RCTSurfacePresenterStub.m */,
|
0EEEA8DE2239002200A8C82D /* RCTSurfacePresenterStub.m */,
|
||||||
13B07FED1A69327A00A75B9A /* RCTTiming.h */,
|
13B07FED1A69327A00A75B9A /* RCTTiming.h */,
|
||||||
13B07FEE1A69327A00A75B9A /* RCTTiming.m */,
|
13B07FEE1A69327A00A75B9A /* RCTTiming.m */,
|
||||||
|
3D0B842D1EC0B51200B2BD8E /* RCTTVNavigationEventEmitter.h */,
|
||||||
|
3D0B842E1EC0B51200B2BD8E /* RCTTVNavigationEventEmitter.m */,
|
||||||
13E067481A70F434002CDEE1 /* RCTUIManager.h */,
|
13E067481A70F434002CDEE1 /* RCTUIManager.h */,
|
||||||
13E067491A70F434002CDEE1 /* RCTUIManager.m */,
|
13E067491A70F434002CDEE1 /* RCTUIManager.m */,
|
||||||
59EB6DB91EBD6FC90072A5E7 /* RCTUIManagerObserverCoordinator.h */,
|
59EB6DB91EBD6FC90072A5E7 /* RCTUIManagerObserverCoordinator.h */,
|
||||||
@@ -2937,6 +2945,7 @@
|
|||||||
3D302F311DF828F800D6DDAE /* RCTBundleURLProvider.h in Headers */,
|
3D302F311DF828F800D6DDAE /* RCTBundleURLProvider.h in Headers */,
|
||||||
3D302F321DF828F800D6DDAE /* RCTConvert.h in Headers */,
|
3D302F321DF828F800D6DDAE /* RCTConvert.h in Headers */,
|
||||||
3D302F331DF828F800D6DDAE /* RCTDefines.h in Headers */,
|
3D302F331DF828F800D6DDAE /* RCTDefines.h in Headers */,
|
||||||
|
3D0B842F1EC0B51200B2BD8E /* RCTTVNavigationEventEmitter.h in Headers */,
|
||||||
3D302F341DF828F800D6DDAE /* RCTDisplayLink.h in Headers */,
|
3D302F341DF828F800D6DDAE /* RCTDisplayLink.h in Headers */,
|
||||||
3D302F351DF828F800D6DDAE /* RCTErrorCustomizer.h in Headers */,
|
3D302F351DF828F800D6DDAE /* RCTErrorCustomizer.h in Headers */,
|
||||||
3D302F361DF828F800D6DDAE /* RCTErrorInfo.h in Headers */,
|
3D302F361DF828F800D6DDAE /* RCTErrorInfo.h in Headers */,
|
||||||
@@ -3985,6 +3994,7 @@
|
|||||||
2D3B5EC81D9B095800451313 /* RCTActivityIndicatorViewManager.m in Sources */,
|
2D3B5EC81D9B095800451313 /* RCTActivityIndicatorViewManager.m in Sources */,
|
||||||
3DCD185D1DF978E7007FE5A1 /* RCTReloadCommand.m in Sources */,
|
3DCD185D1DF978E7007FE5A1 /* RCTReloadCommand.m in Sources */,
|
||||||
130443DB1E401ADD00D93A67 /* RCTConvert+Transform.m in Sources */,
|
130443DB1E401ADD00D93A67 /* RCTConvert+Transform.m in Sources */,
|
||||||
|
3D0B84301EC0B51200B2BD8E /* RCTTVNavigationEventEmitter.m in Sources */,
|
||||||
2D3B5EC61D9B095000451313 /* RCTProfileTrampoline-x86_64.S in Sources */,
|
2D3B5EC61D9B095000451313 /* RCTProfileTrampoline-x86_64.S in Sources */,
|
||||||
2D3B5EA61D9B08CA00451313 /* RCTTouchEvent.m in Sources */,
|
2D3B5EA61D9B08CA00451313 /* RCTTouchEvent.m in Sources */,
|
||||||
2D8C2E331DA40441000EE098 /* RCTMultipartStreamReader.m in Sources */,
|
2D8C2E331DA40441000EE098 /* RCTMultipartStreamReader.m in Sources */,
|
||||||
|
@@ -28,19 +28,17 @@
|
|||||||
|
|
||||||
UIView* child2 = [UIView new];
|
UIView* child2 = [UIView new];
|
||||||
child2.backgroundColor = [UIColor greenColor];
|
child2.backgroundColor = [UIColor greenColor];
|
||||||
child2.frame = (CGRect){
|
child2.frame = (CGRect){.size = {
|
||||||
.size = {
|
.width = 200,
|
||||||
.width = 200,
|
.height = 100,
|
||||||
.height = 100,
|
}};
|
||||||
}};
|
|
||||||
|
|
||||||
UIView* child3 = [UIView new];
|
UIView* child3 = [UIView new];
|
||||||
child3.backgroundColor = [UIColor yellowColor];
|
child3.backgroundColor = [UIColor yellowColor];
|
||||||
child3.frame = (CGRect){
|
child3.frame = (CGRect){.size = {
|
||||||
.size = {
|
.width = 100,
|
||||||
.width = 100,
|
.height = 100,
|
||||||
.height = 100,
|
}};
|
||||||
}};
|
|
||||||
|
|
||||||
[child2 addSubview:child3];
|
[child2 addSubview:child3];
|
||||||
[root addSubview:child1];
|
[root addSubview:child1];
|
||||||
|
@@ -5,12 +5,17 @@
|
|||||||
* LICENSE file in the root directory of this source tree.
|
* LICENSE file in the root directory of this source tree.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
apply plugin: 'com.jfrog.bintray'
|
||||||
apply plugin: 'com.android.library'
|
apply plugin: 'com.android.library'
|
||||||
|
apply plugin: 'com.github.dcendents.android-maven'
|
||||||
|
apply plugin: 'maven-publish'
|
||||||
|
|
||||||
|
version = VERSION_NAME
|
||||||
|
group = GROUP
|
||||||
|
|
||||||
android {
|
android {
|
||||||
compileSdkVersion rootProject.compileSdkVersion
|
compileSdkVersion rootProject.compileSdkVersion
|
||||||
buildToolsVersion rootProject.buildToolsVersion
|
buildToolsVersion rootProject.buildToolsVersion
|
||||||
ndkVersion rootProject.ndkVersion
|
|
||||||
|
|
||||||
defaultConfig {
|
defaultConfig {
|
||||||
minSdkVersion rootProject.minSdkVersion
|
minSdkVersion rootProject.minSdkVersion
|
||||||
@@ -27,10 +32,21 @@ dependencies {
|
|||||||
api project(':yoga')
|
api project(':yoga')
|
||||||
}
|
}
|
||||||
|
|
||||||
// We don't build Javadoc at this time as we can't disable "BUCK" files
|
task sourcesJar(type: Jar) {
|
||||||
// from mistakenly getting parsed as Java.
|
classifier = 'source'
|
||||||
tasks.withType(Javadoc).all {
|
from android.sourceSets.main.java.srcDirs
|
||||||
enabled = false
|
|
||||||
}
|
}
|
||||||
|
|
||||||
apply plugin: 'com.vanniktech.maven.publish'
|
task javadoc(type: Javadoc) {
|
||||||
|
failOnError false
|
||||||
|
source = android.sourceSets.main.java.sourceFiles
|
||||||
|
classpath += project.files(android.getBootClasspath().join(File.pathSeparator))
|
||||||
|
classpath += configurations.compile
|
||||||
|
}
|
||||||
|
|
||||||
|
task javadocJar(type: Jar, dependsOn: javadoc) {
|
||||||
|
classifier = 'javadoc'
|
||||||
|
from javadoc.destinationDir
|
||||||
|
}
|
||||||
|
|
||||||
|
apply from: rootProject.file('gradle/release.gradle')
|
||||||
|
@@ -8,7 +8,6 @@ load("//tools/build_defs/oss:yoga_defs.bzl", "ANDROID_JAVA_TARGET", "ANDROID_SAM
|
|||||||
yoga_android_library(
|
yoga_android_library(
|
||||||
name = "yoga",
|
name = "yoga",
|
||||||
srcs = glob(["**/*.java"]),
|
srcs = glob(["**/*.java"]),
|
||||||
autoglob = False,
|
|
||||||
visibility = [
|
visibility = [
|
||||||
"PUBLIC",
|
"PUBLIC",
|
||||||
],
|
],
|
||||||
|
@@ -8,7 +8,6 @@ load("//tools/build_defs/oss:yoga_defs.bzl", "ANDROID_RES_TARGET", "INFER_ANNOTA
|
|||||||
yoga_android_library(
|
yoga_android_library(
|
||||||
name = "android",
|
name = "android",
|
||||||
srcs = glob(["**/*.java"]),
|
srcs = glob(["**/*.java"]),
|
||||||
autoglob = False,
|
|
||||||
visibility = [
|
visibility = [
|
||||||
"PUBLIC",
|
"PUBLIC",
|
||||||
],
|
],
|
||||||
|
18
build.gradle
18
build.gradle
@@ -10,11 +10,14 @@
|
|||||||
buildscript {
|
buildscript {
|
||||||
repositories {
|
repositories {
|
||||||
google()
|
google()
|
||||||
mavenCentral()
|
jcenter()
|
||||||
|
maven { url 'https://maven.google.com/' }
|
||||||
}
|
}
|
||||||
dependencies {
|
dependencies {
|
||||||
classpath 'com.android.tools.build:gradle:4.2.1'
|
classpath 'com.android.tools.build:gradle:3.1.0'
|
||||||
classpath 'com.vanniktech:gradle-maven-publish-plugin:0.15.1'
|
classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.7.3'
|
||||||
|
classpath 'com.github.dcendents:android-maven-gradle-plugin:2.0'
|
||||||
|
|
||||||
// NOTE: Do not place your application dependencies here; they belong
|
// NOTE: Do not place your application dependencies here; they belong
|
||||||
// in the individual module build.gradle files
|
// in the individual module build.gradle files
|
||||||
}
|
}
|
||||||
@@ -23,16 +26,15 @@ buildscript {
|
|||||||
allprojects {
|
allprojects {
|
||||||
repositories {
|
repositories {
|
||||||
google()
|
google()
|
||||||
mavenCentral()
|
jcenter()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ext {
|
ext {
|
||||||
minSdkVersion = 14
|
minSdkVersion = 14
|
||||||
targetSdkVersion = 29
|
targetSdkVersion = 25
|
||||||
compileSdkVersion = 29
|
compileSdkVersion = 26
|
||||||
buildToolsVersion = '30.0.2'
|
buildToolsVersion = '28.0.3'
|
||||||
ndkVersion = '21.3.6528147'
|
|
||||||
sourceCompatibilityVersion = JavaVersion.VERSION_1_7
|
sourceCompatibilityVersion = JavaVersion.VERSION_1_7
|
||||||
targetCompatibilityVersion = JavaVersion.VERSION_1_7
|
targetCompatibilityVersion = JavaVersion.VERSION_1_7
|
||||||
}
|
}
|
||||||
|
@@ -36,7 +36,7 @@
|
|||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||||
<ConfigurationType>StaticLibrary</ConfigurationType>
|
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||||
<UseDebugLibraries>true</UseDebugLibraries>
|
<UseDebugLibraries>true</UseDebugLibraries>
|
||||||
<PlatformToolset>v141</PlatformToolset>
|
<PlatformToolset>v141</PlatformToolset>
|
||||||
<CharacterSet>Unicode</CharacterSet>
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
@@ -48,7 +48,7 @@
|
|||||||
<CharacterSet>Unicode</CharacterSet>
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||||
<ConfigurationType>StaticLibrary</ConfigurationType>
|
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||||
<UseDebugLibraries>false</UseDebugLibraries>
|
<UseDebugLibraries>false</UseDebugLibraries>
|
||||||
<PlatformToolset>v141</PlatformToolset>
|
<PlatformToolset>v141</PlatformToolset>
|
||||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||||
@@ -62,13 +62,13 @@
|
|||||||
<CharacterSet>Unicode</CharacterSet>
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
|
||||||
<ConfigurationType>StaticLibrary</ConfigurationType>
|
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||||
<UseDebugLibraries>true</UseDebugLibraries>
|
<UseDebugLibraries>true</UseDebugLibraries>
|
||||||
<PlatformToolset>v141</PlatformToolset>
|
<PlatformToolset>v141</PlatformToolset>
|
||||||
<CharacterSet>Unicode</CharacterSet>
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
|
||||||
<ConfigurationType>StaticLibrary</ConfigurationType>
|
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||||
<UseDebugLibraries>false</UseDebugLibraries>
|
<UseDebugLibraries>false</UseDebugLibraries>
|
||||||
<PlatformToolset>v141</PlatformToolset>
|
<PlatformToolset>v141</PlatformToolset>
|
||||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||||
@@ -227,8 +227,6 @@
|
|||||||
</Link>
|
</Link>
|
||||||
</ItemDefinitionGroup>
|
</ItemDefinitionGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClInclude Include="..\..\yoga\event\event.h" />
|
|
||||||
<ClInclude Include="..\..\yoga\log.h" />
|
|
||||||
<ClInclude Include="..\..\yoga\Utils.h" />
|
<ClInclude Include="..\..\yoga\Utils.h" />
|
||||||
<ClInclude Include="..\..\yoga\YGConfig.h" />
|
<ClInclude Include="..\..\yoga\YGConfig.h" />
|
||||||
<ClInclude Include="..\..\yoga\YGEnums.h" />
|
<ClInclude Include="..\..\yoga\YGEnums.h" />
|
||||||
@@ -238,7 +236,6 @@
|
|||||||
<ClInclude Include="..\..\yoga\YGNode.h" />
|
<ClInclude Include="..\..\yoga\YGNode.h" />
|
||||||
<ClInclude Include="..\..\yoga\YGNodePrint.h" />
|
<ClInclude Include="..\..\yoga\YGNodePrint.h" />
|
||||||
<ClInclude Include="..\..\yoga\YGStyle.h" />
|
<ClInclude Include="..\..\yoga\YGStyle.h" />
|
||||||
<ClInclude Include="..\..\yoga\YGValue.h" />
|
|
||||||
<ClInclude Include="..\..\yoga\Yoga-internal.h" />
|
<ClInclude Include="..\..\yoga\Yoga-internal.h" />
|
||||||
<ClInclude Include="..\..\yoga\Yoga.h" />
|
<ClInclude Include="..\..\yoga\Yoga.h" />
|
||||||
<ClInclude Include="resource.h" />
|
<ClInclude Include="resource.h" />
|
||||||
@@ -246,16 +243,14 @@
|
|||||||
<ClInclude Include="targetver.h" />
|
<ClInclude Include="targetver.h" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClCompile Include="..\..\yoga\event\event.cpp" />
|
|
||||||
<ClCompile Include="..\..\yoga\log.cpp" />
|
|
||||||
<ClCompile Include="..\..\yoga\Utils.cpp" />
|
<ClCompile Include="..\..\yoga\Utils.cpp" />
|
||||||
<ClCompile Include="..\..\yoga\YGConfig.cpp" />
|
<ClCompile Include="..\..\yoga\YGConfig.cpp" />
|
||||||
<ClCompile Include="..\..\yoga\YGEnums.cpp" />
|
<ClCompile Include="..\..\yoga\YGEnums.cpp" />
|
||||||
|
<ClCompile Include="..\..\yoga\YGFloatOptional.cpp" />
|
||||||
<ClCompile Include="..\..\yoga\YGLayout.cpp" />
|
<ClCompile Include="..\..\yoga\YGLayout.cpp" />
|
||||||
<ClCompile Include="..\..\yoga\YGNode.cpp" />
|
<ClCompile Include="..\..\yoga\YGNode.cpp" />
|
||||||
<ClCompile Include="..\..\yoga\YGNodePrint.cpp" />
|
<ClCompile Include="..\..\yoga\YGNodePrint.cpp" />
|
||||||
<ClCompile Include="..\..\yoga\YGStyle.cpp" />
|
<ClCompile Include="..\..\yoga\YGStyle.cpp" />
|
||||||
<ClCompile Include="..\..\yoga\YGValue.cpp" />
|
|
||||||
<ClCompile Include="..\..\yoga\Yoga.cpp" />
|
<ClCompile Include="..\..\yoga\Yoga.cpp" />
|
||||||
<ClCompile Include="YGInterop.cpp" />
|
<ClCompile Include="YGInterop.cpp" />
|
||||||
<ClCompile Include="dllmain.cpp">
|
<ClCompile Include="dllmain.cpp">
|
||||||
|
@@ -1,119 +1,104 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Filter Include="Source Files">
|
<Filter Include="Source Files">
|
||||||
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
|
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
|
||||||
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
|
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
|
||||||
</Filter>
|
</Filter>
|
||||||
<Filter Include="Header Files">
|
<Filter Include="Header Files">
|
||||||
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
|
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
|
||||||
<Extensions>h;hh;hpp;hxx;hm;inl;inc;xsd</Extensions>
|
<Extensions>h;hh;hpp;hxx;hm;inl;inc;xsd</Extensions>
|
||||||
</Filter>
|
</Filter>
|
||||||
<Filter Include="Resource Files">
|
<Filter Include="Resource Files">
|
||||||
<UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
|
<UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
|
||||||
<Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
|
<Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
|
||||||
</Filter>
|
</Filter>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClInclude Include="stdafx.h">
|
<ClInclude Include="stdafx.h">
|
||||||
<Filter>Header Files</Filter>
|
<Filter>Header Files</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="targetver.h">
|
<ClInclude Include="targetver.h">
|
||||||
<Filter>Header Files</Filter>
|
<Filter>Header Files</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="resource.h">
|
<ClInclude Include="resource.h">
|
||||||
<Filter>Header Files</Filter>
|
<Filter>Header Files</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="..\..\yoga\Utils.h">
|
<ClInclude Include="..\..\yoga\Utils.h">
|
||||||
<Filter>Header Files</Filter>
|
<Filter>Header Files</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="..\..\yoga\YGEnums.h">
|
<ClInclude Include="..\..\yoga\YGEnums.h">
|
||||||
<Filter>Header Files</Filter>
|
<Filter>Header Files</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="..\..\yoga\YGFloatOptional.h">
|
<ClInclude Include="..\..\yoga\YGFloatOptional.h">
|
||||||
<Filter>Header Files</Filter>
|
<Filter>Header Files</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="..\..\yoga\YGLayout.h">
|
<ClInclude Include="..\..\yoga\YGLayout.h">
|
||||||
<Filter>Header Files</Filter>
|
<Filter>Header Files</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="..\..\yoga\YGMacros.h">
|
<ClInclude Include="..\..\yoga\YGMacros.h">
|
||||||
<Filter>Header Files</Filter>
|
<Filter>Header Files</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="..\..\yoga\YGNode.h">
|
<ClInclude Include="..\..\yoga\YGNode.h">
|
||||||
<Filter>Header Files</Filter>
|
<Filter>Header Files</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="..\..\yoga\YGNodePrint.h">
|
<ClInclude Include="..\..\yoga\YGNodePrint.h">
|
||||||
<Filter>Header Files</Filter>
|
<Filter>Header Files</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="..\..\yoga\YGStyle.h">
|
<ClInclude Include="..\..\yoga\YGStyle.h">
|
||||||
<Filter>Header Files</Filter>
|
<Filter>Header Files</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="..\..\yoga\Yoga.h">
|
<ClInclude Include="..\..\yoga\Yoga.h">
|
||||||
<Filter>Header Files</Filter>
|
<Filter>Header Files</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="..\..\yoga\Yoga-internal.h">
|
<ClInclude Include="..\..\yoga\Yoga-internal.h">
|
||||||
<Filter>Header Files</Filter>
|
<Filter>Header Files</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="..\..\yoga\YGConfig.h">
|
<ClInclude Include="..\..\yoga\YGConfig.h">
|
||||||
<Filter>Header Files</Filter>
|
<Filter>Header Files</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="..\..\yoga\YGValue.h">
|
</ItemGroup>
|
||||||
<Filter>Header Files</Filter>
|
<ItemGroup>
|
||||||
</ClInclude>
|
<ClCompile Include="stdafx.cpp">
|
||||||
<ClInclude Include="..\..\yoga\log.h">
|
<Filter>Source Files</Filter>
|
||||||
<Filter>Header Files</Filter>
|
</ClCompile>
|
||||||
</ClInclude>
|
<ClCompile Include="dllmain.cpp">
|
||||||
<ClInclude Include="..\..\yoga\event\event.h">
|
<Filter>Source Files</Filter>
|
||||||
<Filter>Header Files</Filter>
|
</ClCompile>
|
||||||
</ClInclude>
|
<ClCompile Include="YGInterop.cpp">
|
||||||
</ItemGroup>
|
<Filter>Source Files</Filter>
|
||||||
<ItemGroup>
|
</ClCompile>
|
||||||
<ClCompile Include="stdafx.cpp">
|
<ClCompile Include="..\..\yoga\Utils.cpp">
|
||||||
<Filter>Source Files</Filter>
|
<Filter>Source Files</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="dllmain.cpp">
|
<ClCompile Include="..\..\yoga\YGEnums.cpp">
|
||||||
<Filter>Source Files</Filter>
|
<Filter>Source Files</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="YGInterop.cpp">
|
<ClCompile Include="..\..\yoga\YGFloatOptional.cpp">
|
||||||
<Filter>Source Files</Filter>
|
<Filter>Source Files</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="..\..\yoga\Utils.cpp">
|
<ClCompile Include="..\..\yoga\YGLayout.cpp">
|
||||||
<Filter>Source Files</Filter>
|
<Filter>Source Files</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="..\..\yoga\YGEnums.cpp">
|
<ClCompile Include="..\..\yoga\YGNode.cpp">
|
||||||
<Filter>Source Files</Filter>
|
<Filter>Source Files</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="..\..\yoga\YGLayout.cpp">
|
<ClCompile Include="..\..\yoga\YGNodePrint.cpp">
|
||||||
<Filter>Source Files</Filter>
|
<Filter>Source Files</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="..\..\yoga\YGNode.cpp">
|
<ClCompile Include="..\..\yoga\YGStyle.cpp">
|
||||||
<Filter>Source Files</Filter>
|
<Filter>Source Files</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="..\..\yoga\YGNodePrint.cpp">
|
<ClCompile Include="..\..\yoga\Yoga.cpp">
|
||||||
<Filter>Source Files</Filter>
|
<Filter>Source Files</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="..\..\yoga\YGStyle.cpp">
|
<ClCompile Include="..\..\yoga\YGConfig.cpp">
|
||||||
<Filter>Source Files</Filter>
|
<Filter>Source Files</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="..\..\yoga\Yoga.cpp">
|
</ItemGroup>
|
||||||
<Filter>Source Files</Filter>
|
<ItemGroup>
|
||||||
</ClCompile>
|
<ResourceCompile Include="Yoga.rc">
|
||||||
<ClCompile Include="..\..\yoga\YGConfig.cpp">
|
<Filter>Resource Files</Filter>
|
||||||
<Filter>Source Files</Filter>
|
</ResourceCompile>
|
||||||
</ClCompile>
|
</ItemGroup>
|
||||||
<ClCompile Include="..\..\yoga\YGValue.cpp">
|
|
||||||
<Filter>Source Files</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\..\yoga\event\event.cpp">
|
|
||||||
<Filter>Source Files</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\..\yoga\log.cpp">
|
|
||||||
<Filter>Source Files</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
</ItemGroup>
|
|
||||||
<ItemGroup>
|
|
||||||
<ResourceCompile Include="Yoga.rc">
|
|
||||||
<Filter>Resource Files</Filter>
|
|
||||||
</ResourceCompile>
|
|
||||||
</ItemGroup>
|
|
||||||
</Project>
|
</Project>
|
@@ -1,10 +1,9 @@
|
|||||||
/*
|
/**
|
||||||
* Copyright (c) Facebook, Inc. and its affiliates.
|
* Copyright (c) Facebook, Inc. and its affiliates.
|
||||||
*
|
*
|
||||||
* This source code is licensed under the MIT license found in the
|
* This source code is licensed under the MIT license found in the LICENSE
|
||||||
* LICENSE file in the root directory of this source tree.
|
* file in the root directory of this source tree.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// @Generated by gentest/gentest.rb from gentest/fixtures/YGDisplayTest.html
|
// @Generated by gentest/gentest.rb from gentest/fixtures/YGDisplayTest.html
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
@@ -334,47 +333,5 @@ namespace Facebook.Yoga
|
|||||||
Assert.AreEqual(0f, root_child1.LayoutHeight);
|
Assert.AreEqual(0f, root_child1.LayoutHeight);
|
||||||
}
|
}
|
||||||
|
|
||||||
[Test]
|
|
||||||
public void Test_display_none_with_position_absolute()
|
|
||||||
{
|
|
||||||
YogaConfig config = new YogaConfig();
|
|
||||||
|
|
||||||
YogaNode root = new YogaNode(config);
|
|
||||||
root.Width = 100;
|
|
||||||
root.Height = 100;
|
|
||||||
|
|
||||||
YogaNode root_child0 = new YogaNode(config);
|
|
||||||
root_child0.PositionType = YogaPositionType.Absolute;
|
|
||||||
root_child0.Width = 100;
|
|
||||||
root_child0.Height = 100;
|
|
||||||
root_child0.Display = YogaDisplay.None;
|
|
||||||
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(0f, root_child0.LayoutWidth);
|
|
||||||
Assert.AreEqual(0f, 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(0f, root_child0.LayoutWidth);
|
|
||||||
Assert.AreEqual(0f, root_child0.LayoutHeight);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -25,7 +25,3 @@
|
|||||||
<div style="flex-grow: 1;"></div>
|
<div style="flex-grow: 1;"></div>
|
||||||
<div style="flex-grow: 1; display:none; top: 10px;"></div>
|
<div style="flex-grow: 1; display:none; top: 10px;"></div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="display_none_with_position_absolute" style="width: 100px; height: 100px;">
|
|
||||||
<div style="display:none; position: absolute; width: 100px; height: 100px"></div>
|
|
||||||
</div>
|
|
||||||
|
@@ -149,4 +149,14 @@
|
|||||||
<div id="margin_auto_left_stretching_child" style="width: 200px; height: 200px; align-items: center;">
|
<div id="margin_auto_left_stretching_child" style="width: 200px; height: 200px; align-items: center;">
|
||||||
<div style="flex: 1; margin-left:auto;"></div>
|
<div style="flex: 1; margin-left:auto;"></div>
|
||||||
<div style="width: 50px; height: 50px;"></div>
|
<div style="width: 50px; height: 50px;"></div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<div id="margin_top_auto_overflow_parent" style="flex-direction:column; height: 500px; width: 20px;">
|
||||||
|
<div style="height: 300px;"></div>
|
||||||
|
<div style="margin-top: auto; height: 300px;"></div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="margin_bottom_auto_overflow_parent" style="flex-direction:column; height: 500px; width: 20px;">
|
||||||
|
<div style="height: 300px;"></div>
|
||||||
|
<div style="margin-top: auto; height: 300px;"></div>
|
||||||
|
</div>
|
||||||
|
@@ -120,9 +120,8 @@ CSEmitter.prototype = Object.create(Emitter.prototype, {
|
|||||||
YGOverflowHidden:{value:'YogaOverflow.Hidden'},
|
YGOverflowHidden:{value:'YogaOverflow.Hidden'},
|
||||||
YGOverflowVisible:{value:'YogaOverflow.Visible'},
|
YGOverflowVisible:{value:'YogaOverflow.Visible'},
|
||||||
|
|
||||||
YGPositionTypeAbsolute:{value:'YogaPositionType.Static'},
|
|
||||||
YGPositionTypeRelative:{value:'YogaPositionType.Relative'},
|
|
||||||
YGPositionTypeAbsolute:{value:'YogaPositionType.Absolute'},
|
YGPositionTypeAbsolute:{value:'YogaPositionType.Absolute'},
|
||||||
|
YGPositionTypeRelative:{value:'YogaPositionType.Relative'},
|
||||||
|
|
||||||
YGUndefined:{value:'YogaConstants.Undefined'},
|
YGUndefined:{value:'YogaConstants.Undefined'},
|
||||||
|
|
||||||
|
@@ -41,11 +41,11 @@ function assert(condition, message) {
|
|||||||
|
|
||||||
function printTest(e, LTRContainer, RTLContainer, genericContainer) {
|
function printTest(e, LTRContainer, RTLContainer, genericContainer) {
|
||||||
e.push([
|
e.push([
|
||||||
'/*',
|
'/**',
|
||||||
' * Copyright (c) Facebook, Inc. and its affiliates.',
|
' * Copyright (c) Facebook, Inc. and its affiliates.',
|
||||||
' *',
|
' *',
|
||||||
' * This source code is licensed under the MIT license found in the',
|
' * This source code is licensed under the MIT license found in the LICENSE',
|
||||||
' * LICENSE file in the root directory of this source tree.',
|
' * file in the root directory of this source tree.',
|
||||||
' */',
|
' */',
|
||||||
'// @Generated by gentest/gentest.rb from gentest/fixtures/' + document.title + '.html',
|
'// @Generated by gentest/gentest.rb from gentest/fixtures/' + document.title + '.html',
|
||||||
'',
|
'',
|
||||||
|
@@ -7,14 +7,13 @@
|
|||||||
require 'watir'
|
require 'watir'
|
||||||
require 'fileutils'
|
require 'fileutils'
|
||||||
|
|
||||||
browser = Watir::Browser.new(:chrome, "goog:loggingPrefs" => {
|
caps = Selenium::WebDriver::Remote::Capabilities.chrome(
|
||||||
"browser" => "ALL",
|
"loggingPrefs"=>{
|
||||||
"performance" => "ALL"
|
"browser"=>"ALL",
|
||||||
},
|
"performance"=>"ALL"
|
||||||
"chromeOptions" => {
|
}
|
||||||
"w3c" => "false"
|
)
|
||||||
},
|
browser = Watir::Browser.new(:chrome, :desired_capabilities => caps, :switches => ['--force-device-scale-factor=1', '--window-position=0,0'])
|
||||||
:switches => ['--force-device-scale-factor=1', '--window-position=0,0'])
|
|
||||||
|
|
||||||
Dir.chdir(File.dirname($0))
|
Dir.chdir(File.dirname($0))
|
||||||
|
|
||||||
|
@@ -9,7 +9,7 @@
|
|||||||
|
|
||||||
org.gradle.jvmargs=-Xmx1536M
|
org.gradle.jvmargs=-Xmx1536M
|
||||||
|
|
||||||
VERSION_NAME=1.19.0
|
VERSION_NAME=1.16.0-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
|
||||||
@@ -17,8 +17,5 @@ POM_SCM_DEV_CONNECTION=scm:git:git@github.com:facebook/yoga.git
|
|||||||
POM_LICENSE_NAME=MIT License
|
POM_LICENSE_NAME=MIT License
|
||||||
POM_LICENSE_URL=https://github.com/facebook/yoga/blob/master/LICENSE
|
POM_LICENSE_URL=https://github.com/facebook/yoga/blob/master/LICENSE
|
||||||
POM_LICENSE_DIST=repo
|
POM_LICENSE_DIST=repo
|
||||||
POM_LICENCE_NAME=MIT License
|
|
||||||
POM_LICENCE_URL=https://github.com/facebook/yoga/blob/master/LICENSE
|
|
||||||
POM_LICENCE_DIST=repo
|
|
||||||
POM_DEVELOPER_ID=facebook
|
POM_DEVELOPER_ID=facebook
|
||||||
POM_DEVELOPER_NAME=facebook
|
POM_DEVELOPER_NAME=facebook
|
||||||
|
44
gradle/android-maven-install.gradle
Normal file
44
gradle/android-maven-install.gradle
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) Facebook, Inc. and its affiliates.
|
||||||
|
*
|
||||||
|
* This source code is licensed under the MIT license found in the
|
||||||
|
* LICENSE file in the root directory of this source tree.
|
||||||
|
*/
|
||||||
|
|
||||||
|
// Configure the Android maven publication
|
||||||
|
|
||||||
|
apply plugin: 'com.github.dcendents.android-maven'
|
||||||
|
|
||||||
|
version = VERSION_NAME
|
||||||
|
group = GROUP
|
||||||
|
// Set the .aar / .jar base file name to match the artifact ID
|
||||||
|
// in case the module has a different name
|
||||||
|
project.archivesBaseName = POM_ARTIFACT_ID
|
||||||
|
|
||||||
|
install {
|
||||||
|
repositories.mavenInstaller {
|
||||||
|
// This generates POM.xml with proper parameters
|
||||||
|
pom.project {
|
||||||
|
name POM_NAME
|
||||||
|
artifactId POM_ARTIFACT_ID
|
||||||
|
packaging POM_PACKAGING
|
||||||
|
description POM_DESCRIPTION
|
||||||
|
url projectUrl
|
||||||
|
|
||||||
|
scm {
|
||||||
|
url scmUrl
|
||||||
|
connection scmConnection
|
||||||
|
developerConnection scmDeveloperConnection
|
||||||
|
}
|
||||||
|
|
||||||
|
licenses projectLicenses
|
||||||
|
|
||||||
|
developers {
|
||||||
|
developer {
|
||||||
|
id developerId
|
||||||
|
name developerName
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
54
gradle/android-tasks.gradle
Normal file
54
gradle/android-tasks.gradle
Normal file
@@ -0,0 +1,54 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) Facebook, Inc. and its affiliates.
|
||||||
|
*
|
||||||
|
* This source code is licensed under the MIT license found in the
|
||||||
|
* LICENSE file in the root directory of this source tree.
|
||||||
|
*/
|
||||||
|
|
||||||
|
// Android tasks for Javadoc and sources.jar generation
|
||||||
|
|
||||||
|
afterEvaluate { project ->
|
||||||
|
if (POM_PACKAGING == 'aar') {
|
||||||
|
task androidJavadoc(type: Javadoc) {
|
||||||
|
source = android.sourceSets.main.java.srcDirs
|
||||||
|
exclude '**/pom.xml'
|
||||||
|
exclude '**/proguard_annotations.pro'
|
||||||
|
classpath += files(android.bootClasspath)
|
||||||
|
}
|
||||||
|
|
||||||
|
task androidJavadocJar(type: Jar) {
|
||||||
|
classifier = 'javadoc'
|
||||||
|
from androidJavadoc.destinationDir
|
||||||
|
}
|
||||||
|
|
||||||
|
task androidSourcesJar(type: Jar) {
|
||||||
|
classifier = 'sources'
|
||||||
|
from android.sourceSets.main.java.srcDirs
|
||||||
|
}
|
||||||
|
|
||||||
|
android.libraryVariants.all { variant ->
|
||||||
|
def name = variant.name.capitalize()
|
||||||
|
task "jar${name}"(type: Jar, dependsOn: variant.javaCompile) {
|
||||||
|
from variant.javaCompile.destinationDir
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
artifacts.add('archives', androidJavadocJar)
|
||||||
|
artifacts.add('archives', androidSourcesJar)
|
||||||
|
}
|
||||||
|
|
||||||
|
if (POM_PACKAGING == 'jar') {
|
||||||
|
task javadocJar(type: Jar, dependsOn: javadoc) {
|
||||||
|
classifier = 'javadoc'
|
||||||
|
from javadoc.destinationDir
|
||||||
|
}
|
||||||
|
|
||||||
|
task sourcesJar(type: Jar, dependsOn: classes) {
|
||||||
|
classifier = 'sources'
|
||||||
|
from sourceSets.main.allSource
|
||||||
|
}
|
||||||
|
|
||||||
|
artifacts.add('archives', javadocJar)
|
||||||
|
artifacts.add('archives', sourcesJar)
|
||||||
|
}
|
||||||
|
}
|
70
gradle/bintray.gradle
Normal file
70
gradle/bintray.gradle
Normal file
@@ -0,0 +1,70 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) Facebook, Inc. and its affiliates.
|
||||||
|
*
|
||||||
|
* This source code is licensed under the MIT license found in the
|
||||||
|
* LICENSE file in the root directory of this source tree.
|
||||||
|
*/
|
||||||
|
|
||||||
|
// Upload to Bintray
|
||||||
|
apply plugin: 'com.jfrog.bintray'
|
||||||
|
|
||||||
|
def getBintrayUsername() {
|
||||||
|
return project.hasProperty('bintrayUsername') ? property('bintrayUsername') : System.getenv('BINTRAY_USERNAME')
|
||||||
|
}
|
||||||
|
|
||||||
|
def getBintrayApiKey() {
|
||||||
|
return project.hasProperty('bintrayApiKey') ? property('bintrayApiKey') : System.getenv('BINTRAY_API_KEY')
|
||||||
|
}
|
||||||
|
|
||||||
|
def getBintrayGpgPassword() {
|
||||||
|
return project.hasProperty('bintrayGpgPassword') ? property('bintrayGpgPassword') : System.getenv('BINTRAY_GPG_PASSWORD')
|
||||||
|
}
|
||||||
|
|
||||||
|
def getMavenCentralUsername() {
|
||||||
|
return project.hasProperty('mavenCentralUsername') ? property('mavenCentralUsername') : System.getenv('MAVEN_CENTRAL_USERNAME')
|
||||||
|
}
|
||||||
|
|
||||||
|
def getMavenCentralPassword() {
|
||||||
|
return project.hasProperty('mavenCentralPassword') ? property('mavenCentralPassword') : System.getenv('MAVEN_CENTRAL_PASSWORD')
|
||||||
|
}
|
||||||
|
|
||||||
|
def shouldSyncWithMavenCentral() {
|
||||||
|
return project.hasProperty('syncWithMavenCentral') ? property('syncWithMavenCentral').toBoolean() : false
|
||||||
|
}
|
||||||
|
|
||||||
|
def dryRunOnly() {
|
||||||
|
return project.hasProperty('dryRun') ? property('dryRun').toBoolean() : false
|
||||||
|
}
|
||||||
|
|
||||||
|
bintray {
|
||||||
|
user = getBintrayUsername()
|
||||||
|
key = getBintrayApiKey()
|
||||||
|
configurations = ['archives']
|
||||||
|
pkg {
|
||||||
|
repo = bintrayRepo
|
||||||
|
userOrg = bintrayUserOrg
|
||||||
|
name = bintrayName
|
||||||
|
desc = bintrayDescription
|
||||||
|
websiteUrl = projectUrl
|
||||||
|
issueTrackerUrl = issuesUrl
|
||||||
|
vcsUrl = scmUrl
|
||||||
|
licenses = projectLicenses
|
||||||
|
dryRun = dryRunOnly()
|
||||||
|
override = true
|
||||||
|
publish = true
|
||||||
|
publicDownloadNumbers = true
|
||||||
|
version {
|
||||||
|
desc = bintrayDescription
|
||||||
|
gpg {
|
||||||
|
sign = true
|
||||||
|
passphrase = getBintrayGpgPassword()
|
||||||
|
}
|
||||||
|
mavenCentralSync {
|
||||||
|
sync = shouldSyncWithMavenCentral()
|
||||||
|
user = getMavenCentralUsername()
|
||||||
|
password = getMavenCentralPassword()
|
||||||
|
close = '1' // If set to 0, you have to manually click release
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
96
gradle/gradle-mvn-push.gradle
Normal file
96
gradle/gradle-mvn-push.gradle
Normal file
@@ -0,0 +1,96 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2013 Chris Banes
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
apply plugin: 'signing'
|
||||||
|
|
||||||
|
version = VERSION_NAME
|
||||||
|
group = GROUP
|
||||||
|
|
||||||
|
def isReleaseBuild() {
|
||||||
|
return VERSION_NAME.contains('SNAPSHOT') == false
|
||||||
|
}
|
||||||
|
|
||||||
|
def getReleaseRepositoryUrl() {
|
||||||
|
return hasProperty('RELEASE_REPOSITORY_URL') ? RELEASE_REPOSITORY_URL
|
||||||
|
: "https://oss.sonatype.org/service/local/staging/deploy/maven2/"
|
||||||
|
}
|
||||||
|
|
||||||
|
def getSnapshotRepositoryUrl() {
|
||||||
|
return hasProperty('SNAPSHOT_REPOSITORY_URL') ? SNAPSHOT_REPOSITORY_URL
|
||||||
|
: "https://oss.sonatype.org/content/repositories/snapshots/"
|
||||||
|
}
|
||||||
|
|
||||||
|
def getRepositoryUsername() {
|
||||||
|
return hasProperty('SONATYPE_NEXUS_USERNAME') ? SONATYPE_NEXUS_USERNAME : ""
|
||||||
|
}
|
||||||
|
|
||||||
|
def getRepositoryPassword() {
|
||||||
|
return hasProperty('SONATYPE_NEXUS_PASSWORD') ? SONATYPE_NEXUS_PASSWORD : ""
|
||||||
|
}
|
||||||
|
|
||||||
|
afterEvaluate { project ->
|
||||||
|
uploadArchives {
|
||||||
|
repositories {
|
||||||
|
mavenDeployer {
|
||||||
|
beforeDeployment { MavenDeployment deployment -> signing.signPom(deployment) }
|
||||||
|
|
||||||
|
pom.groupId = GROUP
|
||||||
|
pom.artifactId = POM_ARTIFACT_ID
|
||||||
|
pom.version = VERSION_NAME
|
||||||
|
|
||||||
|
repository(url: getReleaseRepositoryUrl()) {
|
||||||
|
authentication(userName: getRepositoryUsername(), password: getRepositoryPassword())
|
||||||
|
}
|
||||||
|
snapshotRepository(url: getSnapshotRepositoryUrl()) {
|
||||||
|
authentication(userName: getRepositoryUsername(), password: getRepositoryPassword())
|
||||||
|
}
|
||||||
|
|
||||||
|
pom.project {
|
||||||
|
name POM_NAME
|
||||||
|
packaging POM_PACKAGING
|
||||||
|
description POM_DESCRIPTION
|
||||||
|
url POM_URL
|
||||||
|
|
||||||
|
scm {
|
||||||
|
url POM_SCM_URL
|
||||||
|
connection POM_SCM_CONNECTION
|
||||||
|
developerConnection POM_SCM_DEV_CONNECTION
|
||||||
|
}
|
||||||
|
|
||||||
|
licenses {
|
||||||
|
license {
|
||||||
|
name POM_LICENSE_NAME
|
||||||
|
url POM_LICENSE_URL
|
||||||
|
distribution POM_LICENSE_DIST
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
developers {
|
||||||
|
developer {
|
||||||
|
id POM_DEVELOPER_ID
|
||||||
|
name POM_DEVELOPER_NAME
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
signing {
|
||||||
|
required { isReleaseBuild() && gradle.taskGraph.hasTask('uploadArchives') }
|
||||||
|
sign configurations.archives
|
||||||
|
}
|
||||||
|
}
|
40
gradle/release-bintray.gradle
Normal file
40
gradle/release-bintray.gradle
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) Facebook, Inc. and its affiliates.
|
||||||
|
*
|
||||||
|
* This source code is licensed under the MIT license found in the
|
||||||
|
* LICENSE file in the root directory of this source tree.
|
||||||
|
*/
|
||||||
|
|
||||||
|
// Set up everything required for releasing on Bintray
|
||||||
|
ext {
|
||||||
|
bintrayRepo = 'maven'
|
||||||
|
bintrayUserOrg = 'facebook'
|
||||||
|
bintrayName = "${GROUP}:${POM_ARTIFACT_ID}"
|
||||||
|
bintrayDescription = POM_DESCRIPTION
|
||||||
|
projectUrl = POM_URL
|
||||||
|
issuesUrl = 'https://github.com/facebook/yoga/issues'
|
||||||
|
scmUrl = POM_SCM_URL
|
||||||
|
scmConnection = POM_SCM_CONNECTION
|
||||||
|
scmDeveloperConnection = POM_SCM_DEV_CONNECTION
|
||||||
|
|
||||||
|
publishedGroupId = GROUP
|
||||||
|
libraryName = 'yoga'
|
||||||
|
artifact = 'yoga'
|
||||||
|
|
||||||
|
developerId = POM_DEVELOPER_ID
|
||||||
|
developerName = POM_DEVELOPER_NAME
|
||||||
|
|
||||||
|
projectLicenses = {
|
||||||
|
license {
|
||||||
|
name = POM_LICENSE_NAME
|
||||||
|
url = POM_LICENSE_URL
|
||||||
|
distribution = POM_LICENSE_DIST
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Set up the Android Maven publication (POM etc.)
|
||||||
|
apply from: rootProject.file('gradle/android-maven-install.gradle')
|
||||||
|
|
||||||
|
// Upload to Bintray
|
||||||
|
apply from: rootProject.file('gradle/bintray.gradle')
|
15
gradle/release.gradle
Normal file
15
gradle/release.gradle
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) Facebook, Inc. and its affiliates.
|
||||||
|
*
|
||||||
|
* This source code is licensed under the MIT license found in the
|
||||||
|
* LICENSE file in the root directory of this source tree.
|
||||||
|
*/
|
||||||
|
|
||||||
|
// Common Android tasks for all releases that generate Javadocs, sources, etc.
|
||||||
|
apply from: rootProject.file('gradle/android-tasks.gradle')
|
||||||
|
|
||||||
|
// Upload to Bintray
|
||||||
|
apply from: rootProject.file('gradle/release-bintray.gradle')
|
||||||
|
|
||||||
|
// Upload directly to standard Maven Central (for SNAPSHOTs)
|
||||||
|
apply from: rootProject.file('gradle/gradle-mvn-push.gradle')
|
2
gradle/wrapper/gradle-wrapper.properties
vendored
2
gradle/wrapper/gradle-wrapper.properties
vendored
@@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME
|
|||||||
distributionPath=wrapper/dists
|
distributionPath=wrapper/dists
|
||||||
zipStoreBase=GRADLE_USER_HOME
|
zipStoreBase=GRADLE_USER_HOME
|
||||||
zipStorePath=wrapper/dists
|
zipStorePath=wrapper/dists
|
||||||
distributionUrl=https\://services.gradle.org/distributions/gradle-7.0.2-all.zip
|
distributionUrl=https\://services.gradle.org/distributions/gradle-4.6-bin.zip
|
||||||
|
@@ -108,7 +108,6 @@ yoga_java_library(
|
|||||||
yoga_java_test(
|
yoga_java_test(
|
||||||
name = "tests",
|
name = "tests",
|
||||||
srcs = glob(["tests/**/*.java"]),
|
srcs = glob(["tests/**/*.java"]),
|
||||||
contacts = ["oncall+yoga@xmail.facebook.com"],
|
|
||||||
cxx_library_whitelist = CXX_LIBRARY_WHITELIST_FOR_TESTS,
|
cxx_library_whitelist = CXX_LIBRARY_WHITELIST_FOR_TESTS,
|
||||||
use_cxx_libraries = True,
|
use_cxx_libraries = True,
|
||||||
visibility = ["PUBLIC"],
|
visibility = ["PUBLIC"],
|
||||||
|
@@ -5,12 +5,17 @@
|
|||||||
* LICENSE file in the root directory of this source tree.
|
* LICENSE file in the root directory of this source tree.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
apply plugin: 'com.jfrog.bintray'
|
||||||
apply plugin: 'com.android.library'
|
apply plugin: 'com.android.library'
|
||||||
|
apply plugin: 'com.github.dcendents.android-maven'
|
||||||
|
apply plugin: 'maven-publish'
|
||||||
|
|
||||||
|
group = GROUP
|
||||||
|
version = VERSION_NAME
|
||||||
|
|
||||||
android {
|
android {
|
||||||
compileSdkVersion rootProject.compileSdkVersion
|
compileSdkVersion rootProject.compileSdkVersion
|
||||||
buildToolsVersion rootProject.buildToolsVersion
|
buildToolsVersion rootProject.buildToolsVersion
|
||||||
ndkVersion rootProject.ndkVersion
|
|
||||||
|
|
||||||
defaultConfig {
|
defaultConfig {
|
||||||
minSdkVersion rootProject.minSdkVersion
|
minSdkVersion rootProject.minSdkVersion
|
||||||
@@ -30,6 +35,7 @@ android {
|
|||||||
externalNativeBuild {
|
externalNativeBuild {
|
||||||
cmake {
|
cmake {
|
||||||
path 'CMakeLists.txt'
|
path 'CMakeLists.txt'
|
||||||
|
version '3.6.0-rc2'
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -52,11 +58,32 @@ android {
|
|||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
implementation 'com.google.code.findbugs:jsr305:3.0.2'
|
implementation 'com.google.code.findbugs:jsr305:3.0.1'
|
||||||
implementation project(':yoga:proguard-annotations')
|
implementation project(':yoga:proguard-annotations')
|
||||||
implementation 'com.facebook.soloader:soloader:0.10.1'
|
implementation 'com.facebook.soloader:soloader:0.5.1'
|
||||||
testImplementation 'junit:junit:4.12'
|
testImplementation 'junit:junit:4.12'
|
||||||
testImplementation project(':testutil')
|
testImplementation project(':testutil')
|
||||||
}
|
}
|
||||||
|
|
||||||
apply plugin: 'com.vanniktech.maven.publish'
|
task sourcesJar(type: Jar) {
|
||||||
|
classifier = 'source'
|
||||||
|
from android.sourceSets.main.java.srcDirs
|
||||||
|
}
|
||||||
|
|
||||||
|
task javadoc(type: Javadoc) {
|
||||||
|
failOnError false
|
||||||
|
source = android.sourceSets.main.java.sourceFiles
|
||||||
|
classpath += project.files(android.getBootClasspath().join(File.pathSeparator))
|
||||||
|
classpath += configurations.compile
|
||||||
|
}
|
||||||
|
|
||||||
|
task javadocJar(type: Jar, dependsOn: javadoc) {
|
||||||
|
classifier = 'javadoc'
|
||||||
|
from javadoc.destinationDir
|
||||||
|
}
|
||||||
|
|
||||||
|
ext {
|
||||||
|
bintrayName = 'com.facebook.yoga:yoga'
|
||||||
|
}
|
||||||
|
|
||||||
|
apply from: rootProject.file('gradle/release.gradle')
|
||||||
|
@@ -9,15 +9,7 @@ package com.facebook.yoga;
|
|||||||
|
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
|
|
||||||
public abstract class YogaNode implements YogaProps {
|
public abstract class YogaNode {
|
||||||
|
|
||||||
/** The interface the {@link #getData()} object can optionally implement. */
|
|
||||||
public interface Inputs {
|
|
||||||
|
|
||||||
/** Requests the data object to disable mutations of its inputs. */
|
|
||||||
void freeze(final YogaNode node, final @Nullable YogaNode parent);
|
|
||||||
}
|
|
||||||
|
|
||||||
public abstract void reset();
|
public abstract void reset();
|
||||||
|
|
||||||
public abstract int getChildCount();
|
public abstract int getChildCount();
|
||||||
@@ -33,10 +25,12 @@ public abstract class YogaNode implements YogaProps {
|
|||||||
public abstract YogaNode removeChildAt(int i);
|
public abstract YogaNode removeChildAt(int i);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @returns the {@link YogaNode} that owns this {@link YogaNode}. The owner is used to identify
|
* @returns the {@link YogaNode} that owns this {@link YogaNode}.
|
||||||
* the YogaTree that a {@link YogaNode} belongs to. This method will return the parent of the
|
* The owner is used to identify the YogaTree that a {@link YogaNode} belongs
|
||||||
* {@link YogaNode} when the {@link YogaNode} only belongs to one YogaTree or null when the
|
* to.
|
||||||
* {@link YogaNode} is shared between two or more YogaTrees.
|
* This method will return the parent of the {@link YogaNode} when the
|
||||||
|
* {@link YogaNode} only belongs to one YogaTree or null when the
|
||||||
|
* {@link YogaNode} is shared between two or more YogaTrees.
|
||||||
*/
|
*/
|
||||||
@Nullable
|
@Nullable
|
||||||
public abstract YogaNode getOwner();
|
public abstract YogaNode getOwner();
|
||||||
|
@@ -83,9 +83,6 @@ public abstract class YogaNodeJNIBase extends YogaNode implements Cloneable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void addChildAt(YogaNode c, int i) {
|
public void addChildAt(YogaNode c, int i) {
|
||||||
if (!(c instanceof YogaNodeJNIBase)) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
YogaNodeJNIBase child = (YogaNodeJNIBase) c;
|
YogaNodeJNIBase child = (YogaNodeJNIBase) c;
|
||||||
if (child.mOwner != null) {
|
if (child.mOwner != null) {
|
||||||
throw new IllegalStateException("Child already has a parent, it must be removed first.");
|
throw new IllegalStateException("Child already has a parent, it must be removed first.");
|
||||||
@@ -108,9 +105,6 @@ public abstract class YogaNodeJNIBase extends YogaNode implements Cloneable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void swapChildAt(YogaNode newChild, int position) {
|
public void swapChildAt(YogaNode newChild, int position) {
|
||||||
if (!(newChild instanceof YogaNodeJNIBase)) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
YogaNodeJNIBase child = (YogaNodeJNIBase) newChild;
|
YogaNodeJNIBase child = (YogaNodeJNIBase) newChild;
|
||||||
mChildren.remove(position);
|
mChildren.remove(position);
|
||||||
mChildren.add(position, child);
|
mChildren.add(position, child);
|
||||||
@@ -122,9 +116,6 @@ public abstract class YogaNodeJNIBase extends YogaNode implements Cloneable {
|
|||||||
public YogaNodeJNIBase cloneWithChildren() {
|
public YogaNodeJNIBase cloneWithChildren() {
|
||||||
try {
|
try {
|
||||||
YogaNodeJNIBase clonedYogaNode = (YogaNodeJNIBase) super.clone();
|
YogaNodeJNIBase clonedYogaNode = (YogaNodeJNIBase) super.clone();
|
||||||
if (clonedYogaNode.mChildren != null) {
|
|
||||||
clonedYogaNode.mChildren = new ArrayList<>(clonedYogaNode.mChildren);
|
|
||||||
}
|
|
||||||
long clonedNativePointer = YogaNative.jni_YGNodeCloneJNI(mNativePointer);
|
long clonedNativePointer = YogaNative.jni_YGNodeCloneJNI(mNativePointer);
|
||||||
clonedYogaNode.mOwner = null;
|
clonedYogaNode.mOwner = null;
|
||||||
clonedYogaNode.mNativePointer = clonedNativePointer;
|
clonedYogaNode.mNativePointer = clonedNativePointer;
|
||||||
@@ -197,18 +188,12 @@ public abstract class YogaNodeJNIBase extends YogaNode implements Cloneable {
|
|||||||
long[] nativePointers = null;
|
long[] nativePointers = null;
|
||||||
YogaNodeJNIBase[] nodes = null;
|
YogaNodeJNIBase[] nodes = null;
|
||||||
|
|
||||||
freeze(null);
|
|
||||||
|
|
||||||
ArrayList<YogaNodeJNIBase> n = new ArrayList<>();
|
ArrayList<YogaNodeJNIBase> n = new ArrayList<>();
|
||||||
n.add(this);
|
n.add(this);
|
||||||
for (int i = 0; i < n.size(); ++i) {
|
for (int i = 0; i < n.size(); ++i) {
|
||||||
final YogaNodeJNIBase parent = n.get(i);
|
List<YogaNodeJNIBase> children = n.get(i).mChildren;
|
||||||
List<YogaNodeJNIBase> children = parent.mChildren;
|
|
||||||
if (children != null) {
|
if (children != null) {
|
||||||
for (YogaNodeJNIBase child : children) {
|
n.addAll(children);
|
||||||
child.freeze(parent);
|
|
||||||
n.add(child);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -221,13 +206,6 @@ public abstract class YogaNodeJNIBase extends YogaNode implements Cloneable {
|
|||||||
YogaNative.jni_YGNodeCalculateLayoutJNI(mNativePointer, width, height, nativePointers, nodes);
|
YogaNative.jni_YGNodeCalculateLayoutJNI(mNativePointer, width, height, nativePointers, nodes);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void freeze(YogaNode parent) {
|
|
||||||
Object data = getData();
|
|
||||||
if (data instanceof Inputs) {
|
|
||||||
((Inputs) data).freeze(this, parent);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void dirty() {
|
public void dirty() {
|
||||||
YogaNative.jni_YGNodeMarkDirtyJNI(mNativePointer);
|
YogaNative.jni_YGNodeMarkDirtyJNI(mNativePointer);
|
||||||
}
|
}
|
||||||
@@ -242,9 +220,6 @@ public abstract class YogaNodeJNIBase extends YogaNode implements Cloneable {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void copyStyle(YogaNode srcNode) {
|
public void copyStyle(YogaNode srcNode) {
|
||||||
if (!(srcNode instanceof YogaNodeJNIBase)) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
YogaNative.jni_YGNodeCopyStyleJNI(mNativePointer, ((YogaNodeJNIBase) srcNode).mNativePointer);
|
YogaNative.jni_YGNodeCopyStyleJNI(mNativePointer, ((YogaNodeJNIBase) srcNode).mNativePointer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -8,9 +8,8 @@
|
|||||||
package com.facebook.yoga;
|
package com.facebook.yoga;
|
||||||
|
|
||||||
public enum YogaPositionType {
|
public enum YogaPositionType {
|
||||||
STATIC(0),
|
RELATIVE(0),
|
||||||
RELATIVE(1),
|
ABSOLUTE(1);
|
||||||
ABSOLUTE(2);
|
|
||||||
|
|
||||||
private final int mIntValue;
|
private final int mIntValue;
|
||||||
|
|
||||||
@@ -24,9 +23,8 @@ public enum YogaPositionType {
|
|||||||
|
|
||||||
public static YogaPositionType fromInt(int value) {
|
public static YogaPositionType fromInt(int value) {
|
||||||
switch (value) {
|
switch (value) {
|
||||||
case 0: return STATIC;
|
case 0: return RELATIVE;
|
||||||
case 1: return RELATIVE;
|
case 1: return ABSOLUTE;
|
||||||
case 2: return ABSOLUTE;
|
|
||||||
default: throw new IllegalArgumentException("Unknown enum value: " + value);
|
default: throw new IllegalArgumentException("Unknown enum value: " + value);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -1,151 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) Facebook, Inc. and its affiliates.
|
|
||||||
*
|
|
||||||
* This source code is licensed under the MIT license found in the
|
|
||||||
* LICENSE file in the root directory of this source tree.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package com.facebook.yoga;
|
|
||||||
|
|
||||||
public interface YogaProps {
|
|
||||||
|
|
||||||
/* Width properties */
|
|
||||||
|
|
||||||
void setWidth(float width);
|
|
||||||
|
|
||||||
void setWidthPercent(float percent);
|
|
||||||
|
|
||||||
void setMinWidth(float minWidth);
|
|
||||||
|
|
||||||
void setMinWidthPercent(float percent);
|
|
||||||
|
|
||||||
void setMaxWidth(float maxWidth);
|
|
||||||
|
|
||||||
void setMaxWidthPercent(float percent);
|
|
||||||
|
|
||||||
void setWidthAuto();
|
|
||||||
|
|
||||||
/* Height properties */
|
|
||||||
|
|
||||||
void setHeight(float height);
|
|
||||||
|
|
||||||
void setHeightPercent(float percent);
|
|
||||||
|
|
||||||
void setMinHeight(float minHeight);
|
|
||||||
|
|
||||||
void setMinHeightPercent(float percent);
|
|
||||||
|
|
||||||
void setMaxHeight(float maxHeight);
|
|
||||||
|
|
||||||
void setMaxHeightPercent(float percent);
|
|
||||||
|
|
||||||
void setHeightAuto();
|
|
||||||
|
|
||||||
/* Margin properties */
|
|
||||||
|
|
||||||
void setMargin(YogaEdge edge, float margin);
|
|
||||||
|
|
||||||
void setMarginPercent(YogaEdge edge, float percent);
|
|
||||||
|
|
||||||
void setMarginAuto(YogaEdge edge);
|
|
||||||
|
|
||||||
/* Padding properties */
|
|
||||||
|
|
||||||
void setPadding(YogaEdge edge, float padding);
|
|
||||||
|
|
||||||
void setPaddingPercent(YogaEdge edge, float percent);
|
|
||||||
|
|
||||||
/* Position properties */
|
|
||||||
|
|
||||||
void setPositionType(YogaPositionType positionType);
|
|
||||||
|
|
||||||
void setPosition(YogaEdge edge, float position);
|
|
||||||
|
|
||||||
void setPositionPercent(YogaEdge edge, float percent);
|
|
||||||
|
|
||||||
/* Alignment properties */
|
|
||||||
|
|
||||||
void setAlignContent(YogaAlign alignContent);
|
|
||||||
|
|
||||||
void setAlignItems(YogaAlign alignItems);
|
|
||||||
|
|
||||||
void setAlignSelf(YogaAlign alignSelf);
|
|
||||||
|
|
||||||
/* Flex properties */
|
|
||||||
|
|
||||||
void setFlex(float flex);
|
|
||||||
|
|
||||||
void setFlexBasisAuto();
|
|
||||||
|
|
||||||
void setFlexBasisPercent(float percent);
|
|
||||||
|
|
||||||
void setFlexBasis(float flexBasis);
|
|
||||||
|
|
||||||
void setFlexDirection(YogaFlexDirection direction);
|
|
||||||
|
|
||||||
void setFlexGrow(float flexGrow);
|
|
||||||
|
|
||||||
void setFlexShrink(float flexShrink);
|
|
||||||
|
|
||||||
/* Other properties */
|
|
||||||
|
|
||||||
void setJustifyContent(YogaJustify justifyContent);
|
|
||||||
|
|
||||||
void setDirection(YogaDirection direction);
|
|
||||||
|
|
||||||
void setBorder(YogaEdge edge, float value);
|
|
||||||
|
|
||||||
void setWrap(YogaWrap wrap);
|
|
||||||
|
|
||||||
void setAspectRatio(float aspectRatio);
|
|
||||||
|
|
||||||
void setIsReferenceBaseline(boolean isReferenceBaseline);
|
|
||||||
|
|
||||||
void setMeasureFunction(YogaMeasureFunction measureFunction);
|
|
||||||
|
|
||||||
void setBaselineFunction(YogaBaselineFunction yogaBaselineFunction);
|
|
||||||
|
|
||||||
/* Getters */
|
|
||||||
|
|
||||||
YogaValue getWidth();
|
|
||||||
|
|
||||||
YogaValue getMinWidth();
|
|
||||||
|
|
||||||
YogaValue getMaxWidth();
|
|
||||||
|
|
||||||
YogaValue getHeight();
|
|
||||||
|
|
||||||
YogaValue getMinHeight();
|
|
||||||
|
|
||||||
YogaValue getMaxHeight();
|
|
||||||
|
|
||||||
YogaDirection getStyleDirection();
|
|
||||||
|
|
||||||
YogaFlexDirection getFlexDirection();
|
|
||||||
|
|
||||||
YogaJustify getJustifyContent();
|
|
||||||
|
|
||||||
YogaAlign getAlignItems();
|
|
||||||
|
|
||||||
YogaAlign getAlignSelf();
|
|
||||||
|
|
||||||
YogaAlign getAlignContent();
|
|
||||||
|
|
||||||
YogaPositionType getPositionType();
|
|
||||||
|
|
||||||
float getFlexGrow();
|
|
||||||
|
|
||||||
float getFlexShrink();
|
|
||||||
|
|
||||||
YogaValue getFlexBasis();
|
|
||||||
|
|
||||||
float getAspectRatio();
|
|
||||||
|
|
||||||
YogaValue getMargin(YogaEdge edge);
|
|
||||||
|
|
||||||
YogaValue getPadding(YogaEdge edge);
|
|
||||||
|
|
||||||
YogaValue getPosition(YogaEdge edge);
|
|
||||||
|
|
||||||
float getBorder(YogaEdge edge);
|
|
||||||
}
|
|
@@ -196,7 +196,7 @@ static void jni_YGConfigSetLoggerJNI(
|
|||||||
delete context;
|
delete context;
|
||||||
YGConfigSetContext(config, nullptr);
|
YGConfigSetContext(config, nullptr);
|
||||||
}
|
}
|
||||||
YGConfigSetLogger(config, nullptr);
|
config->setLogger(nullptr);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -726,7 +726,8 @@ static void jni_YGNodePrintJNI(JNIEnv* env, jobject obj, jlong nativePointer) {
|
|||||||
const YGNodeRef node = _jlong2YGNodeRef(nativePointer);
|
const YGNodeRef node = _jlong2YGNodeRef(nativePointer);
|
||||||
YGNodePrint(
|
YGNodePrint(
|
||||||
node,
|
node,
|
||||||
(YGPrintOptions) (YGPrintOptionsStyle | YGPrintOptionsLayout | YGPrintOptionsChildren));
|
(YGPrintOptions)(
|
||||||
|
YGPrintOptionsStyle | YGPrintOptionsLayout | YGPrintOptionsChildren));
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -10,4 +10,4 @@ apply plugin: 'java'
|
|||||||
sourceCompatibility = '1.7'
|
sourceCompatibility = '1.7'
|
||||||
targetCompatibility = '1.7'
|
targetCompatibility = '1.7'
|
||||||
|
|
||||||
apply plugin: 'com.vanniktech.maven.publish'
|
apply from: rootProject.file('gradle/release.gradle')
|
||||||
|
@@ -1,24 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) Facebook, Inc. and its affiliates.
|
|
||||||
*
|
|
||||||
* This source code is licensed under the MIT license found in the
|
|
||||||
* LICENSE file in the root directory of this source tree.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package com.facebook.proguard.annotations;
|
|
||||||
|
|
||||||
import java.lang.annotation.ElementType;
|
|
||||||
import java.lang.annotation.Retention;
|
|
||||||
import java.lang.annotation.Target;
|
|
||||||
|
|
||||||
import static java.lang.annotation.RetentionPolicy.CLASS;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Add this annotation to a class to instruct Proguard to not strip it or any of its fields or
|
|
||||||
* methods out.
|
|
||||||
*
|
|
||||||
* <p>This is useful for methods called via reflection that could appear as unused to Proguard.
|
|
||||||
*/
|
|
||||||
@Target({ElementType.TYPE})
|
|
||||||
@Retention(CLASS)
|
|
||||||
public @interface DoNotStripAny {}
|
|
@@ -1,10 +1,9 @@
|
|||||||
/*
|
/**
|
||||||
* Copyright (c) Facebook, Inc. and its affiliates.
|
* Copyright (c) Facebook, Inc. and its affiliates.
|
||||||
*
|
*
|
||||||
* This source code is licensed under the MIT license found in the
|
* This source code is licensed under the MIT license found in the LICENSE
|
||||||
* LICENSE file in the root directory of this source tree.
|
* file in the root directory of this source tree.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// @Generated by gentest/gentest.rb from gentest/fixtures/YGDisplayTest.html
|
// @Generated by gentest/gentest.rb from gentest/fixtures/YGDisplayTest.html
|
||||||
|
|
||||||
package com.facebook.yoga;
|
package com.facebook.yoga;
|
||||||
@@ -338,47 +337,6 @@ public class YGDisplayTest {
|
|||||||
assertEquals(0f, root_child1.getLayoutHeight(), 0.0f);
|
assertEquals(0f, root_child1.getLayoutHeight(), 0.0f);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
|
||||||
public void test_display_none_with_position_absolute() {
|
|
||||||
YogaConfig config = YogaConfigFactory.create();
|
|
||||||
|
|
||||||
final YogaNode root = createNode(config);
|
|
||||||
root.setWidth(100f);
|
|
||||||
root.setHeight(100f);
|
|
||||||
|
|
||||||
final YogaNode root_child0 = createNode(config);
|
|
||||||
root_child0.setPositionType(YogaPositionType.ABSOLUTE);
|
|
||||||
root_child0.setWidth(100f);
|
|
||||||
root_child0.setHeight(100f);
|
|
||||||
root_child0.setDisplay(YogaDisplay.NONE);
|
|
||||||
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(0f, root_child0.getLayoutWidth(), 0.0f);
|
|
||||||
assertEquals(0f, 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(0f, root_child0.getLayoutWidth(), 0.0f);
|
|
||||||
assertEquals(0f, root_child0.getLayoutHeight(), 0.0f);
|
|
||||||
}
|
|
||||||
|
|
||||||
private YogaNode createNode(YogaConfig config) {
|
private YogaNode createNode(YogaConfig config) {
|
||||||
return mNodeFactory.create(config);
|
return mNodeFactory.create(config);
|
||||||
}
|
}
|
||||||
|
@@ -9,62 +9,10 @@ package com.facebook.yoga;
|
|||||||
|
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import java.lang.ref.WeakReference;
|
import java.lang.ref.WeakReference;
|
||||||
import java.util.List;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
|
|
||||||
import static org.junit.Assert.assertEquals;
|
|
||||||
import static org.junit.Assert.fail;
|
import static org.junit.Assert.fail;
|
||||||
|
|
||||||
public class YogaLoggerTest {
|
public class YogaLoggerTest {
|
||||||
|
|
||||||
@Test
|
|
||||||
public void testRemovingLoggerFromConfig() throws Exception {
|
|
||||||
final List<String> logs = new ArrayList<>();
|
|
||||||
|
|
||||||
final YogaConfig config = YogaConfigFactory.create();
|
|
||||||
YogaLogger logger = new YogaLogger() {
|
|
||||||
@Override
|
|
||||||
public void log(YogaLogLevel level, String message) {
|
|
||||||
logs.add(message);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
config.setLogger(logger);
|
|
||||||
|
|
||||||
final YogaNode root = YogaNodeFactory.create(config);
|
|
||||||
root.setFlexDirection(YogaFlexDirection.ROW);
|
|
||||||
root.setAlignItems(YogaAlign.BASELINE);
|
|
||||||
|
|
||||||
final YogaNode child1 = YogaNodeFactory.create(config);
|
|
||||||
root.addChildAt(child1, 0);
|
|
||||||
|
|
||||||
final YogaNode child2 = YogaNodeFactory.create(config);
|
|
||||||
child2.setBaselineFunction(new YogaBaselineFunction() {
|
|
||||||
public float baseline(YogaNode node, float width, float height) {
|
|
||||||
return Float.NaN;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
root.addChildAt(child2, 1);
|
|
||||||
|
|
||||||
assertEquals(logs.size(), 0);
|
|
||||||
try {
|
|
||||||
root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);
|
|
||||||
fail("Expected calculateLayout to throw");
|
|
||||||
} catch (IllegalStateException e) {
|
|
||||||
}
|
|
||||||
|
|
||||||
assertEquals(logs.size(), 1);
|
|
||||||
|
|
||||||
config.setLogger(null);
|
|
||||||
|
|
||||||
try {
|
|
||||||
root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED);
|
|
||||||
fail("Expected calculateLayout to throw again");
|
|
||||||
} catch (IllegalStateException e) {
|
|
||||||
}
|
|
||||||
|
|
||||||
assertEquals(logs.size(), 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testLoggerLeak() throws Exception {
|
public void testLoggerLeak() throws Exception {
|
||||||
final YogaConfig config = YogaConfigFactory.create();
|
final YogaConfig config = YogaConfigFactory.create();
|
||||||
|
@@ -191,7 +191,7 @@ public class YogaNodeStylePropertiesTest {
|
|||||||
public void testPositionTypeDefault() {
|
public void testPositionTypeDefault() {
|
||||||
final YogaNode node = createNode();
|
final YogaNode node = createNode();
|
||||||
|
|
||||||
assertEquals(YogaPositionType.STATIC, node.getPositionType());
|
assertEquals(YogaPositionType.RELATIVE, node.getPositionType());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
@@ -7,9 +7,5 @@
|
|||||||
[lints]
|
[lints]
|
||||||
|
|
||||||
[options]
|
[options]
|
||||||
types_first=false
|
|
||||||
|
|
||||||
[strict]
|
[strict]
|
||||||
|
|
||||||
[version]
|
|
||||||
^0.140.0
|
|
||||||
|
@@ -23,8 +23,8 @@ static YGSize globalMeasureFunc(
|
|||||||
Node const& node = *reinterpret_cast<Node const*>(YGNodeGetContext(nodeRef));
|
Node const& node = *reinterpret_cast<Node const*>(YGNodeGetContext(nodeRef));
|
||||||
|
|
||||||
Size size = node.callMeasureFunc(width, widthMode, height, heightMode);
|
Size size = node.callMeasureFunc(width, widthMode, height, heightMode);
|
||||||
YGSize ygSize = {
|
YGSize ygSize = {static_cast<float>(size.width),
|
||||||
static_cast<float>(size.width), static_cast<float>(size.height)};
|
static_cast<float>(size.height)};
|
||||||
|
|
||||||
return ygSize;
|
return ygSize;
|
||||||
}
|
}
|
||||||
|
@@ -1,10 +1,9 @@
|
|||||||
/**
|
/**
|
||||||
* Copyright (c) Facebook, Inc. and its affiliates.
|
* Copyright (c) Facebook, Inc. and its affiliates.
|
||||||
*
|
*
|
||||||
* This source code is licensed under the MIT license found in the
|
* This source code is licensed under the MIT license found in the LICENSE
|
||||||
* LICENSE file in the root directory of this source tree.
|
* file in the root directory of this source tree.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// @Generated by gentest/gentest.rb from gentest/fixtures/YGDisplayTest.html
|
// @Generated by gentest/gentest.rb from gentest/fixtures/YGDisplayTest.html
|
||||||
|
|
||||||
var Yoga = Yoga || require("../../sources/entry-" + process.env.TEST_ENTRY);
|
var Yoga = Yoga || require("../../sources/entry-" + process.env.TEST_ENTRY);
|
||||||
@@ -343,48 +342,3 @@ it("display_none_with_position", function () {
|
|||||||
config.free();
|
config.free();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
it("display_none_with_position_absolute", function () {
|
|
||||||
var config = Yoga.Config.create();
|
|
||||||
|
|
||||||
try {
|
|
||||||
var root = Yoga.Node.create(config);
|
|
||||||
root.setWidth(100);
|
|
||||||
root.setHeight(100);
|
|
||||||
|
|
||||||
var root_child0 = Yoga.Node.create(config);
|
|
||||||
root_child0.setPositionType(Yoga.POSITION_TYPE_ABSOLUTE);
|
|
||||||
root_child0.setWidth(100);
|
|
||||||
root_child0.setHeight(100);
|
|
||||||
root_child0.setDisplay(Yoga.DISPLAY_NONE);
|
|
||||||
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(0 === root_child0.getComputedWidth(), "0 === root_child0.getComputedWidth() (" + root_child0.getComputedWidth() + ")");
|
|
||||||
console.assert(0 === root_child0.getComputedHeight(), "0 === 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(0 === root_child0.getComputedWidth(), "0 === root_child0.getComputedWidth() (" + root_child0.getComputedWidth() + ")");
|
|
||||||
console.assert(0 === root_child0.getComputedHeight(), "0 === root_child0.getComputedHeight() (" + root_child0.getComputedHeight() + ")");
|
|
||||||
} finally {
|
|
||||||
if (typeof root !== "undefined") {
|
|
||||||
root.freeRecursive();
|
|
||||||
}
|
|
||||||
|
|
||||||
config.free();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
@@ -33,8 +33,8 @@ android {
|
|||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
implementation 'com.facebook.soloader:soloader:0.10.1'
|
implementation 'com.facebook.soloader:soloader:0.5.1'
|
||||||
implementation 'com.google.code.findbugs:jsr305:3.0.2'
|
implementation 'com.google.code.findbugs:jsr305:3.0.1'
|
||||||
implementation project(':yoga:proguard-annotations')
|
implementation project(':yoga:proguard-annotations')
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -14,8 +14,17 @@ set -e
|
|||||||
BASEDIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )/.." && pwd )"
|
BASEDIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )/.." && pwd )"
|
||||||
IS_SNAPSHOT="$(grep 'VERSION_NAME=[0-9\.]\+-SNAPSHOT' "$BASEDIR/gradle.properties")"
|
IS_SNAPSHOT="$(grep 'VERSION_NAME=[0-9\.]\+-SNAPSHOT' "$BASEDIR/gradle.properties")"
|
||||||
|
|
||||||
if [ "$IS_SNAPSHOT" == "" ]; then
|
if [ "$GITHUB_REPOSITORY" != "facebook/yoga" ]; then
|
||||||
|
echo >&2 "Skipping repository. Expected project to be 'facebook/yoga', but was '$GITHUB_REPOSITORY'."
|
||||||
|
exit
|
||||||
|
elif [ "$GITHUB_REF" != "refs/heads/master" ]; then
|
||||||
|
echo >&2 "Skipping build. Expected ref name to be 'refs/heads/master', but was '$GITHUB_REF'."
|
||||||
|
exit
|
||||||
|
elif [ "$GITHUB_EVENT_NAME" != "push" ]; then
|
||||||
|
echo >&2 "Skipping build. Only considering push builds, but event was '$GITHUB_EVENT_NAME'."
|
||||||
|
exit
|
||||||
|
elif [ "$IS_SNAPSHOT" == "" ]; then
|
||||||
echo >&2 "Skipping build. Given build doesn't appear to be a SNAPSHOT release."
|
echo >&2 "Skipping build. Given build doesn't appear to be a SNAPSHOT release."
|
||||||
else
|
else
|
||||||
env TERMINAL=dumb "$BASEDIR/gradlew" publish
|
env TERMINAL=dumb "$BASEDIR/gradlew" uploadArchives
|
||||||
fi
|
fi
|
||||||
|
@@ -303,8 +303,8 @@ EventArgs createArgs(
|
|||||||
};
|
};
|
||||||
|
|
||||||
EventArgs args = createArgs<E>(node, data);
|
EventArgs args = createArgs<E>(node, data);
|
||||||
args.eventTestDataPtr = {
|
args.eventTestDataPtr = {new EventTestData{eventTestData},
|
||||||
new EventTestData{eventTestData}, deleteEventTestData};
|
deleteEventTestData};
|
||||||
return args;
|
return args;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -29,13 +29,12 @@ TEST(YogaTest, computed_layout_margin) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
TEST(YogaTest, margin_side_overrides_horizontal_and_vertical) {
|
TEST(YogaTest, margin_side_overrides_horizontal_and_vertical) {
|
||||||
const std::array<YGEdge, 6> edges = {
|
const std::array<YGEdge, 6> edges = {{YGEdgeTop,
|
||||||
{YGEdgeTop,
|
YGEdgeBottom,
|
||||||
YGEdgeBottom,
|
YGEdgeStart,
|
||||||
YGEdgeStart,
|
YGEdgeEnd,
|
||||||
YGEdgeEnd,
|
YGEdgeLeft,
|
||||||
YGEdgeLeft,
|
YGEdgeRight}};
|
||||||
YGEdgeRight}};
|
|
||||||
|
|
||||||
for (float edgeValue = 0; edgeValue < 2; ++edgeValue) {
|
for (float edgeValue = 0; edgeValue < 2; ++edgeValue) {
|
||||||
for (const auto& edge : edges) {
|
for (const auto& edge : edges) {
|
||||||
@@ -59,13 +58,12 @@ TEST(YogaTest, margin_side_overrides_horizontal_and_vertical) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
TEST(YogaTest, margin_side_overrides_all) {
|
TEST(YogaTest, margin_side_overrides_all) {
|
||||||
const std::array<YGEdge, 6> edges = {
|
const std::array<YGEdge, 6> edges = {{YGEdgeTop,
|
||||||
{YGEdgeTop,
|
YGEdgeBottom,
|
||||||
YGEdgeBottom,
|
YGEdgeStart,
|
||||||
YGEdgeStart,
|
YGEdgeEnd,
|
||||||
YGEdgeEnd,
|
YGEdgeLeft,
|
||||||
YGEdgeLeft,
|
YGEdgeRight}};
|
||||||
YGEdgeRight}};
|
|
||||||
|
|
||||||
for (float edgeValue = 0; edgeValue < 2; ++edgeValue) {
|
for (float edgeValue = 0; edgeValue < 2; ++edgeValue) {
|
||||||
for (const auto& edge : edges) {
|
for (const auto& edge : edges) {
|
||||||
|
@@ -29,13 +29,12 @@ TEST(YogaTest, computed_layout_padding) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
TEST(YogaTest, padding_side_overrides_horizontal_and_vertical) {
|
TEST(YogaTest, padding_side_overrides_horizontal_and_vertical) {
|
||||||
const std::array<YGEdge, 6> edges = {
|
const std::array<YGEdge, 6> edges = {{YGEdgeTop,
|
||||||
{YGEdgeTop,
|
YGEdgeBottom,
|
||||||
YGEdgeBottom,
|
YGEdgeStart,
|
||||||
YGEdgeStart,
|
YGEdgeEnd,
|
||||||
YGEdgeEnd,
|
YGEdgeLeft,
|
||||||
YGEdgeLeft,
|
YGEdgeRight}};
|
||||||
YGEdgeRight}};
|
|
||||||
|
|
||||||
for (float edgeValue = 0; edgeValue < 2; ++edgeValue) {
|
for (float edgeValue = 0; edgeValue < 2; ++edgeValue) {
|
||||||
for (const auto& edge : edges) {
|
for (const auto& edge : edges) {
|
||||||
@@ -59,13 +58,12 @@ TEST(YogaTest, padding_side_overrides_horizontal_and_vertical) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
TEST(YogaTest, padding_side_overrides_all) {
|
TEST(YogaTest, padding_side_overrides_all) {
|
||||||
const std::array<YGEdge, 6> edges = {
|
const std::array<YGEdge, 6> edges = {{YGEdgeTop,
|
||||||
{YGEdgeTop,
|
YGEdgeBottom,
|
||||||
YGEdgeBottom,
|
YGEdgeStart,
|
||||||
YGEdgeStart,
|
YGEdgeEnd,
|
||||||
YGEdgeEnd,
|
YGEdgeLeft,
|
||||||
YGEdgeLeft,
|
YGEdgeRight}};
|
||||||
YGEdgeRight}};
|
|
||||||
|
|
||||||
for (float edgeValue = 0; edgeValue < 2; ++edgeValue) {
|
for (float edgeValue = 0; edgeValue < 2; ++edgeValue) {
|
||||||
for (const auto& edge : edges) {
|
for (const auto& edge : edges) {
|
||||||
|
@@ -20,7 +20,7 @@ TEST(YogaTest, assert_default_values) {
|
|||||||
ASSERT_EQ(YGAlignFlexStart, YGNodeStyleGetAlignContent(root));
|
ASSERT_EQ(YGAlignFlexStart, YGNodeStyleGetAlignContent(root));
|
||||||
ASSERT_EQ(YGAlignStretch, YGNodeStyleGetAlignItems(root));
|
ASSERT_EQ(YGAlignStretch, YGNodeStyleGetAlignItems(root));
|
||||||
ASSERT_EQ(YGAlignAuto, YGNodeStyleGetAlignSelf(root));
|
ASSERT_EQ(YGAlignAuto, YGNodeStyleGetAlignSelf(root));
|
||||||
ASSERT_EQ(YGPositionTypeStatic, YGNodeStyleGetPositionType(root));
|
ASSERT_EQ(YGPositionTypeRelative, YGNodeStyleGetPositionType(root));
|
||||||
ASSERT_EQ(YGWrapNoWrap, YGNodeStyleGetFlexWrap(root));
|
ASSERT_EQ(YGWrapNoWrap, YGNodeStyleGetFlexWrap(root));
|
||||||
ASSERT_EQ(YGOverflowVisible, YGNodeStyleGetOverflow(root));
|
ASSERT_EQ(YGOverflowVisible, YGNodeStyleGetOverflow(root));
|
||||||
ASSERT_FLOAT_EQ(0, YGNodeStyleGetFlexGrow(root));
|
ASSERT_FLOAT_EQ(0, YGNodeStyleGetFlexGrow(root));
|
||||||
|
@@ -1,10 +1,9 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) Facebook, Inc. and its affiliates.
|
* Copyright (c) Facebook, Inc. and its affiliates.
|
||||||
*
|
*
|
||||||
* This source code is licensed under the MIT license found in the
|
* This source code is licensed under the MIT license found in the LICENSE
|
||||||
* LICENSE file in the root directory of this source tree.
|
* file in the root directory of this source tree.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// @Generated by gentest/gentest.rb from gentest/fixtures/YGDisplayTest.html
|
// @Generated by gentest/gentest.rb from gentest/fixtures/YGDisplayTest.html
|
||||||
|
|
||||||
#include <gtest/gtest.h>
|
#include <gtest/gtest.h>
|
||||||
@@ -328,45 +327,3 @@ TEST(YogaTest, display_none_with_position) {
|
|||||||
|
|
||||||
YGConfigFree(config);
|
YGConfigFree(config);
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST(YogaTest, display_none_with_position_absolute) {
|
|
||||||
const YGConfigRef config = YGConfigNew();
|
|
||||||
|
|
||||||
const YGNodeRef root = YGNodeNewWithConfig(config);
|
|
||||||
YGNodeStyleSetWidth(root, 100);
|
|
||||||
YGNodeStyleSetHeight(root, 100);
|
|
||||||
|
|
||||||
const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
|
|
||||||
YGNodeStyleSetPositionType(root_child0, YGPositionTypeAbsolute);
|
|
||||||
YGNodeStyleSetWidth(root_child0, 100);
|
|
||||||
YGNodeStyleSetHeight(root_child0, 100);
|
|
||||||
YGNodeStyleSetDisplay(root_child0, YGDisplayNone);
|
|
||||||
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(0, YGNodeLayoutGetWidth(root_child0));
|
|
||||||
ASSERT_FLOAT_EQ(0, 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(0, YGNodeLayoutGetWidth(root_child0));
|
|
||||||
ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0));
|
|
||||||
|
|
||||||
YGNodeFreeRecursive(root);
|
|
||||||
|
|
||||||
YGConfigFree(config);
|
|
||||||
}
|
|
||||||
|
@@ -73,7 +73,8 @@ TEST(YogaTest, logger_default_node_should_print_no_style_info) {
|
|||||||
YGNodeCalculateLayout(root, YGUnitUndefined, YGUnitUndefined, YGDirectionLTR);
|
YGNodeCalculateLayout(root, YGUnitUndefined, YGUnitUndefined, YGDirectionLTR);
|
||||||
YGNodePrint(
|
YGNodePrint(
|
||||||
root,
|
root,
|
||||||
(YGPrintOptions) (YGPrintOptionsLayout | YGPrintOptionsChildren | YGPrintOptionsStyle));
|
(YGPrintOptions)(
|
||||||
|
YGPrintOptionsLayout | YGPrintOptionsChildren | YGPrintOptionsStyle));
|
||||||
YGConfigSetLogger(config, NULL);
|
YGConfigSetLogger(config, NULL);
|
||||||
YGNodeFree(root);
|
YGNodeFree(root);
|
||||||
|
|
||||||
@@ -97,7 +98,8 @@ TEST(YogaTest, logger_node_with_percentage_absolute_position_and_margin) {
|
|||||||
YGNodeCalculateLayout(root, YGUnitUndefined, YGUnitUndefined, YGDirectionLTR);
|
YGNodeCalculateLayout(root, YGUnitUndefined, YGUnitUndefined, YGDirectionLTR);
|
||||||
YGNodePrint(
|
YGNodePrint(
|
||||||
root,
|
root,
|
||||||
(YGPrintOptions) (YGPrintOptionsLayout | YGPrintOptionsChildren | YGPrintOptionsStyle));
|
(YGPrintOptions)(
|
||||||
|
YGPrintOptionsLayout | YGPrintOptionsChildren | YGPrintOptionsStyle));
|
||||||
YGConfigSetLogger(config, NULL);
|
YGConfigSetLogger(config, NULL);
|
||||||
YGNodeFree(root);
|
YGNodeFree(root);
|
||||||
|
|
||||||
@@ -120,7 +122,8 @@ TEST(YogaTest, logger_node_with_children_should_print_indented) {
|
|||||||
YGNodeCalculateLayout(root, YGUnitUndefined, YGUnitUndefined, YGDirectionLTR);
|
YGNodeCalculateLayout(root, YGUnitUndefined, YGUnitUndefined, YGDirectionLTR);
|
||||||
YGNodePrint(
|
YGNodePrint(
|
||||||
root,
|
root,
|
||||||
(YGPrintOptions) (YGPrintOptionsLayout | YGPrintOptionsChildren | YGPrintOptionsStyle));
|
(YGPrintOptions)(
|
||||||
|
YGPrintOptionsLayout | YGPrintOptionsChildren | YGPrintOptionsStyle));
|
||||||
YGConfigSetLogger(config, NULL);
|
YGConfigSetLogger(config, NULL);
|
||||||
YGNodeFreeRecursive(root);
|
YGNodeFreeRecursive(root);
|
||||||
|
|
||||||
|
@@ -4,7 +4,8 @@
|
|||||||
* This source code is licensed under the MIT license found in the LICENSE
|
* This source code is licensed under the MIT license found in the LICENSE
|
||||||
* file in the root directory of this source tree.
|
* file in the root directory of this source tree.
|
||||||
*/
|
*/
|
||||||
// @Generated by gentest/gentest.rb from gentest/fixtures/YGMarginTest.html
|
// @Generated by gentest/gentest.rb from
|
||||||
|
// gentest/fixtures/YGMarginTest.html
|
||||||
|
|
||||||
#include <gtest/gtest.h>
|
#include <gtest/gtest.h>
|
||||||
#include <yoga/Yoga.h>
|
#include <yoga/Yoga.h>
|
||||||
@@ -1714,3 +1715,111 @@ TEST(YogaTest, margin_auto_left_stretching_child) {
|
|||||||
|
|
||||||
YGConfigFree(config);
|
YGConfigFree(config);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST(YogaTest, margin_top_auto_overflow_parent) {
|
||||||
|
const YGConfigRef config = YGConfigNew();
|
||||||
|
|
||||||
|
const YGNodeRef root = YGNodeNewWithConfig(config);
|
||||||
|
YGNodeStyleSetWidth(root, 20);
|
||||||
|
YGNodeStyleSetHeight(root, 500);
|
||||||
|
|
||||||
|
const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
|
||||||
|
YGNodeStyleSetHeight(root_child0, 300);
|
||||||
|
YGNodeInsertChild(root, root_child0, 0);
|
||||||
|
|
||||||
|
const YGNodeRef root_child1 = YGNodeNewWithConfig(config);
|
||||||
|
YGNodeStyleSetMarginAuto(root_child1, YGEdgeTop);
|
||||||
|
YGNodeStyleSetHeight(root_child1, 300);
|
||||||
|
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(20, 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(20, YGNodeLayoutGetWidth(root_child0));
|
||||||
|
ASSERT_FLOAT_EQ(300, YGNodeLayoutGetHeight(root_child0));
|
||||||
|
|
||||||
|
ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));
|
||||||
|
ASSERT_FLOAT_EQ(300, YGNodeLayoutGetTop(root_child1));
|
||||||
|
ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child1));
|
||||||
|
ASSERT_FLOAT_EQ(300, YGNodeLayoutGetHeight(root_child1));
|
||||||
|
|
||||||
|
YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
|
||||||
|
|
||||||
|
ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
|
||||||
|
ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
|
||||||
|
ASSERT_FLOAT_EQ(20, 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(20, YGNodeLayoutGetWidth(root_child0));
|
||||||
|
ASSERT_FLOAT_EQ(300, YGNodeLayoutGetHeight(root_child0));
|
||||||
|
|
||||||
|
ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));
|
||||||
|
ASSERT_FLOAT_EQ(300, YGNodeLayoutGetTop(root_child1));
|
||||||
|
ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child1));
|
||||||
|
ASSERT_FLOAT_EQ(300, YGNodeLayoutGetHeight(root_child1));
|
||||||
|
|
||||||
|
YGNodeFreeRecursive(root);
|
||||||
|
|
||||||
|
YGConfigFree(config);
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST(YogaTest, margin_bottom_auto_overflow_parent) {
|
||||||
|
const YGConfigRef config = YGConfigNew();
|
||||||
|
|
||||||
|
const YGNodeRef root = YGNodeNewWithConfig(config);
|
||||||
|
YGNodeStyleSetWidth(root, 20);
|
||||||
|
YGNodeStyleSetHeight(root, 500);
|
||||||
|
|
||||||
|
const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
|
||||||
|
YGNodeStyleSetHeight(root_child0, 300);
|
||||||
|
YGNodeInsertChild(root, root_child0, 0);
|
||||||
|
|
||||||
|
const YGNodeRef root_child1 = YGNodeNewWithConfig(config);
|
||||||
|
YGNodeStyleSetMarginAuto(root_child1, YGEdgeTop);
|
||||||
|
YGNodeStyleSetHeight(root_child1, 300);
|
||||||
|
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(20, 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(20, YGNodeLayoutGetWidth(root_child0));
|
||||||
|
ASSERT_FLOAT_EQ(300, YGNodeLayoutGetHeight(root_child0));
|
||||||
|
|
||||||
|
ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));
|
||||||
|
ASSERT_FLOAT_EQ(300, YGNodeLayoutGetTop(root_child1));
|
||||||
|
ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child1));
|
||||||
|
ASSERT_FLOAT_EQ(300, YGNodeLayoutGetHeight(root_child1));
|
||||||
|
|
||||||
|
YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
|
||||||
|
|
||||||
|
ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
|
||||||
|
ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
|
||||||
|
ASSERT_FLOAT_EQ(20, 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(20, YGNodeLayoutGetWidth(root_child0));
|
||||||
|
ASSERT_FLOAT_EQ(300, YGNodeLayoutGetHeight(root_child0));
|
||||||
|
|
||||||
|
ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));
|
||||||
|
ASSERT_FLOAT_EQ(300, YGNodeLayoutGetTop(root_child1));
|
||||||
|
ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child1));
|
||||||
|
ASSERT_FLOAT_EQ(300, YGNodeLayoutGetHeight(root_child1));
|
||||||
|
|
||||||
|
YGNodeFreeRecursive(root);
|
||||||
|
|
||||||
|
YGConfigFree(config);
|
||||||
|
}
|
||||||
|
@@ -132,10 +132,9 @@ ACCESSOR_TEST(
|
|||||||
|
|
||||||
ACCESSOR_TEST(
|
ACCESSOR_TEST(
|
||||||
positionType,
|
positionType,
|
||||||
YGPositionTypeStatic,
|
|
||||||
YGPositionTypeAbsolute,
|
|
||||||
YGPositionTypeRelative,
|
YGPositionTypeRelative,
|
||||||
YGPositionTypeStatic)
|
YGPositionTypeAbsolute,
|
||||||
|
YGPositionTypeRelative)
|
||||||
|
|
||||||
ACCESSOR_TEST(
|
ACCESSOR_TEST(
|
||||||
flexWrap,
|
flexWrap,
|
||||||
|
@@ -29,8 +29,8 @@ TEST(YogaTest, set_children_adds_children_to_parent) {
|
|||||||
const std::vector<YGNodeRef> expectedChildren = {root_child0, root_child1};
|
const std::vector<YGNodeRef> expectedChildren = {root_child0, root_child1};
|
||||||
ASSERT_EQ(children, expectedChildren);
|
ASSERT_EQ(children, expectedChildren);
|
||||||
|
|
||||||
const std::vector<YGNodeRef> owners = {
|
const std::vector<YGNodeRef> owners = {YGNodeGetOwner(root_child0),
|
||||||
YGNodeGetOwner(root_child0), YGNodeGetOwner(root_child1)};
|
YGNodeGetOwner(root_child1)};
|
||||||
const std::vector<YGNodeRef> expectedOwners = {root, root};
|
const std::vector<YGNodeRef> expectedOwners = {root, root};
|
||||||
ASSERT_EQ(owners, expectedOwners);
|
ASSERT_EQ(owners, expectedOwners);
|
||||||
|
|
||||||
@@ -49,8 +49,8 @@ TEST(YogaTest, set_children_to_empty_removes_old_children) {
|
|||||||
const std::vector<YGNodeRef> expectedChildren = {};
|
const std::vector<YGNodeRef> expectedChildren = {};
|
||||||
ASSERT_EQ(children, expectedChildren);
|
ASSERT_EQ(children, expectedChildren);
|
||||||
|
|
||||||
const std::vector<YGNodeRef> owners = {
|
const std::vector<YGNodeRef> owners = {YGNodeGetOwner(root_child0),
|
||||||
YGNodeGetOwner(root_child0), YGNodeGetOwner(root_child1)};
|
YGNodeGetOwner(root_child1)};
|
||||||
const std::vector<YGNodeRef> expectedOwners = {nullptr, nullptr};
|
const std::vector<YGNodeRef> expectedOwners = {nullptr, nullptr};
|
||||||
ASSERT_EQ(owners, expectedOwners);
|
ASSERT_EQ(owners, expectedOwners);
|
||||||
|
|
||||||
@@ -73,8 +73,8 @@ TEST(YogaTest, set_children_replaces_non_common_children) {
|
|||||||
const std::vector<YGNodeRef> expectedChildren = {root_child2, root_child3};
|
const std::vector<YGNodeRef> expectedChildren = {root_child2, root_child3};
|
||||||
ASSERT_EQ(children, expectedChildren);
|
ASSERT_EQ(children, expectedChildren);
|
||||||
|
|
||||||
const std::vector<YGNodeRef> owners = {
|
const std::vector<YGNodeRef> owners = {YGNodeGetOwner(root_child0),
|
||||||
YGNodeGetOwner(root_child0), YGNodeGetOwner(root_child1)};
|
YGNodeGetOwner(root_child1)};
|
||||||
const std::vector<YGNodeRef> expectedOwners = {nullptr, nullptr};
|
const std::vector<YGNodeRef> expectedOwners = {nullptr, nullptr};
|
||||||
ASSERT_EQ(owners, expectedOwners);
|
ASSERT_EQ(owners, expectedOwners);
|
||||||
|
|
||||||
@@ -100,11 +100,10 @@ TEST(YogaTest, set_children_keeps_and_reorders_common_children) {
|
|||||||
root_child2, root_child1, root_child3};
|
root_child2, root_child1, root_child3};
|
||||||
ASSERT_EQ(children, expectedChildren);
|
ASSERT_EQ(children, expectedChildren);
|
||||||
|
|
||||||
const std::vector<YGNodeRef> owners = {
|
const std::vector<YGNodeRef> owners = {YGNodeGetOwner(root_child0),
|
||||||
YGNodeGetOwner(root_child0),
|
YGNodeGetOwner(root_child1),
|
||||||
YGNodeGetOwner(root_child1),
|
YGNodeGetOwner(root_child2),
|
||||||
YGNodeGetOwner(root_child2),
|
YGNodeGetOwner(root_child3)};
|
||||||
YGNodeGetOwner(root_child3)};
|
|
||||||
const std::vector<YGNodeRef> expectedOwners = {nullptr, root, root, root};
|
const std::vector<YGNodeRef> expectedOwners = {nullptr, root, root, root};
|
||||||
ASSERT_EQ(owners, expectedOwners);
|
ASSERT_EQ(owners, expectedOwners);
|
||||||
|
|
||||||
|
@@ -29,10 +29,11 @@ android {
|
|||||||
externalNativeBuild {
|
externalNativeBuild {
|
||||||
cmake {
|
cmake {
|
||||||
path 'src/main/cpp/CMakeLists.txt'
|
path 'src/main/cpp/CMakeLists.txt'
|
||||||
|
version '3.6.0-rc2'
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
implementation 'com.facebook.soloader:soloader:0.10.1'
|
implementation 'com.facebook.soloader:soloader:0.5.1'
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -7,9 +7,5 @@
|
|||||||
[lints]
|
[lints]
|
||||||
|
|
||||||
[options]
|
[options]
|
||||||
types_first=false
|
|
||||||
|
|
||||||
[strict]
|
[strict]
|
||||||
|
|
||||||
[version]
|
|
||||||
^0.140.0
|
|
||||||
|
@@ -73,9 +73,9 @@ function keyLookup(key: string): string {
|
|||||||
|
|
||||||
function getValue(value) {
|
function getValue(value) {
|
||||||
if (typeof value === 'string' && /%$/.test(value)) {
|
if (typeof value === 'string' && /%$/.test(value)) {
|
||||||
return `RCRelativeDimension::Percent(${parseFloat(value)})`;
|
return `CKRelativeDimension::Percent(${parseFloat(value)})`;
|
||||||
} else if (value === 'auto') {
|
} else if (value === 'auto') {
|
||||||
return 'RCRelativeDimension::Auto()';
|
return 'CKRelativeDimension::Auto()';
|
||||||
} else {
|
} else {
|
||||||
return String(parseFloat(value));
|
return String(parseFloat(value));
|
||||||
}
|
}
|
||||||
|
@@ -24,7 +24,7 @@ function getEnum(yogaEnum: string, value: string | number): string {
|
|||||||
position: 'Position',
|
position: 'Position',
|
||||||
flexWrap: 'Wrap',
|
flexWrap: 'Wrap',
|
||||||
positionType: 'PositionType',
|
positionType: 'PositionType',
|
||||||
direction: 'Direction',
|
direction: 'Driection',
|
||||||
};
|
};
|
||||||
|
|
||||||
if (!enumLookup[yogaEnum]) {
|
if (!enumLookup[yogaEnum]) {
|
||||||
|
@@ -45,9 +45,8 @@ void setEnumData(uint32_t& flags, size_t index, int newValue) {
|
|||||||
|
|
||||||
template <typename Enum>
|
template <typename Enum>
|
||||||
void setEnumData(uint8_t& flags, size_t index, int newValue) {
|
void setEnumData(uint8_t& flags, size_t index, int newValue) {
|
||||||
flags = (flags & ~static_cast<uint8_t>(mask(bitWidthFn<Enum>(), index))) |
|
flags = (flags & ~mask(bitWidthFn<Enum>(), index)) |
|
||||||
((newValue << index) &
|
((newValue << index) & (mask(bitWidthFn<Enum>(), index)));
|
||||||
(static_cast<uint8_t>(mask(bitWidthFn<Enum>(), index))));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
constexpr bool getBooleanData(int flags, size_t index) {
|
constexpr bool getBooleanData(int flags, size_t index) {
|
||||||
|
@@ -125,8 +125,8 @@ public:
|
|||||||
data.repr &= ~PERCENT_BIT;
|
data.repr &= ~PERCENT_BIT;
|
||||||
data.repr += BIAS;
|
data.repr += BIAS;
|
||||||
|
|
||||||
return YGValue{
|
return YGValue{data.value,
|
||||||
data.value, payload_.repr & 0x40000000 ? YGUnitPercent : YGUnitPoint};
|
payload_.repr & 0x40000000 ? YGUnitPercent : YGUnitPoint};
|
||||||
}
|
}
|
||||||
|
|
||||||
bool isUndefined() const noexcept {
|
bool isUndefined() const noexcept {
|
||||||
|
@@ -6,7 +6,6 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "Utils.h"
|
#include "Utils.h"
|
||||||
#include <stdexcept>
|
|
||||||
|
|
||||||
using namespace facebook;
|
using namespace facebook;
|
||||||
|
|
||||||
@@ -53,13 +52,6 @@ bool YGFloatsEqual(const float a, const float b) {
|
|||||||
return yoga::isUndefined(a) && yoga::isUndefined(b);
|
return yoga::isUndefined(a) && yoga::isUndefined(b);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool YGDoubleEqual(const double a, const double b) {
|
|
||||||
if (!yoga::isUndefined(a) && !yoga::isUndefined(b)) {
|
|
||||||
return fabs(a - b) < 0.0001;
|
|
||||||
}
|
|
||||||
return yoga::isUndefined(a) && yoga::isUndefined(b);
|
|
||||||
}
|
|
||||||
|
|
||||||
float YGFloatSanitize(const float val) {
|
float YGFloatSanitize(const float val) {
|
||||||
return yoga::isUndefined(val) ? 0 : val;
|
return yoga::isUndefined(val) ? 0 : val;
|
||||||
}
|
}
|
||||||
|
@@ -64,8 +64,6 @@ inline bool YGValueEqual(
|
|||||||
// difference between two floats is less than 0.0001f or both are undefined.
|
// difference between two floats is less than 0.0001f or both are undefined.
|
||||||
bool YGFloatsEqual(const float a, const float b);
|
bool YGFloatsEqual(const float a, const float b);
|
||||||
|
|
||||||
bool YGDoubleEqual(const double a, const double b);
|
|
||||||
|
|
||||||
float YGFloatMax(const float a, const float b);
|
float YGFloatMax(const float a, const float b);
|
||||||
|
|
||||||
YGFloatOptional YGFloatOptionalMax(
|
YGFloatOptional YGFloatOptionalMax(
|
||||||
|
@@ -179,8 +179,6 @@ const char* YGOverflowToString(const YGOverflow value) {
|
|||||||
|
|
||||||
const char* YGPositionTypeToString(const YGPositionType value) {
|
const char* YGPositionTypeToString(const YGPositionType value) {
|
||||||
switch (value) {
|
switch (value) {
|
||||||
case YGPositionTypeStatic:
|
|
||||||
return "static";
|
|
||||||
case YGPositionTypeRelative:
|
case YGPositionTypeRelative:
|
||||||
return "relative";
|
return "relative";
|
||||||
case YGPositionTypeAbsolute:
|
case YGPositionTypeAbsolute:
|
||||||
|
@@ -128,11 +128,7 @@ YG_ENUM_SEQ_DECL(
|
|||||||
YGOverflowHidden,
|
YGOverflowHidden,
|
||||||
YGOverflowScroll)
|
YGOverflowScroll)
|
||||||
|
|
||||||
YG_ENUM_SEQ_DECL(
|
YG_ENUM_SEQ_DECL(YGPositionType, YGPositionTypeRelative, YGPositionTypeAbsolute)
|
||||||
YGPositionType,
|
|
||||||
YGPositionTypeStatic,
|
|
||||||
YGPositionTypeRelative,
|
|
||||||
YGPositionTypeAbsolute)
|
|
||||||
|
|
||||||
YG_ENUM_DECL(
|
YG_ENUM_DECL(
|
||||||
YGPrintOptions,
|
YGPrintOptions,
|
||||||
|
226
yoga/YGNode.cpp
226
yoga/YGNode.cpp
@@ -50,111 +50,89 @@ void YGNode::print(void* printContext) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
CompactValue YGNode::computeEdgeValueForRow(
|
|
||||||
const YGStyle::Edges& edges,
|
|
||||||
YGEdge rowEdge,
|
|
||||||
YGEdge edge,
|
|
||||||
CompactValue defaultValue) {
|
|
||||||
if (!edges[rowEdge].isUndefined()) {
|
|
||||||
return edges[rowEdge];
|
|
||||||
} else if (!edges[edge].isUndefined()) {
|
|
||||||
return edges[edge];
|
|
||||||
} else if (!edges[YGEdgeHorizontal].isUndefined()) {
|
|
||||||
return edges[YGEdgeHorizontal];
|
|
||||||
} else if (!edges[YGEdgeAll].isUndefined()) {
|
|
||||||
return edges[YGEdgeAll];
|
|
||||||
} else {
|
|
||||||
return defaultValue;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
CompactValue YGNode::computeEdgeValueForColumn(
|
|
||||||
const YGStyle::Edges& edges,
|
|
||||||
YGEdge edge,
|
|
||||||
CompactValue defaultValue) {
|
|
||||||
if (!edges[edge].isUndefined()) {
|
|
||||||
return edges[edge];
|
|
||||||
} else if (!edges[YGEdgeVertical].isUndefined()) {
|
|
||||||
return edges[YGEdgeVertical];
|
|
||||||
} else if (!edges[YGEdgeAll].isUndefined()) {
|
|
||||||
return edges[YGEdgeAll];
|
|
||||||
} else {
|
|
||||||
return defaultValue;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
YGFloatOptional YGNode::getLeadingPosition(
|
YGFloatOptional YGNode::getLeadingPosition(
|
||||||
const YGFlexDirection axis,
|
const YGFlexDirection axis,
|
||||||
const float axisSize) const {
|
const float axisSize) const {
|
||||||
auto leadingPosition = YGFlexDirectionIsRow(axis)
|
if (YGFlexDirectionIsRow(axis)) {
|
||||||
? computeEdgeValueForRow(
|
auto leadingPosition = YGComputedEdgeValue(
|
||||||
style_.position(),
|
style_.position(), YGEdgeStart, CompactValue::ofUndefined());
|
||||||
YGEdgeStart,
|
if (!leadingPosition.isUndefined()) {
|
||||||
leading[axis],
|
return YGResolveValue(leadingPosition, axisSize);
|
||||||
CompactValue::ofZero())
|
}
|
||||||
: computeEdgeValueForColumn(
|
}
|
||||||
style_.position(), leading[axis], CompactValue::ofZero());
|
|
||||||
return YGResolveValue(leadingPosition, axisSize);
|
auto leadingPosition = YGComputedEdgeValue(
|
||||||
|
style_.position(), leading[axis], CompactValue::ofUndefined());
|
||||||
|
|
||||||
|
return leadingPosition.isUndefined()
|
||||||
|
? YGFloatOptional{0}
|
||||||
|
: YGResolveValue(leadingPosition, axisSize);
|
||||||
}
|
}
|
||||||
|
|
||||||
YGFloatOptional YGNode::getTrailingPosition(
|
YGFloatOptional YGNode::getTrailingPosition(
|
||||||
const YGFlexDirection axis,
|
const YGFlexDirection axis,
|
||||||
const float axisSize) const {
|
const float axisSize) const {
|
||||||
auto trailingPosition = YGFlexDirectionIsRow(axis)
|
if (YGFlexDirectionIsRow(axis)) {
|
||||||
? computeEdgeValueForRow(
|
auto trailingPosition = YGComputedEdgeValue(
|
||||||
style_.position(),
|
style_.position(), YGEdgeEnd, CompactValue::ofUndefined());
|
||||||
YGEdgeEnd,
|
if (!trailingPosition.isUndefined()) {
|
||||||
trailing[axis],
|
return YGResolveValue(trailingPosition, axisSize);
|
||||||
CompactValue::ofZero())
|
}
|
||||||
: computeEdgeValueForColumn(
|
}
|
||||||
style_.position(), trailing[axis], CompactValue::ofZero());
|
|
||||||
return YGResolveValue(trailingPosition, axisSize);
|
auto trailingPosition = YGComputedEdgeValue(
|
||||||
|
style_.position(), trailing[axis], CompactValue::ofUndefined());
|
||||||
|
|
||||||
|
return trailingPosition.isUndefined()
|
||||||
|
? YGFloatOptional{0}
|
||||||
|
: YGResolveValue(trailingPosition, axisSize);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool YGNode::isLeadingPositionDefined(const YGFlexDirection axis) const {
|
bool YGNode::isLeadingPositionDefined(const YGFlexDirection axis) const {
|
||||||
auto leadingPosition = YGFlexDirectionIsRow(axis)
|
return (YGFlexDirectionIsRow(axis) &&
|
||||||
? computeEdgeValueForRow(
|
!YGComputedEdgeValue(
|
||||||
style_.position(),
|
style_.position(), YGEdgeStart, CompactValue::ofUndefined())
|
||||||
YGEdgeStart,
|
.isUndefined()) ||
|
||||||
leading[axis],
|
!YGComputedEdgeValue(
|
||||||
CompactValue::ofUndefined())
|
style_.position(), leading[axis], CompactValue::ofUndefined())
|
||||||
: computeEdgeValueForColumn(
|
.isUndefined();
|
||||||
style_.position(), leading[axis], CompactValue::ofUndefined());
|
|
||||||
return !leadingPosition.isUndefined();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool YGNode::isTrailingPosDefined(const YGFlexDirection axis) const {
|
bool YGNode::isTrailingPosDefined(const YGFlexDirection axis) const {
|
||||||
auto trailingPosition = YGFlexDirectionIsRow(axis)
|
return (YGFlexDirectionIsRow(axis) &&
|
||||||
? computeEdgeValueForRow(
|
!YGComputedEdgeValue(
|
||||||
style_.position(),
|
style_.position(), YGEdgeEnd, CompactValue::ofUndefined())
|
||||||
YGEdgeEnd,
|
.isUndefined()) ||
|
||||||
trailing[axis],
|
!YGComputedEdgeValue(
|
||||||
CompactValue::ofUndefined())
|
style_.position(), trailing[axis], CompactValue::ofUndefined())
|
||||||
: computeEdgeValueForColumn(
|
.isUndefined();
|
||||||
style_.position(), trailing[axis], CompactValue::ofUndefined());
|
|
||||||
return !trailingPosition.isUndefined();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
YGFloatOptional YGNode::getLeadingMargin(
|
YGFloatOptional YGNode::getLeadingMargin(
|
||||||
const YGFlexDirection axis,
|
const YGFlexDirection axis,
|
||||||
const float widthSize) const {
|
const float widthSize) const {
|
||||||
auto leadingMargin = YGFlexDirectionIsRow(axis)
|
if (YGFlexDirectionIsRow(axis) &&
|
||||||
? computeEdgeValueForRow(
|
!style_.margin()[YGEdgeStart].isUndefined()) {
|
||||||
style_.margin(), YGEdgeStart, leading[axis], CompactValue::ofZero())
|
return YGResolveValueMargin(style_.margin()[YGEdgeStart], widthSize);
|
||||||
: computeEdgeValueForColumn(
|
}
|
||||||
style_.margin(), leading[axis], CompactValue::ofZero());
|
|
||||||
return YGResolveValueMargin(leadingMargin, widthSize);
|
return YGResolveValueMargin(
|
||||||
|
YGComputedEdgeValue(
|
||||||
|
style_.margin(), leading[axis], CompactValue::ofZero()),
|
||||||
|
widthSize);
|
||||||
}
|
}
|
||||||
|
|
||||||
YGFloatOptional YGNode::getTrailingMargin(
|
YGFloatOptional YGNode::getTrailingMargin(
|
||||||
const YGFlexDirection axis,
|
const YGFlexDirection axis,
|
||||||
const float widthSize) const {
|
const float widthSize) const {
|
||||||
auto trailingMargin = YGFlexDirectionIsRow(axis)
|
if (YGFlexDirectionIsRow(axis) && !style_.margin()[YGEdgeEnd].isUndefined()) {
|
||||||
? computeEdgeValueForRow(
|
return YGResolveValueMargin(style_.margin()[YGEdgeEnd], widthSize);
|
||||||
style_.margin(), YGEdgeEnd, trailing[axis], CompactValue::ofZero())
|
}
|
||||||
: computeEdgeValueForColumn(
|
|
||||||
style_.margin(), trailing[axis], CompactValue::ofZero());
|
return YGResolveValueMargin(
|
||||||
return YGResolveValueMargin(trailingMargin, widthSize);
|
YGComputedEdgeValue(
|
||||||
|
style_.margin(), trailing[axis], CompactValue::ofZero()),
|
||||||
|
widthSize);
|
||||||
}
|
}
|
||||||
|
|
||||||
YGFloatOptional YGNode::getMarginForAxis(
|
YGFloatOptional YGNode::getMarginForAxis(
|
||||||
@@ -169,6 +147,7 @@ YGSize YGNode::measure(
|
|||||||
float height,
|
float height,
|
||||||
YGMeasureMode heightMode,
|
YGMeasureMode heightMode,
|
||||||
void* layoutContext) {
|
void* layoutContext) {
|
||||||
|
|
||||||
return facebook::yoga::detail::getBooleanData(flags, measureUsesContext_)
|
return facebook::yoga::detail::getBooleanData(flags, measureUsesContext_)
|
||||||
? measure_.withContext(
|
? measure_.withContext(
|
||||||
this, width, widthMode, height, heightMode, layoutContext)
|
this, width, widthMode, height, heightMode, layoutContext)
|
||||||
@@ -328,9 +307,6 @@ void YGNode::setPosition(
|
|||||||
const YGFlexDirection crossAxis =
|
const YGFlexDirection crossAxis =
|
||||||
YGFlexDirectionCross(mainAxis, directionRespectingRoot);
|
YGFlexDirectionCross(mainAxis, directionRespectingRoot);
|
||||||
|
|
||||||
// Here we should check for `YGPositionTypeStatic` and in this case zero inset
|
|
||||||
// properties (left, right, top, bottom, begin, end).
|
|
||||||
// https://www.w3.org/TR/css-position-3/#valdef-position-static
|
|
||||||
const YGFloatOptional relativePositionMain =
|
const YGFloatOptional relativePositionMain =
|
||||||
relativePosition(mainAxis, mainSize);
|
relativePosition(mainAxis, mainSize);
|
||||||
const YGFloatOptional relativePositionCross =
|
const YGFloatOptional relativePositionCross =
|
||||||
@@ -464,53 +440,73 @@ float YGNode::resolveFlexShrink() const {
|
|||||||
|
|
||||||
bool YGNode::isNodeFlexible() {
|
bool YGNode::isNodeFlexible() {
|
||||||
return (
|
return (
|
||||||
(style_.positionType() != YGPositionTypeAbsolute) &&
|
(style_.positionType() == YGPositionTypeRelative) &&
|
||||||
(resolveFlexGrow() != 0 || resolveFlexShrink() != 0));
|
(resolveFlexGrow() != 0 || resolveFlexShrink() != 0));
|
||||||
}
|
}
|
||||||
|
|
||||||
float YGNode::getLeadingBorder(const YGFlexDirection axis) const {
|
float YGNode::getLeadingBorder(const YGFlexDirection axis) const {
|
||||||
YGValue leadingBorder = YGFlexDirectionIsRow(axis)
|
YGValue leadingBorder;
|
||||||
? computeEdgeValueForRow(
|
if (YGFlexDirectionIsRow(axis) &&
|
||||||
style_.border(), YGEdgeStart, leading[axis], CompactValue::ofZero())
|
!style_.border()[YGEdgeStart].isUndefined()) {
|
||||||
: computeEdgeValueForColumn(
|
leadingBorder = style_.border()[YGEdgeStart];
|
||||||
style_.border(), leading[axis], CompactValue::ofZero());
|
if (leadingBorder.value >= 0) {
|
||||||
return fmaxf(leadingBorder.value, 0.0f);
|
return leadingBorder.value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
leadingBorder = YGComputedEdgeValue(
|
||||||
|
style_.border(), leading[axis], CompactValue::ofZero());
|
||||||
|
return YGFloatMax(leadingBorder.value, 0.0f);
|
||||||
}
|
}
|
||||||
|
|
||||||
float YGNode::getTrailingBorder(const YGFlexDirection axis) const {
|
float YGNode::getTrailingBorder(const YGFlexDirection flexDirection) const {
|
||||||
YGValue trailingBorder = YGFlexDirectionIsRow(axis)
|
YGValue trailingBorder;
|
||||||
? computeEdgeValueForRow(
|
if (YGFlexDirectionIsRow(flexDirection) &&
|
||||||
style_.border(), YGEdgeEnd, trailing[axis], CompactValue::ofZero())
|
!style_.border()[YGEdgeEnd].isUndefined()) {
|
||||||
: computeEdgeValueForColumn(
|
trailingBorder = style_.border()[YGEdgeEnd];
|
||||||
style_.border(), trailing[axis], CompactValue::ofZero());
|
if (trailingBorder.value >= 0.0f) {
|
||||||
return fmaxf(trailingBorder.value, 0.0f);
|
return trailingBorder.value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
trailingBorder = YGComputedEdgeValue(
|
||||||
|
style_.border(), trailing[flexDirection], CompactValue::ofZero());
|
||||||
|
return YGFloatMax(trailingBorder.value, 0.0f);
|
||||||
}
|
}
|
||||||
|
|
||||||
YGFloatOptional YGNode::getLeadingPadding(
|
YGFloatOptional YGNode::getLeadingPadding(
|
||||||
const YGFlexDirection axis,
|
const YGFlexDirection axis,
|
||||||
const float widthSize) const {
|
const float widthSize) const {
|
||||||
auto leadingPadding = YGFlexDirectionIsRow(axis)
|
const YGFloatOptional paddingEdgeStart =
|
||||||
? computeEdgeValueForRow(
|
YGResolveValue(style_.padding()[YGEdgeStart], widthSize);
|
||||||
style_.padding(),
|
if (YGFlexDirectionIsRow(axis) &&
|
||||||
YGEdgeStart,
|
!style_.padding()[YGEdgeStart].isUndefined() &&
|
||||||
leading[axis],
|
!paddingEdgeStart.isUndefined() && paddingEdgeStart.unwrap() >= 0.0f) {
|
||||||
CompactValue::ofZero())
|
return paddingEdgeStart;
|
||||||
: computeEdgeValueForColumn(
|
}
|
||||||
style_.padding(), leading[axis], CompactValue::ofZero());
|
|
||||||
return YGFloatOptionalMax(
|
YGFloatOptional resolvedValue = YGResolveValue(
|
||||||
YGResolveValue(leadingPadding, widthSize), YGFloatOptional(0.0f));
|
YGComputedEdgeValue(
|
||||||
|
style_.padding(), leading[axis], CompactValue::ofZero()),
|
||||||
|
widthSize);
|
||||||
|
return YGFloatOptionalMax(resolvedValue, YGFloatOptional(0.0f));
|
||||||
}
|
}
|
||||||
|
|
||||||
YGFloatOptional YGNode::getTrailingPadding(
|
YGFloatOptional YGNode::getTrailingPadding(
|
||||||
const YGFlexDirection axis,
|
const YGFlexDirection axis,
|
||||||
const float widthSize) const {
|
const float widthSize) const {
|
||||||
auto trailingPadding = YGFlexDirectionIsRow(axis)
|
const YGFloatOptional paddingEdgeEnd =
|
||||||
? computeEdgeValueForRow(
|
YGResolveValue(style_.padding()[YGEdgeEnd], widthSize);
|
||||||
style_.padding(), YGEdgeEnd, trailing[axis], CompactValue::ofZero())
|
if (YGFlexDirectionIsRow(axis) && paddingEdgeEnd >= YGFloatOptional{0.0f}) {
|
||||||
: computeEdgeValueForColumn(
|
return paddingEdgeEnd;
|
||||||
style_.padding(), trailing[axis], CompactValue::ofZero());
|
}
|
||||||
return YGFloatOptionalMax(
|
|
||||||
YGResolveValue(trailingPadding, widthSize), YGFloatOptional(0.0f));
|
YGFloatOptional resolvedValue = YGResolveValue(
|
||||||
|
YGComputedEdgeValue(
|
||||||
|
style_.padding(), trailing[axis], CompactValue::ofZero()),
|
||||||
|
widthSize);
|
||||||
|
|
||||||
|
return YGFloatOptionalMax(resolvedValue, YGFloatOptional(0.0f));
|
||||||
}
|
}
|
||||||
|
|
||||||
YGFloatOptional YGNode::getLeadingPaddingAndBorder(
|
YGFloatOptional YGNode::getLeadingPaddingAndBorder(
|
||||||
|
@@ -193,17 +193,6 @@ public:
|
|||||||
return resolvedDimensions_[index];
|
return resolvedDimensions_[index];
|
||||||
}
|
}
|
||||||
|
|
||||||
static CompactValue computeEdgeValueForColumn(
|
|
||||||
const YGStyle::Edges& edges,
|
|
||||||
YGEdge edge,
|
|
||||||
CompactValue defaultValue);
|
|
||||||
|
|
||||||
static CompactValue computeEdgeValueForRow(
|
|
||||||
const YGStyle::Edges& edges,
|
|
||||||
YGEdge rowEdge,
|
|
||||||
YGEdge edge,
|
|
||||||
CompactValue defaultValue);
|
|
||||||
|
|
||||||
// Methods related to positions, margin, padding and border
|
// Methods related to positions, margin, padding and border
|
||||||
YGFloatOptional getLeadingPosition(
|
YGFloatOptional getLeadingPosition(
|
||||||
const YGFlexDirection axis,
|
const YGFlexDirection axis,
|
||||||
|
@@ -104,13 +104,10 @@ static void appendEdgeIfNotUndefined(
|
|||||||
const string& str,
|
const string& str,
|
||||||
const YGStyle::Edges& edges,
|
const YGStyle::Edges& edges,
|
||||||
const YGEdge edge) {
|
const YGEdge edge) {
|
||||||
// TODO: this doesn't take RTL / YGEdgeStart / YGEdgeEnd into account
|
appendNumberIfNotUndefined(
|
||||||
auto value = (edge == YGEdgeLeft || edge == YGEdgeRight)
|
base,
|
||||||
? YGNode::computeEdgeValueForRow(
|
str,
|
||||||
edges, edge, edge, detail::CompactValue::ofUndefined())
|
YGComputedEdgeValue(edges, edge, detail::CompactValue::ofUndefined()));
|
||||||
: YGNode::computeEdgeValueForColumn(
|
|
||||||
edges, edge, detail::CompactValue::ofUndefined());
|
|
||||||
appendNumberIfNotUndefined(base, str, value);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void YGNodeToString(
|
void YGNodeToString(
|
||||||
|
@@ -33,10 +33,6 @@ inline bool isUndefined(float value) {
|
|||||||
return std::isnan(value);
|
return std::isnan(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline bool isUndefined(double value) {
|
|
||||||
return std::isnan(value);
|
|
||||||
}
|
|
||||||
|
|
||||||
} // namespace yoga
|
} // namespace yoga
|
||||||
} // namespace facebook
|
} // namespace facebook
|
||||||
|
|
||||||
@@ -148,3 +144,8 @@ static const float kDefaultFlexShrink = 0.0f;
|
|||||||
static const float kWebDefaultFlexShrink = 1.0f;
|
static const float kWebDefaultFlexShrink = 1.0f;
|
||||||
|
|
||||||
extern bool YGFloatsEqual(const float a, const float b);
|
extern bool YGFloatsEqual(const float a, const float b);
|
||||||
|
extern facebook::yoga::detail::CompactValue YGComputedEdgeValue(
|
||||||
|
const facebook::yoga::detail::Values<
|
||||||
|
facebook::yoga::enums::count<YGEdge>()>& edges,
|
||||||
|
YGEdge edge,
|
||||||
|
facebook::yoga::detail::CompactValue defaultValue);
|
||||||
|
309
yoga/Yoga.cpp
309
yoga/Yoga.cpp
@@ -106,12 +106,38 @@ static int YGDefaultLog(
|
|||||||
#undef YG_UNUSED
|
#undef YG_UNUSED
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static inline bool YGDoubleIsUndefined(const double value) {
|
YOGA_EXPORT bool YGFloatIsUndefined(const float value) {
|
||||||
return facebook::yoga::isUndefined(value);
|
return facebook::yoga::isUndefined(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
YOGA_EXPORT bool YGFloatIsUndefined(const float value) {
|
detail::CompactValue YGComputedEdgeValue(
|
||||||
return facebook::yoga::isUndefined(value);
|
const YGStyle::Edges& edges,
|
||||||
|
YGEdge edge,
|
||||||
|
detail::CompactValue defaultValue) {
|
||||||
|
if (!edges[edge].isUndefined()) {
|
||||||
|
return edges[edge];
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((edge == YGEdgeTop || edge == YGEdgeBottom) &&
|
||||||
|
!edges[YGEdgeVertical].isUndefined()) {
|
||||||
|
return edges[YGEdgeVertical];
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((edge == YGEdgeLeft || edge == YGEdgeRight || edge == YGEdgeStart ||
|
||||||
|
edge == YGEdgeEnd) &&
|
||||||
|
!edges[YGEdgeHorizontal].isUndefined()) {
|
||||||
|
return edges[YGEdgeHorizontal];
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!edges[YGEdgeAll].isUndefined()) {
|
||||||
|
return edges[YGEdgeAll];
|
||||||
|
}
|
||||||
|
|
||||||
|
if (edge == YGEdgeStart || edge == YGEdgeEnd) {
|
||||||
|
return detail::CompactValue::ofUndefined();
|
||||||
|
}
|
||||||
|
|
||||||
|
return defaultValue;
|
||||||
}
|
}
|
||||||
|
|
||||||
YOGA_EXPORT void* YGNodeGetContext(YGNodeRef node) {
|
YOGA_EXPORT void* YGNodeGetContext(YGNodeRef node) {
|
||||||
@@ -1105,7 +1131,7 @@ static bool YGIsBaselineLayout(const YGNodeRef node) {
|
|||||||
const uint32_t childCount = YGNodeGetChildCount(node);
|
const uint32_t childCount = YGNodeGetChildCount(node);
|
||||||
for (uint32_t i = 0; i < childCount; i++) {
|
for (uint32_t i = 0; i < childCount; i++) {
|
||||||
const YGNodeRef child = YGNodeGetChild(node, i);
|
const YGNodeRef child = YGNodeGetChild(node, i);
|
||||||
if (child->getStyle().positionType() != YGPositionTypeAbsolute &&
|
if (child->getStyle().positionType() == YGPositionTypeRelative &&
|
||||||
child->getStyle().alignSelf() == YGAlignBaseline) {
|
child->getStyle().alignSelf() == YGAlignBaseline) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -1655,33 +1681,40 @@ static void YGNodeWithMeasureFuncSetMeasuredDimensions(
|
|||||||
availableHeight = YGUndefined;
|
availableHeight = YGUndefined;
|
||||||
}
|
}
|
||||||
|
|
||||||
const auto& padding = node->getLayout().padding;
|
const float paddingAndBorderAxisRow =
|
||||||
const auto& border = node->getLayout().border;
|
YGNodePaddingAndBorderForAxis(node, YGFlexDirectionRow, ownerWidth);
|
||||||
const float paddingAndBorderAxisRow = padding[YGEdgeLeft] +
|
const float paddingAndBorderAxisColumn =
|
||||||
padding[YGEdgeRight] + border[YGEdgeLeft] + border[YGEdgeRight];
|
YGNodePaddingAndBorderForAxis(node, YGFlexDirectionColumn, ownerWidth);
|
||||||
const float paddingAndBorderAxisColumn = padding[YGEdgeTop] +
|
const float marginAxisRow =
|
||||||
padding[YGEdgeBottom] + border[YGEdgeTop] + border[YGEdgeBottom];
|
node->getMarginForAxis(YGFlexDirectionRow, ownerWidth).unwrap();
|
||||||
|
const float marginAxisColumn =
|
||||||
|
node->getMarginForAxis(YGFlexDirectionColumn, ownerWidth).unwrap();
|
||||||
|
|
||||||
// We want to make sure we don't call measure with negative size
|
// We want to make sure we don't call measure with negative size
|
||||||
const float innerWidth = YGFloatIsUndefined(availableWidth)
|
const float innerWidth = YGFloatIsUndefined(availableWidth)
|
||||||
? availableWidth
|
? availableWidth
|
||||||
: YGFloatMax(0, availableWidth - paddingAndBorderAxisRow);
|
: YGFloatMax(0, availableWidth - marginAxisRow - paddingAndBorderAxisRow);
|
||||||
const float innerHeight = YGFloatIsUndefined(availableHeight)
|
const float innerHeight = YGFloatIsUndefined(availableHeight)
|
||||||
? availableHeight
|
? availableHeight
|
||||||
: YGFloatMax(0, availableHeight - paddingAndBorderAxisColumn);
|
: YGFloatMax(
|
||||||
|
0, availableHeight - marginAxisColumn - paddingAndBorderAxisColumn);
|
||||||
|
|
||||||
if (widthMeasureMode == YGMeasureModeExactly &&
|
if (widthMeasureMode == YGMeasureModeExactly &&
|
||||||
heightMeasureMode == 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.
|
||||||
node->setLayoutMeasuredDimension(
|
node->setLayoutMeasuredDimension(
|
||||||
YGNodeBoundAxis(
|
YGNodeBoundAxis(
|
||||||
node, YGFlexDirectionRow, availableWidth, ownerWidth, ownerWidth),
|
node,
|
||||||
|
YGFlexDirectionRow,
|
||||||
|
availableWidth - marginAxisRow,
|
||||||
|
ownerWidth,
|
||||||
|
ownerWidth),
|
||||||
YGDimensionWidth);
|
YGDimensionWidth);
|
||||||
node->setLayoutMeasuredDimension(
|
node->setLayoutMeasuredDimension(
|
||||||
YGNodeBoundAxis(
|
YGNodeBoundAxis(
|
||||||
node,
|
node,
|
||||||
YGFlexDirectionColumn,
|
YGFlexDirectionColumn,
|
||||||
availableHeight,
|
availableHeight - marginAxisColumn,
|
||||||
ownerHeight,
|
ownerHeight,
|
||||||
ownerWidth),
|
ownerWidth),
|
||||||
YGDimensionHeight);
|
YGDimensionHeight);
|
||||||
@@ -1718,7 +1751,7 @@ static void YGNodeWithMeasureFuncSetMeasuredDimensions(
|
|||||||
(widthMeasureMode == YGMeasureModeUndefined ||
|
(widthMeasureMode == YGMeasureModeUndefined ||
|
||||||
widthMeasureMode == YGMeasureModeAtMost)
|
widthMeasureMode == YGMeasureModeAtMost)
|
||||||
? measuredSize.width + paddingAndBorderAxisRow
|
? measuredSize.width + paddingAndBorderAxisRow
|
||||||
: availableWidth,
|
: availableWidth - marginAxisRow,
|
||||||
ownerWidth,
|
ownerWidth,
|
||||||
ownerWidth),
|
ownerWidth),
|
||||||
YGDimensionWidth);
|
YGDimensionWidth);
|
||||||
@@ -1730,7 +1763,7 @@ static void YGNodeWithMeasureFuncSetMeasuredDimensions(
|
|||||||
(heightMeasureMode == YGMeasureModeUndefined ||
|
(heightMeasureMode == YGMeasureModeUndefined ||
|
||||||
heightMeasureMode == YGMeasureModeAtMost)
|
heightMeasureMode == YGMeasureModeAtMost)
|
||||||
? measuredSize.height + paddingAndBorderAxisColumn
|
? measuredSize.height + paddingAndBorderAxisColumn
|
||||||
: availableHeight,
|
: availableHeight - marginAxisColumn,
|
||||||
ownerHeight,
|
ownerHeight,
|
||||||
ownerWidth),
|
ownerWidth),
|
||||||
YGDimensionHeight);
|
YGDimensionHeight);
|
||||||
@@ -1747,28 +1780,37 @@ static void YGNodeEmptyContainerSetMeasuredDimensions(
|
|||||||
const YGMeasureMode heightMeasureMode,
|
const YGMeasureMode heightMeasureMode,
|
||||||
const float ownerWidth,
|
const float ownerWidth,
|
||||||
const float ownerHeight) {
|
const float ownerHeight) {
|
||||||
const auto& padding = node->getLayout().padding;
|
const float paddingAndBorderAxisRow =
|
||||||
const auto& border = node->getLayout().border;
|
YGNodePaddingAndBorderForAxis(node, YGFlexDirectionRow, ownerWidth);
|
||||||
|
const float paddingAndBorderAxisColumn =
|
||||||
|
YGNodePaddingAndBorderForAxis(node, YGFlexDirectionColumn, ownerWidth);
|
||||||
|
const float marginAxisRow =
|
||||||
|
node->getMarginForAxis(YGFlexDirectionRow, ownerWidth).unwrap();
|
||||||
|
const float marginAxisColumn =
|
||||||
|
node->getMarginForAxis(YGFlexDirectionColumn, ownerWidth).unwrap();
|
||||||
|
|
||||||
float width = availableWidth;
|
|
||||||
if (widthMeasureMode == YGMeasureModeUndefined ||
|
|
||||||
widthMeasureMode == YGMeasureModeAtMost) {
|
|
||||||
width = padding[YGEdgeLeft] + padding[YGEdgeRight] + border[YGEdgeLeft] +
|
|
||||||
border[YGEdgeRight];
|
|
||||||
}
|
|
||||||
node->setLayoutMeasuredDimension(
|
|
||||||
YGNodeBoundAxis(node, YGFlexDirectionRow, width, ownerWidth, ownerWidth),
|
|
||||||
YGDimensionWidth);
|
|
||||||
|
|
||||||
float height = availableHeight;
|
|
||||||
if (heightMeasureMode == YGMeasureModeUndefined ||
|
|
||||||
heightMeasureMode == YGMeasureModeAtMost) {
|
|
||||||
height = padding[YGEdgeTop] + padding[YGEdgeBottom] + border[YGEdgeTop] +
|
|
||||||
border[YGEdgeBottom];
|
|
||||||
}
|
|
||||||
node->setLayoutMeasuredDimension(
|
node->setLayoutMeasuredDimension(
|
||||||
YGNodeBoundAxis(
|
YGNodeBoundAxis(
|
||||||
node, YGFlexDirectionColumn, height, ownerHeight, ownerWidth),
|
node,
|
||||||
|
YGFlexDirectionRow,
|
||||||
|
(widthMeasureMode == YGMeasureModeUndefined ||
|
||||||
|
widthMeasureMode == YGMeasureModeAtMost)
|
||||||
|
? paddingAndBorderAxisRow
|
||||||
|
: availableWidth - marginAxisRow,
|
||||||
|
ownerWidth,
|
||||||
|
ownerWidth),
|
||||||
|
YGDimensionWidth);
|
||||||
|
|
||||||
|
node->setLayoutMeasuredDimension(
|
||||||
|
YGNodeBoundAxis(
|
||||||
|
node,
|
||||||
|
YGFlexDirectionColumn,
|
||||||
|
(heightMeasureMode == YGMeasureModeUndefined ||
|
||||||
|
heightMeasureMode == YGMeasureModeAtMost)
|
||||||
|
? paddingAndBorderAxisColumn
|
||||||
|
: availableHeight - marginAxisColumn,
|
||||||
|
ownerHeight,
|
||||||
|
ownerWidth),
|
||||||
YGDimensionHeight);
|
YGDimensionHeight);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1786,6 +1828,11 @@ static bool YGNodeFixedSizeSetMeasuredDimensions(
|
|||||||
heightMeasureMode == YGMeasureModeAtMost && availableHeight <= 0.0f) ||
|
heightMeasureMode == YGMeasureModeAtMost && availableHeight <= 0.0f) ||
|
||||||
(widthMeasureMode == YGMeasureModeExactly &&
|
(widthMeasureMode == YGMeasureModeExactly &&
|
||||||
heightMeasureMode == YGMeasureModeExactly)) {
|
heightMeasureMode == YGMeasureModeExactly)) {
|
||||||
|
auto marginAxisColumn =
|
||||||
|
node->getMarginForAxis(YGFlexDirectionColumn, ownerWidth).unwrap();
|
||||||
|
auto marginAxisRow =
|
||||||
|
node->getMarginForAxis(YGFlexDirectionRow, ownerWidth).unwrap();
|
||||||
|
|
||||||
node->setLayoutMeasuredDimension(
|
node->setLayoutMeasuredDimension(
|
||||||
YGNodeBoundAxis(
|
YGNodeBoundAxis(
|
||||||
node,
|
node,
|
||||||
@@ -1794,7 +1841,7 @@ static bool YGNodeFixedSizeSetMeasuredDimensions(
|
|||||||
(widthMeasureMode == YGMeasureModeAtMost &&
|
(widthMeasureMode == YGMeasureModeAtMost &&
|
||||||
availableWidth < 0.0f)
|
availableWidth < 0.0f)
|
||||||
? 0.0f
|
? 0.0f
|
||||||
: availableWidth,
|
: availableWidth - marginAxisRow,
|
||||||
ownerWidth,
|
ownerWidth,
|
||||||
ownerWidth),
|
ownerWidth),
|
||||||
YGDimensionWidth);
|
YGDimensionWidth);
|
||||||
@@ -1807,7 +1854,7 @@ static bool YGNodeFixedSizeSetMeasuredDimensions(
|
|||||||
(heightMeasureMode == YGMeasureModeAtMost &&
|
(heightMeasureMode == YGMeasureModeAtMost &&
|
||||||
availableHeight < 0.0f)
|
availableHeight < 0.0f)
|
||||||
? 0.0f
|
? 0.0f
|
||||||
: availableHeight,
|
: availableHeight - marginAxisColumn,
|
||||||
ownerHeight,
|
ownerHeight,
|
||||||
ownerWidth),
|
ownerWidth),
|
||||||
YGDimensionHeight);
|
YGDimensionHeight);
|
||||||
@@ -1831,11 +1878,21 @@ static void YGZeroOutLayoutRecursivly(
|
|||||||
|
|
||||||
static float YGNodeCalculateAvailableInnerDim(
|
static float YGNodeCalculateAvailableInnerDim(
|
||||||
const YGNodeConstRef node,
|
const YGNodeConstRef node,
|
||||||
const YGDimension dimension,
|
YGFlexDirection axis,
|
||||||
const float availableDim,
|
float availableDim,
|
||||||
const float paddingAndBorder,
|
float ownerDim,
|
||||||
const float ownerDim) {
|
float ownerDimForMarginPadding) {
|
||||||
float availableInnerDim = availableDim - paddingAndBorder;
|
YGFlexDirection direction =
|
||||||
|
YGFlexDirectionIsRow(axis) ? YGFlexDirectionRow : YGFlexDirectionColumn;
|
||||||
|
YGDimension dimension =
|
||||||
|
YGFlexDirectionIsRow(axis) ? YGDimensionWidth : YGDimensionHeight;
|
||||||
|
|
||||||
|
const float margin =
|
||||||
|
node->getMarginForAxis(direction, ownerDimForMarginPadding).unwrap();
|
||||||
|
const float paddingAndBorder =
|
||||||
|
YGNodePaddingAndBorderForAxis(node, direction, ownerDimForMarginPadding);
|
||||||
|
|
||||||
|
float availableInnerDim = availableDim - margin - paddingAndBorder;
|
||||||
// Max dimension overrides predefined dimension value; Min dimension in turn
|
// Max dimension overrides predefined dimension value; Min dimension in turn
|
||||||
// overrides both of the above
|
// overrides both of the above
|
||||||
if (!YGFloatIsUndefined(availableInnerDim)) {
|
if (!YGFloatIsUndefined(availableInnerDim)) {
|
||||||
@@ -2448,7 +2505,7 @@ static void YGJustifyMainAxis(
|
|||||||
i < collectedFlexItemsValues.endOfLineIndex;
|
i < collectedFlexItemsValues.endOfLineIndex;
|
||||||
i++) {
|
i++) {
|
||||||
const YGNodeRef child = node->getChild(i);
|
const YGNodeRef child = node->getChild(i);
|
||||||
if (child->getStyle().positionType() != YGPositionTypeAbsolute) {
|
if (child->getStyle().positionType() == YGPositionTypeRelative) {
|
||||||
if (child->marginLeadingValue(mainAxis).unit == YGUnitAuto) {
|
if (child->marginLeadingValue(mainAxis).unit == YGUnitAuto) {
|
||||||
numberOfAutoMarginsOnCurrentLine++;
|
numberOfAutoMarginsOnCurrentLine++;
|
||||||
}
|
}
|
||||||
@@ -2532,8 +2589,9 @@ static void YGJustifyMainAxis(
|
|||||||
// Now that we placed the element, we need to update the variables.
|
// Now that we placed the element, we need to update the variables.
|
||||||
// We need to do that only for relative elements. Absolute elements do not
|
// We need to do that only for relative elements. Absolute elements do not
|
||||||
// take part in that phase.
|
// take part in that phase.
|
||||||
if (childStyle.positionType() != YGPositionTypeAbsolute) {
|
if (childStyle.positionType() == YGPositionTypeRelative) {
|
||||||
if (child->marginLeadingValue(mainAxis).unit == YGUnitAuto) {
|
if (child->marginLeadingValue(mainAxis).unit == YGUnitAuto
|
||||||
|
&& collectedFlexItemsValues.remainingFreeSpace > 0.0f) {
|
||||||
collectedFlexItemsValues.mainDim +=
|
collectedFlexItemsValues.mainDim +=
|
||||||
collectedFlexItemsValues.remainingFreeSpace /
|
collectedFlexItemsValues.remainingFreeSpace /
|
||||||
numberOfAutoMarginsOnCurrentLine;
|
numberOfAutoMarginsOnCurrentLine;
|
||||||
@@ -2546,7 +2604,8 @@ static void YGJustifyMainAxis(
|
|||||||
pos[mainAxis]);
|
pos[mainAxis]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (child->marginTrailingValue(mainAxis).unit == YGUnitAuto) {
|
if (child->marginTrailingValue(mainAxis).unit == YGUnitAuto
|
||||||
|
&& collectedFlexItemsValues.remainingFreeSpace > 0.0f) {
|
||||||
collectedFlexItemsValues.mainDim +=
|
collectedFlexItemsValues.mainDim +=
|
||||||
collectedFlexItemsValues.remainingFreeSpace /
|
collectedFlexItemsValues.remainingFreeSpace /
|
||||||
numberOfAutoMarginsOnCurrentLine;
|
numberOfAutoMarginsOnCurrentLine;
|
||||||
@@ -2722,22 +2781,16 @@ static void YGNodelayoutImpl(
|
|||||||
const YGEdge startEdge =
|
const YGEdge startEdge =
|
||||||
direction == YGDirectionLTR ? YGEdgeLeft : YGEdgeRight;
|
direction == YGDirectionLTR ? YGEdgeLeft : YGEdgeRight;
|
||||||
const YGEdge endEdge = direction == YGDirectionLTR ? YGEdgeRight : YGEdgeLeft;
|
const YGEdge endEdge = direction == YGDirectionLTR ? YGEdgeRight : YGEdgeLeft;
|
||||||
|
node->setLayoutMargin(
|
||||||
const float marginRowLeading =
|
node->getLeadingMargin(flexRowDirection, ownerWidth).unwrap(), startEdge);
|
||||||
node->getLeadingMargin(flexRowDirection, ownerWidth).unwrap();
|
node->setLayoutMargin(
|
||||||
node->setLayoutMargin(marginRowLeading, startEdge);
|
node->getTrailingMargin(flexRowDirection, ownerWidth).unwrap(), endEdge);
|
||||||
const float marginRowTrailing =
|
node->setLayoutMargin(
|
||||||
node->getTrailingMargin(flexRowDirection, ownerWidth).unwrap();
|
node->getLeadingMargin(flexColumnDirection, ownerWidth).unwrap(),
|
||||||
node->setLayoutMargin(marginRowTrailing, endEdge);
|
YGEdgeTop);
|
||||||
const float marginColumnLeading =
|
node->setLayoutMargin(
|
||||||
node->getLeadingMargin(flexColumnDirection, ownerWidth).unwrap();
|
node->getTrailingMargin(flexColumnDirection, ownerWidth).unwrap(),
|
||||||
node->setLayoutMargin(marginColumnLeading, YGEdgeTop);
|
YGEdgeBottom);
|
||||||
const float marginColumnTrailing =
|
|
||||||
node->getTrailingMargin(flexColumnDirection, ownerWidth).unwrap();
|
|
||||||
node->setLayoutMargin(marginColumnTrailing, YGEdgeBottom);
|
|
||||||
|
|
||||||
const float marginAxisRow = marginRowLeading + marginRowTrailing;
|
|
||||||
const float marginAxisColumn = marginColumnLeading + marginColumnTrailing;
|
|
||||||
|
|
||||||
node->setLayoutBorder(node->getLeadingBorder(flexRowDirection), startEdge);
|
node->setLayoutBorder(node->getLeadingBorder(flexRowDirection), startEdge);
|
||||||
node->setLayoutBorder(node->getTrailingBorder(flexRowDirection), endEdge);
|
node->setLayoutBorder(node->getTrailingBorder(flexRowDirection), endEdge);
|
||||||
@@ -2760,8 +2813,8 @@ static void YGNodelayoutImpl(
|
|||||||
if (node->hasMeasureFunc()) {
|
if (node->hasMeasureFunc()) {
|
||||||
YGNodeWithMeasureFuncSetMeasuredDimensions(
|
YGNodeWithMeasureFuncSetMeasuredDimensions(
|
||||||
node,
|
node,
|
||||||
availableWidth - marginAxisRow,
|
availableWidth,
|
||||||
availableHeight - marginAxisColumn,
|
availableHeight,
|
||||||
widthMeasureMode,
|
widthMeasureMode,
|
||||||
heightMeasureMode,
|
heightMeasureMode,
|
||||||
ownerWidth,
|
ownerWidth,
|
||||||
@@ -2776,8 +2829,8 @@ static void YGNodelayoutImpl(
|
|||||||
if (childCount == 0) {
|
if (childCount == 0) {
|
||||||
YGNodeEmptyContainerSetMeasuredDimensions(
|
YGNodeEmptyContainerSetMeasuredDimensions(
|
||||||
node,
|
node,
|
||||||
availableWidth - marginAxisRow,
|
availableWidth,
|
||||||
availableHeight - marginAxisColumn,
|
availableHeight,
|
||||||
widthMeasureMode,
|
widthMeasureMode,
|
||||||
heightMeasureMode,
|
heightMeasureMode,
|
||||||
ownerWidth,
|
ownerWidth,
|
||||||
@@ -2790,8 +2843,8 @@ static void YGNodelayoutImpl(
|
|||||||
if (!performLayout &&
|
if (!performLayout &&
|
||||||
YGNodeFixedSizeSetMeasuredDimensions(
|
YGNodeFixedSizeSetMeasuredDimensions(
|
||||||
node,
|
node,
|
||||||
availableWidth - marginAxisRow,
|
availableWidth,
|
||||||
availableHeight - marginAxisColumn,
|
availableHeight,
|
||||||
widthMeasureMode,
|
widthMeasureMode,
|
||||||
heightMeasureMode,
|
heightMeasureMode,
|
||||||
ownerWidth,
|
ownerWidth,
|
||||||
@@ -2815,14 +2868,12 @@ static void YGNodelayoutImpl(
|
|||||||
const float mainAxisownerSize = isMainAxisRow ? ownerWidth : ownerHeight;
|
const float mainAxisownerSize = isMainAxisRow ? ownerWidth : ownerHeight;
|
||||||
const float crossAxisownerSize = isMainAxisRow ? ownerHeight : ownerWidth;
|
const float crossAxisownerSize = isMainAxisRow ? ownerHeight : ownerWidth;
|
||||||
|
|
||||||
const float paddingAndBorderAxisMain =
|
|
||||||
YGNodePaddingAndBorderForAxis(node, mainAxis, ownerWidth);
|
|
||||||
const float leadingPaddingAndBorderCross =
|
const float leadingPaddingAndBorderCross =
|
||||||
node->getLeadingPaddingAndBorder(crossAxis, ownerWidth).unwrap();
|
node->getLeadingPaddingAndBorder(crossAxis, ownerWidth).unwrap();
|
||||||
const float trailingPaddingAndBorderCross =
|
const float paddingAndBorderAxisMain =
|
||||||
node->getTrailingPaddingAndBorder(crossAxis, ownerWidth).unwrap();
|
YGNodePaddingAndBorderForAxis(node, mainAxis, ownerWidth);
|
||||||
const float paddingAndBorderAxisCross =
|
const float paddingAndBorderAxisCross =
|
||||||
leadingPaddingAndBorderCross + trailingPaddingAndBorderCross;
|
YGNodePaddingAndBorderForAxis(node, crossAxis, ownerWidth);
|
||||||
|
|
||||||
YGMeasureMode measureModeMainDim =
|
YGMeasureMode measureModeMainDim =
|
||||||
isMainAxisRow ? widthMeasureMode : heightMeasureMode;
|
isMainAxisRow ? widthMeasureMode : heightMeasureMode;
|
||||||
@@ -2834,20 +2885,35 @@ static void YGNodelayoutImpl(
|
|||||||
const float paddingAndBorderAxisColumn =
|
const float paddingAndBorderAxisColumn =
|
||||||
isMainAxisRow ? paddingAndBorderAxisCross : paddingAndBorderAxisMain;
|
isMainAxisRow ? paddingAndBorderAxisCross : paddingAndBorderAxisMain;
|
||||||
|
|
||||||
|
const float marginAxisRow =
|
||||||
|
node->getMarginForAxis(YGFlexDirectionRow, ownerWidth).unwrap();
|
||||||
|
const float marginAxisColumn =
|
||||||
|
node->getMarginForAxis(YGFlexDirectionColumn, ownerWidth).unwrap();
|
||||||
|
|
||||||
|
const auto& minDimensions = node->getStyle().minDimensions();
|
||||||
|
const auto& maxDimensions = node->getStyle().maxDimensions();
|
||||||
|
const float minInnerWidth =
|
||||||
|
YGResolveValue(minDimensions[YGDimensionWidth], ownerWidth).unwrap() -
|
||||||
|
paddingAndBorderAxisRow;
|
||||||
|
const float maxInnerWidth =
|
||||||
|
YGResolveValue(maxDimensions[YGDimensionWidth], ownerWidth).unwrap() -
|
||||||
|
paddingAndBorderAxisRow;
|
||||||
|
const float minInnerHeight =
|
||||||
|
YGResolveValue(minDimensions[YGDimensionHeight], ownerHeight).unwrap() -
|
||||||
|
paddingAndBorderAxisColumn;
|
||||||
|
const float maxInnerHeight =
|
||||||
|
YGResolveValue(maxDimensions[YGDimensionHeight], ownerHeight).unwrap() -
|
||||||
|
paddingAndBorderAxisColumn;
|
||||||
|
|
||||||
|
const float minInnerMainDim = isMainAxisRow ? minInnerWidth : minInnerHeight;
|
||||||
|
const float maxInnerMainDim = isMainAxisRow ? maxInnerWidth : maxInnerHeight;
|
||||||
|
|
||||||
// STEP 2: DETERMINE AVAILABLE SIZE IN MAIN AND CROSS DIRECTIONS
|
// STEP 2: DETERMINE AVAILABLE SIZE IN MAIN AND CROSS DIRECTIONS
|
||||||
|
|
||||||
float availableInnerWidth = YGNodeCalculateAvailableInnerDim(
|
float availableInnerWidth = YGNodeCalculateAvailableInnerDim(
|
||||||
node,
|
node, YGFlexDirectionRow, availableWidth, ownerWidth, ownerWidth);
|
||||||
YGDimensionWidth,
|
|
||||||
availableWidth - marginAxisRow,
|
|
||||||
paddingAndBorderAxisRow,
|
|
||||||
ownerWidth);
|
|
||||||
float availableInnerHeight = YGNodeCalculateAvailableInnerDim(
|
float availableInnerHeight = YGNodeCalculateAvailableInnerDim(
|
||||||
node,
|
node, YGFlexDirectionColumn, availableHeight, ownerHeight, ownerWidth);
|
||||||
YGDimensionHeight,
|
|
||||||
availableHeight - marginAxisColumn,
|
|
||||||
paddingAndBorderAxisColumn,
|
|
||||||
ownerHeight);
|
|
||||||
|
|
||||||
float availableInnerMainDim =
|
float availableInnerMainDim =
|
||||||
isMainAxisRow ? availableInnerWidth : availableInnerHeight;
|
isMainAxisRow ? availableInnerWidth : availableInnerHeight;
|
||||||
@@ -2919,28 +2985,6 @@ static void YGNodelayoutImpl(
|
|||||||
// If we don't measure with exact main dimension we want to ensure we don't
|
// If we don't measure with exact main dimension we want to ensure we don't
|
||||||
// violate min and max
|
// violate min and max
|
||||||
if (measureModeMainDim != YGMeasureModeExactly) {
|
if (measureModeMainDim != YGMeasureModeExactly) {
|
||||||
const auto& minDimensions = node->getStyle().minDimensions();
|
|
||||||
const auto& maxDimensions = node->getStyle().maxDimensions();
|
|
||||||
const float minInnerWidth =
|
|
||||||
YGResolveValue(minDimensions[YGDimensionWidth], ownerWidth).unwrap() -
|
|
||||||
paddingAndBorderAxisRow;
|
|
||||||
const float maxInnerWidth =
|
|
||||||
YGResolveValue(maxDimensions[YGDimensionWidth], ownerWidth).unwrap() -
|
|
||||||
paddingAndBorderAxisRow;
|
|
||||||
const float minInnerHeight =
|
|
||||||
YGResolveValue(minDimensions[YGDimensionHeight], ownerHeight)
|
|
||||||
.unwrap() -
|
|
||||||
paddingAndBorderAxisColumn;
|
|
||||||
const float maxInnerHeight =
|
|
||||||
YGResolveValue(maxDimensions[YGDimensionHeight], ownerHeight)
|
|
||||||
.unwrap() -
|
|
||||||
paddingAndBorderAxisColumn;
|
|
||||||
|
|
||||||
const float minInnerMainDim =
|
|
||||||
isMainAxisRow ? minInnerWidth : minInnerHeight;
|
|
||||||
const float maxInnerMainDim =
|
|
||||||
isMainAxisRow ? maxInnerWidth : maxInnerHeight;
|
|
||||||
|
|
||||||
if (!YGFloatIsUndefined(minInnerMainDim) &&
|
if (!YGFloatIsUndefined(minInnerMainDim) &&
|
||||||
collectedFlexItemsValues.sizeConsumedOnCurrentLine <
|
collectedFlexItemsValues.sizeConsumedOnCurrentLine <
|
||||||
minInnerMainDim) {
|
minInnerMainDim) {
|
||||||
@@ -3269,7 +3313,7 @@ static void YGNodelayoutImpl(
|
|||||||
if (child->getStyle().display() == YGDisplayNone) {
|
if (child->getStyle().display() == YGDisplayNone) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (child->getStyle().positionType() != YGPositionTypeAbsolute) {
|
if (child->getStyle().positionType() == YGPositionTypeRelative) {
|
||||||
if (child->getLineIndex() != i) {
|
if (child->getLineIndex() != i) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -3311,7 +3355,7 @@ static void YGNodelayoutImpl(
|
|||||||
if (child->getStyle().display() == YGDisplayNone) {
|
if (child->getStyle().display() == YGDisplayNone) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (child->getStyle().positionType() != YGPositionTypeAbsolute) {
|
if (child->getStyle().positionType() == YGPositionTypeRelative) {
|
||||||
switch (YGNodeAlignItem(node, child)) {
|
switch (YGNodeAlignItem(node, child)) {
|
||||||
case YGAlignFlexStart: {
|
case YGAlignFlexStart: {
|
||||||
child->setLayoutPosition(
|
child->setLayoutPosition(
|
||||||
@@ -3489,8 +3533,8 @@ static void YGNodelayoutImpl(
|
|||||||
YGNodeBoundAxisWithinMinAndMax(
|
YGNodeBoundAxisWithinMinAndMax(
|
||||||
node,
|
node,
|
||||||
crossAxis,
|
crossAxis,
|
||||||
YGFloatOptional{
|
YGFloatOptional{totalLineCrossDim +
|
||||||
totalLineCrossDim + paddingAndBorderAxisCross},
|
paddingAndBorderAxisCross},
|
||||||
crossAxisownerSize)
|
crossAxisownerSize)
|
||||||
.unwrap()),
|
.unwrap()),
|
||||||
paddingAndBorderAxisCross),
|
paddingAndBorderAxisCross),
|
||||||
@@ -3502,7 +3546,7 @@ static void YGNodelayoutImpl(
|
|||||||
if (performLayout && node->getStyle().flexWrap() == YGWrapWrapReverse) {
|
if (performLayout && node->getStyle().flexWrap() == YGWrapWrapReverse) {
|
||||||
for (uint32_t i = 0; i < childCount; i++) {
|
for (uint32_t i = 0; i < childCount; i++) {
|
||||||
const YGNodeRef child = YGNodeGetChild(node, i);
|
const YGNodeRef child = YGNodeGetChild(node, i);
|
||||||
if (child->getStyle().positionType() != YGPositionTypeAbsolute) {
|
if (child->getStyle().positionType() == YGPositionTypeRelative) {
|
||||||
child->setLayoutPosition(
|
child->setLayoutPosition(
|
||||||
node->getLayout().measuredDimensions[dim[crossAxis]] -
|
node->getLayout().measuredDimensions[dim[crossAxis]] -
|
||||||
child->getLayout().position[pos[crossAxis]] -
|
child->getLayout().position[pos[crossAxis]] -
|
||||||
@@ -3515,8 +3559,7 @@ static void YGNodelayoutImpl(
|
|||||||
if (performLayout) {
|
if (performLayout) {
|
||||||
// STEP 10: SIZING AND POSITIONING ABSOLUTE CHILDREN
|
// STEP 10: SIZING AND POSITIONING ABSOLUTE CHILDREN
|
||||||
for (auto child : node->getChildren()) {
|
for (auto child : node->getChildren()) {
|
||||||
if (child->getStyle().display() == YGDisplayNone ||
|
if (child->getStyle().positionType() != YGPositionTypeAbsolute) {
|
||||||
child->getStyle().positionType() != YGPositionTypeAbsolute) {
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
YGNodeAbsoluteLayoutChild(
|
YGNodeAbsoluteLayoutChild(
|
||||||
@@ -3624,10 +3667,10 @@ YOGA_EXPORT float YGRoundValueToPixelGrid(
|
|||||||
const double pointScaleFactor,
|
const double pointScaleFactor,
|
||||||
const bool forceCeil,
|
const bool forceCeil,
|
||||||
const bool forceFloor) {
|
const bool forceFloor) {
|
||||||
double scaledValue = value * pointScaleFactor;
|
double scaledValue = ((double) value) * pointScaleFactor;
|
||||||
// We want to calculate `fractial` such that `floor(scaledValue) = scaledValue
|
// We want to calculate `fractial` such that `floor(scaledValue) = scaledValue
|
||||||
// - fractial`.
|
// - fractial`.
|
||||||
double fractial = fmod(scaledValue, 1.0);
|
float fractial = fmodf(scaledValue, 1.0f);
|
||||||
if (fractial < 0) {
|
if (fractial < 0) {
|
||||||
// This branch is for handling negative numbers for `value`.
|
// This branch is for handling negative numbers for `value`.
|
||||||
//
|
//
|
||||||
@@ -3646,28 +3689,28 @@ YOGA_EXPORT float YGRoundValueToPixelGrid(
|
|||||||
// - Finding the `floor`: -2.2 - fractial2 = -2.2 - 0.8 = -3
|
// - Finding the `floor`: -2.2 - fractial2 = -2.2 - 0.8 = -3
|
||||||
++fractial;
|
++fractial;
|
||||||
}
|
}
|
||||||
if (YGDoubleEqual(fractial, 0)) {
|
if (YGFloatsEqual(fractial, 0)) {
|
||||||
// First we check if the value is already rounded
|
// First we check if the value is already rounded
|
||||||
scaledValue = scaledValue - fractial;
|
scaledValue = scaledValue - fractial;
|
||||||
} else if (YGDoubleEqual(fractial, 1.0)) {
|
} else if (YGFloatsEqual(fractial, 1.0f)) {
|
||||||
scaledValue = scaledValue - fractial + 1.0;
|
scaledValue = scaledValue - fractial + 1.0f;
|
||||||
} else if (forceCeil) {
|
} else if (forceCeil) {
|
||||||
// Next we check if we need to use forced rounding
|
// Next we check if we need to use forced rounding
|
||||||
scaledValue = scaledValue - fractial + 1.0;
|
scaledValue = scaledValue - fractial + 1.0f;
|
||||||
} else if (forceFloor) {
|
} else if (forceFloor) {
|
||||||
scaledValue = scaledValue - fractial;
|
scaledValue = scaledValue - fractial;
|
||||||
} else {
|
} else {
|
||||||
// Finally we just round the value
|
// Finally we just round the value
|
||||||
scaledValue = scaledValue - fractial +
|
scaledValue = scaledValue - fractial +
|
||||||
(!YGDoubleIsUndefined(fractial) &&
|
(!YGFloatIsUndefined(fractial) &&
|
||||||
(fractial > 0.5 || YGDoubleEqual(fractial, 0.5))
|
(fractial > 0.5f || YGFloatsEqual(fractial, 0.5f))
|
||||||
? 1.0
|
? 1.0f
|
||||||
: 0.0);
|
: 0.0f);
|
||||||
}
|
}
|
||||||
return (YGDoubleIsUndefined(scaledValue) ||
|
return (YGFloatIsUndefined(scaledValue) ||
|
||||||
YGDoubleIsUndefined(pointScaleFactor))
|
YGFloatIsUndefined(pointScaleFactor))
|
||||||
? YGUndefined
|
? YGUndefined
|
||||||
: (float) (scaledValue / pointScaleFactor);
|
: scaledValue / pointScaleFactor;
|
||||||
}
|
}
|
||||||
|
|
||||||
YOGA_EXPORT bool YGNodeCanUseCachedMeasurement(
|
YOGA_EXPORT bool YGNodeCanUseCachedMeasurement(
|
||||||
@@ -4072,11 +4115,11 @@ static void YGRoundToPixelGrid(
|
|||||||
// whole number, we don't have any fraction To verify if the result is close
|
// whole number, we don't have any fraction To verify if the result is close
|
||||||
// to whole number we want to check both floor and ceil numbers
|
// to whole number we want to check both floor and ceil numbers
|
||||||
const bool hasFractionalWidth =
|
const bool hasFractionalWidth =
|
||||||
!YGDoubleEqual(fmod(nodeWidth * pointScaleFactor, 1.0), 0) &&
|
!YGFloatsEqual(fmodf(nodeWidth * pointScaleFactor, 1.0), 0) &&
|
||||||
!YGDoubleEqual(fmod(nodeWidth * pointScaleFactor, 1.0), 1.0);
|
!YGFloatsEqual(fmodf(nodeWidth * pointScaleFactor, 1.0), 1.0);
|
||||||
const bool hasFractionalHeight =
|
const bool hasFractionalHeight =
|
||||||
!YGDoubleEqual(fmod(nodeHeight * pointScaleFactor, 1.0), 0) &&
|
!YGFloatsEqual(fmodf(nodeHeight * pointScaleFactor, 1.0), 0) &&
|
||||||
!YGDoubleEqual(fmod(nodeHeight * pointScaleFactor, 1.0), 1.0);
|
!YGFloatsEqual(fmodf(nodeHeight * pointScaleFactor, 1.0), 1.0);
|
||||||
|
|
||||||
node->setLayoutDimension(
|
node->setLayoutDimension(
|
||||||
YGRoundValueToPixelGrid(
|
YGRoundValueToPixelGrid(
|
||||||
@@ -4194,7 +4237,9 @@ YOGA_EXPORT void YGNodeCalculateLayoutWithContext(
|
|||||||
if (node->getConfig()->printTree) {
|
if (node->getConfig()->printTree) {
|
||||||
YGNodePrint(
|
YGNodePrint(
|
||||||
node,
|
node,
|
||||||
(YGPrintOptions) (YGPrintOptionsLayout | YGPrintOptionsChildren | YGPrintOptionsStyle));
|
(YGPrintOptions)(
|
||||||
|
YGPrintOptionsLayout | YGPrintOptionsChildren |
|
||||||
|
YGPrintOptionsStyle));
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
@@ -4254,7 +4299,9 @@ YOGA_EXPORT void YGNodeCalculateLayoutWithContext(
|
|||||||
if (nodeWithoutLegacyFlag->getConfig()->printTree) {
|
if (nodeWithoutLegacyFlag->getConfig()->printTree) {
|
||||||
YGNodePrint(
|
YGNodePrint(
|
||||||
nodeWithoutLegacyFlag,
|
nodeWithoutLegacyFlag,
|
||||||
(YGPrintOptions) (YGPrintOptionsLayout | YGPrintOptionsChildren | YGPrintOptionsStyle));
|
(YGPrintOptions)(
|
||||||
|
YGPrintOptionsLayout | YGPrintOptionsChildren |
|
||||||
|
YGPrintOptionsStyle));
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
@@ -107,7 +107,7 @@ WIN_EXPORT void YGNodeMarkDirty(YGNodeRef node);
|
|||||||
|
|
||||||
// Marks the current node and all its descendants as dirty.
|
// Marks the current node and all its descendants as dirty.
|
||||||
//
|
//
|
||||||
// Intended to be used for Yoga benchmarks. Don't use in production, as calling
|
// Intended to be used for Uoga benchmarks. Don't use in production, as calling
|
||||||
// `YGCalculateLayout` will cause the recalculation of each and every node.
|
// `YGCalculateLayout` will cause the recalculation of each and every node.
|
||||||
WIN_EXPORT void YGNodeMarkDirtyAndPropogateToDescendants(YGNodeRef node);
|
WIN_EXPORT void YGNodeMarkDirtyAndPropogateToDescendants(YGNodeRef node);
|
||||||
|
|
||||||
|
@@ -8,6 +8,7 @@
|
|||||||
#include "event.h"
|
#include "event.h"
|
||||||
#include <atomic>
|
#include <atomic>
|
||||||
#include <memory>
|
#include <memory>
|
||||||
|
#include <stdexcept>
|
||||||
|
|
||||||
namespace facebook {
|
namespace facebook {
|
||||||
namespace yoga {
|
namespace yoga {
|
||||||
|
@@ -11,7 +11,6 @@
|
|||||||
#include <vector>
|
#include <vector>
|
||||||
#include <array>
|
#include <array>
|
||||||
#include <yoga/YGEnums.h>
|
#include <yoga/YGEnums.h>
|
||||||
#include <stdint.h>
|
|
||||||
|
|
||||||
struct YGConfig;
|
struct YGConfig;
|
||||||
struct YGNode;
|
struct YGNode;
|
||||||
|
Reference in New Issue
Block a user