Compare commits
3 Commits
v2.0.0-bet
...
jmaurice-u
Author | SHA1 | Date | |
---|---|---|---|
|
d5d05a40ed | ||
|
b50a7646e2 | ||
|
70369ae5d3 |
8
.github/actions/setup-android/action.yml
vendored
8
.github/actions/setup-android/action.yml
vendored
@@ -1,4 +1,4 @@
|
|||||||
name: Setup Android environment
|
name: Setup Android envirionment
|
||||||
|
|
||||||
runs:
|
runs:
|
||||||
using: "composite"
|
using: "composite"
|
||||||
@@ -6,7 +6,5 @@ runs:
|
|||||||
- name: Select Java Version
|
- name: Select Java Version
|
||||||
uses: actions/setup-java@v2
|
uses: actions/setup-java@v2
|
||||||
with:
|
with:
|
||||||
distribution: zulu
|
distribution: temurin
|
||||||
java-version: 17
|
java-version: 11
|
||||||
- name: Configure Gradle Caches
|
|
||||||
uses: gradle/gradle-build-action@v2
|
|
||||||
|
40
.github/workflows/publish-android-release.yml
vendored
40
.github/workflows/publish-android-release.yml
vendored
@@ -1,40 +0,0 @@
|
|||||||
name: Publish Android Release
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
tags:
|
|
||||||
- '*'
|
|
||||||
workflow_dispatch:
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
publish:
|
|
||||||
name: Publish to Maven Central
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v3
|
|
||||||
|
|
||||||
- name: Setup
|
|
||||||
uses: ./.github/actions/setup-android
|
|
||||||
|
|
||||||
- name: Publish to Maven Local
|
|
||||||
run: ./gradlew publishToMavenLocal
|
|
||||||
env:
|
|
||||||
ORG_GRADLE_PROJECT_USE_SNAPSHOT: true
|
|
||||||
ORG_GRADLE_PROJECT_SIGNING_KEY: ${{ secrets.ORG_GRADLE_PROJECT_SIGNING_KEY }}
|
|
||||||
ORG_GRADLE_PROJECT_SIGNING_PWD: ${{ secrets.ORG_GRADLE_PROJECT_SIGNING_PWD }}
|
|
||||||
|
|
||||||
- name: Upload Build Artifacts
|
|
||||||
uses: actions/upload-artifact@v3
|
|
||||||
with:
|
|
||||||
name: 'snapshot-artifacts'
|
|
||||||
path: '~/.m2/repository/'
|
|
||||||
|
|
||||||
- name: Publish to the Snapshot Repository
|
|
||||||
run: ./gradlew publishToSonatype
|
|
||||||
env:
|
|
||||||
ORG_GRADLE_PROJECT_SONATYPE_USERNAME: ${{ secrets.ORG_GRADLE_PROJECT_SONATYPE_USERNAME }}
|
|
||||||
ORG_GRADLE_PROJECT_SONATYPE_PASSWORD: ${{ secrets.ORG_GRADLE_PROJECT_SONATYPE_PASSWORD }}
|
|
||||||
ORG_GRADLE_PROJECT_SIGNING_KEY: ${{ secrets.ORG_GRADLE_PROJECT_SIGNING_KEY }}
|
|
||||||
ORG_GRADLE_PROJECT_SIGNING_PWD: ${{ secrets.ORG_GRADLE_PROJECT_SIGNING_PWD }}
|
|
||||||
ORG_GRADLE_PROJECT_USE_SNAPSHOT: true
|
|
36
.github/workflows/publish-android-snashot.yml
vendored
36
.github/workflows/publish-android-snashot.yml
vendored
@@ -1,36 +0,0 @@
|
|||||||
name: Publish Android Snapshot
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches:
|
|
||||||
- main
|
|
||||||
workflow_dispatch:
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
publish:
|
|
||||||
name: Publish Snapshot
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v3
|
|
||||||
|
|
||||||
- name: Setup
|
|
||||||
uses: ./.github/actions/setup-android
|
|
||||||
|
|
||||||
- name: Publish to Maven Local
|
|
||||||
run: ./gradlew publishToMavenLocal
|
|
||||||
env:
|
|
||||||
ORG_GRADLE_PROJECT_USE_SNAPSHOT: true
|
|
||||||
|
|
||||||
- name: Upload Build Artifacts
|
|
||||||
uses: actions/upload-artifact@v3
|
|
||||||
with:
|
|
||||||
name: 'snapshot-artifacts'
|
|
||||||
path: '~/.m2/repository/'
|
|
||||||
|
|
||||||
- name: Publish to the Snapshot Repository
|
|
||||||
run: ./gradlew publishToSonatype
|
|
||||||
env:
|
|
||||||
ORG_GRADLE_PROJECT_SONATYPE_USERNAME: ${{ secrets.ORG_GRADLE_PROJECT_SONATYPE_USERNAME }}
|
|
||||||
ORG_GRADLE_PROJECT_SONATYPE_PASSWORD: ${{ secrets.ORG_GRADLE_PROJECT_SONATYPE_PASSWORD }}
|
|
||||||
ORG_GRADLE_PROJECT_USE_SNAPSHOT: true
|
|
29
.github/workflows/publish-android.yml
vendored
Normal file
29
.github/workflows/publish-android.yml
vendored
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
name: Android
|
||||||
|
|
||||||
|
on:
|
||||||
|
release:
|
||||||
|
types:
|
||||||
|
- created
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
publish:
|
||||||
|
name: Publish to Maven Central
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v3
|
||||||
|
|
||||||
|
- name: Setup
|
||||||
|
uses: ./.github/actions/setup-android
|
||||||
|
|
||||||
|
- name: Publish and release
|
||||||
|
run: |
|
||||||
|
./gradlew :yoga:assembleRelease publish --info
|
||||||
|
./gradlew closeAndReleaseRepository
|
||||||
|
env:
|
||||||
|
ORG_GRADLE_PROJECT_mavenCentralUsername: ${{ secrets.SONATYPE_NEXUS_USERNAME }}
|
||||||
|
ORG_GRADLE_PROJECT_mavenCentralPassword: ${{ secrets.SONATYPE_NEXUS_PASSWORD }}
|
||||||
|
ORG_GRADLE_PROJECT_signingInMemoryKey: ${{ secrets.GPG_KEY_CONTENTS }}
|
||||||
|
ORG_GRADLE_PROJECT_signingInMemoryKeyId: ${{ secrets.SIGNING_KEY_ID }}
|
||||||
|
ORG_GRADLE_PROJECT_signingInMemoryKeyPassword: ${{ secrets.SIGNING_PASSWORD }}
|
28
.github/workflows/publish-cocoapods-release.yml
vendored
28
.github/workflows/publish-cocoapods-release.yml
vendored
@@ -1,28 +0,0 @@
|
|||||||
name: Publish CocoaPods Release
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
tags:
|
|
||||||
- '*'
|
|
||||||
workflow_dispatch:
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
publish:
|
|
||||||
name: Publish to CocoaPods trunk
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v3
|
|
||||||
|
|
||||||
- name: Setup
|
|
||||||
uses: ./.github/actions/setup-apple
|
|
||||||
|
|
||||||
- name: Publish Yoga
|
|
||||||
run: pod trunk push Yoga.podspec
|
|
||||||
env:
|
|
||||||
COCOAPODS_TRUNK_TOKEN: ${{ secrets.COCOAPODS_TRUNK_TOKEN }}
|
|
||||||
|
|
||||||
- name: Publish YogaKit
|
|
||||||
run: pod trunk push YogaKit.podspec
|
|
||||||
env:
|
|
||||||
COCOAPODS_TRUNK_TOKEN: ${{ secrets.COCOAPODS_TRUNK_TOKEN }}
|
|
24
.github/workflows/publish-npm-release.yml
vendored
24
.github/workflows/publish-npm-release.yml
vendored
@@ -1,24 +0,0 @@
|
|||||||
name: Publish NPM Release
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
tags:
|
|
||||||
- '*'
|
|
||||||
workflow_dispatch:
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
publish:
|
|
||||||
name: Publish to npmjs registry
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v3
|
|
||||||
|
|
||||||
- name: Setup
|
|
||||||
uses: ./.github/actions/setup-js
|
|
||||||
|
|
||||||
- name: yarn publish
|
|
||||||
run: yarn publish
|
|
||||||
working-directory: javascript
|
|
||||||
env:
|
|
||||||
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
|
|
14
.github/workflows/validate-apple.yml
vendored
14
.github/workflows/validate-apple.yml
vendored
@@ -9,7 +9,7 @@ on:
|
|||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
lint-pods:
|
lint-pods:
|
||||||
name: Lint pod
|
name: Lint
|
||||||
runs-on: macos-latest
|
runs-on: macos-latest
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
@@ -18,11 +18,12 @@ jobs:
|
|||||||
- name: Setup
|
- name: Setup
|
||||||
uses: ./.github/actions/setup-apple
|
uses: ./.github/actions/setup-apple
|
||||||
|
|
||||||
- name: pod lib lint
|
- name: pod spec lint
|
||||||
run: pod lib lint --verbose --include-podspecs=**/*.podspec
|
run: pod spec lint --verbose
|
||||||
|
continue-on-error: true # Apple Build is Broken
|
||||||
|
|
||||||
build-sample:
|
build-sample:
|
||||||
name: Build sample [${{ matrix.mode }}]
|
name: Build [${{ matrix.mode }}]
|
||||||
runs-on: macos-latest
|
runs-on: macos-latest
|
||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
@@ -37,10 +38,9 @@ jobs:
|
|||||||
- name: pod install
|
- name: pod install
|
||||||
run: pod install
|
run: pod install
|
||||||
working-directory: ./YogaKit/YogaKitSample
|
working-directory: ./YogaKit/YogaKitSample
|
||||||
|
continue-on-error: true # Apple Build is Broken
|
||||||
|
|
||||||
- name: xcodebuild YogaKitSample.xcworkspace
|
# TODO: xcodebuild
|
||||||
run: xcodebuild -workspace YogaKitSample.xcworkspace -scheme YogaKitSample
|
|
||||||
working-directory: ./YogaKit/YogaKitSample
|
|
||||||
|
|
||||||
clang-format:
|
clang-format:
|
||||||
name: Format
|
name: Format
|
||||||
|
18
.github/workflows/validate-js.yml
vendored
18
.github/workflows/validate-js.yml
vendored
@@ -72,21 +72,3 @@ jobs:
|
|||||||
- name: yarn lint
|
- name: yarn lint
|
||||||
run: yarn lint
|
run: yarn lint
|
||||||
working-directory: javascript
|
working-directory: javascript
|
||||||
|
|
||||||
pack:
|
|
||||||
name: Pack
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v3
|
|
||||||
|
|
||||||
- name: Setup
|
|
||||||
uses: ./.github/actions/setup-js
|
|
||||||
|
|
||||||
- name: yarn pack
|
|
||||||
run: yarn pack --filename yoga-layout.tar.gz
|
|
||||||
working-directory: javascript
|
|
||||||
|
|
||||||
- uses: actions/upload-artifact@v3
|
|
||||||
with:
|
|
||||||
name: npm-package
|
|
||||||
path: javascript/yoga-layout.tar.gz
|
|
||||||
|
4
.gitignore
vendored
4
.gitignore
vendored
@@ -64,11 +64,7 @@ Carthage/Build
|
|||||||
|
|
||||||
# Gradle
|
# Gradle
|
||||||
.gradle
|
.gradle
|
||||||
local.properties
|
|
||||||
|
|
||||||
# NDK/CMake
|
# NDK/CMake
|
||||||
.cxx
|
.cxx
|
||||||
.externalNativeBuild
|
.externalNativeBuild
|
||||||
|
|
||||||
# Docusarus build
|
|
||||||
.docusaurus
|
|
||||||
|
@@ -3,7 +3,7 @@
|
|||||||
# 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 file in the root directory of this source tree.
|
# LICENSE file in the root directory of this source tree.
|
||||||
|
|
||||||
cmake_minimum_required(VERSION 3.13...3.26)
|
cmake_minimum_required(VERSION 3.13)
|
||||||
project(yoga-all)
|
project(yoga-all)
|
||||||
set(CMAKE_VERBOSE_MAKEFILE on)
|
set(CMAKE_VERBOSE_MAKEFILE on)
|
||||||
|
|
||||||
|
20
Yoga.podspec
20
Yoga.podspec
@@ -6,21 +6,20 @@
|
|||||||
|
|
||||||
Pod::Spec.new do |spec|
|
Pod::Spec.new do |spec|
|
||||||
spec.name = 'Yoga'
|
spec.name = 'Yoga'
|
||||||
spec.version = '2.0.0-beta.1'
|
spec.version = '1.14.0'
|
||||||
spec.license = { :type => 'MIT', :file => "LICENSE" }
|
spec.license = { :type => 'MIT', :file => "LICENSE" }
|
||||||
spec.homepage = 'https://yogalayout.com/'
|
spec.homepage = 'https://yogalayout.com/'
|
||||||
spec.documentation_url = 'https://yogalayout.com/docs'
|
spec.documentation_url = 'https://yogalayout.com/docs'
|
||||||
|
|
||||||
spec.summary = 'An embeddable and performant flexbox layout engine with bindings for multiple languages'
|
spec.summary = 'Yoga is a cross-platform layout engine which implements Flexbox.'
|
||||||
|
spec.description = 'Yoga is a cross-platform layout engine enabling maximum collaboration within your team by implementing an API many designers are familiar with, and opening it up to developers across different platforms.'
|
||||||
|
|
||||||
spec.authors = {'Meta Open Source' => 'opensource@meta.com'}
|
spec.authors = 'Facebook'
|
||||||
spec.source = {
|
spec.source = {
|
||||||
:git => 'https://github.com/facebook/yoga.git',
|
:git => 'https://github.com/facebook/yoga.git',
|
||||||
:tag => "v#{spec.version.to_s}",
|
:tag => spec.version.to_s,
|
||||||
}
|
}
|
||||||
|
spec.platforms = { :ios => "8.0", :osx => "10.7", :tvos => "10.0", :watchos => "2.0" }
|
||||||
spec.ios.deployment_target = "13.4"
|
|
||||||
|
|
||||||
spec.module_name = 'yoga'
|
spec.module_name = 'yoga'
|
||||||
spec.requires_arc = false
|
spec.requires_arc = false
|
||||||
spec.pod_target_xcconfig = {
|
spec.pod_target_xcconfig = {
|
||||||
@@ -31,11 +30,10 @@ Pod::Spec.new do |spec|
|
|||||||
'-fexceptions',
|
'-fexceptions',
|
||||||
'-Wall',
|
'-Wall',
|
||||||
'-Werror',
|
'-Werror',
|
||||||
'-Wextra',
|
|
||||||
'-std=c++14',
|
'-std=c++14',
|
||||||
'-fPIC'
|
'-fPIC'
|
||||||
]
|
]
|
||||||
spec.source_files = 'yoga/**/*.{h,cpp}'
|
spec.source_files = 'yoga/**/*.{c,h,cpp}'
|
||||||
spec.public_header_files = 'yoga/{Yoga,YGEnums,YGMacros,YGValue}.h'
|
spec.public_header_files = 'yoga/*.h'
|
||||||
spec.swift_version = '5.1'
|
|
||||||
end
|
end
|
||||||
|
@@ -5,24 +5,29 @@
|
|||||||
|
|
||||||
podspec = Pod::Spec.new do |spec|
|
podspec = Pod::Spec.new do |spec|
|
||||||
spec.name = 'YogaKit'
|
spec.name = 'YogaKit'
|
||||||
spec.version = '2.0.0-beta.1'
|
spec.version = '1.18.1'
|
||||||
spec.license = { :type => 'MIT', :file => "LICENSE" }
|
spec.license = { :type => 'MIT', :file => "LICENSE" }
|
||||||
spec.homepage = 'https://yogalayout.com/'
|
spec.homepage = 'https://facebook.github.io/yoga/'
|
||||||
spec.documentation_url = 'https://yogalayout.com/docs'
|
spec.documentation_url = 'https://facebook.github.io/yoga/docs/'
|
||||||
spec.deprecated = true
|
|
||||||
|
|
||||||
spec.summary = 'YogaKit allows using the Yoga layout engine in combination with UIKit'
|
spec.summary = 'Yoga is a cross-platform layout engine which implements Flexbox.'
|
||||||
|
spec.description = 'Yoga is a cross-platform layout engine enabling maximum collaboration within your team by implementing an API many designers are familiar with, and opening it up to developers across different platforms.'
|
||||||
|
|
||||||
spec.authors = {'Meta Open Source' => 'opensource@meta.com'}
|
spec.authors = 'Facebook'
|
||||||
spec.source = {
|
spec.source = {
|
||||||
:git => 'https://github.com/facebook/yoga.git',
|
:git => 'https://github.com/facebook/yoga.git',
|
||||||
:tag => "v#{spec.version.to_s}",
|
:tag => "1.18.0",
|
||||||
}
|
}
|
||||||
|
|
||||||
spec.platforms = { :ios => "13.4" }
|
spec.platform = :ios
|
||||||
|
spec.ios.deployment_target = '8.0'
|
||||||
spec.ios.frameworks = 'UIKit'
|
spec.ios.frameworks = 'UIKit'
|
||||||
spec.module_name = 'YogaKit'
|
spec.module_name = 'YogaKit'
|
||||||
spec.dependency 'Yoga', "~> #{spec.version.to_s}"
|
spec.dependency 'Yoga', '~> 1.14'
|
||||||
|
# Fixes the bug related the xcode 11 not able to find swift related frameworks.
|
||||||
|
# https://github.com/Carthage/Carthage/issues/2825
|
||||||
|
# https://twitter.com/krzyzanowskim/status/1151549874653081601?s=21
|
||||||
|
spec.pod_target_xcconfig = {"LD_VERIFY_BITCODE": "NO"}
|
||||||
spec.source_files = 'YogaKit/Source/*.{h,m,swift}'
|
spec.source_files = 'YogaKit/Source/*.{h,m,swift}'
|
||||||
spec.public_header_files = 'YogaKit/Source/{YGLayout,UIView+Yoga}.h'
|
spec.public_header_files = 'YogaKit/Source/{YGLayout,UIView+Yoga}.h'
|
||||||
spec.private_header_files = 'YogaKit/Source/YGLayout+Private.h'
|
spec.private_header_files = 'YogaKit/Source/YGLayout+Private.h'
|
||||||
|
1
YogaKit/.swift-version
Normal file
1
YogaKit/.swift-version
Normal file
@@ -0,0 +1 @@
|
|||||||
|
3.0.2
|
@@ -175,7 +175,6 @@ static YGConfigRef globalConfig;
|
|||||||
globalConfig = YGConfigNew();
|
globalConfig = YGConfigNew();
|
||||||
YGConfigSetExperimentalFeatureEnabled(
|
YGConfigSetExperimentalFeatureEnabled(
|
||||||
globalConfig, YGExperimentalFeatureWebFlexBasis, true);
|
globalConfig, YGExperimentalFeatureWebFlexBasis, true);
|
||||||
YGConfigSetErrata(globalConfig, YGErrataClassic);
|
|
||||||
YGConfigSetPointScaleFactor(globalConfig, [UIScreen mainScreen].scale);
|
YGConfigSetPointScaleFactor(globalConfig, [UIScreen mainScreen].scale);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -252,10 +252,6 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
- (void)testFrameAndOriginPlacement {
|
- (void)testFrameAndOriginPlacement {
|
||||||
// https://www.internalfb.com/intern/test/562950017690956
|
|
||||||
XCTSkip(
|
|
||||||
@"TODO: this test fails with actual dimensions off by 1px from expected");
|
|
||||||
|
|
||||||
const CGSize containerSize = CGSizeMake(320, 50);
|
const CGSize containerSize = CGSizeMake(320, 50);
|
||||||
|
|
||||||
UIView* container = [[UIView alloc]
|
UIView* container = [[UIView alloc]
|
||||||
|
@@ -1,17 +1,6 @@
|
|||||||
use_frameworks!
|
use_frameworks!
|
||||||
|
|
||||||
platform :ios, "13.4"
|
|
||||||
|
|
||||||
target 'YogaKitSample' do
|
target 'YogaKitSample' do
|
||||||
pod 'YogaKit', :path => '../../YogaKit.podspec'
|
pod 'YogaKit', :path => '../../YogaKit.podspec'
|
||||||
pod 'Yoga', :path => '../../Yoga.podspec'
|
pod 'IGListKit', '~> 2.1.0'
|
||||||
pod 'IGListKit', '~> 4.0.0'
|
|
||||||
end
|
|
||||||
|
|
||||||
post_install do |installer|
|
|
||||||
installer.pods_project.targets.each do |target|
|
|
||||||
target.build_configurations.each do |config|
|
|
||||||
config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '13.4'
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
@@ -1,33 +1,26 @@
|
|||||||
PODS:
|
PODS:
|
||||||
- IGListDiffKit (4.0.0)
|
- IGListKit (2.1.0):
|
||||||
- IGListKit (4.0.0):
|
- IGListKit/Default (= 2.1.0)
|
||||||
- IGListDiffKit (= 4.0.0)
|
- IGListKit/Default (2.1.0):
|
||||||
- Yoga (2.0.0-beta.1)
|
- IGListKit/Diffing
|
||||||
- YogaKit (2.0.0-beta.1):
|
- IGListKit/Diffing (2.1.0)
|
||||||
- Yoga (~> 2.0.0-beta.1)
|
- Yoga (1.7.0)
|
||||||
|
- YogaKit (1.7.0):
|
||||||
|
- Yoga (~> 1.7)
|
||||||
|
|
||||||
DEPENDENCIES:
|
DEPENDENCIES:
|
||||||
- IGListKit (~> 4.0.0)
|
- IGListKit (~> 2.1.0)
|
||||||
- Yoga (from `../../Yoga.podspec`)
|
|
||||||
- YogaKit (from `../../YogaKit.podspec`)
|
- YogaKit (from `../../YogaKit.podspec`)
|
||||||
|
|
||||||
SPEC REPOS:
|
|
||||||
trunk:
|
|
||||||
- IGListDiffKit
|
|
||||||
- IGListKit
|
|
||||||
|
|
||||||
EXTERNAL SOURCES:
|
EXTERNAL SOURCES:
|
||||||
Yoga:
|
|
||||||
:path: "../../Yoga.podspec"
|
|
||||||
YogaKit:
|
YogaKit:
|
||||||
:path: "../../YogaKit.podspec"
|
:path: ../../YogaKit.podspec
|
||||||
|
|
||||||
SPEC CHECKSUMS:
|
SPEC CHECKSUMS:
|
||||||
IGListDiffKit: 665d6cf43ce726e676013db9c7d6c4294259b6b2
|
IGListKit: b826c68ef7a4ae1626c09d4d3e1ea7a169e6c36e
|
||||||
IGListKit: fd5a5d21935298f5849fa49d426843cff97b77c7
|
Yoga: 2ed1d7accfef3610a67f58c0cf101a0662137f2c
|
||||||
Yoga: 090c6851e548d085d6211b5466b57ba8f4013a90
|
YogaKit: 31576530e8fcae3175469719ec3212397403330b
|
||||||
YogaKit: 5ae1939cd7516fdf6c343abb4b4aa381c9911ccf
|
|
||||||
|
|
||||||
PODFILE CHECKSUM: e5d9841ef739884db00a29f2d529d16bf247a4ca
|
PODFILE CHECKSUM: 216f8e7127767709e0e43f3711208d238fa5c404
|
||||||
|
|
||||||
COCOAPODS: 1.12.1
|
COCOAPODS: 1.1.1
|
||||||
|
@@ -1,3 +1,10 @@
|
|||||||
|
/**
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
|
||||||
// !$*UTF8*$!
|
// !$*UTF8*$!
|
||||||
{
|
{
|
||||||
archiveVersion = 1;
|
archiveVersion = 1;
|
||||||
@@ -171,6 +178,7 @@
|
|||||||
13687D401DF8748300E7C260 /* Frameworks */,
|
13687D401DF8748300E7C260 /* Frameworks */,
|
||||||
13687D411DF8748300E7C260 /* Resources */,
|
13687D411DF8748300E7C260 /* Resources */,
|
||||||
FA2FB9DD6471BDD3FBCE503B /* [CP] Embed Pods Frameworks */,
|
FA2FB9DD6471BDD3FBCE503B /* [CP] Embed Pods Frameworks */,
|
||||||
|
6E01EB987F1564F3D71EBE5A /* [CP] Copy Pods Resources */,
|
||||||
);
|
);
|
||||||
buildRules = (
|
buildRules = (
|
||||||
);
|
);
|
||||||
@@ -264,16 +272,28 @@
|
|||||||
files = (
|
files = (
|
||||||
);
|
);
|
||||||
inputPaths = (
|
inputPaths = (
|
||||||
"${PODS_PODFILE_DIR_PATH}/Podfile.lock",
|
|
||||||
"${PODS_ROOT}/Manifest.lock",
|
|
||||||
);
|
);
|
||||||
name = "[CP] Check Pods Manifest.lock";
|
name = "[CP] Check Pods Manifest.lock";
|
||||||
outputPaths = (
|
outputPaths = (
|
||||||
"$(DERIVED_FILE_DIR)/Pods-YogaKitSample-checkManifestLockResult.txt",
|
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
shellPath = /bin/sh;
|
shellPath = /bin/sh;
|
||||||
shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
|
shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n";
|
||||||
|
showEnvVarsInLog = 0;
|
||||||
|
};
|
||||||
|
6E01EB987F1564F3D71EBE5A /* [CP] Copy Pods Resources */ = {
|
||||||
|
isa = PBXShellScriptBuildPhase;
|
||||||
|
buildActionMask = 2147483647;
|
||||||
|
files = (
|
||||||
|
);
|
||||||
|
inputPaths = (
|
||||||
|
);
|
||||||
|
name = "[CP] Copy Pods Resources";
|
||||||
|
outputPaths = (
|
||||||
|
);
|
||||||
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
|
shellPath = /bin/sh;
|
||||||
|
shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-YogaKitSample/Pods-YogaKitSample-resources.sh\"\n";
|
||||||
showEnvVarsInLog = 0;
|
showEnvVarsInLog = 0;
|
||||||
};
|
};
|
||||||
FA2FB9DD6471BDD3FBCE503B /* [CP] Embed Pods Frameworks */ = {
|
FA2FB9DD6471BDD3FBCE503B /* [CP] Embed Pods Frameworks */ = {
|
||||||
@@ -282,22 +302,13 @@
|
|||||||
files = (
|
files = (
|
||||||
);
|
);
|
||||||
inputPaths = (
|
inputPaths = (
|
||||||
"${PODS_ROOT}/Target Support Files/Pods-YogaKitSample/Pods-YogaKitSample-frameworks.sh",
|
|
||||||
"${BUILT_PRODUCTS_DIR}/IGListDiffKit/IGListDiffKit.framework",
|
|
||||||
"${BUILT_PRODUCTS_DIR}/IGListKit/IGListKit.framework",
|
|
||||||
"${BUILT_PRODUCTS_DIR}/Yoga/yoga.framework",
|
|
||||||
"${BUILT_PRODUCTS_DIR}/YogaKit/YogaKit.framework",
|
|
||||||
);
|
);
|
||||||
name = "[CP] Embed Pods Frameworks";
|
name = "[CP] Embed Pods Frameworks";
|
||||||
outputPaths = (
|
outputPaths = (
|
||||||
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/IGListDiffKit.framework",
|
|
||||||
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/IGListKit.framework",
|
|
||||||
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/yoga.framework",
|
|
||||||
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/YogaKit.framework",
|
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
shellPath = /bin/sh;
|
shellPath = /bin/sh;
|
||||||
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-YogaKitSample/Pods-YogaKitSample-frameworks.sh\"\n";
|
shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-YogaKitSample/Pods-YogaKitSample-frameworks.sh\"\n";
|
||||||
showEnvVarsInLog = 0;
|
showEnvVarsInLog = 0;
|
||||||
};
|
};
|
||||||
/* End PBXShellScriptBuildPhase section */
|
/* End PBXShellScriptBuildPhase section */
|
||||||
@@ -355,7 +366,7 @@
|
|||||||
CLANG_WARN_SUSPICIOUS_MOVES = YES;
|
CLANG_WARN_SUSPICIOUS_MOVES = YES;
|
||||||
CLANG_WARN_UNREACHABLE_CODE = YES;
|
CLANG_WARN_UNREACHABLE_CODE = YES;
|
||||||
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
||||||
CODE_SIGNING_ALLOWED = NO;
|
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
|
||||||
COPY_PHASE_STRIP = NO;
|
COPY_PHASE_STRIP = NO;
|
||||||
DEBUG_INFORMATION_FORMAT = dwarf;
|
DEBUG_INFORMATION_FORMAT = dwarf;
|
||||||
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
||||||
@@ -374,7 +385,7 @@
|
|||||||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||||
IPHONEOS_DEPLOYMENT_TARGET = 13.4;
|
IPHONEOS_DEPLOYMENT_TARGET = 10.1;
|
||||||
MTL_ENABLE_DEBUG_INFO = YES;
|
MTL_ENABLE_DEBUG_INFO = YES;
|
||||||
ONLY_ACTIVE_ARCH = YES;
|
ONLY_ACTIVE_ARCH = YES;
|
||||||
SDKROOT = iphoneos;
|
SDKROOT = iphoneos;
|
||||||
@@ -403,7 +414,7 @@
|
|||||||
CLANG_WARN_SUSPICIOUS_MOVES = YES;
|
CLANG_WARN_SUSPICIOUS_MOVES = YES;
|
||||||
CLANG_WARN_UNREACHABLE_CODE = YES;
|
CLANG_WARN_UNREACHABLE_CODE = YES;
|
||||||
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
||||||
CODE_SIGNING_ALLOWED = NO;
|
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
|
||||||
COPY_PHASE_STRIP = NO;
|
COPY_PHASE_STRIP = NO;
|
||||||
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
|
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
|
||||||
ENABLE_NS_ASSERTIONS = NO;
|
ENABLE_NS_ASSERTIONS = NO;
|
||||||
@@ -416,7 +427,7 @@
|
|||||||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||||
IPHONEOS_DEPLOYMENT_TARGET = 13.4;
|
IPHONEOS_DEPLOYMENT_TARGET = 10.1;
|
||||||
MTL_ENABLE_DEBUG_INFO = NO;
|
MTL_ENABLE_DEBUG_INFO = NO;
|
||||||
SDKROOT = iphoneos;
|
SDKROOT = iphoneos;
|
||||||
VALIDATE_PRODUCT = YES;
|
VALIDATE_PRODUCT = YES;
|
||||||
@@ -435,7 +446,7 @@
|
|||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
SWIFT_INSTALL_OBJC_HEADER = NO;
|
SWIFT_INSTALL_OBJC_HEADER = NO;
|
||||||
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
||||||
SWIFT_VERSION = 5.1;
|
SWIFT_VERSION = 3.0;
|
||||||
};
|
};
|
||||||
name = Debug;
|
name = Debug;
|
||||||
};
|
};
|
||||||
@@ -450,7 +461,7 @@
|
|||||||
PRODUCT_BUNDLE_IDENTIFIER = com.facebook.YogaKitSample;
|
PRODUCT_BUNDLE_IDENTIFIER = com.facebook.YogaKitSample;
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
SWIFT_INSTALL_OBJC_HEADER = NO;
|
SWIFT_INSTALL_OBJC_HEADER = NO;
|
||||||
SWIFT_VERSION = 5.1;
|
SWIFT_VERSION = 3.0;
|
||||||
};
|
};
|
||||||
name = Release;
|
name = Release;
|
||||||
};
|
};
|
||||||
@@ -460,7 +471,7 @@
|
|||||||
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
|
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
|
||||||
BUNDLE_LOADER = "$(TEST_HOST)";
|
BUNDLE_LOADER = "$(TEST_HOST)";
|
||||||
INFOPLIST_FILE = YogaKitSampleTests/Info.plist;
|
INFOPLIST_FILE = YogaKitSampleTests/Info.plist;
|
||||||
IPHONEOS_DEPLOYMENT_TARGET = 13.4;
|
IPHONEOS_DEPLOYMENT_TARGET = 10.2;
|
||||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
|
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = com.facebook.YogaKitSampleTests;
|
PRODUCT_BUNDLE_IDENTIFIER = com.facebook.YogaKitSampleTests;
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
@@ -474,7 +485,7 @@
|
|||||||
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
|
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
|
||||||
BUNDLE_LOADER = "$(TEST_HOST)";
|
BUNDLE_LOADER = "$(TEST_HOST)";
|
||||||
INFOPLIST_FILE = YogaKitSampleTests/Info.plist;
|
INFOPLIST_FILE = YogaKitSampleTests/Info.plist;
|
||||||
IPHONEOS_DEPLOYMENT_TARGET = 13.4;
|
IPHONEOS_DEPLOYMENT_TARGET = 10.2;
|
||||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
|
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = com.facebook.YogaKitSampleTests;
|
PRODUCT_BUNDLE_IDENTIFIER = com.facebook.YogaKitSampleTests;
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
|
@@ -18,12 +18,12 @@ private final class ExampleModel {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
extension ExampleModel: ListDiffable {
|
extension ExampleModel: IGListDiffable {
|
||||||
fileprivate func diffIdentifier() -> NSObjectProtocol {
|
fileprivate func diffIdentifier() -> NSObjectProtocol {
|
||||||
return title as NSString
|
return title as NSString
|
||||||
}
|
}
|
||||||
|
|
||||||
fileprivate func isEqual(toDiffableObject object: ListDiffable?) -> Bool {
|
fileprivate func isEqual(toDiffableObject object: IGListDiffable?) -> Bool {
|
||||||
guard let otherObj = object as? ExampleModel else { return false }
|
guard let otherObj = object as? ExampleModel else { return false }
|
||||||
|
|
||||||
return (title == otherObj.title) &&
|
return (title == otherObj.title) &&
|
||||||
@@ -31,16 +31,12 @@ extension ExampleModel: ListDiffable {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
final class ExamplesViewController: UIViewController, ListAdapterDataSource, ListSingleSectionControllerDelegate {
|
final class ExamplesViewController: UIViewController, IGListAdapterDataSource, IGListSingleSectionControllerDelegate {
|
||||||
|
private lazy var adapter: IGListAdapter = {
|
||||||
|
return IGListAdapter(updater: IGListAdapterUpdater(), viewController: self, workingRangeSize: 0)
|
||||||
|
}()
|
||||||
|
private let collectionView = IGListCollectionView(frame: .zero, collectionViewLayout: UICollectionViewFlowLayout())
|
||||||
|
|
||||||
private lazy var adapter: ListAdapter = {
|
|
||||||
return ListAdapter(updater: ListAdapterUpdater(), viewController: self, workingRangeSize: 0)
|
|
||||||
}()
|
|
||||||
private lazy var collectionView: UICollectionView = {
|
|
||||||
let collectionView = UICollectionView(frame: .zero, collectionViewLayout: UICollectionViewFlowLayout())
|
|
||||||
collectionView.backgroundColor = UIColor.systemBackground
|
|
||||||
return collectionView
|
|
||||||
}()
|
|
||||||
|
|
||||||
// Update this to array to create more examples.
|
// Update this to array to create more examples.
|
||||||
private let models: [ExampleModel] = [ExampleModel(title: "Basic Layout", controllerClass: BasicViewController.self),
|
private let models: [ExampleModel] = [ExampleModel(title: "Basic Layout", controllerClass: BasicViewController.self),
|
||||||
@@ -63,16 +59,16 @@ final class ExamplesViewController: UIViewController, ListAdapterDataSource, Lis
|
|||||||
|
|
||||||
//MARK: IGListAdapterDataSource
|
//MARK: IGListAdapterDataSource
|
||||||
|
|
||||||
func objects(for listAdapter: ListAdapter) -> [ListDiffable] {
|
func objects(for listAdapter: IGListAdapter) -> [IGListDiffable] {
|
||||||
return models as [ListDiffable]
|
return models as [IGListDiffable]
|
||||||
}
|
}
|
||||||
|
|
||||||
func listAdapter(_ listAdapter: ListAdapter, sectionControllerFor object: Any) -> ListSectionController {
|
func listAdapter(_ listAdapter: IGListAdapter, sectionControllerFor object: Any) -> IGListSectionController {
|
||||||
let sizeBlock: ListSingleSectionCellSizeBlock = { (model, context) in
|
let sizeBlock: IGListSingleSectionCellSizeBlock = { (model, context) in
|
||||||
return CGSize(width: (context?.containerSize.width)!, height: 75.0)
|
return CGSize(width: (context?.containerSize.width)!, height: 75.0)
|
||||||
}
|
}
|
||||||
|
|
||||||
let configureBlock: ListSingleSectionCellConfigureBlock = { (model, cell) in
|
let configureBlock: IGListSingleSectionCellConfigureBlock = { (model, cell) in
|
||||||
guard let m = model as? ExampleModel, let c = cell as? SingleLabelCollectionCell else {
|
guard let m = model as? ExampleModel, let c = cell as? SingleLabelCollectionCell else {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@@ -80,17 +76,18 @@ final class ExamplesViewController: UIViewController, ListAdapterDataSource, Lis
|
|||||||
c.label.text = m.title
|
c.label.text = m.title
|
||||||
}
|
}
|
||||||
|
|
||||||
let sectionController = ListSingleSectionController(cellClass: SingleLabelCollectionCell.self,
|
let sectionController = IGListSingleSectionController(cellClass: SingleLabelCollectionCell.self,
|
||||||
configureBlock: configureBlock,
|
configureBlock: configureBlock,
|
||||||
sizeBlock: sizeBlock)
|
sizeBlock: sizeBlock)
|
||||||
sectionController.selectionDelegate = self
|
sectionController.selectionDelegate = self
|
||||||
return sectionController
|
return sectionController
|
||||||
}
|
}
|
||||||
|
|
||||||
func emptyView(for listAdapter: ListAdapter) -> UIView? { return nil }
|
func emptyView(for listAdapter: IGListAdapter) -> UIView? { return nil }
|
||||||
|
|
||||||
//MARK: IGListSingleSectionControllerDelegate
|
//MARK: IGListSingleSectionControllerDelegate
|
||||||
func didSelect(_ sectionController: ListSingleSectionController, with object: Any) {
|
|
||||||
|
func didSelect(_ sectionController: IGListSingleSectionController) {
|
||||||
let section = adapter.section(for: sectionController)
|
let section = adapter.section(for: sectionController)
|
||||||
let model = models[section]
|
let model = models[section]
|
||||||
|
|
||||||
|
@@ -10,11 +10,11 @@ import YogaKit
|
|||||||
|
|
||||||
final class BasicViewController: UIViewController {
|
final class BasicViewController: UIViewController {
|
||||||
override func viewDidLoad() {
|
override func viewDidLoad() {
|
||||||
super.viewDidLoad()
|
|
||||||
let containerSize = self.view.bounds.size
|
let containerSize = self.view.bounds.size
|
||||||
|
|
||||||
view.backgroundColor = UIColor.systemBackground
|
let root = self.view!
|
||||||
view.configureLayout { (layout) in
|
root.backgroundColor = .white
|
||||||
|
root.configureLayout { (layout) in
|
||||||
layout.isEnabled = true
|
layout.isEnabled = true
|
||||||
layout.width = YGValue(containerSize.width)
|
layout.width = YGValue(containerSize.width)
|
||||||
layout.height = YGValue(containerSize.height)
|
layout.height = YGValue(containerSize.height)
|
||||||
@@ -30,29 +30,24 @@ final class BasicViewController: UIViewController {
|
|||||||
layout.height = 10
|
layout.height = 10
|
||||||
layout.marginBottom = 25
|
layout.marginBottom = 25
|
||||||
}
|
}
|
||||||
view.addSubview(child1)
|
root.addSubview(child1)
|
||||||
|
|
||||||
let child2 = UIView(frame: CGRect(x: 0, y: 0, width: 200, height: 200))
|
let child2 = UIView(frame: CGRect(x: 0, y: 0, width: 200, height: 200))
|
||||||
child2.backgroundColor = .green
|
child2.backgroundColor = .green
|
||||||
child2.configureLayout { (layout) in
|
child2.configureLayout { (layout) in
|
||||||
layout.isEnabled = true
|
layout.isEnabled = true
|
||||||
layout.alignSelf = .flexEnd
|
layout.alignSelf = .flexEnd
|
||||||
layout.width = 200
|
|
||||||
layout.height = 200
|
|
||||||
}
|
}
|
||||||
view.addSubview(child2)
|
root.addSubview(child2)
|
||||||
|
|
||||||
let child3 = UIView(frame: CGRect(x: 0, y: 0, width: 100, height: 100))
|
let child3 = UIView(frame: CGRect(x: 0, y: 0, width: 100, height: 100))
|
||||||
child3.backgroundColor = .yellow
|
child3.backgroundColor = .yellow
|
||||||
child3.configureLayout { (layout) in
|
child3.configureLayout { (layout) in
|
||||||
layout.isEnabled = true
|
layout.isEnabled = true
|
||||||
layout.alignSelf = .flexStart
|
layout.alignSelf = .flexStart
|
||||||
layout.width = 100
|
|
||||||
layout.height = 100
|
|
||||||
|
|
||||||
}
|
}
|
||||||
view.addSubview(child3)
|
root.addSubview(child3)
|
||||||
|
|
||||||
view.yoga.applyLayout(preservingOrigin: true)
|
root.yoga.applyLayout(preservingOrigin: true)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -14,7 +14,6 @@ final class LayoutInclusionViewController: UIViewController {
|
|||||||
private let contentView: UIView = UIView(frame: .zero)
|
private let contentView: UIView = UIView(frame: .zero)
|
||||||
|
|
||||||
override func viewDidLoad() {
|
override func viewDidLoad() {
|
||||||
super.viewDidLoad()
|
|
||||||
let root = self.view!
|
let root = self.view!
|
||||||
root.backgroundColor = .white
|
root.backgroundColor = .white
|
||||||
root.configureLayout { (layout) in
|
root.configureLayout { (layout) in
|
||||||
@@ -52,9 +51,9 @@ final class LayoutInclusionViewController: UIViewController {
|
|||||||
}
|
}
|
||||||
contentView.addSubview(disappearingView)
|
contentView.addSubview(disappearingView)
|
||||||
|
|
||||||
button.setTitle("Add Blue View", for: .selected)
|
button.setTitle("Add Blue View", for: UIControlState.selected)
|
||||||
button.setTitle("Remove Blue View", for: .normal)
|
button.setTitle("Remove Blue View", for: UIControlState.normal)
|
||||||
button.addTarget(self, action: #selector(buttonWasTapped), for: .touchUpInside)
|
button.addTarget(self, action: #selector(buttonWasTapped), for: UIControlEvents.touchUpInside)
|
||||||
button.configureLayout { (layout) in
|
button.configureLayout { (layout) in
|
||||||
layout.isEnabled = true
|
layout.isEnabled = true
|
||||||
layout.height = 300
|
layout.height = 300
|
||||||
@@ -67,7 +66,7 @@ final class LayoutInclusionViewController: UIViewController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// MARK - UIButton Action
|
// MARK - UIButton Action
|
||||||
@objc func buttonWasTapped() {
|
func buttonWasTapped() {
|
||||||
button.isSelected = !button.isSelected
|
button.isSelected = !button.isSelected
|
||||||
|
|
||||||
button.isUserInteractionEnabled = false
|
button.isUserInteractionEnabled = false
|
||||||
|
@@ -5,10 +5,7 @@
|
|||||||
* LICENSE file in the root directory of this source tree.
|
* LICENSE file in the root directory of this source tree.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
plugins {
|
apply plugin: 'com.android.library'
|
||||||
id("com.android.library")
|
|
||||||
id("publish")
|
|
||||||
}
|
|
||||||
|
|
||||||
android {
|
android {
|
||||||
namespace 'com.facebook.yoga.android'
|
namespace 'com.facebook.yoga.android'
|
||||||
@@ -26,16 +23,16 @@ android {
|
|||||||
targetCompatibility rootProject.targetCompatibilityVersion
|
targetCompatibility rootProject.targetCompatibilityVersion
|
||||||
sourceCompatibility rootProject.sourceCompatibilityVersion
|
sourceCompatibility rootProject.sourceCompatibilityVersion
|
||||||
}
|
}
|
||||||
|
|
||||||
publishing {
|
|
||||||
multipleVariants {
|
|
||||||
withSourcesJar()
|
|
||||||
withJavadocJar()
|
|
||||||
includeBuildTypeValues('debug', 'release')
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
api project(':yoga')
|
api project(':yoga')
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// We don't build Javadoc at this time as we can't disable "BUCK" files
|
||||||
|
// from mistakenly getting parsed as Java.
|
||||||
|
tasks.withType(Javadoc).all {
|
||||||
|
enabled = false
|
||||||
|
}
|
||||||
|
|
||||||
|
apply plugin: 'com.vanniktech.maven.publish'
|
||||||
|
12
android/gradle.properties
Normal file
12
android/gradle.properties
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
#
|
||||||
|
# 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.
|
||||||
|
#
|
||||||
|
|
||||||
|
GROUP=com.facebook.yoga.android
|
||||||
|
POM_NAME=YogaLayout
|
||||||
|
POM_DESCRIPTION=YogaLayout
|
||||||
|
POM_ARTIFACT_ID=yoga-layout
|
||||||
|
POM_PACKAGING=aar
|
48
android/sample/AndroidManifest.xml
Normal file
48
android/sample/AndroidManifest.xml
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
Copyright 2014-present, Facebook, Inc.
|
||||||
|
All rights reserved.
|
||||||
|
|
||||||
|
This source code is licensed under the license found in the
|
||||||
|
LICENSE-examples file in the root directory of this source tree.
|
||||||
|
-->
|
||||||
|
|
||||||
|
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:versionCode="1"
|
||||||
|
android:versionName="1.0"
|
||||||
|
>
|
||||||
|
|
||||||
|
<variable name="applicationId" value="com.facebook.yoga"/>
|
||||||
|
<variable name="app_label" value="Yoga Sample App"/>
|
||||||
|
|
||||||
|
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
|
||||||
|
|
||||||
|
<application
|
||||||
|
android:label="@string/app_name"
|
||||||
|
android:icon="@drawable/ic_launcher"
|
||||||
|
android:allowBackup="false"
|
||||||
|
android:theme="@style/NoTitleBarWhiteBG"
|
||||||
|
android:supportsRtl="true"
|
||||||
|
>
|
||||||
|
|
||||||
|
<activity
|
||||||
|
android:name=".MainActivity"
|
||||||
|
android:exported="true"
|
||||||
|
>
|
||||||
|
|
||||||
|
<intent-filter>
|
||||||
|
<action android:name="android.intent.action.MAIN"/>
|
||||||
|
<category android:name="android.intent.category.LAUNCHER"/>
|
||||||
|
</intent-filter>
|
||||||
|
|
||||||
|
</activity>
|
||||||
|
|
||||||
|
<activity
|
||||||
|
android:name=".BenchmarkActivity"
|
||||||
|
android:exported="false"
|
||||||
|
/>
|
||||||
|
|
||||||
|
</application>
|
||||||
|
|
||||||
|
</manifest>
|
BIN
android/sample/debug.keystore
Normal file
BIN
android/sample/debug.keystore
Normal file
Binary file not shown.
3
android/sample/debug.keystore.properties
Normal file
3
android/sample/debug.keystore.properties
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
key.alias=androiddebugkey
|
||||||
|
key.store.password=android
|
||||||
|
key.alias.password=android
|
@@ -5,23 +5,23 @@
|
|||||||
* LICENSE file in the root directory of this source tree.
|
* LICENSE file in the root directory of this source tree.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package com.facebook.yoga.sample;
|
package com.facebook.samples.yoga;
|
||||||
|
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
|
import android.support.v7.app.AppCompatActivity;
|
||||||
|
import android.support.v4.app.FragmentPagerAdapter;
|
||||||
|
import android.support.v4.app.FragmentManager;
|
||||||
|
import android.support.v4.app.Fragment;
|
||||||
|
import android.support.v4.app.FragmentTransaction;
|
||||||
|
import android.support.v4.view.ViewPager;
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
import android.view.Menu;
|
|
||||||
import android.view.MenuInflater;
|
import android.view.MenuInflater;
|
||||||
import android.view.MenuItem;
|
import android.view.MenuItem;
|
||||||
|
import android.view.Menu;
|
||||||
|
import android.support.v7.app.ActionBar;
|
||||||
|
|
||||||
import androidx.appcompat.app.ActionBar;
|
import com.facebook.samples.yoga.R;
|
||||||
import androidx.appcompat.app.AppCompatActivity;
|
|
||||||
import androidx.fragment.app.Fragment;
|
|
||||||
import androidx.fragment.app.FragmentManager;
|
|
||||||
import androidx.fragment.app.FragmentPagerAdapter;
|
|
||||||
import androidx.fragment.app.FragmentTransaction;
|
|
||||||
import androidx.viewpager.widget.ViewPager;
|
|
||||||
|
|
||||||
import com.facebook.yoga.android.YogaViewLayoutFactory;
|
import com.facebook.yoga.android.YogaViewLayoutFactory;
|
||||||
|
|
||||||
public class BenchmarkActivity extends AppCompatActivity {
|
public class BenchmarkActivity extends AppCompatActivity {
|
||||||
@@ -33,24 +33,21 @@ public class BenchmarkActivity extends AppCompatActivity {
|
|||||||
|
|
||||||
setContentView(R.layout.benchmark_select_layout);
|
setContentView(R.layout.benchmark_select_layout);
|
||||||
|
|
||||||
ViewPager viewPager = findViewById(R.id.viewpager);
|
ViewPager viewPager = (ViewPager) findViewById(R.id.viewpager);
|
||||||
viewPager.setAdapter(new PagerAdapter(getSupportFragmentManager()));
|
viewPager.setAdapter(new PagerAdapter(getSupportFragmentManager()));
|
||||||
|
|
||||||
final ActionBar actionBar = getSupportActionBar();
|
final ActionBar actionBar = getSupportActionBar();
|
||||||
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
|
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
|
||||||
|
|
||||||
ActionBar.TabListener tabListener = new ActionBar.TabListener() {
|
ActionBar.TabListener tabListener = new ActionBar.TabListener() {
|
||||||
@Override
|
|
||||||
public void onTabSelected(ActionBar.Tab tab, FragmentTransaction ft) {
|
public void onTabSelected(ActionBar.Tab tab, FragmentTransaction ft) {
|
||||||
ViewPager viewPager = findViewById(R.id.viewpager);
|
ViewPager viewPager = (ViewPager) findViewById(R.id.viewpager);
|
||||||
viewPager.setCurrentItem(tab.getPosition());
|
viewPager.setCurrentItem(tab.getPosition());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction ft) {
|
public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction ft) {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onTabReselected(ActionBar.Tab tab, FragmentTransaction ft) {
|
public void onTabReselected(ActionBar.Tab tab, FragmentTransaction ft) {
|
||||||
}
|
}
|
||||||
};
|
};
|
@@ -5,14 +5,17 @@
|
|||||||
* LICENSE file in the root directory of this source tree.
|
* LICENSE file in the root directory of this source tree.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package com.facebook.yoga.sample;
|
package com.facebook.samples.yoga;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
|
import java.io.FileWriter;
|
||||||
import java.io.PrintWriter;
|
import java.io.PrintWriter;
|
||||||
import java.lang.Math;
|
import java.lang.Math;
|
||||||
import java.text.SimpleDateFormat;
|
import java.text.SimpleDateFormat;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.LinkedList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.text.DateFormat;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
@@ -5,26 +5,25 @@
|
|||||||
* LICENSE file in the root directory of this source tree.
|
* LICENSE file in the root directory of this source tree.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package com.facebook.yoga.sample;
|
package com.facebook.samples.yoga;
|
||||||
|
|
||||||
|
|
||||||
|
import java.util.Random;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
|
import android.support.v4.app.Fragment;
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
import android.view.ViewParent;
|
import android.view.ViewParent;
|
||||||
import android.widget.AdapterView;
|
|
||||||
import android.widget.ArrayAdapter;
|
|
||||||
import android.widget.LinearLayout;
|
import android.widget.LinearLayout;
|
||||||
import android.widget.Spinner;
|
import android.widget.Spinner;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
import android.widget.ArrayAdapter;
|
||||||
|
import android.widget.AdapterView;
|
||||||
|
|
||||||
import androidx.fragment.app.Fragment;
|
import com.facebook.samples.yoga.R;
|
||||||
|
|
||||||
import com.facebook.yoga.android.YogaLayout;
|
import com.facebook.yoga.android.YogaLayout;
|
||||||
|
|
||||||
import java.util.Random;
|
|
||||||
|
|
||||||
public class BenchmarkFragment extends Fragment implements AdapterView.OnItemSelectedListener {
|
public class BenchmarkFragment extends Fragment implements AdapterView.OnItemSelectedListener {
|
||||||
private LayoutInflater mInflater;
|
private LayoutInflater mInflater;
|
||||||
|
|
||||||
@@ -69,7 +68,7 @@ public class BenchmarkFragment extends Fragment implements AdapterView.OnItemSel
|
|||||||
container,
|
container,
|
||||||
false);
|
false);
|
||||||
|
|
||||||
Spinner benchmarkSelect = rootLayout.findViewById(R.id.benchmarkSelect);
|
Spinner benchmarkSelect = (Spinner) rootLayout.findViewById(R.id.benchmarkSelect);
|
||||||
String[] items = new String[]{"Basic", "Typical", "Nested"};
|
String[] items = new String[]{"Basic", "Typical", "Nested"};
|
||||||
ArrayAdapter<String> adapter = new ArrayAdapter<>(getActivity(), android.R.layout.simple_spinner_dropdown_item, items);
|
ArrayAdapter<String> adapter = new ArrayAdapter<>(getActivity(), android.R.layout.simple_spinner_dropdown_item, items);
|
||||||
benchmarkSelect.setAdapter(adapter);
|
benchmarkSelect.setAdapter(adapter);
|
||||||
@@ -105,7 +104,7 @@ public class BenchmarkFragment extends Fragment implements AdapterView.OnItemSel
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void updatePreview() {
|
private void updatePreview() {
|
||||||
LinearLayout previewLayout = rootLayout.findViewById(R.id.preview);
|
LinearLayout previewLayout = (LinearLayout) rootLayout.findViewById(R.id.preview);
|
||||||
View v = mInflater.inflate(yogaLayout, rootLayout, false);
|
View v = mInflater.inflate(yogaLayout, rootLayout, false);
|
||||||
v.setLayoutParams(new LinearLayout.LayoutParams(
|
v.setLayoutParams(new LinearLayout.LayoutParams(
|
||||||
LinearLayout.LayoutParams.MATCH_PARENT,
|
LinearLayout.LayoutParams.MATCH_PARENT,
|
@@ -5,31 +5,40 @@
|
|||||||
* LICENSE file in the root directory of this source tree.
|
* LICENSE file in the root directory of this source tree.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package com.facebook.yoga.sample;
|
package com.facebook.samples.yoga;
|
||||||
|
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.util.Log;
|
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
|
||||||
import android.widget.Button;
|
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
import android.widget.Button;
|
||||||
|
import android.view.ViewGroup;
|
||||||
|
import android.util.Log;
|
||||||
|
import com.facebook.samples.yoga.R;
|
||||||
|
|
||||||
public class BenchmarkInflate extends BenchmarkFragment {
|
public class BenchmarkInflate extends BenchmarkFragment {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
public View onCreateView(
|
||||||
|
LayoutInflater inflater,
|
||||||
|
ViewGroup container,
|
||||||
|
Bundle savedInstanceState) {
|
||||||
super.onCreateView(inflater, container, savedInstanceState);
|
super.onCreateView(inflater, container, savedInstanceState);
|
||||||
|
|
||||||
Button b = rootLayout.findViewById(R.id.btn);
|
Button b = (Button) rootLayout.findViewById(R.id.btn);
|
||||||
b.setOnClickListener(v -> startBenchmark());
|
b.setOnClickListener(new View.OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(View v) {
|
||||||
|
startBenchmark();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
return rootLayout;
|
return rootLayout;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void startBenchmark() {
|
protected void startBenchmark() {
|
||||||
LayoutInflater inflater = LayoutInflater.from(getActivity());
|
LayoutInflater inflater = LayoutInflater.from(getActivity());
|
||||||
TextView textView = rootLayout.findViewById(R.id.text);
|
TextView textView = (TextView) rootLayout.findViewById(R.id.text);
|
||||||
|
|
||||||
final int ITERATIONS = 500;
|
final int ITERATIONS = 500;
|
||||||
|
|
||||||
@@ -48,13 +57,13 @@ public class BenchmarkInflate extends BenchmarkFragment {
|
|||||||
}
|
}
|
||||||
|
|
||||||
textView.setText(
|
textView.setText(
|
||||||
yogaInflationAggregator.toString() +
|
yogaInflationAggregator.toString()+
|
||||||
"\n" +
|
"\n"+
|
||||||
linearInflationAggregator.toString());
|
linearInflationAggregator.toString());
|
||||||
Log.i(
|
Log.i(
|
||||||
"YogaLayoutBenchmark",
|
"YogaLayoutBenchmark",
|
||||||
yogaInflationAggregator.toString() +
|
yogaInflationAggregator.toString()+
|
||||||
"\n" +
|
"\n"+
|
||||||
linearInflationAggregator.toString());
|
linearInflationAggregator.toString());
|
||||||
rootLayout.invalidate();
|
rootLayout.invalidate();
|
||||||
}
|
}
|
@@ -5,7 +5,7 @@
|
|||||||
* LICENSE file in the root directory of this source tree.
|
* LICENSE file in the root directory of this source tree.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package com.facebook.yoga.sample;
|
package com.facebook.samples.yoga;
|
||||||
|
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
@@ -14,6 +14,9 @@ import android.view.View;
|
|||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
import android.widget.Button;
|
import android.widget.Button;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
import com.facebook.samples.yoga.R;
|
||||||
|
|
||||||
|
import java.util.Random;
|
||||||
|
|
||||||
public class BenchmarkLayout extends BenchmarkFragment {
|
public class BenchmarkLayout extends BenchmarkFragment {
|
||||||
|
|
||||||
@@ -24,15 +27,21 @@ public class BenchmarkLayout extends BenchmarkFragment {
|
|||||||
Bundle savedInstanceState) {
|
Bundle savedInstanceState) {
|
||||||
super.onCreateView(inflater, container, savedInstanceState);
|
super.onCreateView(inflater, container, savedInstanceState);
|
||||||
|
|
||||||
Button b = rootLayout.findViewById(R.id.btn);
|
Button b = (Button) rootLayout.findViewById(R.id.btn);
|
||||||
b.setOnClickListener(v -> startBenchmark());
|
b.setOnClickListener(new View.OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(View v) {
|
||||||
|
startBenchmark();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
return rootLayout;
|
return rootLayout;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void startBenchmark() {
|
protected void startBenchmark() {
|
||||||
LayoutInflater inflater = LayoutInflater.from(getActivity());
|
LayoutInflater inflater = LayoutInflater.from(getActivity());
|
||||||
TextView textView = rootLayout.findViewById(R.id.text);
|
TextView textView = (TextView) rootLayout.findViewById(R.id.text);
|
||||||
|
Random random = new Random();
|
||||||
|
|
||||||
final int ITERATIONS = 500;
|
final int ITERATIONS = 500;
|
||||||
|
|
||||||
@@ -58,13 +67,13 @@ public class BenchmarkLayout extends BenchmarkFragment {
|
|||||||
}
|
}
|
||||||
|
|
||||||
textView.setText(
|
textView.setText(
|
||||||
yogaInflationAggregator +
|
yogaInflationAggregator.toString()+
|
||||||
"\n" +
|
"\n"+
|
||||||
linearInflationAggregator);
|
linearInflationAggregator.toString());
|
||||||
Log.i(
|
Log.i(
|
||||||
"YogaLayoutBenchmark",
|
"YogaLayoutBenchmark",
|
||||||
yogaInflationAggregator +
|
yogaInflationAggregator.toString()+
|
||||||
"\n" +
|
"\n"+
|
||||||
linearInflationAggregator);
|
linearInflationAggregator.toString());
|
||||||
}
|
}
|
||||||
}
|
}
|
@@ -5,7 +5,7 @@
|
|||||||
* LICENSE file in the root directory of this source tree.
|
* LICENSE file in the root directory of this source tree.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package com.facebook.yoga.sample;
|
package com.facebook.samples.yoga;
|
||||||
|
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
@@ -14,6 +14,7 @@ import android.view.View;
|
|||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
import android.widget.Button;
|
import android.widget.Button;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
import com.facebook.samples.yoga.R;
|
||||||
|
|
||||||
import java.util.Random;
|
import java.util.Random;
|
||||||
|
|
||||||
@@ -26,8 +27,13 @@ public class BenchmarkMeasure extends BenchmarkFragment {
|
|||||||
Bundle savedInstanceState) {
|
Bundle savedInstanceState) {
|
||||||
super.onCreateView(inflater, container, savedInstanceState);
|
super.onCreateView(inflater, container, savedInstanceState);
|
||||||
|
|
||||||
Button b = rootLayout.findViewById(R.id.btn);
|
Button b = (Button) rootLayout.findViewById(R.id.btn);
|
||||||
b.setOnClickListener(v -> startBenchmark());
|
b.setOnClickListener(new View.OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(View v) {
|
||||||
|
startBenchmark();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
return rootLayout;
|
return rootLayout;
|
||||||
}
|
}
|
||||||
@@ -59,13 +65,13 @@ public class BenchmarkMeasure extends BenchmarkFragment {
|
|||||||
}
|
}
|
||||||
|
|
||||||
textView.setText(
|
textView.setText(
|
||||||
yogaMeasureAggregator.toString() +
|
yogaMeasureAggregator.toString()+
|
||||||
"\n" +
|
"\n"+
|
||||||
linearMeasureAggregator.toString());
|
linearMeasureAggregator.toString());
|
||||||
Log.i(
|
Log.i(
|
||||||
"YogaLayoutBenchmark",
|
"YogaLayoutBenchmark",
|
||||||
yogaMeasureAggregator.toString() +
|
yogaMeasureAggregator.toString()+
|
||||||
"\n" +
|
"\n"+
|
||||||
linearMeasureAggregator.toString());
|
linearMeasureAggregator.toString());
|
||||||
|
|
||||||
yogaMeasureAggregator.dump(getActivity());
|
yogaMeasureAggregator.dump(getActivity());
|
@@ -5,18 +5,17 @@
|
|||||||
* LICENSE file in the root directory of this source tree.
|
* LICENSE file in the root directory of this source tree.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package com.facebook.yoga.sample;
|
package com.facebook.samples.yoga;
|
||||||
|
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
|
import android.support.v7.app.AppCompatActivity;
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
import android.view.Menu;
|
|
||||||
import android.view.MenuInflater;
|
import android.view.MenuInflater;
|
||||||
import android.view.MenuItem;
|
import android.view.MenuItem;
|
||||||
|
import android.view.Menu;
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
import com.facebook.samples.yoga.R;
|
||||||
import androidx.appcompat.app.AppCompatActivity;
|
|
||||||
|
|
||||||
import com.facebook.soloader.SoLoader;
|
import com.facebook.soloader.SoLoader;
|
||||||
import com.facebook.yoga.android.YogaViewLayoutFactory;
|
import com.facebook.yoga.android.YogaViewLayoutFactory;
|
||||||
|
|
||||||
@@ -44,7 +43,7 @@ public class MainActivity extends AppCompatActivity {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
|
public boolean onOptionsItemSelected(MenuItem item) {
|
||||||
// There is only one option
|
// There is only one option
|
||||||
Intent intent = new Intent(this, BenchmarkActivity.class);
|
Intent intent = new Intent(this, BenchmarkActivity.class);
|
||||||
startActivity(intent);
|
startActivity(intent);
|
Before Width: | Height: | Size: 28 KiB After Width: | Height: | Size: 28 KiB |
@@ -1,17 +1,17 @@
|
|||||||
<?xml version="1.0" encoding="utf-8" ?>
|
<?xml version="1.0" encoding="utf-8" ?>
|
||||||
<YogaLayout
|
<YogaLayout
|
||||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
xmlns:yoga="http://schemas.android.com/apk/res-auto"
|
||||||
android:id="@+id/rt"
|
android:id="@+id/rt"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
app:yg_flexDirection="column"
|
yoga:yg_flexDirection="column"
|
||||||
>
|
>
|
||||||
<VirtualYogaLayout
|
<VirtualYogaLayout
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
app:yg_flexDirection="row"
|
yoga:yg_flexDirection="row"
|
||||||
app:yg_height="50dp"
|
yoga:yg_height="50dp"
|
||||||
>
|
>
|
||||||
<Button
|
<Button
|
||||||
android:id="@+id/btn"
|
android:id="@+id/btn"
|
||||||
@@ -19,7 +19,7 @@
|
|||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:gravity="center"
|
android:gravity="center"
|
||||||
android:text="Run benchmark"
|
android:text="Run benchmark"
|
||||||
app:yg_flex="1"
|
yoga:yg_flex="1"
|
||||||
/>
|
/>
|
||||||
<Spinner
|
<Spinner
|
||||||
android:id="@+id/benchmarkSelect"
|
android:id="@+id/benchmarkSelect"
|
||||||
@@ -34,12 +34,12 @@
|
|||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:textSize="10sp"
|
android:textSize="10sp"
|
||||||
android:fontFamily="monospace"
|
android:fontFamily="monospace"
|
||||||
app:yg_flex="1"
|
yoga:yg_flex="1"
|
||||||
/>
|
/>
|
||||||
<View
|
<View
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="2dp"
|
android:layout_height="2dp"
|
||||||
android:background="@android:color/darker_gray"
|
android:background="@color/yoga_grey"
|
||||||
/>
|
/>
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:id="@+id/preview"
|
android:id="@+id/preview"
|
@@ -1,30 +1,30 @@
|
|||||||
<?xml version="1.0" encoding="utf-8" ?>
|
<?xml version="1.0" encoding="utf-8" ?>
|
||||||
<YogaLayout
|
<YogaLayout
|
||||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
xmlns:yoga="http://schemas.android.com/apk/res-auto"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="60dp"
|
android:layout_height="60dp"
|
||||||
app:yg_flexDirection="row"
|
yoga:yg_flexDirection="row"
|
||||||
app:yg_alignItems="center"
|
yoga:yg_alignItems="center"
|
||||||
>
|
>
|
||||||
<View
|
<View
|
||||||
android:layout_width="50dp"
|
android:layout_width="50dp"
|
||||||
android:layout_height="50dp"
|
android:layout_height="50dp"
|
||||||
android:background="@color/yoga_blue"
|
android:background="@color/yoga_blue"
|
||||||
app:yg_flex="0"
|
yoga:yg_flex="0"
|
||||||
app:yg_marginAll="5dp"
|
yoga:yg_marginAll="5dp"
|
||||||
/>
|
/>
|
||||||
<TextView
|
<TextView
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:text="@string/child_1_text"
|
android:text="@string/child_1_text"
|
||||||
app:yg_flex="0"
|
yoga:yg_flex="0"
|
||||||
/>
|
/>
|
||||||
<TextView
|
<TextView
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:text="@string/child_2_text"
|
android:text="@string/child_2_text"
|
||||||
app:yg_flex="1"
|
yoga:yg_flex="1"
|
||||||
app:yg_marginHorizontal="5dp"
|
yoga:yg_marginHorizontal="5dp"
|
||||||
/>
|
/>
|
||||||
</YogaLayout>
|
</YogaLayout>
|
@@ -1,102 +1,102 @@
|
|||||||
<?xml version="1.0" encoding="utf-8" ?>
|
<?xml version="1.0" encoding="utf-8" ?>
|
||||||
<YogaLayout
|
<YogaLayout
|
||||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
xmlns:yoga="http://schemas.android.com/apk/res-auto"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="60dp"
|
android:layout_height="60dp"
|
||||||
app:yg_flexDirection="column"
|
yoga:yg_flexDirection="column"
|
||||||
app:yg_alignItems="stretch"
|
yoga:yg_alignItems="stretch"
|
||||||
>
|
>
|
||||||
<View
|
<View
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:background="@color/yoga_blue"
|
android:background="@color/yoga_blue"
|
||||||
app:yg_flex="1"
|
yoga:yg_flex="1"
|
||||||
/>
|
/>
|
||||||
<VirtualYogaLayout
|
<VirtualYogaLayout
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
app:height="40dp"
|
yoga:height="40dp"
|
||||||
app:yg_flexDirection="row"
|
yoga:yg_flexDirection="row"
|
||||||
app:yg_alignItems="stretch"
|
yoga:yg_alignItems="stretch"
|
||||||
>
|
>
|
||||||
<View
|
<View
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:background="@color/yoga_blue"
|
android:background="@color/yoga_blue"
|
||||||
app:yg_marginAll="10dp"
|
yoga:yg_marginAll="10dp"
|
||||||
app:yg_aspectRatio="1"
|
yoga:yg_aspectRatio="1"
|
||||||
/>
|
/>
|
||||||
<VirtualYogaLayout
|
<VirtualYogaLayout
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
app:height="40dp"
|
yoga:height="40dp"
|
||||||
app:yg_flexDirection="column"
|
yoga:yg_flexDirection="column"
|
||||||
app:yg_alignItems="stretch"
|
yoga:yg_alignItems="stretch"
|
||||||
app:yg_flex="1"
|
yoga:yg_flex="1"
|
||||||
app:yg_justifyContent="space_around"
|
yoga:yg_justifyContent="space_around"
|
||||||
>
|
>
|
||||||
<VirtualYogaLayout
|
<VirtualYogaLayout
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
app:height="8dp"
|
yoga:height="8dp"
|
||||||
app:yg_flexDirection="row"
|
yoga:yg_flexDirection="row"
|
||||||
app:yg_alignItems="stretch"
|
yoga:yg_alignItems="stretch"
|
||||||
>
|
>
|
||||||
<TextView
|
<TextView
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:text="@string/child_1_text"
|
android:text="@string/child_1_text"
|
||||||
android:textSize="5sp"
|
android:textSize="5sp"
|
||||||
app:yg_flex="1"
|
yoga:yg_flex="1"
|
||||||
/>
|
/>
|
||||||
<View
|
<View
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:background="@color/yoga_blue"
|
android:background="@color/yoga_blue"
|
||||||
app:yg_aspectRatio="1"
|
yoga:yg_aspectRatio="1"
|
||||||
/>
|
/>
|
||||||
</VirtualYogaLayout>
|
</VirtualYogaLayout>
|
||||||
<VirtualYogaLayout
|
<VirtualYogaLayout
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
app:height="8dp"
|
yoga:height="8dp"
|
||||||
app:yg_flexDirection="row"
|
yoga:yg_flexDirection="row"
|
||||||
app:yg_alignItems="stretch"
|
yoga:yg_alignItems="stretch"
|
||||||
>
|
>
|
||||||
<TextView
|
<TextView
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:text="@string/child_1_text"
|
android:text="@string/child_1_text"
|
||||||
android:textSize="5sp"
|
android:textSize="5sp"
|
||||||
app:yg_flex="1"
|
yoga:yg_flex="1"
|
||||||
/>
|
/>
|
||||||
<View
|
<View
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:background="@color/yoga_blue"
|
android:background="@color/yoga_blue"
|
||||||
app:yg_aspectRatio="1"
|
yoga:yg_aspectRatio="1"
|
||||||
/>
|
/>
|
||||||
</VirtualYogaLayout>
|
</VirtualYogaLayout>
|
||||||
<VirtualYogaLayout
|
<VirtualYogaLayout
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
app:height="8dp"
|
yoga:height="8dp"
|
||||||
app:yg_flexDirection="row"
|
yoga:yg_flexDirection="row"
|
||||||
app:yg_alignItems="stretch"
|
yoga:yg_alignItems="stretch"
|
||||||
>
|
>
|
||||||
<TextView
|
<TextView
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:text="@string/child_1_text"
|
android:text="@string/child_1_text"
|
||||||
android:textSize="5sp"
|
android:textSize="5sp"
|
||||||
app:yg_flex="1"
|
yoga:yg_flex="1"
|
||||||
/>
|
/>
|
||||||
<View
|
<View
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:background="@color/yoga_blue"
|
android:background="@color/yoga_blue"
|
||||||
app:yg_aspectRatio="1"
|
yoga:yg_aspectRatio="1"
|
||||||
/>
|
/>
|
||||||
</VirtualYogaLayout>
|
</VirtualYogaLayout>
|
||||||
</VirtualYogaLayout>
|
</VirtualYogaLayout>
|
@@ -1,6 +1,7 @@
|
|||||||
<?xml version="1.0" encoding="utf-8" ?>
|
<?xml version="1.0" encoding="utf-8" ?>
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:yoga="http://schemas.android.com/apk/res-auto"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="60dp"
|
android:layout_height="60dp"
|
||||||
android:orientation="vertical"
|
android:orientation="vertical"
|
@@ -1,192 +1,192 @@
|
|||||||
<?xml version="1.0" encoding="utf-8" ?>
|
<?xml version="1.0" encoding="utf-8" ?>
|
||||||
<YogaLayout
|
<YogaLayout
|
||||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
xmlns:yoga="http://schemas.android.com/apk/res-auto"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
app:yg_alignItems="center"
|
yoga:yg_alignItems="center"
|
||||||
app:yg_flexDirection="row"
|
yoga:yg_flexDirection="row"
|
||||||
app:yg_justifyContent="center"
|
yoga:yg_justifyContent="center"
|
||||||
>
|
>
|
||||||
<TextView
|
<TextView
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:background="@color/yoga_blue"
|
android:background="@color/yoga_blue"
|
||||||
app:yg_marginLeft="10dp"
|
yoga:yg_marginLeft="10dp"
|
||||||
/>
|
/>
|
||||||
<VirtualYogaLayout
|
<VirtualYogaLayout
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
app:yg_flexDirection="column"
|
yoga:yg_flexDirection="column"
|
||||||
app:yg_flex="1"
|
yoga:yg_flex="1"
|
||||||
>
|
>
|
||||||
<TextView
|
<TextView
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:background="@color/yoga_grey"
|
android:background="@color/yoga_grey"
|
||||||
app:yg_marginLeft="10dp"
|
yoga:yg_marginLeft="10dp"
|
||||||
/>
|
/>
|
||||||
<VirtualYogaLayout
|
<VirtualYogaLayout
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
app:yg_flexDirection="row"
|
yoga:yg_flexDirection="row"
|
||||||
app:yg_flex="1"
|
yoga:yg_flex="1"
|
||||||
>
|
>
|
||||||
<TextView
|
<TextView
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:background="@color/yoga_grey"
|
android:background="@color/yoga_grey"
|
||||||
app:yg_marginLeft="10dp"
|
yoga:yg_marginLeft="10dp"
|
||||||
/>
|
/>
|
||||||
<VirtualYogaLayout
|
<VirtualYogaLayout
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
app:yg_flexDirection="row"
|
yoga:yg_flexDirection="row"
|
||||||
app:yg_flex="1"
|
yoga:yg_flex="1"
|
||||||
>
|
>
|
||||||
<TextView
|
<TextView
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:background="@color/yoga_blue"
|
android:background="@color/yoga_blue"
|
||||||
app:yg_marginLeft="10dp"
|
yoga:yg_marginLeft="10dp"
|
||||||
/>
|
/>
|
||||||
<VirtualYogaLayout
|
<VirtualYogaLayout
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
app:yg_flexDirection="row"
|
yoga:yg_flexDirection="row"
|
||||||
app:yg_flex="1"
|
yoga:yg_flex="1"
|
||||||
>
|
>
|
||||||
<TextView
|
<TextView
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:background="@color/yoga_grey"
|
android:background="@color/yoga_grey"
|
||||||
app:yg_marginLeft="10dp"
|
yoga:yg_marginLeft="10dp"
|
||||||
/>
|
/>
|
||||||
<VirtualYogaLayout
|
<VirtualYogaLayout
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
app:yg_flexDirection="row"
|
yoga:yg_flexDirection="row"
|
||||||
app:yg_flex="1"
|
yoga:yg_flex="1"
|
||||||
>
|
>
|
||||||
<TextView
|
<TextView
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:background="@color/yoga_grey"
|
android:background="@color/yoga_grey"
|
||||||
app:yg_marginLeft="10dp"
|
yoga:yg_marginLeft="10dp"
|
||||||
/>
|
/>
|
||||||
<VirtualYogaLayout
|
<VirtualYogaLayout
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
app:yg_flexDirection="column"
|
yoga:yg_flexDirection="column"
|
||||||
app:yg_flex="1"
|
yoga:yg_flex="1"
|
||||||
>
|
>
|
||||||
<TextView
|
<TextView
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:background="@color/yoga_blue"
|
android:background="@color/yoga_blue"
|
||||||
app:yg_marginLeft="10dp"
|
yoga:yg_marginLeft="10dp"
|
||||||
/>
|
/>
|
||||||
<VirtualYogaLayout
|
<VirtualYogaLayout
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
app:yg_flexDirection="row"
|
yoga:yg_flexDirection="row"
|
||||||
app:yg_flex="1"
|
yoga:yg_flex="1"
|
||||||
>
|
>
|
||||||
<TextView
|
<TextView
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:background="@color/yoga_grey"
|
android:background="@color/yoga_grey"
|
||||||
app:yg_marginLeft="10dp"
|
yoga:yg_marginLeft="10dp"
|
||||||
/>
|
/>
|
||||||
<VirtualYogaLayout
|
<VirtualYogaLayout
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
app:yg_flexDirection="row"
|
yoga:yg_flexDirection="row"
|
||||||
app:yg_flex="1"
|
yoga:yg_flex="1"
|
||||||
>
|
>
|
||||||
<TextView
|
<TextView
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:background="@color/yoga_grey"
|
android:background="@color/yoga_grey"
|
||||||
app:yg_marginLeft="10dp"
|
yoga:yg_marginLeft="10dp"
|
||||||
/>
|
/>
|
||||||
<VirtualYogaLayout
|
<VirtualYogaLayout
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
app:yg_flexDirection="row"
|
yoga:yg_flexDirection="row"
|
||||||
app:yg_flex="1"
|
yoga:yg_flex="1"
|
||||||
>
|
>
|
||||||
<TextView
|
<TextView
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:background="@color/yoga_blue"
|
android:background="@color/yoga_blue"
|
||||||
app:yg_marginLeft="10dp"
|
yoga:yg_marginLeft="10dp"
|
||||||
/>
|
/>
|
||||||
<VirtualYogaLayout
|
<VirtualYogaLayout
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
app:yg_flexDirection="row"
|
yoga:yg_flexDirection="row"
|
||||||
app:yg_flex="1"
|
yoga:yg_flex="1"
|
||||||
>
|
>
|
||||||
<TextView
|
<TextView
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:background="@color/yoga_grey"
|
android:background="@color/yoga_grey"
|
||||||
app:yg_marginLeft="10dp"
|
yoga:yg_marginLeft="10dp"
|
||||||
/>
|
/>
|
||||||
<VirtualYogaLayout
|
<VirtualYogaLayout
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
app:yg_flexDirection="column"
|
yoga:yg_flexDirection="column"
|
||||||
app:yg_flex="1"
|
yoga:yg_flex="1"
|
||||||
>
|
>
|
||||||
<TextView
|
<TextView
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:background="@color/yoga_grey"
|
android:background="@color/yoga_grey"
|
||||||
app:yg_marginLeft="10dp"
|
yoga:yg_marginLeft="10dp"
|
||||||
/>
|
/>
|
||||||
<VirtualYogaLayout
|
<VirtualYogaLayout
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
app:yg_flexDirection="row"
|
yoga:yg_flexDirection="row"
|
||||||
app:yg_flex="1"
|
yoga:yg_flex="1"
|
||||||
>
|
>
|
||||||
<TextView
|
<TextView
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:background="@color/yoga_blue"
|
android:background="@color/yoga_blue"
|
||||||
app:yg_marginLeft="10dp"
|
yoga:yg_marginLeft="10dp"
|
||||||
/>
|
/>
|
||||||
<VirtualYogaLayout
|
<VirtualYogaLayout
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
app:yg_flexDirection="row"
|
yoga:yg_flexDirection="row"
|
||||||
app:yg_flex="1"
|
yoga:yg_flex="1"
|
||||||
>
|
>
|
||||||
<TextView
|
<TextView
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:background="@color/yoga_grey"
|
android:background="@color/yoga_grey"
|
||||||
app:yg_marginLeft="10dp"
|
yoga:yg_marginLeft="10dp"
|
||||||
/>
|
/>
|
||||||
<VirtualYogaLayout
|
<VirtualYogaLayout
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
app:yg_flexDirection="row"
|
yoga:yg_flexDirection="row"
|
||||||
app:yg_flex="1"
|
yoga:yg_flex="1"
|
||||||
>
|
>
|
||||||
<TextView
|
<TextView
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:background="@color/yoga_grey"
|
android:background="@color/yoga_grey"
|
||||||
app:yg_marginLeft="10dp"
|
yoga:yg_marginLeft="10dp"
|
||||||
/>
|
/>
|
||||||
<VirtualYogaLayout
|
<VirtualYogaLayout
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
app:yg_flexDirection="row"
|
yoga:yg_flexDirection="row"
|
||||||
app:yg_flex="1"
|
yoga:yg_flex="1"
|
||||||
>
|
>
|
||||||
</VirtualYogaLayout>
|
</VirtualYogaLayout>
|
||||||
</VirtualYogaLayout>
|
</VirtualYogaLayout>
|
@@ -1,5 +1,5 @@
|
|||||||
<?xml version="1.0" encoding="utf-8" ?>
|
<?xml version="1.0" encoding="utf-8" ?>
|
||||||
<androidx.viewpager.widget.ViewPager
|
<android.support.v4.view.ViewPager
|
||||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
android:id="@+id/viewpager"
|
android:id="@+id/viewpager"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
@@ -10,7 +10,7 @@
|
|||||||
|
|
||||||
<YogaLayout
|
<YogaLayout
|
||||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
xmlns:yoga="http://schemas.android.com/apk/res/com.facebook.samples.yoga"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
>
|
>
|
||||||
@@ -18,120 +18,120 @@
|
|||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:background="@drawable/sample_children_background"
|
android:background="@drawable/sample_children_background"
|
||||||
app:yg_marginHorizontal="10dp"
|
yoga:yg_marginHorizontal="10dp"
|
||||||
app:yg_marginTop="5dp"
|
yoga:yg_marginTop="5dp"
|
||||||
app:yg_flexDirection="row"
|
yoga:yg_flexDirection="row"
|
||||||
app:yg_alignItems="center"
|
yoga:yg_alignItems="center"
|
||||||
>
|
>
|
||||||
<ImageView
|
<ImageView
|
||||||
android:layout_width="50dp"
|
android:layout_width="50dp"
|
||||||
android:layout_height="50dp"
|
android:layout_height="50dp"
|
||||||
android:src="@drawable/ic_launcher"
|
android:src="@drawable/ic_launcher"
|
||||||
app:yg_flex="0"
|
yoga:yg_flex="0"
|
||||||
/>
|
/>
|
||||||
<TextView
|
<TextView
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:text="@string/child_1_text"
|
android:text="@string/child_1_text"
|
||||||
android:textColor="@color/children_text"
|
android:textColor="@color/children_text"
|
||||||
app:yg_flex="1"
|
yoga:yg_flex="1"
|
||||||
app:yg_marginStart="8dp"
|
yoga:yg_marginStart="8dp"
|
||||||
/>
|
/>
|
||||||
</YogaLayout>
|
</YogaLayout>
|
||||||
<YogaLayout
|
<YogaLayout
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:background="@drawable/sample_children_background"
|
android:background="@drawable/sample_children_background"
|
||||||
app:yg_marginHorizontal="10dp"
|
yoga:yg_marginHorizontal="10dp"
|
||||||
app:yg_marginTop="5dp"
|
yoga:yg_marginTop="5dp"
|
||||||
app:yg_flexDirection="row"
|
yoga:yg_flexDirection="row"
|
||||||
app:yg_alignItems="center"
|
yoga:yg_alignItems="center"
|
||||||
>
|
>
|
||||||
<ImageView
|
<ImageView
|
||||||
android:layout_width="50dp"
|
android:layout_width="50dp"
|
||||||
android:layout_height="50dp"
|
android:layout_height="50dp"
|
||||||
android:src="@drawable/ic_launcher"
|
android:src="@drawable/ic_launcher"
|
||||||
app:yg_flex="0"
|
yoga:yg_flex="0"
|
||||||
/>
|
/>
|
||||||
<TextView
|
<TextView
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:text="@string/child_2_text"
|
android:text="@string/child_2_text"
|
||||||
android:textColor="@color/children_text"
|
android:textColor="@color/children_text"
|
||||||
app:yg_flex="1"
|
yoga:yg_flex="1"
|
||||||
app:yg_marginStart="8dp"
|
yoga:yg_marginStart="8dp"
|
||||||
/>
|
/>
|
||||||
</YogaLayout>
|
</YogaLayout>
|
||||||
<YogaLayout
|
<YogaLayout
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:background="@drawable/sample_children_background"
|
android:background="@drawable/sample_children_background"
|
||||||
app:yg_marginHorizontal="10dp"
|
yoga:yg_marginHorizontal="10dp"
|
||||||
app:yg_marginTop="5dp"
|
yoga:yg_marginTop="5dp"
|
||||||
app:yg_flexDirection="row"
|
yoga:yg_flexDirection="row"
|
||||||
app:yg_alignItems="center"
|
yoga:yg_alignItems="center"
|
||||||
>
|
>
|
||||||
<ImageView
|
<ImageView
|
||||||
android:layout_width="50dp"
|
android:layout_width="50dp"
|
||||||
android:layout_height="50dp"
|
android:layout_height="50dp"
|
||||||
android:src="@drawable/ic_launcher"
|
android:src="@drawable/ic_launcher"
|
||||||
app:yg_flex="0"
|
yoga:yg_flex="0"
|
||||||
/>
|
/>
|
||||||
<TextView
|
<TextView
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:text="@string/child_3_text"
|
android:text="@string/child_3_text"
|
||||||
android:textColor="@color/children_text"
|
android:textColor="@color/children_text"
|
||||||
app:yg_flex="1"
|
yoga:yg_flex="1"
|
||||||
app:yg_marginStart="8dp"
|
yoga:yg_marginStart="8dp"
|
||||||
/>
|
/>
|
||||||
</YogaLayout>
|
</YogaLayout>
|
||||||
<YogaLayout
|
<YogaLayout
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:background="@drawable/sample_children_background"
|
android:background="@drawable/sample_children_background"
|
||||||
app:yg_marginHorizontal="10dp"
|
yoga:yg_marginHorizontal="10dp"
|
||||||
app:yg_marginTop="5dp"
|
yoga:yg_marginTop="5dp"
|
||||||
app:yg_flexDirection="row"
|
yoga:yg_flexDirection="row"
|
||||||
app:yg_alignItems="center"
|
yoga:yg_alignItems="center"
|
||||||
>
|
>
|
||||||
<ImageView
|
<ImageView
|
||||||
android:layout_width="50dp"
|
android:layout_width="50dp"
|
||||||
android:layout_height="50dp"
|
android:layout_height="50dp"
|
||||||
android:src="@drawable/ic_launcher"
|
android:src="@drawable/ic_launcher"
|
||||||
app:yg_flex="0"
|
yoga:yg_flex="0"
|
||||||
/>
|
/>
|
||||||
<TextView
|
<TextView
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:text="@string/child_4_text"
|
android:text="@string/child_4_text"
|
||||||
android:textColor="@color/children_text"
|
android:textColor="@color/children_text"
|
||||||
app:yg_flex="1"
|
yoga:yg_flex="1"
|
||||||
app:yg_marginStart="8dp"
|
yoga:yg_marginStart="8dp"
|
||||||
/>
|
/>
|
||||||
</YogaLayout>
|
</YogaLayout>
|
||||||
<YogaLayout
|
<YogaLayout
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:background="@drawable/sample_children_background"
|
android:background="@drawable/sample_children_background"
|
||||||
app:yg_marginHorizontal="10dp"
|
yoga:yg_marginHorizontal="10dp"
|
||||||
app:yg_marginTop="5dp"
|
yoga:yg_marginTop="5dp"
|
||||||
app:yg_flexDirection="row"
|
yoga:yg_flexDirection="row"
|
||||||
app:yg_alignItems="center"
|
yoga:yg_alignItems="center"
|
||||||
>
|
>
|
||||||
<ImageView
|
<ImageView
|
||||||
android:layout_width="50dp"
|
android:layout_width="50dp"
|
||||||
android:layout_height="50dp"
|
android:layout_height="50dp"
|
||||||
android:src="@drawable/ic_launcher"
|
android:src="@drawable/ic_launcher"
|
||||||
app:yg_flex="0"
|
yoga:yg_flex="0"
|
||||||
/>
|
/>
|
||||||
<TextView
|
<TextView
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:text="@string/child_5_text"
|
android:text="@string/child_5_text"
|
||||||
android:textColor="@color/children_text"
|
android:textColor="@color/children_text"
|
||||||
app:yg_flex="1"
|
yoga:yg_flex="1"
|
||||||
app:yg_marginStart="10dp"
|
yoga:yg_marginStart="10dp"
|
||||||
/>
|
/>
|
||||||
</YogaLayout>
|
</YogaLayout>
|
||||||
</YogaLayout>
|
</YogaLayout>
|
19
android/sample/res/menu/action_bar_benchmark.xml
Normal file
19
android/sample/res/menu/action_bar_benchmark.xml
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
Copyright 2014-present, Facebook, Inc.
|
||||||
|
All rights reserved.
|
||||||
|
|
||||||
|
This source code is licensed under the license found in the
|
||||||
|
LICENSE-examples file in the root directory of this source tree.
|
||||||
|
-->
|
||||||
|
|
||||||
|
<menu
|
||||||
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
>
|
||||||
|
<item
|
||||||
|
android:id="@+id/action_home"
|
||||||
|
android:title="Home"
|
||||||
|
android:showAsAction="always"
|
||||||
|
/>
|
||||||
|
</menu>
|
19
android/sample/res/menu/action_bar_home.xml
Normal file
19
android/sample/res/menu/action_bar_home.xml
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
Copyright 2014-present, Facebook, Inc.
|
||||||
|
All rights reserved.
|
||||||
|
|
||||||
|
This source code is licensed under the license found in the
|
||||||
|
LICENSE-examples file in the root directory of this source tree.
|
||||||
|
-->
|
||||||
|
|
||||||
|
<menu
|
||||||
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
>
|
||||||
|
<item
|
||||||
|
android:id="@+id/action_benchmark"
|
||||||
|
android:title="Benchmark"
|
||||||
|
android:showAsAction="always"
|
||||||
|
/>
|
||||||
|
</menu>
|
@@ -30,6 +30,4 @@
|
|||||||
name="child_5_text"
|
name="child_5_text"
|
||||||
description="Placeholder text for the fifth element in the layout"
|
description="Placeholder text for the fifth element in the layout"
|
||||||
>Who are you?</string>
|
>Who are you?</string>
|
||||||
<string name="home">Home</string>
|
|
||||||
<string name="benchmark">Benchmark</string>
|
|
||||||
</resources>
|
</resources>
|
@@ -4,7 +4,7 @@
|
|||||||
# LICENSE file in the root directory of this source tree.
|
# LICENSE file in the root directory of this source tree.
|
||||||
|
|
||||||
|
|
||||||
cmake_minimum_required(VERSION 3.13...3.26)
|
cmake_minimum_required(VERSION 3.13)
|
||||||
project(benchmark)
|
project(benchmark)
|
||||||
set(CMAKE_VERBOSE_MAKEFILE on)
|
set(CMAKE_VERBOSE_MAKEFILE on)
|
||||||
|
|
||||||
|
@@ -17,8 +17,6 @@
|
|||||||
|
|
||||||
#define YGBENCHMARKS(BLOCK) \
|
#define YGBENCHMARKS(BLOCK) \
|
||||||
int main(int argc, char const* argv[]) { \
|
int main(int argc, char const* argv[]) { \
|
||||||
(void) argc; \
|
|
||||||
(void) argv; \
|
|
||||||
clock_t __start; \
|
clock_t __start; \
|
||||||
clock_t __endTimes[NUM_REPETITIONS]; \
|
clock_t __endTimes[NUM_REPETITIONS]; \
|
||||||
{ BLOCK } \
|
{ BLOCK } \
|
||||||
@@ -80,10 +78,9 @@ static YGSize _measure(
|
|||||||
YGMeasureMode widthMode,
|
YGMeasureMode widthMode,
|
||||||
float height,
|
float height,
|
||||||
YGMeasureMode heightMode) {
|
YGMeasureMode heightMode) {
|
||||||
(void) node;
|
|
||||||
return (YGSize){
|
return (YGSize){
|
||||||
.width = widthMode == YGMeasureModeUndefined ? 10 : width,
|
.width = widthMode == YGMeasureModeUndefined ? 10 : width,
|
||||||
.height = heightMode == YGMeasureModeUndefined ? 10 : height,
|
.height = heightMode == YGMeasureModeUndefined ? 10 : width,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -1,76 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
||||||
*
|
|
||||||
* This source code is licensed under the MIT license found in the
|
|
||||||
* LICENSE file in the root directory of this source tree.
|
|
||||||
*/
|
|
||||||
|
|
||||||
plugins {
|
|
||||||
id("maven-publish")
|
|
||||||
id("signing")
|
|
||||||
}
|
|
||||||
|
|
||||||
group = "com.facebook.yoga"
|
|
||||||
|
|
||||||
if ("USE_SNAPSHOT".byProperty.toBoolean()) {
|
|
||||||
version = "${"VERSION_NAME".byProperty}-SNAPSHOT"
|
|
||||||
} else {
|
|
||||||
version = "VERSION_NAME".byProperty.toString()
|
|
||||||
}
|
|
||||||
|
|
||||||
publishing {
|
|
||||||
publications {
|
|
||||||
register<MavenPublication>("default") {
|
|
||||||
groupId = project.group.toString()
|
|
||||||
artifactId = project.name
|
|
||||||
version = project.version.toString()
|
|
||||||
afterEvaluate { from(components["default"]) }
|
|
||||||
pom {
|
|
||||||
description.set(
|
|
||||||
"An embeddable and performant flexbox layout engine with bindings for multiple languages")
|
|
||||||
name.set(project.name)
|
|
||||||
url.set("https://github.com/facebook/yoga.git")
|
|
||||||
licenses {
|
|
||||||
license {
|
|
||||||
name.set("MIT License")
|
|
||||||
url.set("https://github.com/facebook/yoga/blob/main/LICENSE")
|
|
||||||
distribution.set("repo")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
developers {
|
|
||||||
developer {
|
|
||||||
id.set("Meta Open Source")
|
|
||||||
name.set("Meta Open Source")
|
|
||||||
email.set("opensource@meta.com")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
scm { url.set("scm:git:git@github.com:facebook/yoga.git") }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
val signingKey = "SIGNING_KEY".byProperty
|
|
||||||
val signingPwd = "SIGNING_PWD".byProperty
|
|
||||||
|
|
||||||
if (signingKey.isNullOrBlank() || signingPwd.isNullOrBlank()) {
|
|
||||||
logger.info("Signing disabled as the GPG key was not found")
|
|
||||||
} else {
|
|
||||||
logger.info("GPG Key found - Signing enabled")
|
|
||||||
}
|
|
||||||
|
|
||||||
signing {
|
|
||||||
useInMemoryPgpKeys(signingKey, signingPwd)
|
|
||||||
sign(publishing.publications)
|
|
||||||
isRequired = !(signingKey.isNullOrBlank() || signingPwd.isNullOrBlank())
|
|
||||||
}
|
|
||||||
|
|
||||||
// Fix for https://youtrack.jetbrains.com/issue/KT-46466/
|
|
||||||
// On Gradle 8+, the signing task is not correctly wired to the publishing tasks.
|
|
||||||
// This requires a fix on KGP that is currently pending.
|
|
||||||
val signingTasks = tasks.withType<Sign>()
|
|
||||||
|
|
||||||
tasks.withType<AbstractPublishToMaven>().configureEach { dependsOn(signingTasks) }
|
|
||||||
|
|
||||||
val String.byProperty: String?
|
|
||||||
get() = providers.gradleProperty(this).orNull
|
|
44
build.gradle
44
build.gradle
@@ -5,10 +5,19 @@
|
|||||||
* LICENSE file in the root directory of this source tree.
|
* LICENSE file in the root directory of this source tree.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
plugins {
|
// Top-level build file where you can add configuration options common to all sub-projects/modules.
|
||||||
id("com.android.library") version "8.0.1" apply false
|
|
||||||
id("com.android.application") version "8.0.1" apply false
|
buildscript {
|
||||||
id("io.github.gradle-nexus.publish-plugin") version "1.3.0"
|
repositories {
|
||||||
|
google()
|
||||||
|
mavenCentral()
|
||||||
|
}
|
||||||
|
dependencies {
|
||||||
|
classpath 'com.android.tools.build:gradle:7.3.1'
|
||||||
|
classpath 'com.vanniktech:gradle-maven-publish-plugin:0.15.1'
|
||||||
|
// NOTE: Do not place your application dependencies here; they belong
|
||||||
|
// in the individual module build.gradle files
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
allprojects {
|
allprojects {
|
||||||
@@ -18,34 +27,15 @@ allprojects {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
group = "com.facebook.yoga"
|
|
||||||
|
|
||||||
if (project.hasProperty("USE_SNAPSHOT") && project.property("USE_SNAPSHOT").toBoolean()) {
|
|
||||||
version = getProperty("VERSION_NAME") + "-SNAPSHOT"
|
|
||||||
} else {
|
|
||||||
version = getProperty("VERSION_NAME")
|
|
||||||
}
|
|
||||||
|
|
||||||
def sonatypeUsername = findProperty("SONATYPE_USERNAME")?.toString()
|
|
||||||
def sonatypePassword = findProperty("SONATYPE_PASSWORD")?.toString()
|
|
||||||
|
|
||||||
nexusPublishing {
|
|
||||||
repositories {
|
|
||||||
sonatype {
|
|
||||||
username.set(sonatypeUsername)
|
|
||||||
password.set(sonatypePassword)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
ext {
|
ext {
|
||||||
buildToolsVersion = "33.0.0"
|
buildToolsVersion = "33.0.0"
|
||||||
ndkVersion = "23.1.7779620"
|
ndkVersion = "23.1.7779620" // Corresponds to AGP 7.3
|
||||||
|
cmakeVersion = "3.18.1+"
|
||||||
minSdkVersion = 21
|
minSdkVersion = 21
|
||||||
compileSdkVersion = 33
|
compileSdkVersion = 33
|
||||||
targetSdkVersion = 33
|
targetSdkVersion = 33
|
||||||
sourceCompatibilityVersion = JavaVersion.VERSION_1_8
|
sourceCompatibilityVersion = JavaVersion.VERSION_1_7
|
||||||
targetCompatibilityVersion = JavaVersion.VERSION_1_8
|
targetCompatibilityVersion = JavaVersion.VERSION_1_7
|
||||||
}
|
}
|
||||||
|
|
||||||
task clean(type: Delete) {
|
task clean(type: Delete) {
|
||||||
|
@@ -33,7 +33,6 @@ add_compile_options(
|
|||||||
-fexceptions
|
-fexceptions
|
||||||
# Enable warnings and warnings as errors
|
# Enable warnings and warnings as errors
|
||||||
-Wall
|
-Wall
|
||||||
-Wextra
|
|
||||||
-Werror
|
-Werror
|
||||||
# Disable RTTI
|
# Disable RTTI
|
||||||
$<$<COMPILE_LANGUAGE:CXX>:-fno-rtti>
|
$<$<COMPILE_LANGUAGE:CXX>:-fno-rtti>
|
||||||
|
272
csharp/.gitignore
vendored
Normal file
272
csharp/.gitignore
vendored
Normal file
@@ -0,0 +1,272 @@
|
|||||||
|
## Ignore Visual Studio temporary files, build results, and
|
||||||
|
## files generated by popular Visual Studio add-ons.
|
||||||
|
|
||||||
|
# User-specific files
|
||||||
|
*.suo
|
||||||
|
*.user
|
||||||
|
*.userosscache
|
||||||
|
*.sln.docstates
|
||||||
|
|
||||||
|
# User-specific files (MonoDevelop/Xamarin Studio)
|
||||||
|
*.userprefs
|
||||||
|
|
||||||
|
# Build results
|
||||||
|
[Dd]ebug/
|
||||||
|
[Dd]ebugPublic/
|
||||||
|
[Rr]elease/
|
||||||
|
[Rr]eleases/
|
||||||
|
x64/
|
||||||
|
x86/
|
||||||
|
bld/
|
||||||
|
[Bb]in/
|
||||||
|
[Oo]bj/
|
||||||
|
[Ll]og/
|
||||||
|
|
||||||
|
# Visual Studio 2015 cache/options directory
|
||||||
|
.vs/
|
||||||
|
# Uncomment if you have tasks that create the project's static files in wwwroot
|
||||||
|
#wwwroot/
|
||||||
|
|
||||||
|
# MSTest test Results
|
||||||
|
[Tt]est[Rr]esult*/
|
||||||
|
[Bb]uild[Ll]og.*
|
||||||
|
|
||||||
|
# NUNIT
|
||||||
|
*.VisualState.xml
|
||||||
|
TestResult.xml
|
||||||
|
tests/Facebook.Yoga/NUnit-[0-9\.]*/
|
||||||
|
tests/Facebook.Yoga/YogaTest.dll
|
||||||
|
tests/Facebook.Yoga/YogaTest.dll.mdb
|
||||||
|
tests/Facebook.Yoga/libyoga.dylib
|
||||||
|
|
||||||
|
# Build Results of an ATL Project
|
||||||
|
[Dd]ebugPS/
|
||||||
|
[Rr]eleasePS/
|
||||||
|
dlldata.c
|
||||||
|
|
||||||
|
# DNX
|
||||||
|
project.lock.json
|
||||||
|
project.fragment.lock.json
|
||||||
|
artifacts/
|
||||||
|
|
||||||
|
*_i.c
|
||||||
|
*_p.c
|
||||||
|
*_i.h
|
||||||
|
*.ilk
|
||||||
|
*.meta
|
||||||
|
*.obj
|
||||||
|
*.pch
|
||||||
|
*.pdb
|
||||||
|
*.pgc
|
||||||
|
*.pgd
|
||||||
|
*.rsp
|
||||||
|
*.sbr
|
||||||
|
*.tlb
|
||||||
|
*.tli
|
||||||
|
*.tlh
|
||||||
|
*.tmp
|
||||||
|
*.tmp_proj
|
||||||
|
*.log
|
||||||
|
*.vspscc
|
||||||
|
*.vssscc
|
||||||
|
.builds
|
||||||
|
*.pidb
|
||||||
|
*.svclog
|
||||||
|
*.scc
|
||||||
|
|
||||||
|
# Chutzpah Test files
|
||||||
|
_Chutzpah*
|
||||||
|
|
||||||
|
# Visual C++ cache files
|
||||||
|
ipch/
|
||||||
|
*.aps
|
||||||
|
*.ncb
|
||||||
|
*.opendb
|
||||||
|
*.opensdf
|
||||||
|
*.sdf
|
||||||
|
*.cachefile
|
||||||
|
*.VC.db
|
||||||
|
*.VC.VC.opendb
|
||||||
|
|
||||||
|
# Visual Studio profiler
|
||||||
|
*.psess
|
||||||
|
*.vsp
|
||||||
|
*.vspx
|
||||||
|
*.sap
|
||||||
|
|
||||||
|
# TFS 2012 Local Workspace
|
||||||
|
$tf/
|
||||||
|
|
||||||
|
# Guidance Automation Toolkit
|
||||||
|
*.gpState
|
||||||
|
|
||||||
|
# ReSharper is a .NET coding add-in
|
||||||
|
_ReSharper*/
|
||||||
|
*.[Rr]e[Ss]harper
|
||||||
|
*.DotSettings.user
|
||||||
|
|
||||||
|
# JustCode is a .NET coding add-in
|
||||||
|
.JustCode
|
||||||
|
|
||||||
|
# TeamCity is a build add-in
|
||||||
|
_TeamCity*
|
||||||
|
|
||||||
|
# DotCover is a Code Coverage Tool
|
||||||
|
*.dotCover
|
||||||
|
|
||||||
|
# Visual Studio code coverage results
|
||||||
|
*.coverage
|
||||||
|
*.coveragexml
|
||||||
|
|
||||||
|
# NCrunch
|
||||||
|
_NCrunch_*
|
||||||
|
.*crunch*.local.xml
|
||||||
|
nCrunchTemp_*
|
||||||
|
|
||||||
|
# MightyMoose
|
||||||
|
*.mm.*
|
||||||
|
AutoTest.Net/
|
||||||
|
|
||||||
|
# Web workbench (sass)
|
||||||
|
.sass-cache/
|
||||||
|
|
||||||
|
# Installshield output folder
|
||||||
|
[Ee]xpress/
|
||||||
|
|
||||||
|
# DocProject is a documentation generator add-in
|
||||||
|
DocProject/buildhelp/
|
||||||
|
DocProject/Help/*.HxT
|
||||||
|
DocProject/Help/*.HxC
|
||||||
|
DocProject/Help/*.hhc
|
||||||
|
DocProject/Help/*.hhk
|
||||||
|
DocProject/Help/*.hhp
|
||||||
|
DocProject/Help/Html2
|
||||||
|
DocProject/Help/html
|
||||||
|
|
||||||
|
# Click-Once directory
|
||||||
|
publish/
|
||||||
|
|
||||||
|
# Publish Web Output
|
||||||
|
*.[Pp]ublish.xml
|
||||||
|
*.azurePubxml
|
||||||
|
# TODO: Comment the next line if you want to checkin your web deploy settings
|
||||||
|
# but database connection strings (with potential passwords) will be unencrypted
|
||||||
|
*.pubxml
|
||||||
|
*.publishproj
|
||||||
|
|
||||||
|
# Microsoft Azure Web App publish settings. Comment the next line if you want to
|
||||||
|
# checkin your Azure Web App publish settings, but sensitive information contained
|
||||||
|
# in these scripts will be unencrypted
|
||||||
|
PublishScripts/
|
||||||
|
|
||||||
|
# NuGet Packages
|
||||||
|
*.nupkg
|
||||||
|
# The packages folder can be ignored because of Package Restore
|
||||||
|
**/packages/*
|
||||||
|
# except build/, which is used as an MSBuild target.
|
||||||
|
!**/packages/build/
|
||||||
|
# Uncomment if necessary however generally it will be regenerated when needed
|
||||||
|
#!**/packages/repositories.config
|
||||||
|
# NuGet v3's project.json files produces more ignoreable files
|
||||||
|
*.nuget.props
|
||||||
|
*.nuget.targets
|
||||||
|
|
||||||
|
# Microsoft Azure Build Output
|
||||||
|
csx/
|
||||||
|
*.build.csdef
|
||||||
|
|
||||||
|
# Microsoft Azure Emulator
|
||||||
|
ecf/
|
||||||
|
rcf/
|
||||||
|
|
||||||
|
# Windows Store app package directories and files
|
||||||
|
AppPackages/
|
||||||
|
BundleArtifacts/
|
||||||
|
Package.StoreAssociation.xml
|
||||||
|
_pkginfo.txt
|
||||||
|
|
||||||
|
# Visual Studio cache files
|
||||||
|
# files ending in .cache can be ignored
|
||||||
|
*.[Cc]ache
|
||||||
|
# but keep track of directories ending in .cache
|
||||||
|
!*.[Cc]ache/
|
||||||
|
|
||||||
|
# Others
|
||||||
|
ClientBin/
|
||||||
|
~$*
|
||||||
|
*~
|
||||||
|
*.dbmdl
|
||||||
|
*.dbproj.schemaview
|
||||||
|
*.jfm
|
||||||
|
*.pfx
|
||||||
|
*.publishsettings
|
||||||
|
node_modules/
|
||||||
|
orleans.codegen.cs
|
||||||
|
|
||||||
|
# Since there are multiple workflows, uncomment next line to ignore bower_components
|
||||||
|
# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
|
||||||
|
#bower_components/
|
||||||
|
|
||||||
|
# RIA/Silverlight projects
|
||||||
|
Generated_Code/
|
||||||
|
|
||||||
|
# Backup & report files from converting an old project file
|
||||||
|
# to a newer Visual Studio version. Backup files are not needed,
|
||||||
|
# because we have git ;-)
|
||||||
|
_UpgradeReport_Files/
|
||||||
|
Backup*/
|
||||||
|
UpgradeLog*.XML
|
||||||
|
UpgradeLog*.htm
|
||||||
|
|
||||||
|
# SQL Server files
|
||||||
|
*.mdf
|
||||||
|
*.ldf
|
||||||
|
|
||||||
|
# Business Intelligence projects
|
||||||
|
*.rdl.data
|
||||||
|
*.bim.layout
|
||||||
|
*.bim_*.settings
|
||||||
|
|
||||||
|
# Microsoft Fakes
|
||||||
|
FakesAssemblies/
|
||||||
|
|
||||||
|
# GhostDoc plugin setting file
|
||||||
|
*.GhostDoc.xml
|
||||||
|
|
||||||
|
# Node.js Tools for Visual Studio
|
||||||
|
.ntvs_analysis.dat
|
||||||
|
|
||||||
|
# Visual Studio 6 build log
|
||||||
|
*.plg
|
||||||
|
|
||||||
|
# Visual Studio 6 workspace options file
|
||||||
|
*.opt
|
||||||
|
|
||||||
|
# Visual Studio LightSwitch build output
|
||||||
|
**/*.HTMLClient/GeneratedArtifacts
|
||||||
|
**/*.DesktopClient/GeneratedArtifacts
|
||||||
|
**/*.DesktopClient/ModelManifest.xml
|
||||||
|
**/*.Server/GeneratedArtifacts
|
||||||
|
**/*.Server/ModelManifest.xml
|
||||||
|
_Pvt_Extensions
|
||||||
|
|
||||||
|
# Paket dependency manager
|
||||||
|
.paket/paket.exe
|
||||||
|
paket-files/
|
||||||
|
|
||||||
|
# FAKE - F# Make
|
||||||
|
.fake/
|
||||||
|
|
||||||
|
# JetBrains Rider
|
||||||
|
.idea/
|
||||||
|
*.sln.iml
|
||||||
|
|
||||||
|
# CodeRush
|
||||||
|
.cr/
|
||||||
|
|
||||||
|
# Python Tools for Visual Studio (PTVS)
|
||||||
|
__pycache__/
|
||||||
|
*.pyc
|
||||||
|
|
||||||
|
# local buck build
|
||||||
|
lib/
|
1
csharp/Android/.gitignore
vendored
Normal file
1
csharp/Android/.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
lib/
|
@@ -0,0 +1,63 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<PropertyGroup>
|
||||||
|
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||||
|
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||||
|
<ProjectGuid>{2021459E-8FB1-44A4-89F1-E291769CD2C6}</ProjectGuid>
|
||||||
|
<ProjectTypeGuids>{EFBA0AD7-5A72-4C68-AF49-83D382785DCF};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
|
||||||
|
<OutputType>Library</OutputType>
|
||||||
|
<RootNamespace>Facebook.Yoga.Android.Tests</RootNamespace>
|
||||||
|
<AssemblyName>Facebook.Yoga.Android.Tests</AssemblyName>
|
||||||
|
<TargetFrameworkVersion>v7.1</TargetFrameworkVersion>
|
||||||
|
<AndroidApplication>True</AndroidApplication>
|
||||||
|
<AndroidResgenFile>Resources\Resource.designer.cs</AndroidResgenFile>
|
||||||
|
<AndroidResgenClass>Resource</AndroidResgenClass>
|
||||||
|
<MonoAndroidResourcePrefix>Resources</MonoAndroidResourcePrefix>
|
||||||
|
<MonoAndroidAssetsPrefix>Assets</MonoAndroidAssetsPrefix>
|
||||||
|
<AndroidUseLatestPlatformSdk>true</AndroidUseLatestPlatformSdk>
|
||||||
|
<AndroidManifest>Properties\AndroidManifest.xml</AndroidManifest>
|
||||||
|
<AndroidTlsProvider></AndroidTlsProvider>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||||
|
<DebugSymbols>true</DebugSymbols>
|
||||||
|
<DebugType>full</DebugType>
|
||||||
|
<Optimize>false</Optimize>
|
||||||
|
<OutputPath>bin\Debug</OutputPath>
|
||||||
|
<DefineConstants>DEBUG;</DefineConstants>
|
||||||
|
<ErrorReport>prompt</ErrorReport>
|
||||||
|
<WarningLevel>4</WarningLevel>
|
||||||
|
<AndroidLinkMode>None</AndroidLinkMode>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||||
|
<DebugSymbols>true</DebugSymbols>
|
||||||
|
<DebugType>pdbonly</DebugType>
|
||||||
|
<Optimize>true</Optimize>
|
||||||
|
<OutputPath>bin\Release</OutputPath>
|
||||||
|
<ErrorReport>prompt</ErrorReport>
|
||||||
|
<WarningLevel>4</WarningLevel>
|
||||||
|
<AndroidManagedSymbols>true</AndroidManagedSymbols>
|
||||||
|
<AndroidUseSharedRuntime>false</AndroidUseSharedRuntime>
|
||||||
|
</PropertyGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Reference Include="System" />
|
||||||
|
<Reference Include="System.Xml" />
|
||||||
|
<Reference Include="System.Core" />
|
||||||
|
<Reference Include="Mono.Android" />
|
||||||
|
<Reference Include="Xamarin.Android.NUnitLite" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Compile Include="MainActivity.cs" />
|
||||||
|
<Compile Include="Resources\Resource.designer.cs" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<None Include="Properties\AndroidManifest.xml" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ProjectReference Include="..\Facebook.Yoga.Android\Facebook.Yoga.Android.csproj">
|
||||||
|
<Project>{EDF7CF8B-5640-4E1D-A2C7-E4BC8BE44363}</Project>
|
||||||
|
<Name>Facebook.Yoga.Android</Name>
|
||||||
|
</ProjectReference>
|
||||||
|
</ItemGroup>
|
||||||
|
<Import Project="..\..\tests\Facebook.Yoga\Facebook.Yoga.Shared.Tests.projitems" Label="Shared" Condition="Exists('..\..\tests\Facebook.Yoga\Facebook.Yoga.Shared.Tests.projitems')" />
|
||||||
|
<Import Project="$(MSBuildExtensionsPath)\Xamarin\Android\Xamarin.Android.CSharp.targets" />
|
||||||
|
</Project>
|
24
csharp/Android/Facebook.Yoga.Android.Tests/MainActivity.cs
Normal file
24
csharp/Android/Facebook.Yoga.Android.Tests/MainActivity.cs
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
||||||
|
*
|
||||||
|
* This source code is licensed under the MIT license found in the
|
||||||
|
* LICENSE file in the root directory of this source tree.
|
||||||
|
*/
|
||||||
|
|
||||||
|
using System.Reflection;
|
||||||
|
using Android.App;
|
||||||
|
using Android.OS;
|
||||||
|
using Xamarin.Android.NUnitLite;
|
||||||
|
|
||||||
|
namespace Facebook.Yoga.Android.Tests
|
||||||
|
{
|
||||||
|
[Activity(Label = "Facebook.Yoga.Android.Tests", MainLauncher = true)]
|
||||||
|
public class MainActivity : TestSuiteActivity
|
||||||
|
{
|
||||||
|
protected override void OnCreate(Bundle bundle)
|
||||||
|
{
|
||||||
|
AddTest(Assembly.GetExecutingAssembly());
|
||||||
|
base.OnCreate(bundle);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@@ -0,0 +1,14 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:versionCode="1"
|
||||||
|
android:versionName="1.0"
|
||||||
|
package="Facebook.Yoga.Android.Tests">
|
||||||
|
|
||||||
|
<uses-sdk
|
||||||
|
android:minSdkVersion="19" />
|
||||||
|
|
||||||
|
<application
|
||||||
|
android:label="Facebook.Yoga.Android.Tests">
|
||||||
|
</application>
|
||||||
|
|
||||||
|
</manifest>
|
33
csharp/Android/Facebook.Yoga.Android.sln
Normal file
33
csharp/Android/Facebook.Yoga.Android.sln
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
|
||||||
|
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||||
|
# Visual Studio 2012
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Facebook.Yoga.Android.Tests", "Facebook.Yoga.Android.Tests\Facebook.Yoga.Android.Tests.csproj", "{2021459E-8FB1-44A4-89F1-E291769CD2C6}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Facebook.Yoga.Android", "Facebook.Yoga.Android\Facebook.Yoga.Android.csproj", "{EDF7CF8B-5640-4E1D-A2C7-E4BC8BE44363}"
|
||||||
|
EndProject
|
||||||
|
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Shared", "Shared", "{4804A8E6-E7B7-4F9E-A446-3DE8E73DB38A}"
|
||||||
|
EndProject
|
||||||
|
Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "Facebook.Yoga.Shared", "..\Facebook.Yoga\Facebook.Yoga.Shared.shproj", "{91C42D32-291D-4B72-90B4-551663D60B8B}"
|
||||||
|
EndProject
|
||||||
|
Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "Facebook.Yoga.Shared.Tests", "..\tests\Facebook.Yoga\Facebook.Yoga.Shared.Tests.shproj", "{4EDC82D9-A201-4831-8FE0-98F468F8E4AE}"
|
||||||
|
EndProject
|
||||||
|
Global
|
||||||
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
|
Debug|Any CPU = Debug|Any CPU
|
||||||
|
Release|Any CPU = Release|Any CPU
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||||
|
{2021459E-8FB1-44A4-89F1-E291769CD2C6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{2021459E-8FB1-44A4-89F1-E291769CD2C6}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{2021459E-8FB1-44A4-89F1-E291769CD2C6}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{2021459E-8FB1-44A4-89F1-E291769CD2C6}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{EDF7CF8B-5640-4E1D-A2C7-E4BC8BE44363}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{EDF7CF8B-5640-4E1D-A2C7-E4BC8BE44363}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{EDF7CF8B-5640-4E1D-A2C7-E4BC8BE44363}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{EDF7CF8B-5640-4E1D-A2C7-E4BC8BE44363}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(NestedProjects) = preSolution
|
||||||
|
{91C42D32-291D-4B72-90B4-551663D60B8B} = {4804A8E6-E7B7-4F9E-A446-3DE8E73DB38A}
|
||||||
|
{4EDC82D9-A201-4831-8FE0-98F468F8E4AE} = {4804A8E6-E7B7-4F9E-A446-3DE8E73DB38A}
|
||||||
|
EndGlobalSection
|
||||||
|
EndGlobal
|
@@ -0,0 +1,20 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<PropertyGroup>
|
||||||
|
<BuildDependsOn>NativeLibraryARMV7;NativeLibraryX86;$(BuildDependsOn)</BuildDependsOn>
|
||||||
|
</PropertyGroup>
|
||||||
|
<Target Name="NativeLibraryARMV7" Outputs="$(ProjectDir)/lib/armeabi-v7a/libyoga.so">
|
||||||
|
<Exec WorkingDirectory="$(ProjectDir)" Command="$(ProjectDir)../../build-native.sh" />
|
||||||
|
<Copy SourceFiles="$(ProjectDir)../../../buck-out/gen/csharp/yoganet#android-armv7,shared/libyoga.so" DestinationFiles="$(ProjectDir)/lib/armeabi-v7a/libyoga.so" SkipUnchangedFiles="true" />
|
||||||
|
</Target>
|
||||||
|
<!--
|
||||||
|
<Target Name="NativeLibraryARM64" Outputs="$(ProjectDir)/lib/arm64-v8a/libyoga.so">
|
||||||
|
<Exec WorkingDirectory="$(ProjectDir)" Command="$(ProjectDir)../../build-native.sh" />
|
||||||
|
<Copy SourceFiles="$(ProjectDir)../../../buck-out/gen/csharp/yoganet#android-arm64,shared/libyoga.so" DestinationFiles="$(ProjectDir)/lib/arm64-v8/libyoga.so" SkipUnchangedFiles="true" />
|
||||||
|
</Target>
|
||||||
|
-->
|
||||||
|
<Target Name="NativeLibraryX86" Outputs="$(ProjectDir)/lib/x86/libyoga.so">
|
||||||
|
<Exec WorkingDirectory="$(ProjectDir)" Command="$(ProjectDir)../../build-native.sh" />
|
||||||
|
<Copy SourceFiles="$(ProjectDir)../../../buck-out/gen/csharp/yoganet#android-x86,shared/libyoga.so" DestinationFiles="$(ProjectDir)/lib/x86/libyoga.so" SkipUnchangedFiles="true" />
|
||||||
|
</Target>
|
||||||
|
</Project>
|
@@ -0,0 +1,64 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<PropertyGroup>
|
||||||
|
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||||
|
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||||
|
<ProjectGuid>{EDF7CF8B-5640-4E1D-A2C7-E4BC8BE44363}</ProjectGuid>
|
||||||
|
<ProjectTypeGuids>{EFBA0AD7-5A72-4C68-AF49-83D382785DCF};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
|
||||||
|
<OutputType>Library</OutputType>
|
||||||
|
<RootNamespace>Facebook.Yoga.Android</RootNamespace>
|
||||||
|
<AssemblyName>Facebook.Yoga</AssemblyName>
|
||||||
|
<TargetFrameworkVersion>v7.1</TargetFrameworkVersion>
|
||||||
|
<AndroidResgenFile>Resources\Resource.designer.cs</AndroidResgenFile>
|
||||||
|
<AndroidResgenClass>Resource</AndroidResgenClass>
|
||||||
|
<MonoAndroidResourcePrefix>Resources</MonoAndroidResourcePrefix>
|
||||||
|
<MonoAndroidAssetsPrefix>Assets</MonoAndroidAssetsPrefix>
|
||||||
|
<AndroidUseLatestPlatformSdk>true</AndroidUseLatestPlatformSdk>
|
||||||
|
<AndroidTlsProvider></AndroidTlsProvider>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||||
|
<DebugSymbols>true</DebugSymbols>
|
||||||
|
<DebugType>full</DebugType>
|
||||||
|
<Optimize>false</Optimize>
|
||||||
|
<OutputPath>bin\Debug</OutputPath>
|
||||||
|
<DefineConstants>DEBUG;</DefineConstants>
|
||||||
|
<ErrorReport>prompt</ErrorReport>
|
||||||
|
<WarningLevel>4</WarningLevel>
|
||||||
|
<AndroidLinkMode>None</AndroidLinkMode>
|
||||||
|
<AndroidSupportedAbis>arm64-v8a;armeabi;armeabi-v7a;x86</AndroidSupportedAbis>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||||
|
<DebugSymbols>true</DebugSymbols>
|
||||||
|
<DebugType>pdbonly</DebugType>
|
||||||
|
<Optimize>true</Optimize>
|
||||||
|
<OutputPath>bin\Release</OutputPath>
|
||||||
|
<ErrorReport>prompt</ErrorReport>
|
||||||
|
<WarningLevel>4</WarningLevel>
|
||||||
|
<AndroidManagedSymbols>true</AndroidManagedSymbols>
|
||||||
|
<AndroidUseSharedRuntime>false</AndroidUseSharedRuntime>
|
||||||
|
</PropertyGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Reference Include="System" />
|
||||||
|
<Reference Include="System.Xml" />
|
||||||
|
<Reference Include="System.Core" />
|
||||||
|
<Reference Include="Mono.Android" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<None Include="CustomBuildAction.targets" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Folder Include="lib\x86\" />
|
||||||
|
<Folder Include="lib\armeabi-v7a\" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<EmbeddedNativeLibrary Include="lib\x86\libyoga.so">
|
||||||
|
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||||
|
</EmbeddedNativeLibrary>
|
||||||
|
<EmbeddedNativeLibrary Include="lib\armeabi-v7a\libyoga.so">
|
||||||
|
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||||
|
</EmbeddedNativeLibrary>
|
||||||
|
</ItemGroup>
|
||||||
|
<Import Project="..\..\Facebook.Yoga\Facebook.Yoga.Shared.projitems" Label="Shared" Condition="Exists('..\..\Facebook.Yoga\Facebook.Yoga.Shared.projitems')" />
|
||||||
|
<Import Project="$(MSBuildExtensionsPath)\Xamarin\Android\Xamarin.Android.CSharp.targets" />
|
||||||
|
<Import Project="CustomBuildAction.targets" />
|
||||||
|
</Project>
|
0
csharp/Android/Facebook.Yoga.Android/Resources/Resource.designer.cs
generated
Normal file
0
csharp/Android/Facebook.Yoga.Android/Resources/Resource.designer.cs
generated
Normal file
130
csharp/Facebook.Yoga.Xamarin.sln
Normal file
130
csharp/Facebook.Yoga.Xamarin.sln
Normal file
@@ -0,0 +1,130 @@
|
|||||||
|
|
||||||
|
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||||
|
# Visual Studio 2012
|
||||||
|
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Android", "Android", "{B674A497-DC8E-4286-A889-0C004235AA18}"
|
||||||
|
EndProject
|
||||||
|
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "iOS", "iOS", "{AC14A7DE-A180-46EC-8A88-77F60E73A099}"
|
||||||
|
EndProject
|
||||||
|
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Shared", "Shared", "{09905D88-652D-4A72-8521-6CB1AF347795}"
|
||||||
|
EndProject
|
||||||
|
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "macOS", "macOS", "{9BDE3670-188E-470F-9B89-CEC0EB042AB5}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Facebook.Yoga.iOS", "iOS\Facebook.Yoga.iOS\Facebook.Yoga.iOS.csproj", "{128FB32A-C4A1-4363-BF06-0A36E700B7FA}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Facebook.Yoga.iOS.Tests", "iOS\Facebook.Yoga.iOS.Tests\Facebook.Yoga.iOS.Tests.csproj", "{FCF0BE59-AE56-4D4F-8524-94532B2DFC71}"
|
||||||
|
EndProject
|
||||||
|
Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "Facebook.Yoga.Shared", "Facebook.Yoga\Facebook.Yoga.Shared.shproj", "{91C42D32-291D-4B72-90B4-551663D60B8B}"
|
||||||
|
EndProject
|
||||||
|
Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "Facebook.Yoga.Shared.Tests", "tests\Facebook.Yoga\Facebook.Yoga.Shared.Tests.shproj", "{4EDC82D9-A201-4831-8FE0-98F468F8E4AE}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Facebook.Yoga.Android", "Android\Facebook.Yoga.Android\Facebook.Yoga.Android.csproj", "{EDF7CF8B-5640-4E1D-A2C7-E4BC8BE44363}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Facebook.Yoga.Android.Tests", "Android\Facebook.Yoga.Android.Tests\Facebook.Yoga.Android.Tests.csproj", "{2021459E-8FB1-44A4-89F1-E291769CD2C6}"
|
||||||
|
EndProject
|
||||||
|
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "nuspec", "nuspec", "{2C3685DB-91B9-4207-9446-1C513DB36978}"
|
||||||
|
ProjectSection(SolutionItems) = preProject
|
||||||
|
nuget\Facebook.Yoga.dll.config = nuget\Facebook.Yoga.dll.config
|
||||||
|
nuget\Facebook.Yoga.nuspec = nuget\Facebook.Yoga.nuspec
|
||||||
|
nuget\Facebook.Yoga.OSX.targets = nuget\Facebook.Yoga.OSX.targets
|
||||||
|
nuget\Facebook.Yoga.targets = nuget\Facebook.Yoga.targets
|
||||||
|
nuget\Facebook.Yoga.Universal.targets = nuget\Facebook.Yoga.Universal.targets
|
||||||
|
EndProjectSection
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Facebook.Yoga.Mac", "Mac\Facebook.Yoga.Mac.csproj", "{19A1C7D7-C9CC-476A-B604-DF6A3DE1BA71}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Facebook.Yoga.Mac.Tests", "Mac\Facebook.Yoga.Mac.Tests\Facebook.Yoga.Mac.Tests.csproj", "{9FCB6149-DFA8-4EAA-B4DB-2E91A5D8FF77}"
|
||||||
|
EndProject
|
||||||
|
Global
|
||||||
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
|
Debug|Any CPU = Debug|Any CPU
|
||||||
|
Release|Any CPU = Release|Any CPU
|
||||||
|
Debug|iPhoneSimulator = Debug|iPhoneSimulator
|
||||||
|
Release|iPhone = Release|iPhone
|
||||||
|
Release|iPhoneSimulator = Release|iPhoneSimulator
|
||||||
|
Debug|iPhone = Debug|iPhone
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||||
|
{128FB32A-C4A1-4363-BF06-0A36E700B7FA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{128FB32A-C4A1-4363-BF06-0A36E700B7FA}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{128FB32A-C4A1-4363-BF06-0A36E700B7FA}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{128FB32A-C4A1-4363-BF06-0A36E700B7FA}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{128FB32A-C4A1-4363-BF06-0A36E700B7FA}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
|
||||||
|
{128FB32A-C4A1-4363-BF06-0A36E700B7FA}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
|
||||||
|
{128FB32A-C4A1-4363-BF06-0A36E700B7FA}.Release|iPhone.ActiveCfg = Release|Any CPU
|
||||||
|
{128FB32A-C4A1-4363-BF06-0A36E700B7FA}.Release|iPhone.Build.0 = Release|Any CPU
|
||||||
|
{128FB32A-C4A1-4363-BF06-0A36E700B7FA}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
|
||||||
|
{128FB32A-C4A1-4363-BF06-0A36E700B7FA}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
|
||||||
|
{128FB32A-C4A1-4363-BF06-0A36E700B7FA}.Debug|iPhone.ActiveCfg = Debug|Any CPU
|
||||||
|
{128FB32A-C4A1-4363-BF06-0A36E700B7FA}.Debug|iPhone.Build.0 = Debug|Any CPU
|
||||||
|
{FCF0BE59-AE56-4D4F-8524-94532B2DFC71}.Debug|Any CPU.ActiveCfg = Debug|iPhoneSimulator
|
||||||
|
{FCF0BE59-AE56-4D4F-8524-94532B2DFC71}.Debug|Any CPU.Build.0 = Debug|iPhoneSimulator
|
||||||
|
{FCF0BE59-AE56-4D4F-8524-94532B2DFC71}.Release|Any CPU.ActiveCfg = Release|iPhone
|
||||||
|
{FCF0BE59-AE56-4D4F-8524-94532B2DFC71}.Release|Any CPU.Build.0 = Release|iPhone
|
||||||
|
{FCF0BE59-AE56-4D4F-8524-94532B2DFC71}.Debug|iPhoneSimulator.ActiveCfg = Debug|iPhoneSimulator
|
||||||
|
{FCF0BE59-AE56-4D4F-8524-94532B2DFC71}.Debug|iPhoneSimulator.Build.0 = Debug|iPhoneSimulator
|
||||||
|
{FCF0BE59-AE56-4D4F-8524-94532B2DFC71}.Release|iPhone.ActiveCfg = Release|iPhone
|
||||||
|
{FCF0BE59-AE56-4D4F-8524-94532B2DFC71}.Release|iPhone.Build.0 = Release|iPhone
|
||||||
|
{FCF0BE59-AE56-4D4F-8524-94532B2DFC71}.Release|iPhoneSimulator.ActiveCfg = Release|iPhoneSimulator
|
||||||
|
{FCF0BE59-AE56-4D4F-8524-94532B2DFC71}.Release|iPhoneSimulator.Build.0 = Release|iPhoneSimulator
|
||||||
|
{FCF0BE59-AE56-4D4F-8524-94532B2DFC71}.Debug|iPhone.ActiveCfg = Debug|iPhone
|
||||||
|
{FCF0BE59-AE56-4D4F-8524-94532B2DFC71}.Debug|iPhone.Build.0 = Debug|iPhone
|
||||||
|
{EDF7CF8B-5640-4E1D-A2C7-E4BC8BE44363}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{EDF7CF8B-5640-4E1D-A2C7-E4BC8BE44363}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{EDF7CF8B-5640-4E1D-A2C7-E4BC8BE44363}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{EDF7CF8B-5640-4E1D-A2C7-E4BC8BE44363}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{EDF7CF8B-5640-4E1D-A2C7-E4BC8BE44363}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
|
||||||
|
{EDF7CF8B-5640-4E1D-A2C7-E4BC8BE44363}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
|
||||||
|
{EDF7CF8B-5640-4E1D-A2C7-E4BC8BE44363}.Release|iPhone.ActiveCfg = Release|Any CPU
|
||||||
|
{EDF7CF8B-5640-4E1D-A2C7-E4BC8BE44363}.Release|iPhone.Build.0 = Release|Any CPU
|
||||||
|
{EDF7CF8B-5640-4E1D-A2C7-E4BC8BE44363}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
|
||||||
|
{EDF7CF8B-5640-4E1D-A2C7-E4BC8BE44363}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
|
||||||
|
{EDF7CF8B-5640-4E1D-A2C7-E4BC8BE44363}.Debug|iPhone.ActiveCfg = Debug|Any CPU
|
||||||
|
{EDF7CF8B-5640-4E1D-A2C7-E4BC8BE44363}.Debug|iPhone.Build.0 = Debug|Any CPU
|
||||||
|
{2021459E-8FB1-44A4-89F1-E291769CD2C6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{2021459E-8FB1-44A4-89F1-E291769CD2C6}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{2021459E-8FB1-44A4-89F1-E291769CD2C6}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{2021459E-8FB1-44A4-89F1-E291769CD2C6}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{2021459E-8FB1-44A4-89F1-E291769CD2C6}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
|
||||||
|
{2021459E-8FB1-44A4-89F1-E291769CD2C6}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
|
||||||
|
{2021459E-8FB1-44A4-89F1-E291769CD2C6}.Release|iPhone.ActiveCfg = Release|Any CPU
|
||||||
|
{2021459E-8FB1-44A4-89F1-E291769CD2C6}.Release|iPhone.Build.0 = Release|Any CPU
|
||||||
|
{2021459E-8FB1-44A4-89F1-E291769CD2C6}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
|
||||||
|
{2021459E-8FB1-44A4-89F1-E291769CD2C6}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
|
||||||
|
{2021459E-8FB1-44A4-89F1-E291769CD2C6}.Debug|iPhone.ActiveCfg = Debug|Any CPU
|
||||||
|
{2021459E-8FB1-44A4-89F1-E291769CD2C6}.Debug|iPhone.Build.0 = Debug|Any CPU
|
||||||
|
{19A1C7D7-C9CC-476A-B604-DF6A3DE1BA71}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{19A1C7D7-C9CC-476A-B604-DF6A3DE1BA71}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{19A1C7D7-C9CC-476A-B604-DF6A3DE1BA71}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{19A1C7D7-C9CC-476A-B604-DF6A3DE1BA71}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{19A1C7D7-C9CC-476A-B604-DF6A3DE1BA71}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
|
||||||
|
{19A1C7D7-C9CC-476A-B604-DF6A3DE1BA71}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
|
||||||
|
{19A1C7D7-C9CC-476A-B604-DF6A3DE1BA71}.Release|iPhone.ActiveCfg = Release|Any CPU
|
||||||
|
{19A1C7D7-C9CC-476A-B604-DF6A3DE1BA71}.Release|iPhone.Build.0 = Release|Any CPU
|
||||||
|
{19A1C7D7-C9CC-476A-B604-DF6A3DE1BA71}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
|
||||||
|
{19A1C7D7-C9CC-476A-B604-DF6A3DE1BA71}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
|
||||||
|
{19A1C7D7-C9CC-476A-B604-DF6A3DE1BA71}.Debug|iPhone.ActiveCfg = Debug|Any CPU
|
||||||
|
{19A1C7D7-C9CC-476A-B604-DF6A3DE1BA71}.Debug|iPhone.Build.0 = Debug|Any CPU
|
||||||
|
{9FCB6149-DFA8-4EAA-B4DB-2E91A5D8FF77}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{9FCB6149-DFA8-4EAA-B4DB-2E91A5D8FF77}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{9FCB6149-DFA8-4EAA-B4DB-2E91A5D8FF77}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{9FCB6149-DFA8-4EAA-B4DB-2E91A5D8FF77}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{9FCB6149-DFA8-4EAA-B4DB-2E91A5D8FF77}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
|
||||||
|
{9FCB6149-DFA8-4EAA-B4DB-2E91A5D8FF77}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
|
||||||
|
{9FCB6149-DFA8-4EAA-B4DB-2E91A5D8FF77}.Release|iPhone.ActiveCfg = Release|Any CPU
|
||||||
|
{9FCB6149-DFA8-4EAA-B4DB-2E91A5D8FF77}.Release|iPhone.Build.0 = Release|Any CPU
|
||||||
|
{9FCB6149-DFA8-4EAA-B4DB-2E91A5D8FF77}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
|
||||||
|
{9FCB6149-DFA8-4EAA-B4DB-2E91A5D8FF77}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
|
||||||
|
{9FCB6149-DFA8-4EAA-B4DB-2E91A5D8FF77}.Debug|iPhone.ActiveCfg = Debug|Any CPU
|
||||||
|
{9FCB6149-DFA8-4EAA-B4DB-2E91A5D8FF77}.Debug|iPhone.Build.0 = Debug|Any CPU
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(NestedProjects) = preSolution
|
||||||
|
{128FB32A-C4A1-4363-BF06-0A36E700B7FA} = {AC14A7DE-A180-46EC-8A88-77F60E73A099}
|
||||||
|
{FCF0BE59-AE56-4D4F-8524-94532B2DFC71} = {AC14A7DE-A180-46EC-8A88-77F60E73A099}
|
||||||
|
{91C42D32-291D-4B72-90B4-551663D60B8B} = {09905D88-652D-4A72-8521-6CB1AF347795}
|
||||||
|
{4EDC82D9-A201-4831-8FE0-98F468F8E4AE} = {09905D88-652D-4A72-8521-6CB1AF347795}
|
||||||
|
{EDF7CF8B-5640-4E1D-A2C7-E4BC8BE44363} = {B674A497-DC8E-4286-A889-0C004235AA18}
|
||||||
|
{2021459E-8FB1-44A4-89F1-E291769CD2C6} = {B674A497-DC8E-4286-A889-0C004235AA18}
|
||||||
|
{19A1C7D7-C9CC-476A-B604-DF6A3DE1BA71} = {9BDE3670-188E-470F-9B89-CEC0EB042AB5}
|
||||||
|
{9FCB6149-DFA8-4EAA-B4DB-2E91A5D8FF77} = {9BDE3670-188E-470F-9B89-CEC0EB042AB5}
|
||||||
|
EndGlobalSection
|
||||||
|
EndGlobal
|
11
csharp/Facebook.Yoga/BaselineFunction.cs
Normal file
11
csharp/Facebook.Yoga/BaselineFunction.cs
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
||||||
|
*
|
||||||
|
* This source code is licensed under the MIT license found in the
|
||||||
|
* LICENSE file in the root directory of this source tree.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Facebook.Yoga
|
||||||
|
{
|
||||||
|
public delegate float BaselineFunction(YogaNode node, float width, float height);
|
||||||
|
}
|
45
csharp/Facebook.Yoga/Facebook.Yoga.Shared.projitems
Normal file
45
csharp/Facebook.Yoga/Facebook.Yoga.Shared.projitems
Normal file
@@ -0,0 +1,45 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<PropertyGroup>
|
||||||
|
<MSBuildAllProjects>$(MSBuildAllProjects);$(MSBuildThisFileFullPath)</MSBuildAllProjects>
|
||||||
|
<HasSharedItems>true</HasSharedItems>
|
||||||
|
<SharedGUID>91c42d32-291d-4b72-90b4-551663d60b8b</SharedGUID>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Label="Configuration">
|
||||||
|
<Import_RootNamespace>Facebook.Yoga.Shared</Import_RootNamespace>
|
||||||
|
</PropertyGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Compile Include="$(MSBuildThisFileDirectory)BaselineFunction.cs" />
|
||||||
|
<Compile Include="$(MSBuildThisFileDirectory)Logger.cs" />
|
||||||
|
<Compile Include="$(MSBuildThisFileDirectory)MeasureFunction.cs" />
|
||||||
|
<Compile Include="$(MSBuildThisFileDirectory)MeasureOutput.cs" />
|
||||||
|
<Compile Include="$(MSBuildThisFileDirectory)Native.cs" />
|
||||||
|
<Compile Include="$(MSBuildThisFileDirectory)YGConfigHandle.cs" />
|
||||||
|
<Compile Include="$(MSBuildThisFileDirectory)YGNodeHandle.cs" />
|
||||||
|
<Compile Include="$(MSBuildThisFileDirectory)YogaAlign.cs" />
|
||||||
|
<Compile Include="$(MSBuildThisFileDirectory)YogaBaselineFunc.cs" />
|
||||||
|
<Compile Include="$(MSBuildThisFileDirectory)YogaConfig.cs" />
|
||||||
|
<Compile Include="$(MSBuildThisFileDirectory)YogaConstants.cs" />
|
||||||
|
<Compile Include="$(MSBuildThisFileDirectory)YogaDimension.cs" />
|
||||||
|
<Compile Include="$(MSBuildThisFileDirectory)YogaDirection.cs" />
|
||||||
|
<Compile Include="$(MSBuildThisFileDirectory)YogaDisplay.cs" />
|
||||||
|
<Compile Include="$(MSBuildThisFileDirectory)YogaEdge.cs" />
|
||||||
|
<Compile Include="$(MSBuildThisFileDirectory)YogaExperimentalFeature.cs" />
|
||||||
|
<Compile Include="$(MSBuildThisFileDirectory)YogaFlexDirection.cs" />
|
||||||
|
<Compile Include="$(MSBuildThisFileDirectory)YogaJustify.cs" />
|
||||||
|
<Compile Include="$(MSBuildThisFileDirectory)YogaLogger.cs" />
|
||||||
|
<Compile Include="$(MSBuildThisFileDirectory)YogaLogLevel.cs" />
|
||||||
|
<Compile Include="$(MSBuildThisFileDirectory)YogaMeasureFunc.cs" />
|
||||||
|
<Compile Include="$(MSBuildThisFileDirectory)YogaMeasureMode.cs" />
|
||||||
|
<Compile Include="$(MSBuildThisFileDirectory)YogaNode.Spacing.cs" />
|
||||||
|
<Compile Include="$(MSBuildThisFileDirectory)YogaNode.cs" />
|
||||||
|
<Compile Include="$(MSBuildThisFileDirectory)YogaOverflow.cs" />
|
||||||
|
<Compile Include="$(MSBuildThisFileDirectory)YogaPositionType.cs" />
|
||||||
|
<Compile Include="$(MSBuildThisFileDirectory)YogaPrintOptions.cs" />
|
||||||
|
<Compile Include="$(MSBuildThisFileDirectory)YogaSize.cs" />
|
||||||
|
<Compile Include="$(MSBuildThisFileDirectory)YogaUnit.cs" />
|
||||||
|
<Compile Include="$(MSBuildThisFileDirectory)YogaValue.cs" />
|
||||||
|
<Compile Include="$(MSBuildThisFileDirectory)YogaValueExtensions.cs" />
|
||||||
|
<Compile Include="$(MSBuildThisFileDirectory)YogaWrap.cs" />
|
||||||
|
</ItemGroup>
|
||||||
|
</Project>
|
13
csharp/Facebook.Yoga/Facebook.Yoga.Shared.shproj
Normal file
13
csharp/Facebook.Yoga/Facebook.Yoga.Shared.shproj
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<PropertyGroup Label="Globals">
|
||||||
|
<ProjectGuid>91c42d32-291d-4b72-90b4-551663d60b8b</ProjectGuid>
|
||||||
|
<MinimumVisualStudioVersion>14.0</MinimumVisualStudioVersion>
|
||||||
|
</PropertyGroup>
|
||||||
|
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
|
||||||
|
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\CodeSharing\Microsoft.CodeSharing.Common.Default.props" />
|
||||||
|
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\CodeSharing\Microsoft.CodeSharing.Common.props" />
|
||||||
|
<PropertyGroup />
|
||||||
|
<Import Project="Facebook.Yoga.Shared.projitems" Label="Shared" />
|
||||||
|
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\CodeSharing\Microsoft.CodeSharing.CSharp.targets" />
|
||||||
|
</Project>
|
15
csharp/Facebook.Yoga/Logger.cs
Normal file
15
csharp/Facebook.Yoga/Logger.cs
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
||||||
|
*
|
||||||
|
* This source code is licensed under the MIT license found in the
|
||||||
|
* LICENSE file in the root directory of this source tree.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Facebook.Yoga
|
||||||
|
{
|
||||||
|
public delegate void Logger(
|
||||||
|
YogaConfig config,
|
||||||
|
YogaNode node,
|
||||||
|
YogaLogLevel level,
|
||||||
|
string message);
|
||||||
|
}
|
16
csharp/Facebook.Yoga/MeasureFunction.cs
Normal file
16
csharp/Facebook.Yoga/MeasureFunction.cs
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
||||||
|
*
|
||||||
|
* This source code is licensed under the MIT license found in the
|
||||||
|
* LICENSE file in the root directory of this source tree.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Facebook.Yoga
|
||||||
|
{
|
||||||
|
public delegate YogaSize MeasureFunction(
|
||||||
|
YogaNode node,
|
||||||
|
float width,
|
||||||
|
YogaMeasureMode widthMode,
|
||||||
|
float height,
|
||||||
|
YogaMeasureMode heightMode);
|
||||||
|
}
|
17
csharp/Facebook.Yoga/MeasureOutput.cs
Normal file
17
csharp/Facebook.Yoga/MeasureOutput.cs
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
||||||
|
*
|
||||||
|
* This source code is licensed under the MIT license found in the
|
||||||
|
* LICENSE file in the root directory of this source tree.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Facebook.Yoga
|
||||||
|
{
|
||||||
|
public class MeasureOutput
|
||||||
|
{
|
||||||
|
public static YogaSize Make(float width, float height)
|
||||||
|
{
|
||||||
|
return new YogaSize { width = width, height = height};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
391
csharp/Facebook.Yoga/Native.cs
Normal file
391
csharp/Facebook.Yoga/Native.cs
Normal file
@@ -0,0 +1,391 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
||||||
|
*
|
||||||
|
* This source code is licensed under the MIT license found in the
|
||||||
|
* LICENSE file in the root directory of this source tree.
|
||||||
|
*/
|
||||||
|
|
||||||
|
using System;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
|
namespace Facebook.Yoga
|
||||||
|
{
|
||||||
|
internal static class Native
|
||||||
|
{
|
||||||
|
#if (UNITY_IOS && !UNITY_EDITOR) || __IOS__
|
||||||
|
private const string DllName = "__Internal";
|
||||||
|
#else
|
||||||
|
private const string DllName = "yoga";
|
||||||
|
#endif
|
||||||
|
|
||||||
|
[DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
|
||||||
|
public static extern void YGInteropSetLogger(
|
||||||
|
[MarshalAs(UnmanagedType.FunctionPtr)] YogaLogger logger);
|
||||||
|
|
||||||
|
[DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
|
||||||
|
public static extern YGNodeHandle YGNodeNew();
|
||||||
|
|
||||||
|
[DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
|
||||||
|
public static extern YGNodeHandle YGNodeNewWithConfig(YGConfigHandle config);
|
||||||
|
|
||||||
|
[DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
|
||||||
|
public static extern void YGNodeFree(IntPtr node);
|
||||||
|
|
||||||
|
[DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
|
||||||
|
public static extern void YGNodeReset(YGNodeHandle node);
|
||||||
|
|
||||||
|
[DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
|
||||||
|
public static extern YGConfigHandle YGConfigGetDefault();
|
||||||
|
|
||||||
|
[DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
|
||||||
|
public static extern YGConfigHandle YGConfigNew();
|
||||||
|
|
||||||
|
[DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
|
||||||
|
public static extern void YGConfigFree(IntPtr node);
|
||||||
|
|
||||||
|
[DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
|
||||||
|
public static extern int YGConfigGetInstanceCount();
|
||||||
|
|
||||||
|
[DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
|
||||||
|
public static extern void YGConfigSetExperimentalFeatureEnabled(
|
||||||
|
YGConfigHandle config,
|
||||||
|
YogaExperimentalFeature feature,
|
||||||
|
bool enabled);
|
||||||
|
|
||||||
|
[DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
|
||||||
|
public static extern bool YGConfigIsExperimentalFeatureEnabled(
|
||||||
|
YGConfigHandle config,
|
||||||
|
YogaExperimentalFeature feature);
|
||||||
|
|
||||||
|
[DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
|
||||||
|
public static extern void YGConfigSetUseWebDefaults(
|
||||||
|
YGConfigHandle config,
|
||||||
|
bool useWebDefaults);
|
||||||
|
|
||||||
|
[DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
|
||||||
|
public static extern bool YGConfigGetUseWebDefaults(YGConfigHandle config);
|
||||||
|
|
||||||
|
[DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
|
||||||
|
public static extern void YGConfigSetUseLegacyStretchBehaviour(
|
||||||
|
YGConfigHandle config,
|
||||||
|
bool useLegacyStretchBehavior);
|
||||||
|
|
||||||
|
[DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
|
||||||
|
public static extern bool YGConfigGetUseLegacyStretchBehaviour(YGConfigHandle config);
|
||||||
|
|
||||||
|
[DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
|
||||||
|
public static extern void YGConfigSetPointScaleFactor(
|
||||||
|
YGConfigHandle config,
|
||||||
|
float pixelsInPoint);
|
||||||
|
|
||||||
|
[DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
|
||||||
|
public static extern void YGNodeInsertChild(
|
||||||
|
YGNodeHandle node,
|
||||||
|
YGNodeHandle child,
|
||||||
|
uint index);
|
||||||
|
|
||||||
|
[DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
|
||||||
|
public static extern void YGNodeRemoveChild(YGNodeHandle node, YGNodeHandle child);
|
||||||
|
|
||||||
|
[DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
|
||||||
|
public static extern void YGNodeSetIsReferenceBaseline(
|
||||||
|
YGNodeHandle node,
|
||||||
|
bool isReferenceBaseline);
|
||||||
|
|
||||||
|
[DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
|
||||||
|
public static extern bool YGNodeIsReferenceBaseline(YGNodeHandle node);
|
||||||
|
|
||||||
|
[DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
|
||||||
|
public static extern void YGNodeCalculateLayout(
|
||||||
|
YGNodeHandle node,
|
||||||
|
float availableWidth,
|
||||||
|
float availableHeight,
|
||||||
|
YogaDirection parentDirection);
|
||||||
|
|
||||||
|
[DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
|
||||||
|
public static extern void YGNodeMarkDirty(YGNodeHandle node);
|
||||||
|
|
||||||
|
[DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
|
||||||
|
[return: MarshalAs(UnmanagedType.I1)]
|
||||||
|
public static extern bool YGNodeIsDirty(YGNodeHandle node);
|
||||||
|
|
||||||
|
[DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
|
||||||
|
public static extern void YGNodePrint(YGNodeHandle node, YogaPrintOptions options);
|
||||||
|
|
||||||
|
[DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
|
||||||
|
public static extern void YGNodeCopyStyle(YGNodeHandle dstNode, YGNodeHandle srcNode);
|
||||||
|
|
||||||
|
#region YG_NODE_PROPERTY
|
||||||
|
|
||||||
|
[DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
|
||||||
|
public static extern void YGNodeSetMeasureFunc(
|
||||||
|
YGNodeHandle node,
|
||||||
|
[MarshalAs(UnmanagedType.FunctionPtr)] YogaMeasureFunc measureFunc);
|
||||||
|
|
||||||
|
[DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
|
||||||
|
public static extern void YGNodeSetBaselineFunc(
|
||||||
|
YGNodeHandle node,
|
||||||
|
[MarshalAs(UnmanagedType.FunctionPtr)] YogaBaselineFunc baselineFunc);
|
||||||
|
|
||||||
|
[DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
|
||||||
|
public static extern void YGNodeSetHasNewLayout(
|
||||||
|
YGNodeHandle node,
|
||||||
|
[MarshalAs(UnmanagedType.I1)] bool hasNewLayout);
|
||||||
|
|
||||||
|
[DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
|
||||||
|
[return: MarshalAs(UnmanagedType.I1)]
|
||||||
|
public static extern bool YGNodeGetHasNewLayout(YGNodeHandle node);
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region YG_NODE_STYLE_PROPERTY
|
||||||
|
|
||||||
|
[DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
|
||||||
|
public static extern void YGNodeStyleSetDirection(YGNodeHandle node, YogaDirection direction);
|
||||||
|
|
||||||
|
[DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
|
||||||
|
public static extern YogaDirection YGNodeStyleGetDirection(YGNodeHandle node);
|
||||||
|
|
||||||
|
[DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
|
||||||
|
public static extern void YGNodeStyleSetFlexDirection(YGNodeHandle node, YogaFlexDirection flexDirection);
|
||||||
|
|
||||||
|
[DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
|
||||||
|
public static extern YogaFlexDirection YGNodeStyleGetFlexDirection(YGNodeHandle node);
|
||||||
|
|
||||||
|
[DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
|
||||||
|
public static extern void YGNodeStyleSetJustifyContent(YGNodeHandle node, YogaJustify justifyContent);
|
||||||
|
|
||||||
|
[DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
|
||||||
|
public static extern YogaJustify YGNodeStyleGetJustifyContent(YGNodeHandle node);
|
||||||
|
|
||||||
|
[DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
|
||||||
|
public static extern void YGNodeStyleSetAlignContent(YGNodeHandle node, YogaAlign alignContent);
|
||||||
|
|
||||||
|
[DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
|
||||||
|
public static extern YogaAlign YGNodeStyleGetAlignContent(YGNodeHandle node);
|
||||||
|
|
||||||
|
[DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
|
||||||
|
public static extern void YGNodeStyleSetAlignItems(YGNodeHandle node, YogaAlign alignItems);
|
||||||
|
|
||||||
|
[DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
|
||||||
|
public static extern YogaAlign YGNodeStyleGetAlignItems(YGNodeHandle node);
|
||||||
|
|
||||||
|
[DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
|
||||||
|
public static extern void YGNodeStyleSetAlignSelf(YGNodeHandle node, YogaAlign alignSelf);
|
||||||
|
|
||||||
|
[DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
|
||||||
|
public static extern YogaAlign YGNodeStyleGetAlignSelf(YGNodeHandle node);
|
||||||
|
|
||||||
|
[DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
|
||||||
|
public static extern void YGNodeStyleSetPositionType(YGNodeHandle node, YogaPositionType positionType);
|
||||||
|
|
||||||
|
[DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
|
||||||
|
public static extern YogaPositionType YGNodeStyleGetPositionType(YGNodeHandle node);
|
||||||
|
|
||||||
|
[DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
|
||||||
|
public static extern void YGNodeStyleSetFlexWrap(YGNodeHandle node, YogaWrap flexWrap);
|
||||||
|
|
||||||
|
[DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
|
||||||
|
public static extern YogaWrap YGNodeStyleGetFlexWrap(YGNodeHandle node);
|
||||||
|
|
||||||
|
[DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
|
||||||
|
public static extern void YGNodeStyleSetOverflow(YGNodeHandle node, YogaOverflow flexWrap);
|
||||||
|
|
||||||
|
[DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
|
||||||
|
public static extern YogaOverflow YGNodeStyleGetOverflow(YGNodeHandle node);
|
||||||
|
|
||||||
|
[DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
|
||||||
|
public static extern void YGNodeStyleSetDisplay(YGNodeHandle node, YogaDisplay display);
|
||||||
|
|
||||||
|
[DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
|
||||||
|
public static extern YogaDisplay YGNodeStyleGetDisplay(YGNodeHandle node);
|
||||||
|
|
||||||
|
[DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
|
||||||
|
public static extern void YGNodeStyleSetFlex(YGNodeHandle node, float flex);
|
||||||
|
|
||||||
|
[DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
|
||||||
|
public static extern void YGNodeStyleSetFlexGrow(YGNodeHandle node, float flexGrow);
|
||||||
|
|
||||||
|
[DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
|
||||||
|
public static extern float YGNodeStyleGetFlexGrow(YGNodeHandle node);
|
||||||
|
|
||||||
|
[DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
|
||||||
|
public static extern void YGNodeStyleSetFlexShrink(YGNodeHandle node, float flexShrink);
|
||||||
|
|
||||||
|
[DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
|
||||||
|
public static extern float YGNodeStyleGetFlexShrink(YGNodeHandle node);
|
||||||
|
|
||||||
|
[DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
|
||||||
|
public static extern void YGNodeStyleSetFlexBasis(YGNodeHandle node, float flexBasis);
|
||||||
|
|
||||||
|
[DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
|
||||||
|
public static extern void YGNodeStyleSetFlexBasisPercent(YGNodeHandle node, float flexBasis);
|
||||||
|
|
||||||
|
[DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
|
||||||
|
public static extern void YGNodeStyleSetFlexBasisAuto(YGNodeHandle node);
|
||||||
|
|
||||||
|
[DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
|
||||||
|
public static extern YogaValue YGNodeStyleGetFlexBasis(YGNodeHandle node);
|
||||||
|
|
||||||
|
[DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
|
||||||
|
public static extern void YGNodeStyleSetWidth(YGNodeHandle node, float width);
|
||||||
|
|
||||||
|
[DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
|
||||||
|
public static extern void YGNodeStyleSetWidthPercent(YGNodeHandle node, float width);
|
||||||
|
|
||||||
|
[DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
|
||||||
|
public static extern void YGNodeStyleSetWidthAuto(YGNodeHandle node);
|
||||||
|
|
||||||
|
[DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
|
||||||
|
public static extern YogaValue YGNodeStyleGetWidth(YGNodeHandle node);
|
||||||
|
|
||||||
|
[DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
|
||||||
|
public static extern void YGNodeStyleSetHeight(YGNodeHandle node, float height);
|
||||||
|
|
||||||
|
[DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
|
||||||
|
public static extern void YGNodeStyleSetHeightPercent(YGNodeHandle node, float height);
|
||||||
|
|
||||||
|
[DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
|
||||||
|
public static extern void YGNodeStyleSetHeightAuto(YGNodeHandle node);
|
||||||
|
|
||||||
|
[DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
|
||||||
|
public static extern YogaValue YGNodeStyleGetHeight(YGNodeHandle node);
|
||||||
|
|
||||||
|
[DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
|
||||||
|
public static extern void YGNodeStyleSetMinWidth(YGNodeHandle node, float minWidth);
|
||||||
|
|
||||||
|
[DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
|
||||||
|
public static extern void YGNodeStyleSetMinWidthPercent(YGNodeHandle node, float minWidth);
|
||||||
|
|
||||||
|
[DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
|
||||||
|
public static extern YogaValue YGNodeStyleGetMinWidth(YGNodeHandle node);
|
||||||
|
|
||||||
|
[DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
|
||||||
|
public static extern void YGNodeStyleSetMinHeight(YGNodeHandle node, float minHeight);
|
||||||
|
|
||||||
|
[DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
|
||||||
|
public static extern void YGNodeStyleSetMinHeightPercent(YGNodeHandle node, float minHeight);
|
||||||
|
|
||||||
|
[DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
|
||||||
|
public static extern YogaValue YGNodeStyleGetMinHeight(YGNodeHandle node);
|
||||||
|
|
||||||
|
[DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
|
||||||
|
public static extern void YGNodeStyleSetMaxWidth(YGNodeHandle node, float maxWidth);
|
||||||
|
|
||||||
|
[DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
|
||||||
|
public static extern void YGNodeStyleSetMaxWidthPercent(YGNodeHandle node, float maxWidth);
|
||||||
|
|
||||||
|
[DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
|
||||||
|
public static extern YogaValue YGNodeStyleGetMaxWidth(YGNodeHandle node);
|
||||||
|
|
||||||
|
[DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
|
||||||
|
public static extern void YGNodeStyleSetMaxHeight(YGNodeHandle node, float maxHeight);
|
||||||
|
|
||||||
|
[DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
|
||||||
|
public static extern void YGNodeStyleSetMaxHeightPercent(YGNodeHandle node, float maxHeight);
|
||||||
|
|
||||||
|
[DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
|
||||||
|
public static extern YogaValue YGNodeStyleGetMaxHeight(YGNodeHandle node);
|
||||||
|
|
||||||
|
[DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
|
||||||
|
public static extern void YGNodeStyleSetAspectRatio(YGNodeHandle node, float aspectRatio);
|
||||||
|
|
||||||
|
[DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
|
||||||
|
public static extern float YGNodeStyleGetAspectRatio(YGNodeHandle node);
|
||||||
|
|
||||||
|
[DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
|
||||||
|
public static extern void YGNodeStyleSetGap(YGNodeHandle node, YogaGutter gutter, float gapLength);
|
||||||
|
|
||||||
|
[DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
|
||||||
|
public static extern float YGNodeStyleGetGap(YGNodeHandle node, YogaGutter gutter);
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region YG_NODE_STYLE_EDGE_PROPERTY
|
||||||
|
|
||||||
|
[DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
|
||||||
|
public static extern void YGNodeStyleSetPosition(YGNodeHandle node, YogaEdge edge, float position);
|
||||||
|
|
||||||
|
[DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
|
||||||
|
public static extern void YGNodeStyleSetPositionPercent(YGNodeHandle node, YogaEdge edge, float position);
|
||||||
|
|
||||||
|
[DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
|
||||||
|
public static extern YogaValue YGNodeStyleGetPosition(YGNodeHandle node, YogaEdge edge);
|
||||||
|
|
||||||
|
[DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
|
||||||
|
public static extern void YGNodeStyleSetMargin(YGNodeHandle node, YogaEdge edge, float margin);
|
||||||
|
|
||||||
|
[DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
|
||||||
|
public static extern void YGNodeStyleSetMarginPercent(YGNodeHandle node, YogaEdge edge, float margin);
|
||||||
|
|
||||||
|
[DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
|
||||||
|
public static extern void YGNodeStyleSetMarginAuto(YGNodeHandle node, YogaEdge edge);
|
||||||
|
|
||||||
|
[DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
|
||||||
|
public static extern YogaValue YGNodeStyleGetMargin(YGNodeHandle node, YogaEdge edge);
|
||||||
|
|
||||||
|
[DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
|
||||||
|
public static extern void YGNodeStyleSetPadding(YGNodeHandle node, YogaEdge edge, float padding);
|
||||||
|
|
||||||
|
[DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
|
||||||
|
public static extern void YGNodeStyleSetPaddingPercent(YGNodeHandle node, YogaEdge edge, float padding);
|
||||||
|
|
||||||
|
[DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
|
||||||
|
public static extern YogaValue YGNodeStyleGetPadding(YGNodeHandle node, YogaEdge edge);
|
||||||
|
|
||||||
|
[DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
|
||||||
|
public static extern void YGNodeStyleSetBorder(YGNodeHandle node, YogaEdge edge, float border);
|
||||||
|
|
||||||
|
[DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
|
||||||
|
public static extern float YGNodeStyleGetBorder(YGNodeHandle node, YogaEdge edge);
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region YG_NODE_LAYOUT_PROPERTY
|
||||||
|
|
||||||
|
[DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
|
||||||
|
public static extern float YGNodeLayoutGetLeft(YGNodeHandle node);
|
||||||
|
|
||||||
|
[DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
|
||||||
|
public static extern float YGNodeLayoutGetTop(YGNodeHandle node);
|
||||||
|
|
||||||
|
[DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
|
||||||
|
public static extern float YGNodeLayoutGetRight(YGNodeHandle node);
|
||||||
|
|
||||||
|
[DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
|
||||||
|
public static extern float YGNodeLayoutGetBottom(YGNodeHandle node);
|
||||||
|
|
||||||
|
[DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
|
||||||
|
public static extern float YGNodeLayoutGetWidth(YGNodeHandle node);
|
||||||
|
|
||||||
|
[DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
|
||||||
|
public static extern float YGNodeLayoutGetHeight(YGNodeHandle node);
|
||||||
|
|
||||||
|
[DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
|
||||||
|
public static extern float YGNodeLayoutGetMargin(YGNodeHandle node, YogaEdge edge);
|
||||||
|
|
||||||
|
[DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
|
||||||
|
public static extern float YGNodeLayoutGetPadding(YGNodeHandle node, YogaEdge edge);
|
||||||
|
|
||||||
|
[DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
|
||||||
|
public static extern YogaDirection YGNodeLayoutGetDirection(YGNodeHandle node);
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region Context
|
||||||
|
|
||||||
|
[DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
|
||||||
|
public static extern IntPtr YGNodeGetContext(IntPtr node);
|
||||||
|
|
||||||
|
[DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
|
||||||
|
public static extern void YGNodeSetContext(IntPtr node, IntPtr managed);
|
||||||
|
|
||||||
|
[DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
|
||||||
|
public static extern IntPtr YGConfigGetContext(IntPtr config);
|
||||||
|
|
||||||
|
[DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
|
||||||
|
public static extern void YGConfigSetContext(IntPtr config, IntPtr managed);
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
}
|
||||||
|
}
|
82
csharp/Facebook.Yoga/YGConfigHandle.cs
Normal file
82
csharp/Facebook.Yoga/YGConfigHandle.cs
Normal file
@@ -0,0 +1,82 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
||||||
|
*
|
||||||
|
* This source code is licensed under the MIT license found in the
|
||||||
|
* LICENSE file in the root directory of this source tree.
|
||||||
|
*/
|
||||||
|
|
||||||
|
using System;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
|
namespace Facebook.Yoga
|
||||||
|
{
|
||||||
|
internal class YGConfigHandle : SafeHandle
|
||||||
|
{
|
||||||
|
internal static readonly YGConfigHandle Default = Native.YGConfigGetDefault();
|
||||||
|
private GCHandle _managedConfigHandle;
|
||||||
|
|
||||||
|
private YGConfigHandle() : base(IntPtr.Zero, true)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public override bool IsInvalid
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return this.handle == IntPtr.Zero;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override bool ReleaseHandle()
|
||||||
|
{
|
||||||
|
if (this.handle != Default.handle)
|
||||||
|
{
|
||||||
|
ReleaseManaged();
|
||||||
|
if (!IsInvalid)
|
||||||
|
{
|
||||||
|
Native.YGConfigFree(this.handle);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
GC.KeepAlive(this);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void SetContext(YogaConfig config)
|
||||||
|
{
|
||||||
|
if (!_managedConfigHandle.IsAllocated)
|
||||||
|
{
|
||||||
|
#if UNITY_5_4_OR_NEWER
|
||||||
|
// Weak causes 'GCHandle value belongs to a different domain' error
|
||||||
|
_managedConfigHandle = GCHandle.Alloc(config);
|
||||||
|
#else
|
||||||
|
_managedConfigHandle = GCHandle.Alloc(config, GCHandleType.Weak);
|
||||||
|
#endif
|
||||||
|
var managedConfigPtr = GCHandle.ToIntPtr(_managedConfigHandle);
|
||||||
|
Native.YGConfigSetContext(this.handle, managedConfigPtr);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void ReleaseManaged()
|
||||||
|
{
|
||||||
|
if (_managedConfigHandle.IsAllocated)
|
||||||
|
{
|
||||||
|
_managedConfigHandle.Free();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static YogaConfig GetManaged(IntPtr unmanagedConfigPtr)
|
||||||
|
{
|
||||||
|
if (unmanagedConfigPtr != IntPtr.Zero)
|
||||||
|
{
|
||||||
|
var managedConfigPtr = Native.YGConfigGetContext(unmanagedConfigPtr);
|
||||||
|
var config = GCHandle.FromIntPtr(managedConfigPtr).Target as YogaConfig;
|
||||||
|
if (config == null)
|
||||||
|
{
|
||||||
|
throw new InvalidOperationException("YogaConfig is already deallocated");
|
||||||
|
}
|
||||||
|
return config;
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
78
csharp/Facebook.Yoga/YGNodeHandle.cs
Normal file
78
csharp/Facebook.Yoga/YGNodeHandle.cs
Normal file
@@ -0,0 +1,78 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
||||||
|
*
|
||||||
|
* This source code is licensed under the MIT license found in the
|
||||||
|
* LICENSE file in the root directory of this source tree.
|
||||||
|
*/
|
||||||
|
|
||||||
|
using System;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
|
namespace Facebook.Yoga
|
||||||
|
{
|
||||||
|
internal class YGNodeHandle : SafeHandle
|
||||||
|
{
|
||||||
|
private GCHandle _managedNodeHandle;
|
||||||
|
|
||||||
|
private YGNodeHandle() : base(IntPtr.Zero, true)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public override bool IsInvalid
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return this.handle == IntPtr.Zero;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override bool ReleaseHandle()
|
||||||
|
{
|
||||||
|
ReleaseManaged();
|
||||||
|
if (!IsInvalid)
|
||||||
|
{
|
||||||
|
Native.YGNodeFree(this.handle);
|
||||||
|
GC.KeepAlive(this);
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void SetContext(YogaNode node)
|
||||||
|
{
|
||||||
|
if (!_managedNodeHandle.IsAllocated)
|
||||||
|
{
|
||||||
|
#if UNITY_5_4_OR_NEWER
|
||||||
|
// Weak causes 'GCHandle value belongs to a different domain' error
|
||||||
|
_managedNodeHandle = GCHandle.Alloc(node);
|
||||||
|
#else
|
||||||
|
_managedNodeHandle = GCHandle.Alloc(node, GCHandleType.Weak);
|
||||||
|
#endif
|
||||||
|
var managedNodePtr = GCHandle.ToIntPtr(_managedNodeHandle);
|
||||||
|
Native.YGNodeSetContext(this.handle, managedNodePtr);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void ReleaseManaged()
|
||||||
|
{
|
||||||
|
if (_managedNodeHandle.IsAllocated)
|
||||||
|
{
|
||||||
|
_managedNodeHandle.Free();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static YogaNode GetManaged(IntPtr unmanagedNodePtr)
|
||||||
|
{
|
||||||
|
if (unmanagedNodePtr != IntPtr.Zero)
|
||||||
|
{
|
||||||
|
var managedNodePtr = Native.YGNodeGetContext(unmanagedNodePtr);
|
||||||
|
var node = GCHandle.FromIntPtr(managedNodePtr).Target as YogaNode;
|
||||||
|
if (node == null)
|
||||||
|
{
|
||||||
|
throw new InvalidOperationException("YogaNode is already deallocated");
|
||||||
|
}
|
||||||
|
return node;
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
23
csharp/Facebook.Yoga/YogaAlign.cs
Normal file
23
csharp/Facebook.Yoga/YogaAlign.cs
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
||||||
|
*
|
||||||
|
* This source code is licensed under the MIT license found in the
|
||||||
|
* LICENSE file in the root directory of this source tree.
|
||||||
|
*/
|
||||||
|
|
||||||
|
// @generated by enums.py
|
||||||
|
|
||||||
|
namespace Facebook.Yoga
|
||||||
|
{
|
||||||
|
public enum YogaAlign
|
||||||
|
{
|
||||||
|
Auto,
|
||||||
|
FlexStart,
|
||||||
|
Center,
|
||||||
|
FlexEnd,
|
||||||
|
Stretch,
|
||||||
|
Baseline,
|
||||||
|
SpaceBetween,
|
||||||
|
SpaceAround,
|
||||||
|
}
|
||||||
|
}
|
15
csharp/Facebook.Yoga/YogaBaselineFunc.cs
Normal file
15
csharp/Facebook.Yoga/YogaBaselineFunc.cs
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
||||||
|
*
|
||||||
|
* This source code is licensed under the MIT license found in the
|
||||||
|
* LICENSE file in the root directory of this source tree.
|
||||||
|
*/
|
||||||
|
|
||||||
|
using System;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
|
namespace Facebook.Yoga
|
||||||
|
{
|
||||||
|
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
|
||||||
|
public delegate float YogaBaselineFunc(IntPtr unmanagedNodePtr, float width, float height);
|
||||||
|
}
|
151
csharp/Facebook.Yoga/YogaConfig.cs
Normal file
151
csharp/Facebook.Yoga/YogaConfig.cs
Normal file
@@ -0,0 +1,151 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
||||||
|
*
|
||||||
|
* This source code is licensed under the MIT license found in the
|
||||||
|
* LICENSE file in the root directory of this source tree.
|
||||||
|
*/
|
||||||
|
|
||||||
|
using System;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
|
#if __IOS__
|
||||||
|
using ObjCRuntime;
|
||||||
|
#endif
|
||||||
|
#if ENABLE_IL2CPP
|
||||||
|
using AOT;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
namespace Facebook.Yoga
|
||||||
|
{
|
||||||
|
public class YogaConfig
|
||||||
|
{
|
||||||
|
internal static readonly YogaConfig Default = new YogaConfig(YGConfigHandle.Default);
|
||||||
|
private static YogaLogger _managedLogger;
|
||||||
|
|
||||||
|
private YGConfigHandle _ygConfig;
|
||||||
|
private Logger _logger;
|
||||||
|
|
||||||
|
private YogaConfig(YGConfigHandle ygConfig)
|
||||||
|
{
|
||||||
|
_ygConfig = ygConfig;
|
||||||
|
if (_ygConfig.IsInvalid)
|
||||||
|
{
|
||||||
|
throw new InvalidOperationException("Failed to allocate native memory");
|
||||||
|
}
|
||||||
|
|
||||||
|
_ygConfig.SetContext(this);
|
||||||
|
|
||||||
|
if (_ygConfig == YGConfigHandle.Default)
|
||||||
|
{
|
||||||
|
_managedLogger = LoggerInternal;
|
||||||
|
Native.YGInteropSetLogger(_managedLogger);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public YogaConfig()
|
||||||
|
: this(Native.YGConfigNew())
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
internal YGConfigHandle Handle
|
||||||
|
{
|
||||||
|
get {
|
||||||
|
return _ygConfig;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#if (UNITY_IOS && !UNITY_EDITOR) || ENABLE_IL2CPP || __IOS__
|
||||||
|
[MonoPInvokeCallback(typeof(YogaLogger))]
|
||||||
|
#endif
|
||||||
|
private static void LoggerInternal(
|
||||||
|
IntPtr unmanagedConfigPtr,
|
||||||
|
IntPtr unmanagedNodePtr,
|
||||||
|
YogaLogLevel level,
|
||||||
|
string message)
|
||||||
|
{
|
||||||
|
var config = YGConfigHandle.GetManaged(unmanagedConfigPtr);
|
||||||
|
if (config == null || config._logger == null)
|
||||||
|
{
|
||||||
|
// Default logger
|
||||||
|
System.Diagnostics.Debug.WriteLine(message);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
var node = YGNodeHandle.GetManaged(unmanagedNodePtr);
|
||||||
|
config._logger(config, node, level, message);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (level == YogaLogLevel.Error || level == YogaLogLevel.Fatal)
|
||||||
|
{
|
||||||
|
throw new InvalidOperationException(message);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public Logger Logger
|
||||||
|
{
|
||||||
|
get {
|
||||||
|
return _logger;
|
||||||
|
}
|
||||||
|
|
||||||
|
set {
|
||||||
|
_logger = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void SetExperimentalFeatureEnabled(
|
||||||
|
YogaExperimentalFeature feature,
|
||||||
|
bool enabled)
|
||||||
|
{
|
||||||
|
Native.YGConfigSetExperimentalFeatureEnabled(_ygConfig, feature, enabled);
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool IsExperimentalFeatureEnabled(YogaExperimentalFeature feature)
|
||||||
|
{
|
||||||
|
return Native.YGConfigIsExperimentalFeatureEnabled(_ygConfig, feature);
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool UseWebDefaults
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return Native.YGConfigGetUseWebDefaults(_ygConfig);
|
||||||
|
}
|
||||||
|
|
||||||
|
set
|
||||||
|
{
|
||||||
|
Native.YGConfigSetUseWebDefaults(_ygConfig, value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool UseLegacyStretchBehaviour
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return Native.YGConfigGetUseLegacyStretchBehaviour(_ygConfig);
|
||||||
|
}
|
||||||
|
|
||||||
|
set
|
||||||
|
{
|
||||||
|
Native.YGConfigSetUseLegacyStretchBehaviour(_ygConfig, value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public float PointScaleFactor
|
||||||
|
{
|
||||||
|
set
|
||||||
|
{
|
||||||
|
Native.YGConfigSetPointScaleFactor(_ygConfig, value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static int GetInstanceCount()
|
||||||
|
{
|
||||||
|
return Native.YGConfigGetInstanceCount();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void SetDefaultLogger(Logger logger)
|
||||||
|
{
|
||||||
|
Default.Logger = logger;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
24
csharp/Facebook.Yoga/YogaConstants.cs
Normal file
24
csharp/Facebook.Yoga/YogaConstants.cs
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
||||||
|
*
|
||||||
|
* This source code is licensed under the MIT license found in the
|
||||||
|
* LICENSE file in the root directory of this source tree.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Facebook.Yoga
|
||||||
|
{
|
||||||
|
public static class YogaConstants
|
||||||
|
{
|
||||||
|
public const float Undefined = float.NaN;
|
||||||
|
|
||||||
|
public static bool IsUndefined(float value)
|
||||||
|
{
|
||||||
|
return float.IsNaN(value);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static bool IsUndefined(YogaValue value)
|
||||||
|
{
|
||||||
|
return value.Unit == YogaUnit.Undefined;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
17
csharp/Facebook.Yoga/YogaDimension.cs
Normal file
17
csharp/Facebook.Yoga/YogaDimension.cs
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
||||||
|
*
|
||||||
|
* This source code is licensed under the MIT license found in the
|
||||||
|
* LICENSE file in the root directory of this source tree.
|
||||||
|
*/
|
||||||
|
|
||||||
|
// @generated by enums.py
|
||||||
|
|
||||||
|
namespace Facebook.Yoga
|
||||||
|
{
|
||||||
|
public enum YogaDimension
|
||||||
|
{
|
||||||
|
Width,
|
||||||
|
Height,
|
||||||
|
}
|
||||||
|
}
|
18
csharp/Facebook.Yoga/YogaDirection.cs
Normal file
18
csharp/Facebook.Yoga/YogaDirection.cs
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
||||||
|
*
|
||||||
|
* This source code is licensed under the MIT license found in the
|
||||||
|
* LICENSE file in the root directory of this source tree.
|
||||||
|
*/
|
||||||
|
|
||||||
|
// @generated by enums.py
|
||||||
|
|
||||||
|
namespace Facebook.Yoga
|
||||||
|
{
|
||||||
|
public enum YogaDirection
|
||||||
|
{
|
||||||
|
Inherit,
|
||||||
|
LTR,
|
||||||
|
RTL,
|
||||||
|
}
|
||||||
|
}
|
17
csharp/Facebook.Yoga/YogaDisplay.cs
Normal file
17
csharp/Facebook.Yoga/YogaDisplay.cs
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
||||||
|
*
|
||||||
|
* This source code is licensed under the MIT license found in the
|
||||||
|
* LICENSE file in the root directory of this source tree.
|
||||||
|
*/
|
||||||
|
|
||||||
|
// @generated by enums.py
|
||||||
|
|
||||||
|
namespace Facebook.Yoga
|
||||||
|
{
|
||||||
|
public enum YogaDisplay
|
||||||
|
{
|
||||||
|
Flex,
|
||||||
|
None,
|
||||||
|
}
|
||||||
|
}
|
24
csharp/Facebook.Yoga/YogaEdge.cs
Normal file
24
csharp/Facebook.Yoga/YogaEdge.cs
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
||||||
|
*
|
||||||
|
* This source code is licensed under the MIT license found in the
|
||||||
|
* LICENSE file in the root directory of this source tree.
|
||||||
|
*/
|
||||||
|
|
||||||
|
// @generated by enums.py
|
||||||
|
|
||||||
|
namespace Facebook.Yoga
|
||||||
|
{
|
||||||
|
public enum YogaEdge
|
||||||
|
{
|
||||||
|
Left,
|
||||||
|
Top,
|
||||||
|
Right,
|
||||||
|
Bottom,
|
||||||
|
Start,
|
||||||
|
End,
|
||||||
|
Horizontal,
|
||||||
|
Vertical,
|
||||||
|
All,
|
||||||
|
}
|
||||||
|
}
|
18
csharp/Facebook.Yoga/YogaExperimentalFeature.cs
Normal file
18
csharp/Facebook.Yoga/YogaExperimentalFeature.cs
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
||||||
|
*
|
||||||
|
* This source code is licensed under the MIT license found in the
|
||||||
|
* LICENSE file in the root directory of this source tree.
|
||||||
|
*/
|
||||||
|
|
||||||
|
// @generated by enums.py
|
||||||
|
|
||||||
|
namespace Facebook.Yoga
|
||||||
|
{
|
||||||
|
public enum YogaExperimentalFeature
|
||||||
|
{
|
||||||
|
WebFlexBasis,
|
||||||
|
AbsolutePercentageAgainstPaddingEdge,
|
||||||
|
FixAbsoluteTrailingColumnMargin,
|
||||||
|
}
|
||||||
|
}
|
19
csharp/Facebook.Yoga/YogaFlexDirection.cs
Normal file
19
csharp/Facebook.Yoga/YogaFlexDirection.cs
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
||||||
|
*
|
||||||
|
* This source code is licensed under the MIT license found in the
|
||||||
|
* LICENSE file in the root directory of this source tree.
|
||||||
|
*/
|
||||||
|
|
||||||
|
// @generated by enums.py
|
||||||
|
|
||||||
|
namespace Facebook.Yoga
|
||||||
|
{
|
||||||
|
public enum YogaFlexDirection
|
||||||
|
{
|
||||||
|
Column,
|
||||||
|
ColumnReverse,
|
||||||
|
Row,
|
||||||
|
RowReverse,
|
||||||
|
}
|
||||||
|
}
|
18
csharp/Facebook.Yoga/YogaGutter.cs
Normal file
18
csharp/Facebook.Yoga/YogaGutter.cs
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
||||||
|
*
|
||||||
|
* This source code is licensed under the MIT license found in the
|
||||||
|
* LICENSE file in the root directory of this source tree.
|
||||||
|
*/
|
||||||
|
|
||||||
|
// @generated by enums.py
|
||||||
|
|
||||||
|
namespace Facebook.Yoga
|
||||||
|
{
|
||||||
|
public enum YogaGutter
|
||||||
|
{
|
||||||
|
Column,
|
||||||
|
Row,
|
||||||
|
All,
|
||||||
|
}
|
||||||
|
}
|
21
csharp/Facebook.Yoga/YogaJustify.cs
Normal file
21
csharp/Facebook.Yoga/YogaJustify.cs
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
||||||
|
*
|
||||||
|
* This source code is licensed under the MIT license found in the
|
||||||
|
* LICENSE file in the root directory of this source tree.
|
||||||
|
*/
|
||||||
|
|
||||||
|
// @generated by enums.py
|
||||||
|
|
||||||
|
namespace Facebook.Yoga
|
||||||
|
{
|
||||||
|
public enum YogaJustify
|
||||||
|
{
|
||||||
|
FlexStart,
|
||||||
|
Center,
|
||||||
|
FlexEnd,
|
||||||
|
SpaceBetween,
|
||||||
|
SpaceAround,
|
||||||
|
SpaceEvenly,
|
||||||
|
}
|
||||||
|
}
|
21
csharp/Facebook.Yoga/YogaLogLevel.cs
Normal file
21
csharp/Facebook.Yoga/YogaLogLevel.cs
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
||||||
|
*
|
||||||
|
* This source code is licensed under the MIT license found in the
|
||||||
|
* LICENSE file in the root directory of this source tree.
|
||||||
|
*/
|
||||||
|
|
||||||
|
// @generated by enums.py
|
||||||
|
|
||||||
|
namespace Facebook.Yoga
|
||||||
|
{
|
||||||
|
public enum YogaLogLevel
|
||||||
|
{
|
||||||
|
Error,
|
||||||
|
Warn,
|
||||||
|
Info,
|
||||||
|
Debug,
|
||||||
|
Verbose,
|
||||||
|
Fatal,
|
||||||
|
}
|
||||||
|
}
|
19
csharp/Facebook.Yoga/YogaLogger.cs
Normal file
19
csharp/Facebook.Yoga/YogaLogger.cs
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
||||||
|
*
|
||||||
|
* This source code is licensed under the MIT license found in the
|
||||||
|
* LICENSE file in the root directory of this source tree.
|
||||||
|
*/
|
||||||
|
|
||||||
|
using System;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
|
namespace Facebook.Yoga
|
||||||
|
{
|
||||||
|
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
|
||||||
|
public delegate void YogaLogger(
|
||||||
|
IntPtr unmanagedConfigPtr,
|
||||||
|
IntPtr unmanagedNotePtr,
|
||||||
|
YogaLogLevel level,
|
||||||
|
string message);
|
||||||
|
}
|
20
csharp/Facebook.Yoga/YogaMeasureFunc.cs
Normal file
20
csharp/Facebook.Yoga/YogaMeasureFunc.cs
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
||||||
|
*
|
||||||
|
* This source code is licensed under the MIT license found in the
|
||||||
|
* LICENSE file in the root directory of this source tree.
|
||||||
|
*/
|
||||||
|
|
||||||
|
using System;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
|
namespace Facebook.Yoga
|
||||||
|
{
|
||||||
|
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
|
||||||
|
public delegate YogaSize YogaMeasureFunc(
|
||||||
|
IntPtr unmanagedNodePtr,
|
||||||
|
float width,
|
||||||
|
YogaMeasureMode widthMode,
|
||||||
|
float height,
|
||||||
|
YogaMeasureMode heightMode);
|
||||||
|
}
|
18
csharp/Facebook.Yoga/YogaMeasureMode.cs
Normal file
18
csharp/Facebook.Yoga/YogaMeasureMode.cs
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
||||||
|
*
|
||||||
|
* This source code is licensed under the MIT license found in the
|
||||||
|
* LICENSE file in the root directory of this source tree.
|
||||||
|
*/
|
||||||
|
|
||||||
|
// @generated by enums.py
|
||||||
|
|
||||||
|
namespace Facebook.Yoga
|
||||||
|
{
|
||||||
|
public enum YogaMeasureMode
|
||||||
|
{
|
||||||
|
Undefined,
|
||||||
|
Exactly,
|
||||||
|
AtMost,
|
||||||
|
}
|
||||||
|
}
|
551
csharp/Facebook.Yoga/YogaNode.Spacing.cs
Normal file
551
csharp/Facebook.Yoga/YogaNode.Spacing.cs
Normal file
@@ -0,0 +1,551 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
||||||
|
*
|
||||||
|
* This source code is licensed under the MIT license found in the
|
||||||
|
* LICENSE file in the root directory of this source tree.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Facebook.Yoga
|
||||||
|
{
|
||||||
|
public partial class YogaNode
|
||||||
|
{
|
||||||
|
public YogaValue Left
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return Native.YGNodeStyleGetPosition(_ygNode, YogaEdge.Left);
|
||||||
|
}
|
||||||
|
|
||||||
|
set
|
||||||
|
{
|
||||||
|
SetStylePosition(YogaEdge.Left, value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public YogaValue Top
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return Native.YGNodeStyleGetPosition(_ygNode, YogaEdge.Top);
|
||||||
|
}
|
||||||
|
|
||||||
|
set
|
||||||
|
{
|
||||||
|
SetStylePosition(YogaEdge.Top, value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public YogaValue Right
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return Native.YGNodeStyleGetPosition(_ygNode, YogaEdge.Right);
|
||||||
|
}
|
||||||
|
|
||||||
|
set
|
||||||
|
{
|
||||||
|
SetStylePosition(YogaEdge.Right, value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public YogaValue Bottom
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return Native.YGNodeStyleGetPosition(_ygNode, YogaEdge.Bottom);
|
||||||
|
}
|
||||||
|
|
||||||
|
set
|
||||||
|
{
|
||||||
|
SetStylePosition(YogaEdge.Bottom, value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public YogaValue Start
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return Native.YGNodeStyleGetPosition(_ygNode, YogaEdge.Start);
|
||||||
|
}
|
||||||
|
|
||||||
|
set
|
||||||
|
{
|
||||||
|
SetStylePosition(YogaEdge.Start, value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public YogaValue End
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return Native.YGNodeStyleGetPosition(_ygNode, YogaEdge.End);
|
||||||
|
}
|
||||||
|
|
||||||
|
set
|
||||||
|
{
|
||||||
|
SetStylePosition(YogaEdge.End, value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void SetStylePosition(YogaEdge edge, YogaValue value)
|
||||||
|
{
|
||||||
|
if (value.Unit == YogaUnit.Percent)
|
||||||
|
{
|
||||||
|
Native.YGNodeStyleSetPositionPercent(_ygNode, edge, value.Value);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Native.YGNodeStyleSetPosition(_ygNode, edge, value.Value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public YogaValue MarginLeft
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return Native.YGNodeStyleGetMargin(_ygNode, YogaEdge.Left);
|
||||||
|
}
|
||||||
|
|
||||||
|
set
|
||||||
|
{
|
||||||
|
SetStyleMargin(YogaEdge.Left, value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public YogaValue MarginTop
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return Native.YGNodeStyleGetMargin(_ygNode, YogaEdge.Top);
|
||||||
|
}
|
||||||
|
|
||||||
|
set
|
||||||
|
{
|
||||||
|
SetStyleMargin(YogaEdge.Top, value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public YogaValue MarginRight
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return Native.YGNodeStyleGetMargin(_ygNode, YogaEdge.Right);
|
||||||
|
}
|
||||||
|
|
||||||
|
set
|
||||||
|
{
|
||||||
|
SetStyleMargin(YogaEdge.Right, value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public YogaValue MarginBottom
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return Native.YGNodeStyleGetMargin(_ygNode, YogaEdge.Bottom);
|
||||||
|
}
|
||||||
|
|
||||||
|
set
|
||||||
|
{
|
||||||
|
SetStyleMargin(YogaEdge.Bottom, value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public YogaValue MarginStart
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return Native.YGNodeStyleGetMargin(_ygNode, YogaEdge.Start);
|
||||||
|
}
|
||||||
|
|
||||||
|
set
|
||||||
|
{
|
||||||
|
SetStyleMargin(YogaEdge.Start, value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public YogaValue MarginEnd
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return Native.YGNodeStyleGetMargin(_ygNode, YogaEdge.End);
|
||||||
|
}
|
||||||
|
|
||||||
|
set
|
||||||
|
{
|
||||||
|
SetStyleMargin(YogaEdge.End, value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public YogaValue MarginHorizontal
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return Native.YGNodeStyleGetMargin(_ygNode, YogaEdge.Horizontal);
|
||||||
|
}
|
||||||
|
|
||||||
|
set
|
||||||
|
{
|
||||||
|
SetStyleMargin(YogaEdge.Horizontal, value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public YogaValue MarginVertical
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return Native.YGNodeStyleGetMargin(_ygNode, YogaEdge.Vertical);
|
||||||
|
}
|
||||||
|
|
||||||
|
set
|
||||||
|
{
|
||||||
|
SetStyleMargin(YogaEdge.Vertical, value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public YogaValue Margin
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return Native.YGNodeStyleGetMargin(_ygNode, YogaEdge.All);
|
||||||
|
}
|
||||||
|
|
||||||
|
set
|
||||||
|
{
|
||||||
|
SetStyleMargin(YogaEdge.All, value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void SetStyleMargin(YogaEdge edge, YogaValue value)
|
||||||
|
{
|
||||||
|
if (value.Unit == YogaUnit.Percent)
|
||||||
|
{
|
||||||
|
Native.YGNodeStyleSetMarginPercent(_ygNode, edge, value.Value);
|
||||||
|
}
|
||||||
|
else if (value.Unit == YogaUnit.Auto)
|
||||||
|
{
|
||||||
|
Native.YGNodeStyleSetMarginAuto(_ygNode, edge);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Native.YGNodeStyleSetMargin(_ygNode, edge, value.Value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public YogaValue PaddingLeft
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return Native.YGNodeStyleGetPadding(_ygNode, YogaEdge.Left);
|
||||||
|
}
|
||||||
|
|
||||||
|
set
|
||||||
|
{
|
||||||
|
SetStylePadding(YogaEdge.Left, value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public YogaValue PaddingTop
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return Native.YGNodeStyleGetPadding(_ygNode, YogaEdge.Top);
|
||||||
|
}
|
||||||
|
|
||||||
|
set
|
||||||
|
{
|
||||||
|
SetStylePadding(YogaEdge.Top, value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public YogaValue PaddingRight
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return Native.YGNodeStyleGetPadding(_ygNode, YogaEdge.Right);
|
||||||
|
}
|
||||||
|
|
||||||
|
set
|
||||||
|
{
|
||||||
|
SetStylePadding(YogaEdge.Right, value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public YogaValue PaddingBottom
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return Native.YGNodeStyleGetPadding(_ygNode, YogaEdge.Bottom);
|
||||||
|
}
|
||||||
|
|
||||||
|
set
|
||||||
|
{
|
||||||
|
SetStylePadding(YogaEdge.Bottom, value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public YogaValue PaddingStart
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return Native.YGNodeStyleGetPadding(_ygNode, YogaEdge.Start);
|
||||||
|
}
|
||||||
|
|
||||||
|
set
|
||||||
|
{
|
||||||
|
SetStylePadding(YogaEdge.Start, value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public YogaValue PaddingEnd
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return Native.YGNodeStyleGetPadding(_ygNode, YogaEdge.End);
|
||||||
|
}
|
||||||
|
|
||||||
|
set
|
||||||
|
{
|
||||||
|
SetStylePadding(YogaEdge.End, value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public YogaValue PaddingHorizontal
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return Native.YGNodeStyleGetPadding(_ygNode, YogaEdge.Horizontal);
|
||||||
|
}
|
||||||
|
|
||||||
|
set
|
||||||
|
{
|
||||||
|
SetStylePadding(YogaEdge.Horizontal, value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public YogaValue PaddingVertical
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return Native.YGNodeStyleGetPadding(_ygNode, YogaEdge.Vertical);
|
||||||
|
}
|
||||||
|
|
||||||
|
set
|
||||||
|
{
|
||||||
|
SetStylePadding(YogaEdge.Vertical, value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public YogaValue Padding
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return Native.YGNodeStyleGetPadding(_ygNode, YogaEdge.All);
|
||||||
|
}
|
||||||
|
|
||||||
|
set
|
||||||
|
{
|
||||||
|
SetStylePadding(YogaEdge.All, value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void SetStylePadding(YogaEdge edge, YogaValue value)
|
||||||
|
{
|
||||||
|
if (value.Unit == YogaUnit.Percent)
|
||||||
|
{
|
||||||
|
Native.YGNodeStyleSetPaddingPercent(_ygNode, edge, value.Value);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Native.YGNodeStyleSetPadding(_ygNode, edge, value.Value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public float BorderLeftWidth
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return Native.YGNodeStyleGetBorder(_ygNode, YogaEdge.Left);
|
||||||
|
}
|
||||||
|
|
||||||
|
set
|
||||||
|
{
|
||||||
|
Native.YGNodeStyleSetBorder(_ygNode, YogaEdge.Left, value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public float BorderTopWidth
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return Native.YGNodeStyleGetBorder(_ygNode, YogaEdge.Top);
|
||||||
|
}
|
||||||
|
|
||||||
|
set
|
||||||
|
{
|
||||||
|
Native.YGNodeStyleSetBorder(_ygNode, YogaEdge.Top, value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public float BorderRightWidth
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return Native.YGNodeStyleGetBorder(_ygNode, YogaEdge.Right);
|
||||||
|
}
|
||||||
|
|
||||||
|
set
|
||||||
|
{
|
||||||
|
Native.YGNodeStyleSetBorder(_ygNode, YogaEdge.Right, value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public float BorderBottomWidth
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return Native.YGNodeStyleGetBorder(_ygNode, YogaEdge.Bottom);
|
||||||
|
}
|
||||||
|
|
||||||
|
set
|
||||||
|
{
|
||||||
|
Native.YGNodeStyleSetBorder(_ygNode, YogaEdge.Bottom, value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public float BorderStartWidth
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return Native.YGNodeStyleGetBorder(_ygNode, YogaEdge.Start);
|
||||||
|
}
|
||||||
|
|
||||||
|
set
|
||||||
|
{
|
||||||
|
Native.YGNodeStyleSetBorder(_ygNode, YogaEdge.Start, value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public float BorderEndWidth
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return Native.YGNodeStyleGetBorder(_ygNode, YogaEdge.End);
|
||||||
|
}
|
||||||
|
|
||||||
|
set
|
||||||
|
{
|
||||||
|
Native.YGNodeStyleSetBorder(_ygNode, YogaEdge.End, value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public float BorderWidth
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return Native.YGNodeStyleGetBorder(_ygNode, YogaEdge.All);
|
||||||
|
}
|
||||||
|
|
||||||
|
set
|
||||||
|
{
|
||||||
|
Native.YGNodeStyleSetBorder(_ygNode, YogaEdge.All, value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public float LayoutMarginLeft
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return Native.YGNodeLayoutGetMargin(_ygNode, YogaEdge.Left);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public float LayoutMarginTop
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return Native.YGNodeLayoutGetMargin(_ygNode, YogaEdge.Top);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public float LayoutMarginRight
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return Native.YGNodeLayoutGetMargin(_ygNode, YogaEdge.Right);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public float LayoutMarginBottom
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return Native.YGNodeLayoutGetMargin(_ygNode, YogaEdge.Bottom);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public float LayoutMarginStart
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return Native.YGNodeLayoutGetMargin(_ygNode, YogaEdge.Start);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public float LayoutMarginEnd
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return Native.YGNodeLayoutGetMargin(_ygNode, YogaEdge.End);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public float LayoutPaddingLeft
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return Native.YGNodeLayoutGetPadding(_ygNode, YogaEdge.Left);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public float LayoutPaddingTop
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return Native.YGNodeLayoutGetPadding(_ygNode, YogaEdge.Top);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public float LayoutPaddingRight
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return Native.YGNodeLayoutGetPadding(_ygNode, YogaEdge.Right);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public float LayoutPaddingBottom
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return Native.YGNodeLayoutGetPadding(_ygNode, YogaEdge.Bottom);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public float LayoutPaddingStart
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return Native.YGNodeLayoutGetPadding(_ygNode, YogaEdge.Start);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public float LayoutPaddingEnd
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return Native.YGNodeLayoutGetPadding(_ygNode, YogaEdge.End);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
716
csharp/Facebook.Yoga/YogaNode.cs
Normal file
716
csharp/Facebook.Yoga/YogaNode.cs
Normal file
@@ -0,0 +1,716 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
||||||
|
*
|
||||||
|
* This source code is licensed under the MIT license found in the
|
||||||
|
* LICENSE file in the root directory of this source tree.
|
||||||
|
*/
|
||||||
|
|
||||||
|
using System;
|
||||||
|
using System.Collections;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
using System.Text;
|
||||||
|
|
||||||
|
#if __IOS__
|
||||||
|
using ObjCRuntime;
|
||||||
|
#endif
|
||||||
|
#if ENABLE_IL2CPP
|
||||||
|
using AOT;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
namespace Facebook.Yoga
|
||||||
|
{
|
||||||
|
public partial class YogaNode : IEnumerable<YogaNode>
|
||||||
|
{
|
||||||
|
private readonly YGNodeHandle _ygNode;
|
||||||
|
private readonly YogaConfig _config;
|
||||||
|
private WeakReference _parent;
|
||||||
|
private List<YogaNode> _children;
|
||||||
|
private MeasureFunction _measureFunction;
|
||||||
|
private BaselineFunction _baselineFunction;
|
||||||
|
private YogaMeasureFunc _managedMeasure;
|
||||||
|
private YogaBaselineFunc _managedBaseline;
|
||||||
|
private object _data;
|
||||||
|
|
||||||
|
public YogaNode(YogaConfig config = null)
|
||||||
|
{
|
||||||
|
_config = config == null ? YogaConfig.Default : config;
|
||||||
|
_ygNode = Native.YGNodeNewWithConfig(_config.Handle);
|
||||||
|
if (_ygNode.IsInvalid)
|
||||||
|
{
|
||||||
|
throw new InvalidOperationException("Failed to allocate native memory");
|
||||||
|
}
|
||||||
|
|
||||||
|
_ygNode.SetContext(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
public YogaNode(YogaNode srcNode)
|
||||||
|
: this(srcNode._config)
|
||||||
|
{
|
||||||
|
CopyStyle(srcNode);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Reset()
|
||||||
|
{
|
||||||
|
_measureFunction = null;
|
||||||
|
_baselineFunction = null;
|
||||||
|
_data = null;
|
||||||
|
|
||||||
|
_ygNode.ReleaseManaged();
|
||||||
|
Native.YGNodeReset(_ygNode);
|
||||||
|
_ygNode.SetContext(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool IsDirty
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return Native.YGNodeIsDirty(_ygNode);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public virtual void MarkDirty()
|
||||||
|
{
|
||||||
|
Native.YGNodeMarkDirty(_ygNode);
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool HasNewLayout
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return Native.YGNodeGetHasNewLayout(_ygNode);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void MarkHasNewLayout()
|
||||||
|
{
|
||||||
|
Native.YGNodeSetHasNewLayout(_ygNode, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
public YogaNode Parent
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return _parent != null ? _parent.Target as YogaNode : null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool IsMeasureDefined
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return _measureFunction != null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool IsBaselineDefined
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return _baselineFunction != null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void CopyStyle(YogaNode srcNode)
|
||||||
|
{
|
||||||
|
Native.YGNodeCopyStyle(_ygNode, srcNode._ygNode);
|
||||||
|
}
|
||||||
|
|
||||||
|
public YogaDirection StyleDirection
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return Native.YGNodeStyleGetDirection(_ygNode);
|
||||||
|
}
|
||||||
|
|
||||||
|
set
|
||||||
|
{
|
||||||
|
Native.YGNodeStyleSetDirection(_ygNode, value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public YogaFlexDirection FlexDirection
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return Native.YGNodeStyleGetFlexDirection(_ygNode);
|
||||||
|
}
|
||||||
|
|
||||||
|
set
|
||||||
|
{
|
||||||
|
Native.YGNodeStyleSetFlexDirection(_ygNode, value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public YogaJustify JustifyContent
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return Native.YGNodeStyleGetJustifyContent(_ygNode);
|
||||||
|
}
|
||||||
|
|
||||||
|
set
|
||||||
|
{
|
||||||
|
Native.YGNodeStyleSetJustifyContent(_ygNode, value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public YogaDisplay Display
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return Native.YGNodeStyleGetDisplay(_ygNode);
|
||||||
|
}
|
||||||
|
|
||||||
|
set
|
||||||
|
{
|
||||||
|
Native.YGNodeStyleSetDisplay(_ygNode, value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public YogaAlign AlignItems
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return Native.YGNodeStyleGetAlignItems(_ygNode);
|
||||||
|
}
|
||||||
|
|
||||||
|
set
|
||||||
|
{
|
||||||
|
Native.YGNodeStyleSetAlignItems(_ygNode, value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public YogaAlign AlignSelf
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return Native.YGNodeStyleGetAlignSelf(_ygNode);
|
||||||
|
}
|
||||||
|
|
||||||
|
set
|
||||||
|
{
|
||||||
|
Native.YGNodeStyleSetAlignSelf(_ygNode, value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public YogaAlign AlignContent
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return Native.YGNodeStyleGetAlignContent(_ygNode);
|
||||||
|
}
|
||||||
|
|
||||||
|
set
|
||||||
|
{
|
||||||
|
Native.YGNodeStyleSetAlignContent(_ygNode, value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public YogaPositionType PositionType
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return Native.YGNodeStyleGetPositionType(_ygNode);
|
||||||
|
}
|
||||||
|
|
||||||
|
set
|
||||||
|
{
|
||||||
|
Native.YGNodeStyleSetPositionType(_ygNode, value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public YogaWrap Wrap
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return Native.YGNodeStyleGetFlexWrap(_ygNode);
|
||||||
|
}
|
||||||
|
|
||||||
|
set
|
||||||
|
{
|
||||||
|
Native.YGNodeStyleSetFlexWrap(_ygNode, value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public float Flex
|
||||||
|
{
|
||||||
|
set
|
||||||
|
{
|
||||||
|
Native.YGNodeStyleSetFlex(_ygNode, value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public float FlexGrow
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return Native.YGNodeStyleGetFlexGrow(_ygNode);
|
||||||
|
}
|
||||||
|
|
||||||
|
set
|
||||||
|
{
|
||||||
|
Native.YGNodeStyleSetFlexGrow(_ygNode, value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public float FlexShrink
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return Native.YGNodeStyleGetFlexShrink(_ygNode);
|
||||||
|
}
|
||||||
|
|
||||||
|
set
|
||||||
|
{
|
||||||
|
Native.YGNodeStyleSetFlexShrink(_ygNode, value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public YogaValue FlexBasis
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return Native.YGNodeStyleGetFlexBasis(_ygNode);
|
||||||
|
}
|
||||||
|
|
||||||
|
set
|
||||||
|
{
|
||||||
|
if (value.Unit == YogaUnit.Percent)
|
||||||
|
{
|
||||||
|
Native.YGNodeStyleSetFlexBasisPercent(_ygNode, value.Value);
|
||||||
|
}
|
||||||
|
else if (value.Unit == YogaUnit.Auto)
|
||||||
|
{
|
||||||
|
Native.YGNodeStyleSetFlexBasisAuto(_ygNode);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Native.YGNodeStyleSetFlexBasis(_ygNode, value.Value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public YogaValue Width
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return Native.YGNodeStyleGetWidth(_ygNode);
|
||||||
|
}
|
||||||
|
|
||||||
|
set
|
||||||
|
{
|
||||||
|
if (value.Unit == YogaUnit.Percent)
|
||||||
|
{
|
||||||
|
Native.YGNodeStyleSetWidthPercent(_ygNode, value.Value);
|
||||||
|
}
|
||||||
|
else if (value.Unit == YogaUnit.Auto)
|
||||||
|
{
|
||||||
|
Native.YGNodeStyleSetWidthAuto(_ygNode);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Native.YGNodeStyleSetWidth(_ygNode, value.Value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public YogaValue Height
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return Native.YGNodeStyleGetHeight(_ygNode);
|
||||||
|
}
|
||||||
|
|
||||||
|
set
|
||||||
|
{
|
||||||
|
if (value.Unit == YogaUnit.Percent)
|
||||||
|
{
|
||||||
|
Native.YGNodeStyleSetHeightPercent(_ygNode, value.Value);
|
||||||
|
}
|
||||||
|
else if (value.Unit == YogaUnit.Auto)
|
||||||
|
{
|
||||||
|
Native.YGNodeStyleSetHeightAuto(_ygNode);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Native.YGNodeStyleSetHeight(_ygNode, value.Value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public YogaValue MaxWidth
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return Native.YGNodeStyleGetMaxWidth(_ygNode);
|
||||||
|
}
|
||||||
|
|
||||||
|
set
|
||||||
|
{
|
||||||
|
if (value.Unit == YogaUnit.Percent)
|
||||||
|
{
|
||||||
|
Native.YGNodeStyleSetMaxWidthPercent(_ygNode, value.Value);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Native.YGNodeStyleSetMaxWidth(_ygNode, value.Value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public YogaValue MaxHeight
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return Native.YGNodeStyleGetMaxHeight(_ygNode);
|
||||||
|
}
|
||||||
|
|
||||||
|
set
|
||||||
|
{
|
||||||
|
if (value.Unit == YogaUnit.Percent)
|
||||||
|
{
|
||||||
|
Native.YGNodeStyleSetMaxHeightPercent(_ygNode, value.Value);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Native.YGNodeStyleSetMaxHeight(_ygNode, value.Value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public YogaValue MinWidth
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return Native.YGNodeStyleGetMinWidth(_ygNode);
|
||||||
|
}
|
||||||
|
|
||||||
|
set
|
||||||
|
{
|
||||||
|
if (value.Unit == YogaUnit.Percent)
|
||||||
|
{
|
||||||
|
Native.YGNodeStyleSetMinWidthPercent(_ygNode, value.Value);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Native.YGNodeStyleSetMinWidth(_ygNode, value.Value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public YogaValue MinHeight
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return Native.YGNodeStyleGetMinHeight(_ygNode);
|
||||||
|
}
|
||||||
|
|
||||||
|
set
|
||||||
|
{
|
||||||
|
if (value.Unit == YogaUnit.Percent)
|
||||||
|
{
|
||||||
|
Native.YGNodeStyleSetMinHeightPercent(_ygNode, value.Value);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Native.YGNodeStyleSetMinHeight(_ygNode, value.Value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public float AspectRatio
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return Native.YGNodeStyleGetAspectRatio(_ygNode);
|
||||||
|
}
|
||||||
|
|
||||||
|
set
|
||||||
|
{
|
||||||
|
Native.YGNodeStyleSetAspectRatio(_ygNode, value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public float Gap
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return Native.YGNodeStyleGetGap(_ygNode, YogaGutter.All);
|
||||||
|
}
|
||||||
|
|
||||||
|
set
|
||||||
|
{
|
||||||
|
Native.YGNodeStyleSetGap(_ygNode, YogaGutter.All, value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public float ColumnGap
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return Native.YGNodeStyleGetGap(_ygNode, YogaGutter.Column);
|
||||||
|
}
|
||||||
|
|
||||||
|
set
|
||||||
|
{
|
||||||
|
Native.YGNodeStyleSetGap(_ygNode, YogaGutter.Column, value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public float RowGap
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return Native.YGNodeStyleGetGap(_ygNode, YogaGutter.Row);
|
||||||
|
}
|
||||||
|
|
||||||
|
set
|
||||||
|
{
|
||||||
|
Native.YGNodeStyleSetGap(_ygNode, YogaGutter.Row, value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public float LayoutX
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return Native.YGNodeLayoutGetLeft(_ygNode);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public float LayoutY
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return Native.YGNodeLayoutGetTop(_ygNode);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public float LayoutWidth
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return Native.YGNodeLayoutGetWidth(_ygNode);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public float LayoutHeight
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return Native.YGNodeLayoutGetHeight(_ygNode);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public YogaDirection LayoutDirection
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return Native.YGNodeLayoutGetDirection(_ygNode);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public YogaOverflow Overflow
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return Native.YGNodeStyleGetOverflow(_ygNode);
|
||||||
|
}
|
||||||
|
|
||||||
|
set
|
||||||
|
{
|
||||||
|
Native.YGNodeStyleSetOverflow(_ygNode, value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public object Data
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return _data;
|
||||||
|
}
|
||||||
|
|
||||||
|
set
|
||||||
|
{
|
||||||
|
_data = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public YogaNode this[int index]
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return _children[index];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public int Count
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return _children != null ? _children.Count : 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void MarkLayoutSeen()
|
||||||
|
{
|
||||||
|
Native.YGNodeSetHasNewLayout(_ygNode, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool IsReferenceBaseline
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return Native.YGNodeIsReferenceBaseline(_ygNode);
|
||||||
|
}
|
||||||
|
|
||||||
|
set
|
||||||
|
{
|
||||||
|
Native.YGNodeSetIsReferenceBaseline(_ygNode, value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool ValuesEqual(float f1, float f2)
|
||||||
|
{
|
||||||
|
if (float.IsNaN(f1) || float.IsNaN(f2))
|
||||||
|
{
|
||||||
|
return float.IsNaN(f1) && float.IsNaN(f2);
|
||||||
|
}
|
||||||
|
|
||||||
|
return Math.Abs(f2 - f1) < float.Epsilon;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Insert(int index, YogaNode node)
|
||||||
|
{
|
||||||
|
if (_children == null)
|
||||||
|
{
|
||||||
|
_children = new List<YogaNode>(4);
|
||||||
|
}
|
||||||
|
_children.Insert(index, node);
|
||||||
|
node._parent = new WeakReference(this);
|
||||||
|
Native.YGNodeInsertChild(_ygNode, node._ygNode, (uint)index);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void RemoveAt(int index)
|
||||||
|
{
|
||||||
|
var child = _children[index];
|
||||||
|
child._parent = null;
|
||||||
|
_children.RemoveAt(index);
|
||||||
|
Native.YGNodeRemoveChild(_ygNode, child._ygNode);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void AddChild(YogaNode child)
|
||||||
|
{
|
||||||
|
Insert(Count, child);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void RemoveChild(YogaNode child)
|
||||||
|
{
|
||||||
|
int index = IndexOf(child);
|
||||||
|
if (index >= 0)
|
||||||
|
{
|
||||||
|
RemoveAt(index);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Clear()
|
||||||
|
{
|
||||||
|
if (_children != null)
|
||||||
|
{
|
||||||
|
while (_children.Count > 0)
|
||||||
|
{
|
||||||
|
RemoveAt(_children.Count-1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public int IndexOf(YogaNode node)
|
||||||
|
{
|
||||||
|
return _children != null ? _children.IndexOf(node) : -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void SetMeasureFunction(MeasureFunction measureFunction)
|
||||||
|
{
|
||||||
|
_measureFunction = measureFunction;
|
||||||
|
_managedMeasure = measureFunction != null ? MeasureInternal : (YogaMeasureFunc)null;
|
||||||
|
Native.YGNodeSetMeasureFunc(_ygNode, _managedMeasure);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void SetBaselineFunction(BaselineFunction baselineFunction)
|
||||||
|
{
|
||||||
|
_baselineFunction = baselineFunction;
|
||||||
|
_managedBaseline =
|
||||||
|
baselineFunction != null ? BaselineInternal : (YogaBaselineFunc)null;
|
||||||
|
Native.YGNodeSetBaselineFunc(_ygNode, _managedBaseline);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void CalculateLayout(
|
||||||
|
float width = YogaConstants.Undefined,
|
||||||
|
float height = YogaConstants.Undefined)
|
||||||
|
{
|
||||||
|
Native.YGNodeCalculateLayout(
|
||||||
|
_ygNode,
|
||||||
|
width,
|
||||||
|
height,
|
||||||
|
Native.YGNodeStyleGetDirection(_ygNode));
|
||||||
|
}
|
||||||
|
|
||||||
|
#if (UNITY_IOS && !UNITY_EDITOR) || ENABLE_IL2CPP || __IOS__
|
||||||
|
[MonoPInvokeCallback(typeof(YogaMeasureFunc))]
|
||||||
|
#endif
|
||||||
|
private static YogaSize MeasureInternal(
|
||||||
|
IntPtr unmanagedNodePtr,
|
||||||
|
float width,
|
||||||
|
YogaMeasureMode widthMode,
|
||||||
|
float height,
|
||||||
|
YogaMeasureMode heightMode)
|
||||||
|
{
|
||||||
|
var node = YGNodeHandle.GetManaged(unmanagedNodePtr);
|
||||||
|
if (node == null || node._measureFunction == null)
|
||||||
|
{
|
||||||
|
throw new InvalidOperationException("Measure function is not defined.");
|
||||||
|
}
|
||||||
|
return node._measureFunction(node, width, widthMode, height, heightMode);
|
||||||
|
}
|
||||||
|
|
||||||
|
#if (UNITY_IOS && !UNITY_EDITOR) || ENABLE_IL2CPP || __IOS__
|
||||||
|
[MonoPInvokeCallback(typeof(YogaBaselineFunc))]
|
||||||
|
#endif
|
||||||
|
private static float BaselineInternal(
|
||||||
|
IntPtr unmanagedNodePtr,
|
||||||
|
float width,
|
||||||
|
float height)
|
||||||
|
{
|
||||||
|
var node = YGNodeHandle.GetManaged(unmanagedNodePtr);
|
||||||
|
if (node == null || node._baselineFunction == null)
|
||||||
|
{
|
||||||
|
throw new InvalidOperationException("Baseline function is not defined.");
|
||||||
|
}
|
||||||
|
return node._baselineFunction(node, width, height);
|
||||||
|
}
|
||||||
|
|
||||||
|
public string Print(YogaPrintOptions options =
|
||||||
|
YogaPrintOptions.Layout|YogaPrintOptions.Style|YogaPrintOptions.Children)
|
||||||
|
{
|
||||||
|
StringBuilder sb = new StringBuilder();
|
||||||
|
Logger orig = _config.Logger;
|
||||||
|
_config.Logger = (config, node, level, message) => {sb.Append(message);};
|
||||||
|
Native.YGNodePrint(_ygNode, options);
|
||||||
|
_config.Logger = orig;
|
||||||
|
return sb.ToString();
|
||||||
|
}
|
||||||
|
|
||||||
|
public IEnumerator<YogaNode> GetEnumerator()
|
||||||
|
{
|
||||||
|
return _children != null ? ((IEnumerable<YogaNode>)_children).GetEnumerator() :
|
||||||
|
System.Linq.Enumerable.Empty<YogaNode>().GetEnumerator();
|
||||||
|
}
|
||||||
|
|
||||||
|
IEnumerator IEnumerable.GetEnumerator()
|
||||||
|
{
|
||||||
|
return _children != null ? ((IEnumerable<YogaNode>)_children).GetEnumerator() :
|
||||||
|
System.Linq.Enumerable.Empty<YogaNode>().GetEnumerator();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
17
csharp/Facebook.Yoga/YogaNodeType.cs
Normal file
17
csharp/Facebook.Yoga/YogaNodeType.cs
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
||||||
|
*
|
||||||
|
* This source code is licensed under the MIT license found in the
|
||||||
|
* LICENSE file in the root directory of this source tree.
|
||||||
|
*/
|
||||||
|
|
||||||
|
// @generated by enums.py
|
||||||
|
|
||||||
|
namespace Facebook.Yoga
|
||||||
|
{
|
||||||
|
public enum YogaNodeType
|
||||||
|
{
|
||||||
|
Default,
|
||||||
|
Text,
|
||||||
|
}
|
||||||
|
}
|
18
csharp/Facebook.Yoga/YogaOverflow.cs
Normal file
18
csharp/Facebook.Yoga/YogaOverflow.cs
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
||||||
|
*
|
||||||
|
* This source code is licensed under the MIT license found in the
|
||||||
|
* LICENSE file in the root directory of this source tree.
|
||||||
|
*/
|
||||||
|
|
||||||
|
// @generated by enums.py
|
||||||
|
|
||||||
|
namespace Facebook.Yoga
|
||||||
|
{
|
||||||
|
public enum YogaOverflow
|
||||||
|
{
|
||||||
|
Visible,
|
||||||
|
Hidden,
|
||||||
|
Scroll,
|
||||||
|
}
|
||||||
|
}
|
18
csharp/Facebook.Yoga/YogaPositionType.cs
Normal file
18
csharp/Facebook.Yoga/YogaPositionType.cs
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
||||||
|
*
|
||||||
|
* This source code is licensed under the MIT license found in the
|
||||||
|
* LICENSE file in the root directory of this source tree.
|
||||||
|
*/
|
||||||
|
|
||||||
|
// @generated by enums.py
|
||||||
|
|
||||||
|
namespace Facebook.Yoga
|
||||||
|
{
|
||||||
|
public enum YogaPositionType
|
||||||
|
{
|
||||||
|
Static,
|
||||||
|
Relative,
|
||||||
|
Absolute,
|
||||||
|
}
|
||||||
|
}
|
19
csharp/Facebook.Yoga/YogaPrintOptions.cs
Normal file
19
csharp/Facebook.Yoga/YogaPrintOptions.cs
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
||||||
|
*
|
||||||
|
* This source code is licensed under the MIT license found in the
|
||||||
|
* LICENSE file in the root directory of this source tree.
|
||||||
|
*/
|
||||||
|
|
||||||
|
// @generated by enums.py
|
||||||
|
|
||||||
|
namespace Facebook.Yoga
|
||||||
|
{
|
||||||
|
[System.Flags]
|
||||||
|
public enum YogaPrintOptions
|
||||||
|
{
|
||||||
|
Layout = 1,
|
||||||
|
Style = 2,
|
||||||
|
Children = 4,
|
||||||
|
}
|
||||||
|
}
|
18
csharp/Facebook.Yoga/YogaSize.cs
Normal file
18
csharp/Facebook.Yoga/YogaSize.cs
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
||||||
|
*
|
||||||
|
* This source code is licensed under the MIT license found in the
|
||||||
|
* LICENSE file in the root directory of this source tree.
|
||||||
|
*/
|
||||||
|
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
|
namespace Facebook.Yoga
|
||||||
|
{
|
||||||
|
[StructLayout(LayoutKind.Sequential)]
|
||||||
|
public struct YogaSize
|
||||||
|
{
|
||||||
|
public float width;
|
||||||
|
public float height;
|
||||||
|
}
|
||||||
|
}
|
19
csharp/Facebook.Yoga/YogaUnit.cs
Normal file
19
csharp/Facebook.Yoga/YogaUnit.cs
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
||||||
|
*
|
||||||
|
* This source code is licensed under the MIT license found in the
|
||||||
|
* LICENSE file in the root directory of this source tree.
|
||||||
|
*/
|
||||||
|
|
||||||
|
// @generated by enums.py
|
||||||
|
|
||||||
|
namespace Facebook.Yoga
|
||||||
|
{
|
||||||
|
public enum YogaUnit
|
||||||
|
{
|
||||||
|
Undefined,
|
||||||
|
Point,
|
||||||
|
Percent,
|
||||||
|
Auto,
|
||||||
|
}
|
||||||
|
}
|
95
csharp/Facebook.Yoga/YogaValue.cs
Normal file
95
csharp/Facebook.Yoga/YogaValue.cs
Normal file
@@ -0,0 +1,95 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
||||||
|
*
|
||||||
|
* This source code is licensed under the MIT license found in the
|
||||||
|
* LICENSE file in the root directory of this source tree.
|
||||||
|
*/
|
||||||
|
|
||||||
|
using System;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
|
namespace Facebook.Yoga
|
||||||
|
{
|
||||||
|
[StructLayout(LayoutKind.Sequential)]
|
||||||
|
public struct YogaValue
|
||||||
|
{
|
||||||
|
private float value;
|
||||||
|
private YogaUnit unit;
|
||||||
|
|
||||||
|
public YogaUnit Unit
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return unit;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public float Value
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static YogaValue Point(float value)
|
||||||
|
{
|
||||||
|
return new YogaValue
|
||||||
|
{
|
||||||
|
value = value,
|
||||||
|
unit = YogaConstants.IsUndefined(value) ? YogaUnit.Undefined : YogaUnit.Point
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool Equals(YogaValue other)
|
||||||
|
{
|
||||||
|
return Unit == other.Unit && (Value.Equals(other.Value) || Unit == YogaUnit.Undefined);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override bool Equals(object obj)
|
||||||
|
{
|
||||||
|
if (ReferenceEquals(null, obj)) return false;
|
||||||
|
return obj is YogaValue && Equals((YogaValue) obj);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override int GetHashCode()
|
||||||
|
{
|
||||||
|
unchecked
|
||||||
|
{
|
||||||
|
return (Value.GetHashCode() * 397) ^ (int) Unit;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static YogaValue Undefined()
|
||||||
|
{
|
||||||
|
return new YogaValue
|
||||||
|
{
|
||||||
|
value = YogaConstants.Undefined,
|
||||||
|
unit = YogaUnit.Undefined
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
public static YogaValue Auto()
|
||||||
|
{
|
||||||
|
return new YogaValue
|
||||||
|
{
|
||||||
|
value = 0f,
|
||||||
|
unit = YogaUnit.Auto
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
public static YogaValue Percent(float value)
|
||||||
|
{
|
||||||
|
return new YogaValue
|
||||||
|
{
|
||||||
|
value = value,
|
||||||
|
unit = YogaConstants.IsUndefined(value) ? YogaUnit.Undefined : YogaUnit.Percent
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
public static implicit operator YogaValue(float pointValue)
|
||||||
|
{
|
||||||
|
return Point(pointValue);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user