Compare commits
313 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
a874992e7c | ||
|
31fc287d35 | ||
|
892913a69d | ||
|
99026e42a9 | ||
|
3a82d2b1a8 | ||
|
b28292e454 | ||
|
2ff18bc948 | ||
|
d0bee487e0 | ||
|
419e29c5a6 | ||
|
295d111f0e | ||
|
da5eb2db67 | ||
|
3408e4d4fa | ||
|
6d7eca8e42 | ||
|
5726a71b62 | ||
|
f73b5057ac | ||
|
51051aad7f | ||
|
91d3c08248 | ||
|
52f2cf319a | ||
|
bbdb62e654 | ||
|
e024943c4b | ||
|
7f44ec512e | ||
|
a2b6ddb7b1 | ||
|
bdc37b0797 | ||
|
82aaebfea2 | ||
|
48d82224ee | ||
|
100afcfdb0 | ||
|
b3436d5eba | ||
|
c5371aca64 | ||
|
269619a419 | ||
|
9b3104577c | ||
|
a1697d2307 | ||
|
056b75858c | ||
|
c84ed90272 | ||
|
b21dd9891a | ||
|
bba81781af | ||
|
0c74a72fac | ||
|
1822bc5eaf | ||
|
01ffe10c2f | ||
|
7f99a547f5 | ||
|
0e5651fb80 | ||
|
0ca44f3001 | ||
|
3f85763797 | ||
|
b318c4c5c9 | ||
|
ae9703712a | ||
|
d617ab6662 | ||
|
4c3eebd3e5 | ||
|
10061af491 | ||
|
91621641e6 | ||
|
35c6931ade | ||
|
44622912a2 | ||
|
aac40cf89b | ||
|
d4b20f5793 | ||
|
89df2d9475 | ||
|
79fa6f8d58 | ||
|
69242938f7 | ||
|
1b66b5d941 | ||
|
fb30f7ddcb | ||
|
747c2a4208 | ||
|
43fda26275 | ||
|
b1222bf83e | ||
|
3ec41b656f | ||
|
740ef6cd9e | ||
|
8c5cbf698b | ||
|
5f2cf6623f | ||
|
4b7efb73d7 | ||
|
a6b7e34187 | ||
|
e50308e823 | ||
|
b6a13ce43a | ||
|
96a87a811d | ||
|
025ee03cb1 | ||
|
c06ee92251 | ||
|
3aca5965dc | ||
|
cac77e5ffa | ||
|
49f1d7b5f6 | ||
|
82e44dbf04 | ||
|
9b501dd9eb | ||
|
8ba663f6f4 | ||
|
8f35484262 | ||
|
1e3143656d | ||
|
699b1f5012 | ||
|
9c877a621e | ||
|
a3144150e0 | ||
|
c830083df3 | ||
|
9eb03b1bcd | ||
|
7e3136c347 | ||
|
c3de8016c0 | ||
|
af45863f8e | ||
|
08d7d1673e | ||
|
e7c56ccd1e | ||
|
de8cab8e60 | ||
|
9e0f751464 | ||
|
951a429ac5 | ||
|
e43bb9da19 | ||
|
b08bd572ef | ||
|
402ee11273 | ||
|
6e38a26f32 | ||
|
d66239bea8 | ||
|
7eb8df2777 | ||
|
75473fd924 | ||
|
c94ade8ffd | ||
|
61afbd43c9 | ||
|
64f6ea37bd | ||
|
dc0609d153 | ||
|
bd46344a4e | ||
|
7199902316 | ||
|
250873abf2 | ||
|
1e775ecb83 | ||
|
9718c517d9 | ||
|
afc215aa66 | ||
|
5df8157863 | ||
|
802fe6bb29 | ||
|
27d2ad198e | ||
|
63be3ff84c | ||
|
66045bd13d | ||
|
f5f8105b57 | ||
|
4f92ae46ef | ||
|
80f8aa3c7e | ||
|
42778f687b | ||
|
7b27a58b97 | ||
|
a40ba9d350 | ||
|
9ecdff14fa | ||
|
288adc49c9 | ||
|
b8c2428b31 | ||
|
92bfcbafc0 | ||
|
130b5beca2 | ||
|
adb2e0fdd6 | ||
|
0a04bd7f2f | ||
|
9d6af5b314 | ||
|
6efb4b90d4 | ||
|
5806f1728c | ||
|
a9dd527748 | ||
|
db3d20b7b7 | ||
|
acd4e01aaf | ||
|
b217f23ba5 | ||
|
76875af207 | ||
|
f2ba14c309 | ||
|
a65b79a944 | ||
|
681b580fd8 | ||
|
b985b6c377 | ||
|
92eda21e78 | ||
|
0cfdb50477 | ||
|
1eb9a5edd9 | ||
|
383b881748 | ||
|
47543c8fba | ||
|
dc6ed89bfa | ||
|
348dd368b5 | ||
|
40eeefd4f7 | ||
|
47892c17ce | ||
|
f2a369fb73 | ||
|
61dc10ef66 | ||
|
7d01f4d8b1 | ||
|
c7a5e1e290 | ||
|
fbd332dee8 | ||
|
dbf6a12134 | ||
|
dbc47ae383 | ||
|
f22cfd52e0 | ||
|
2a10337344 | ||
|
836eaa62df | ||
|
a01c7adcfb | ||
|
5133faa1ad | ||
|
6a8c2960ad | ||
|
0c98e89fdb | ||
|
5f78181911 | ||
|
03dd1d23fa | ||
|
91683be798 | ||
|
109cb1a562 | ||
|
ad1240e276 | ||
|
2e468d9c8c | ||
|
6caa94b779 | ||
|
429a7eeee3 | ||
|
dec1172f38 | ||
|
afaafb4126 | ||
|
e566fcca08 | ||
|
c7f7ba250c | ||
|
7e3be21811 | ||
|
5e39f1a57c | ||
|
5aa0f44a9b | ||
|
55c767ba7f | ||
|
5502a97f7f | ||
|
8ab1d81917 | ||
|
942543f6a5 | ||
|
a69545a6ae | ||
|
0b13a0c168 | ||
|
d8341ca3b0 | ||
|
34ac314101 | ||
|
02c00f2711 | ||
|
15231c3304 | ||
|
d98e5aef97 | ||
|
5b0dfa471f | ||
|
26481a6553 | ||
|
64e08aa98b | ||
|
0c3168f150 | ||
|
40861c699e | ||
|
d8fee24778 | ||
|
5c617a5947 | ||
|
ff0a3f39d9 | ||
|
bfb4dabf0c | ||
|
58d14ee557 | ||
|
c5182c4bf5 | ||
|
132b016bae | ||
|
4785e95a0c | ||
|
be94a5ef8d | ||
|
208b70a93c | ||
|
6c3155ae3b | ||
|
32f071c2ad | ||
|
fdd1dbe3a9 | ||
|
1ca5bb694d | ||
|
b4cfaa916c | ||
|
fc6c85996e | ||
|
969f055f47 | ||
|
58328d01ef | ||
|
d90914f3dc | ||
|
3a0a86788e | ||
|
a77aa9a41e | ||
|
7217471427 | ||
|
bcc36cc1b2 | ||
|
16052085d0 | ||
|
c20f2864ab | ||
|
4185a44393 | ||
|
c79c5e3c9d | ||
|
35a9f33abb | ||
|
32f128640b | ||
|
18d19af7ec | ||
|
2ee2dd439f | ||
|
5edfb679e7 | ||
|
f45059e1e6 | ||
|
c9384762ee | ||
|
7ea50439ce | ||
|
154e67adbc | ||
|
570a193b7e | ||
|
79e294c927 | ||
|
5d75c7c4c8 | ||
|
7c688cea68 | ||
|
7640cd667f | ||
|
24e2fc95dd | ||
|
ce3f99939f | ||
|
11bc97b16c | ||
|
4804bcd594 | ||
|
ca2c607f90 | ||
|
6c67684fa6 | ||
|
835b2bbae8 | ||
|
47edd2586c | ||
|
ca483cae00 | ||
|
a20bde8444 | ||
|
ac885626b3 | ||
|
976ecc6816 | ||
|
d2f22283bb | ||
|
56b10fc35b | ||
|
5a3ceffba1 | ||
|
b378a685a4 | ||
|
fa50f048f1 | ||
|
f68b50bb4b | ||
|
aad1c3055c | ||
|
cd1dbc3f0f | ||
|
bf4ff0769d | ||
|
a141ebfb50 | ||
|
2fb01daf70 | ||
|
e9e1e084da | ||
|
629e401deb | ||
|
f4c2b6ae63 | ||
|
4487862227 | ||
|
927eca6604 | ||
|
f2612192c5 | ||
|
49bccf47fa | ||
|
fa54167a20 | ||
|
50feb21cb3 | ||
|
52ce5828c9 | ||
|
9cdaedfcb5 | ||
|
adad054cad | ||
|
b2b0c7ee37 | ||
|
488a7c1fe0 | ||
|
85c2e406e4 | ||
|
dcf57d2f7e | ||
|
3fefe9fc49 | ||
|
626a05fb6f | ||
|
ffcd2cfc8a | ||
|
181101c92d | ||
|
3db6804202 | ||
|
3fb135829d | ||
|
2c91e1e7d2 | ||
|
c3982b6c1e | ||
|
ae33c6c19c | ||
|
bcd68b997f | ||
|
fcfa1b9f01 | ||
|
d9a0822517 | ||
|
097e99b699 | ||
|
ff7bec703b | ||
|
c7ab004922 | ||
|
91230ae177 | ||
|
40eba60cf5 | ||
|
fb4cfed20d | ||
|
d3a9a84ac4 | ||
|
accad5366f | ||
|
8eca67e257 | ||
|
40e1bf6ce3 | ||
|
7b89a1dd48 | ||
|
203577724e | ||
|
e3dbef7cbd | ||
|
0ee3303791 | ||
|
83fddd8af6 | ||
|
77c05b5ff6 | ||
|
7c324f058c | ||
|
3db38f2a80 | ||
|
f6b17183c5 | ||
|
8f9d7e243e | ||
|
fde4db9383 | ||
|
3178e3bf15 | ||
|
cdfd05c742 | ||
|
76f6a54327 | ||
|
c91e4b3566 | ||
|
e24561bcef | ||
|
363e941867 | ||
|
3fb2c1888c |
@@ -1,9 +1,10 @@
|
|||||||
[cxx]
|
[cxx]
|
||||||
gtest_dep = //lib/gtest:gtest
|
gtest_dep = //lib/gtest:gtest
|
||||||
[android]
|
[android]
|
||||||
target = android-23
|
target = android-25
|
||||||
|
build_tools_version = 26.0.2
|
||||||
[ndk]
|
[ndk]
|
||||||
ndk_version = 13.1.3345770
|
ndk_version = 15.2.4203891
|
||||||
compiler = clang
|
compiler = clang
|
||||||
app_platform = android-21
|
app_platform = android-21
|
||||||
cpu_abis = arm64, armv7, x86, x86_64
|
cpu_abis = arm64, armv7, x86, x86_64
|
||||||
|
11
.editorconfig
Normal file
11
.editorconfig
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
root = true
|
||||||
|
|
||||||
|
[*]
|
||||||
|
indent_style = space
|
||||||
|
indent_size = 2
|
||||||
|
charset = utf-8
|
||||||
|
trim_trailing_whitespace = true
|
||||||
|
insert_final_newline = true
|
||||||
|
|
||||||
|
[*.md]
|
||||||
|
trim_trailing_whitespace = false
|
136
.travis.yml
136
.travis.yml
@@ -5,122 +5,28 @@
|
|||||||
# LICENSE file in the root directory of this source tree. An additional grant
|
# LICENSE file in the root directory of this source tree. An additional grant
|
||||||
# of patent rights can be found in the PATENTS file in the same directory.
|
# of patent rights can be found in the PATENTS file in the same directory.
|
||||||
|
|
||||||
os: osx
|
language: node_js
|
||||||
osx_image: xcode8.2
|
node_js:
|
||||||
language: cpp
|
- "8"
|
||||||
compiler: clang
|
|
||||||
|
|
||||||
env:
|
install:
|
||||||
- TARGET=c
|
- cd website
|
||||||
- TARGET=java
|
- yarn --ignore-scripts
|
||||||
- TARGET=net
|
- cd ..
|
||||||
- TARGET=ios
|
|
||||||
- TARGET=js
|
|
||||||
- TARGET=android
|
|
||||||
|
|
||||||
before_install:
|
|
||||||
- brew update > /dev/null
|
|
||||||
- brew tap facebook/fb
|
|
||||||
- brew install buck
|
|
||||||
|
|
||||||
# Java
|
|
||||||
- |
|
|
||||||
if [[ $TARGET = "java" ]]; then
|
|
||||||
brew cask install java &&
|
|
||||||
export JAVA_HOME=$(/usr/libexec/java_home -v 1.8) &&
|
|
||||||
export PATH=$JAVA_HOME/bin:$PATH
|
|
||||||
fi
|
|
||||||
|
|
||||||
# .NET
|
|
||||||
- |
|
|
||||||
if [[ $TARGET = "net" ]]; then
|
|
||||||
brew install mono
|
|
||||||
fi
|
|
||||||
|
|
||||||
# iOS
|
|
||||||
- |
|
|
||||||
if [[ $TARGET = "ios" ]]; then
|
|
||||||
brew outdated xctool || brew upgrade xctool;
|
|
||||||
gem install xcpretty --no-document --quiet;
|
|
||||||
gem install cocoapods --pre --no-document --quiet;
|
|
||||||
pod repo update --silent;
|
|
||||||
pod install --project-directory=YogaKit/YogaKitSample/;
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Emscripten (used for js tests)
|
|
||||||
# Note: cannot be ran on Linux (because it will compile Clang from its sources :|)
|
|
||||||
- |
|
|
||||||
if [[ $TARGET = "js" ]]; then
|
|
||||||
wget -O /tmp/emsdk-portable.tar.gz https://s3.amazonaws.com/mozilla-games/emscripten/releases/emsdk-portable.tar.gz &&
|
|
||||||
tar xf /tmp/emsdk-portable.tar.gz -C /tmp/ &&
|
|
||||||
/tmp/emsdk_portable/emsdk install latest >& /dev/null &&
|
|
||||||
/tmp/emsdk_portable/emsdk activate latest
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Android
|
|
||||||
- |
|
|
||||||
if [[ $TARGET = "android" ]]; then
|
|
||||||
brew cask install java;
|
|
||||||
export JAVA_HOME=$(/usr/libexec/java_home -v 1.8);
|
|
||||||
export PATH=$JAVA_HOME/bin:$PATH;
|
|
||||||
brew install android-sdk;
|
|
||||||
export ANDROID_SDK=/usr/local/Cellar/android-sdk/24.4.1_1;
|
|
||||||
export ANDROID_HOME=/usr/local/Cellar/android-sdk/24.4.1_1;
|
|
||||||
brew install lib32stdc++6 lib32z1;
|
|
||||||
echo y | $ANDROID_SDK/tools/android update sdk --filter android-19,addon-google_apis-google-19,build-tools-19.1.0 --no-ui;
|
|
||||||
echo y | $ANDROID_SDK/tools/android update sdk -u;
|
|
||||||
fi
|
|
||||||
|
|
||||||
# JavaScript
|
|
||||||
- |
|
|
||||||
if [[ $TARGET = "js" ]]; then (
|
|
||||||
cd javascript &&
|
|
||||||
npm install &&
|
|
||||||
unset CC && unset CXX && unset LINK &&
|
|
||||||
source /tmp/emsdk_portable/emsdk_env.sh &&
|
|
||||||
npm run build:browser
|
|
||||||
) fi
|
|
||||||
|
|
||||||
script:
|
script:
|
||||||
# C
|
- cd website
|
||||||
- |
|
- yarn build
|
||||||
if [[ $TARGET = "c" ]]; then
|
- cd ..
|
||||||
buck test --verbose 0 //:yoga &&
|
|
||||||
buck run --verbose 0 //benchmark:benchmark &&
|
|
||||||
git checkout HEAD^ &&
|
|
||||||
buck run --verbose 0 //benchmark:benchmark
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Java
|
deploy:
|
||||||
- |
|
provider: pages
|
||||||
if [[ $TARGET = "java" ]]; then
|
skip-cleanup: true
|
||||||
buck test --verbose 0 //java:java
|
github-token: $GITHUB_TOKEN
|
||||||
fi
|
fqdn: yogalayout.com
|
||||||
|
local-dir: website/public
|
||||||
# .NET
|
email: yogabot@fb.com
|
||||||
- |
|
name: Yoga-bot
|
||||||
if [[ $TARGET = "net" ]]; then
|
keep-history: true
|
||||||
sh csharp/tests/Facebook.Yoga/test_macos.sh
|
on:
|
||||||
fi
|
branch: master
|
||||||
|
|
||||||
# iOS
|
|
||||||
- |
|
|
||||||
if [[ $TARGET = "ios" ]]; then
|
|
||||||
buck test --verbose 0 //YogaKit:YogaKitTests --config cxx.default_platform=iphonesimulator-x86_64 &&
|
|
||||||
set -o pipefail &&
|
|
||||||
xcodebuild build -workspace YogaKit/YogaKitSample/YogaKitSample.xcworkspace -scheme YogaKitSample -sdk iphonesimulator | xcpretty -c
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Android
|
|
||||||
- |
|
|
||||||
if [[ $TARGET = "android" ]]; then
|
|
||||||
buck build --verbose 0 //android/sample:sample
|
|
||||||
fi
|
|
||||||
|
|
||||||
# JavaScript
|
|
||||||
- |
|
|
||||||
if [[ $TARGET = "js" ]]; then (
|
|
||||||
cd javascript &&
|
|
||||||
npm run test:all &&
|
|
||||||
npm run bench
|
|
||||||
) fi
|
|
||||||
|
36
BUCK
36
BUCK
@@ -1,11 +1,9 @@
|
|||||||
# Copyright (c) 2014-present, Facebook, Inc.
|
# Copyright (c) 2014-present, Facebook, Inc.
|
||||||
# All rights reserved.
|
|
||||||
#
|
#
|
||||||
# This source code is licensed under the BSD-style 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. An additional grant
|
# LICENSE file in the root directory of this source tree.
|
||||||
# of patent rights can be found in the PATENTS file in the same directory.
|
|
||||||
|
|
||||||
include_defs("//YOGA_DEFS")
|
load("//:yoga_defs.bzl", "LIBRARY_COMPILER_FLAGS", "BASE_COMPILER_FLAGS", "GTEST_TARGET", "yoga_dep", "cxx_library", "cxx_test")
|
||||||
|
|
||||||
GMOCK_OVERRIDE_FLAGS = [
|
GMOCK_OVERRIDE_FLAGS = [
|
||||||
# gmock does not mark mocked methods as override, ignore the warnings in tests
|
# gmock does not mark mocked methods as override, ignore the warnings in tests
|
||||||
@@ -13,21 +11,37 @@ GMOCK_OVERRIDE_FLAGS = [
|
|||||||
]
|
]
|
||||||
|
|
||||||
COMPILER_FLAGS = LIBRARY_COMPILER_FLAGS + [
|
COMPILER_FLAGS = LIBRARY_COMPILER_FLAGS + [
|
||||||
"-std=c11",
|
"-std=c++1y",
|
||||||
]
|
]
|
||||||
|
|
||||||
TEST_COMPILER_FLAGS = BASE_COMPILER_FLAGS + GMOCK_OVERRIDE_FLAGS + ["-std=c++11"]
|
TEST_COMPILER_FLAGS = BASE_COMPILER_FLAGS + GMOCK_OVERRIDE_FLAGS + [
|
||||||
|
"-std=c++1y",
|
||||||
|
]
|
||||||
|
|
||||||
cxx_library(
|
cxx_library(
|
||||||
name = "yoga",
|
name = "yoga",
|
||||||
srcs = glob(["yoga/*.c"]),
|
srcs = glob(["yoga/*.cpp"]),
|
||||||
compiler_flags = COMPILER_FLAGS,
|
|
||||||
exported_headers = subdir_glob([("", "yoga/*.h")]),
|
|
||||||
header_namespace = "",
|
header_namespace = "",
|
||||||
|
exported_headers = subdir_glob([("", "yoga/*.h")]),
|
||||||
|
compiler_flags = COMPILER_FLAGS,
|
||||||
soname = "libyogacore.$(ext)",
|
soname = "libyogacore.$(ext)",
|
||||||
tests = [":YogaTests"],
|
tests = [":YogaTests"],
|
||||||
visibility = ["PUBLIC"],
|
visibility = ["PUBLIC"],
|
||||||
deps = [] if THIS_IS_FBOBJC else [
|
deps = [
|
||||||
|
yoga_dep("lib/fb:ndklog"),
|
||||||
|
],
|
||||||
|
)
|
||||||
|
|
||||||
|
cxx_library(
|
||||||
|
name = "yogafastmath",
|
||||||
|
srcs = glob(["yoga/*.cpp"]),
|
||||||
|
header_namespace = "",
|
||||||
|
exported_headers = subdir_glob([("", "yoga/*.h")]),
|
||||||
|
compiler_flags = COMPILER_FLAGS + ["-ffast-math"],
|
||||||
|
soname = "libyogafastmathcore.$(ext)",
|
||||||
|
tests = [":YogaTests"],
|
||||||
|
visibility = ["PUBLIC"],
|
||||||
|
deps = [
|
||||||
yoga_dep("lib/fb:ndklog"),
|
yoga_dep("lib/fb:ndklog"),
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
|
@@ -1,17 +1,15 @@
|
|||||||
#
|
#
|
||||||
# Copyright (c) 2014-present, Facebook, Inc.
|
# Copyright (c) 2014-present, Facebook, Inc.
|
||||||
# All rights reserved.
|
|
||||||
#
|
#
|
||||||
# This source code is licensed under the BSD-style 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. An additional grant
|
# LICENSE file in the root directory of this source tree.
|
||||||
# of patent rights can be found in the PATENTS file in the same directory.
|
|
||||||
#
|
#
|
||||||
|
|
||||||
cmake_minimum_required(VERSION 3.4.1)
|
cmake_minimum_required(VERSION 3.4.1)
|
||||||
|
|
||||||
set(CMAKE_VERBOSE_MAKEFILE on)
|
set(CMAKE_VERBOSE_MAKEFILE on)
|
||||||
|
|
||||||
file(GLOB yogacore_SRC yoga/*.c)
|
file(GLOB yogacore_SRC yoga/*.cpp)
|
||||||
add_library(yogacore STATIC ${yogacore_SRC})
|
add_library(yogacore STATIC ${yogacore_SRC})
|
||||||
|
|
||||||
target_link_libraries(yogacore android log)
|
target_link_libraries(yogacore android log)
|
||||||
|
3
CODE_OF_CONDUCT.md
Normal file
3
CODE_OF_CONDUCT.md
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
# Code of Conduct
|
||||||
|
|
||||||
|
Facebook has adopted a Code of Conduct that we expect project participants to adhere to. Please [read the full text](https://code.facebook.com/pages/876921332402685/open-source-code-of-conduct) so that you can understand what actions will and will not be tolerated.
|
@@ -2,6 +2,10 @@
|
|||||||
We want to make contributing to this project as easy and transparent as
|
We want to make contributing to this project as easy and transparent as
|
||||||
possible.
|
possible.
|
||||||
|
|
||||||
|
## Code of Conduct
|
||||||
|
|
||||||
|
Facebook has adopted a Code of Conduct that we expect project participants to adhere to. Please [read the full text](https://code.facebook.com/pages/876921332402685/open-source-code-of-conduct) so that you can understand what actions will and will not be tolerated.
|
||||||
|
|
||||||
## Pull Requests
|
## Pull Requests
|
||||||
We actively welcome your pull requests.
|
We actively welcome your pull requests.
|
||||||
1. Fork the repo and create your branch from `master`.
|
1. Fork the repo and create your branch from `master`.
|
||||||
@@ -25,9 +29,6 @@ Facebook has a [bounty program](https://www.facebook.com/whitehat/) for the safe
|
|||||||
disclosure of security bugs. In those cases, please go through the process
|
disclosure of security bugs. In those cases, please go through the process
|
||||||
outlined on that page and do not file a public issue.
|
outlined on that page and do not file a public issue.
|
||||||
|
|
||||||
## Coding Style
|
|
||||||
* format.sh
|
|
||||||
|
|
||||||
## License
|
## License
|
||||||
By contributing to yoga, you agree that your contributions will be licensed
|
By contributing to yoga, you agree that your contributions will be licensed
|
||||||
under its BSD license.
|
under its MIT license.
|
||||||
|
43
LICENSE
43
LICENSE
@@ -1,30 +1,21 @@
|
|||||||
BSD License
|
MIT License
|
||||||
|
|
||||||
For yoga software
|
Copyright (c) 2014-present, Facebook, Inc.
|
||||||
|
|
||||||
Copyright (c) 2014-present, Facebook, Inc. All rights reserved.
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
Redistribution and use in source and binary forms, with or without modification,
|
The above copyright notice and this permission notice shall be included in all
|
||||||
are permitted provided that the following conditions are met:
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
* Redistributions of source code must retain the above copyright notice, this
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
list of conditions and the following disclaimer.
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
* Redistributions in binary form must reproduce the above copyright notice,
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
this list of conditions and the following disclaimer in the documentation
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
and/or other materials provided with the distribution.
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
||||||
* Neither the name Facebook nor the names of its contributors may be used to
|
|
||||||
endorse or promote products derived from this software without specific
|
|
||||||
prior written permission.
|
|
||||||
|
|
||||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
|
||||||
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
||||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
||||||
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
|
||||||
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
|
||||||
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
||||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
|
||||||
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
||||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
|
33
PATENTS
33
PATENTS
@@ -1,33 +0,0 @@
|
|||||||
Additional Grant of Patent Rights Version 2
|
|
||||||
|
|
||||||
"Software" means the yoga software distributed by Facebook, Inc.
|
|
||||||
|
|
||||||
Facebook, Inc. (“Facebook”) hereby grants to each recipient of the Software
|
|
||||||
(“you”) a perpetual, worldwide, royalty-free, non-exclusive, irrevocable
|
|
||||||
(subject to the termination provision below) license under any Necessary
|
|
||||||
Claims, to make, have made, use, sell, offer to sell, import, and otherwise
|
|
||||||
transfer the Software. For avoidance of doubt, no license is granted under
|
|
||||||
Facebook's rights in any patent claims that are infringed by (i) modifications
|
|
||||||
to the Software made by you or any third party or (ii) the Software in
|
|
||||||
combination with any software or other technology.
|
|
||||||
|
|
||||||
The license granted hereunder will terminate, automatically and without notice,
|
|
||||||
if you (or any of your subsidiaries, corporate affiliates or agents) initiate
|
|
||||||
directly or indirectly, or take a direct financial interest in, any Patent
|
|
||||||
Assertion: (i) against Facebook or any of its subsidiaries or corporate
|
|
||||||
affiliates, (ii) against any party if such Patent Assertion arises in whole or
|
|
||||||
in part from any software, technology, product or service of Facebook or any of
|
|
||||||
its subsidiaries or corporate affiliates, or (iii) against any party relating
|
|
||||||
to the Software. Notwithstanding the foregoing, if Facebook or any of its
|
|
||||||
subsidiaries or corporate affiliates files a lawsuit alleging patent
|
|
||||||
infringement against you in the first instance, and you respond by filing a
|
|
||||||
patent infringement counterclaim in that lawsuit against that party that is
|
|
||||||
unrelated to the Software, the license granted hereunder will not terminate
|
|
||||||
under section (i) of this paragraph due to such counterclaim.
|
|
||||||
|
|
||||||
A "Necessary Claim" is a claim of a patent owned by Facebook that is
|
|
||||||
necessarily infringed by the Software standing alone.
|
|
||||||
|
|
||||||
A "Patent Assertion" is any lawsuit or other action alleging direct, indirect,
|
|
||||||
or contributory infringement or inducement to infringe any patent, including a
|
|
||||||
cross-claim or counterclaim.
|
|
34
README.md
34
README.md
@@ -1,15 +1,5 @@
|
|||||||
# Yoga [](http://cocoapods.org/pods/YogaKit) [](https://www.npmjs.com/package/yoga-layout) [](https://bintray.com/facebook/maven/com.facebook.yoga%3Ayoga/_latestVersion) [](https://www.nuget.org/packages/Facebook.Yoga)
|
# Yoga [](http://cocoapods.org/pods/YogaKit) [](https://www.npmjs.com/package/yoga-layout) [](https://bintray.com/facebook/maven/com.facebook.yoga%3Ayoga/_latestVersion) [](https://www.nuget.org/packages/Facebook.Yoga)
|
||||||
|
|
||||||
[](https://travis-ci.org/facebook/yoga)
|
|
||||||
[](https://travis-ci.org/facebook/yoga)
|
|
||||||
[](https://travis-ci.org/facebook/yoga)
|
|
||||||
[](https://travis-ci.org/facebook/yoga)
|
|
||||||
[](https://travis-ci.org/facebook/yoga)
|
|
||||||
[](https://travis-ci.org/facebook/yoga)
|
|
||||||
|
|
||||||
[]()
|
|
||||||
[]()
|
|
||||||
|
|
||||||
## Building
|
## Building
|
||||||
Yoga builds with [buck](https://buckbuild.com). Make sure you install buck before contributing to Yoga. Yoga's main implementation is in C, with bindings to supported languages and frameworks. When making changes to Yoga please ensure the changes are also propagated to these bindings when applicable.
|
Yoga builds with [buck](https://buckbuild.com). Make sure you install buck before contributing to Yoga. Yoga's main implementation is in C, with bindings to supported languages and frameworks. When making changes to Yoga please ensure the changes are also propagated to these bindings when applicable.
|
||||||
|
|
||||||
@@ -33,8 +23,26 @@ You may need to install the latest watir-webdriver gem (`gem install watir-webdr
|
|||||||
### .NET
|
### .NET
|
||||||
.NET testing is not integrated in buck yet, you might need to set up .NET testing environment. We have a script which to launch C# test on macOS, `csharp/tests/Facebook.Yoga/test_macos.sh`.
|
.NET testing is not integrated in buck yet, you might need to set up .NET testing environment. We have a script which to launch C# test on macOS, `csharp/tests/Facebook.Yoga/test_macos.sh`.
|
||||||
|
|
||||||
## Code style
|
|
||||||
For the main C implementation of Yoga clang-format is used to ensure a consistent code style. Please run `bash format.sh` before submitting a pull request. For other languages just try to follow the current code style.
|
|
||||||
|
|
||||||
## Benchmarks
|
## Benchmarks
|
||||||
Benchmarks are located in `benchmark/YGBenchmark.c` and can be run with `buck run //benchmark:benchmark`. If you think your change has affected performance please run this before and after your change to validate that nothing has regressed. Benchmarks are run on every commit in CI.
|
Benchmarks are located in `benchmark/YGBenchmark.c` and can be run with `buck run //benchmark:benchmark`. If you think your change has affected performance please run this before and after your change to validate that nothing has regressed. Benchmarks are run on every commit in CI.
|
||||||
|
|
||||||
|
### JavaScript
|
||||||
|
Installing through NPM
|
||||||
|
```sh
|
||||||
|
npm install yoga-layout
|
||||||
|
```
|
||||||
|
By default this will install the library and try to build for all platforms (node, browser asm, and standalone webpack). You may receive errors if you do not have the required platform development tools already installed. To preset the platform you'd like to build for you can set a .npmrc property first.
|
||||||
|
```sh
|
||||||
|
npm config set yoga-layout:platform standalone
|
||||||
|
```
|
||||||
|
This will now only run the standalone webpack build upon install.
|
||||||
|
|
||||||
|
## Build Platforms
|
||||||
|
|
||||||
|
| name | description |
|
||||||
|
|----------------|-------------------------------------------------|
|
||||||
|
| all (default) | Builds all of these platforms. |
|
||||||
|
| browser | Builds asm js browser version. |
|
||||||
|
| node | Builds node js version. |
|
||||||
|
| standalone | Runs webpack. |
|
||||||
|
| none | Does nothing. You can use the prepackaged libs. |
|
||||||
|
46
YOGA_DEFS
46
YOGA_DEFS
@@ -1,46 +0,0 @@
|
|||||||
|
|
||||||
YOGA_ROOTS = ['//...']
|
|
||||||
JAVA_TARGET = '//java:java'
|
|
||||||
INFER_ANNOTATIONS_TARGET = '//lib/infer-annotations:infer-annotations'
|
|
||||||
JSR_305_TARGET = '//lib/jsr-305:jsr-305'
|
|
||||||
JUNIT_TARGET = '//lib/junit:junit'
|
|
||||||
PROGRUARD_ANNOTATIONS_TARGET = '//java/proguard-annotations/src/main/java/com/facebook/proguard/annotations:annotations'
|
|
||||||
SOLOADER_TARGET = '//lib/soloader:soloader'
|
|
||||||
GTEST_TARGET = '//lib/gtest:gtest'
|
|
||||||
JNI_TARGET = '//lib/jni:jni'
|
|
||||||
FBJNI_TARGET = '//lib/fb:fbjni'
|
|
||||||
APPCOMPAT_TARGET = '//lib/appcompat:appcompat'
|
|
||||||
ANDROID_SUPPORT_TARGET = '//lib/android-support:android-support'
|
|
||||||
ANDROID_TARGET = '//android:android'
|
|
||||||
ANDROID_JAVA_TARGET = '//android/src/main/java/com/facebook/yoga/android:android'
|
|
||||||
ANDROID_RES_TARGET = '//android:res'
|
|
||||||
ANDROID_SAMPLE_JAVA_TARGET = '//android/sample/java/com/facebook/samples/yoga:yoga'
|
|
||||||
ANDROID_SAMPLE_RES_TARGET = '//android/sample:res'
|
|
||||||
|
|
||||||
THIS_IS_FBOBJC = False
|
|
||||||
|
|
||||||
CXX_LIBRARY_WHITELIST = [
|
|
||||||
'//:yoga',
|
|
||||||
'//lib/fb:fbjni',
|
|
||||||
'//java:jni',
|
|
||||||
]
|
|
||||||
|
|
||||||
BASE_COMPILER_FLAGS = [
|
|
||||||
'-fno-omit-frame-pointer',
|
|
||||||
'-fexceptions',
|
|
||||||
'-Wall',
|
|
||||||
'-Werror',
|
|
||||||
'-O3',
|
|
||||||
]
|
|
||||||
|
|
||||||
LIBRARY_COMPILER_FLAGS = BASE_COMPILER_FLAGS + [
|
|
||||||
'-fPIC',
|
|
||||||
]
|
|
||||||
|
|
||||||
def yoga_dep(dep):
|
|
||||||
return '//' + dep
|
|
||||||
|
|
||||||
with allow_unsafe_import():
|
|
||||||
import os.path
|
|
||||||
def isdir(filename):
|
|
||||||
return os.path.isdir(filename)
|
|
10
Yoga.podspec
10
Yoga.podspec
@@ -1,7 +1,7 @@
|
|||||||
Pod::Spec.new do |spec|
|
Pod::Spec.new do |spec|
|
||||||
spec.name = 'Yoga'
|
spec.name = 'Yoga'
|
||||||
spec.version = '1.3.0'
|
spec.version = '1.7.0'
|
||||||
spec.license = { :type => 'BSD', :file => "LICENSE" }
|
spec.license = { :type => 'MIT', :file => "LICENSE" }
|
||||||
spec.homepage = 'https://facebook.github.io/yoga/'
|
spec.homepage = 'https://facebook.github.io/yoga/'
|
||||||
spec.documentation_url = 'https://facebook.github.io/yoga/docs/api/c/'
|
spec.documentation_url = 'https://facebook.github.io/yoga/docs/api/c/'
|
||||||
|
|
||||||
@@ -11,7 +11,7 @@ Pod::Spec.new do |spec|
|
|||||||
spec.authors = 'Facebook'
|
spec.authors = 'Facebook'
|
||||||
spec.source = {
|
spec.source = {
|
||||||
:git => 'https://github.com/facebook/yoga.git',
|
:git => 'https://github.com/facebook/yoga.git',
|
||||||
:tag => '1.3.0',
|
:tag => '1.7.0',
|
||||||
}
|
}
|
||||||
|
|
||||||
spec.module_name = 'yoga'
|
spec.module_name = 'yoga'
|
||||||
@@ -21,8 +21,8 @@ Pod::Spec.new do |spec|
|
|||||||
'-fexceptions',
|
'-fexceptions',
|
||||||
'-Wall',
|
'-Wall',
|
||||||
'-Werror',
|
'-Werror',
|
||||||
'-std=c11',
|
'-std=c++1y',
|
||||||
'-fPIC'
|
'-fPIC'
|
||||||
]
|
]
|
||||||
spec.source_files = 'yoga/**/*.{c,h}'
|
spec.source_files = 'yoga/**/*.{c,h,cpp}'
|
||||||
end
|
end
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
podspec = Pod::Spec.new do |spec|
|
podspec = Pod::Spec.new do |spec|
|
||||||
spec.name = 'YogaKit'
|
spec.name = 'YogaKit'
|
||||||
spec.version = '1.3.0'
|
spec.version = '1.7.0'
|
||||||
spec.license = { :type => 'BSD', :file => "LICENSE" }
|
spec.license = { :type => 'MIT', :file => "LICENSE" }
|
||||||
spec.homepage = 'https://facebook.github.io/yoga/'
|
spec.homepage = 'https://facebook.github.io/yoga/'
|
||||||
spec.documentation_url = 'https://facebook.github.io/yoga/docs/api/yogakit/'
|
spec.documentation_url = 'https://facebook.github.io/yoga/docs/api/yogakit/'
|
||||||
|
|
||||||
@@ -11,15 +11,15 @@ podspec = Pod::Spec.new do |spec|
|
|||||||
spec.authors = 'Facebook'
|
spec.authors = 'Facebook'
|
||||||
spec.source = {
|
spec.source = {
|
||||||
:git => 'https://github.com/facebook/yoga.git',
|
:git => 'https://github.com/facebook/yoga.git',
|
||||||
:tag => '1.3.0',
|
:tag => '1.7.0',
|
||||||
}
|
}
|
||||||
|
|
||||||
spec.platform = :ios
|
spec.platform = :ios
|
||||||
spec.ios.deployment_target = '8.0'
|
spec.ios.deployment_target = '8.0'
|
||||||
spec.ios.frameworks = 'UIKit'
|
spec.ios.frameworks = 'UIKit'
|
||||||
|
|
||||||
spec.dependency 'Yoga', '~> 1.3'
|
spec.dependency 'Yoga', '~> 1.7'
|
||||||
spec.source_files = 'YogaKit/Source/*.{h,m}'
|
spec.source_files = 'YogaKit/Source/*.{h,m,swift}'
|
||||||
spec.public_header_files = 'YogaKit/Source/{YGLayout,UIView+Yoga}.h'
|
spec.public_header_files = 'YogaKit/Source/{YGLayout,UIView+Yoga}.h'
|
||||||
spec.private_header_files = 'YogaKit/Source/YGLayout+Private.h'
|
spec.private_header_files = 'YogaKit/Source/YGLayout+Private.h'
|
||||||
end
|
end
|
||||||
|
19
YogaKit/BUCK
19
YogaKit/BUCK
@@ -1,11 +1,9 @@
|
|||||||
# Copyright (c) 2014-present, Facebook, Inc.
|
# Copyright (c) 2014-present, Facebook, Inc.
|
||||||
# All rights reserved.
|
|
||||||
#
|
#
|
||||||
# This source code is licensed under the BSD-style 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. An additional grant
|
# LICENSE file in the root directory of this source tree.
|
||||||
# of patent rights can be found in the PATENTS file in the same directory.
|
|
||||||
|
|
||||||
include_defs("//YOGA_DEFS")
|
load("//:yoga_defs.bzl", "yoga_dep", "apple_library", "apple_test")
|
||||||
|
|
||||||
COMPILER_FLAGS = [
|
COMPILER_FLAGS = [
|
||||||
"-fobjc-arc",
|
"-fobjc-arc",
|
||||||
@@ -30,12 +28,21 @@ COMPILER_FLAGS = [
|
|||||||
apple_library(
|
apple_library(
|
||||||
name = "YogaKit",
|
name = "YogaKit",
|
||||||
srcs = glob(["Source/**/*.m"]),
|
srcs = glob(["Source/**/*.m"]),
|
||||||
|
header_namespace = "",
|
||||||
|
exported_headers = subdir_glob(
|
||||||
|
[
|
||||||
|
("", "Source/**/*.h"),
|
||||||
|
("Source", "**/*.h"),
|
||||||
|
],
|
||||||
|
prefix = "YogaKit",
|
||||||
|
),
|
||||||
compiler_flags = COMPILER_FLAGS,
|
compiler_flags = COMPILER_FLAGS,
|
||||||
exported_headers = glob(["Source/**/*.h"]),
|
|
||||||
frameworks = [
|
frameworks = [
|
||||||
"$SDKROOT/System/Library/Frameworks/Foundation.framework",
|
"$SDKROOT/System/Library/Frameworks/Foundation.framework",
|
||||||
"$SDKROOT/System/Library/Frameworks/UIKit.framework",
|
"$SDKROOT/System/Library/Frameworks/UIKit.framework",
|
||||||
],
|
],
|
||||||
|
header_path_prefix = "",
|
||||||
|
link_whole = True,
|
||||||
visibility = ["PUBLIC"],
|
visibility = ["PUBLIC"],
|
||||||
deps = [
|
deps = [
|
||||||
yoga_dep(":yoga"),
|
yoga_dep(":yoga"),
|
||||||
|
@@ -1,46 +0,0 @@
|
|||||||
# CHANGELOG
|
|
||||||
|
|
||||||
The changelog for `YogaKit`.
|
|
||||||
|
|
||||||
1.2.0 (**upcoming release**)
|
|
||||||
-----
|
|
||||||
|
|
||||||
### Breaking Changes
|
|
||||||
|
|
||||||
- `applyLayout()` has now been changed to `applyLayout(preservingOrigin:)`.
|
|
||||||
|
|
||||||
- Computed properties are no longer reflected in getter's of the affected properties.
|
|
||||||
```swift
|
|
||||||
// OLD
|
|
||||||
view.yoga.margin = 10
|
|
||||||
view.yoga.marginTop // 10
|
|
||||||
view.yoga.marginLeft // 10
|
|
||||||
|
|
||||||
// NEW
|
|
||||||
view.yoga.margin = 10
|
|
||||||
view.yoga.marginTop // 0
|
|
||||||
view.yoga.marginLeft // 0
|
|
||||||
```
|
|
||||||
|
|
||||||
### Enhancements
|
|
||||||
|
|
||||||
- Pixel Rounding now uses `roundf()` instead of `round()`.
|
|
||||||
|
|
||||||
- There is now a method that allows "bulk" updates to YGLayout.
|
|
||||||
```objc
|
|
||||||
[view configureLayoutWithBlock:^(YGLayout *layout) {
|
|
||||||
layout.isEnabled = YES;
|
|
||||||
layout.width = 50;
|
|
||||||
layout.height = 50;
|
|
||||||
}];
|
|
||||||
```
|
|
||||||
|
|
||||||
```swift
|
|
||||||
view.configureLayout { (layout) in
|
|
||||||
layout.isEnabled = true
|
|
||||||
layout.width = 50
|
|
||||||
layout.height = 50
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
- Added new `isDirty` property, and make `markDirty` a little more performant.
|
|
@@ -8,7 +8,7 @@
|
|||||||
YogaKit is available to install via [CocoaPods](https://cocoapods.org/).
|
YogaKit is available to install via [CocoaPods](https://cocoapods.org/).
|
||||||
|
|
||||||
```
|
```
|
||||||
pod 'YogaKit', '~> 1.3'
|
pod 'YogaKit', '~> 1.7'
|
||||||
```
|
```
|
||||||
|
|
||||||
## Getting Started
|
## Getting Started
|
||||||
|
@@ -1,10 +1,8 @@
|
|||||||
/**
|
/**
|
||||||
* Copyright (c) 2014-present, Facebook, Inc.
|
* Copyright (c) 2014-present, Facebook, Inc.
|
||||||
* All rights reserved.
|
|
||||||
*
|
*
|
||||||
* This source code is licensed under the BSD-style 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. An additional grant
|
* LICENSE file in the root directory of this source tree.
|
||||||
* of patent rights can be found in the PATENTS file in the same directory.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#import "YGLayout.h"
|
#import "YGLayout.h"
|
||||||
@@ -12,7 +10,7 @@
|
|||||||
|
|
||||||
NS_ASSUME_NONNULL_BEGIN
|
NS_ASSUME_NONNULL_BEGIN
|
||||||
|
|
||||||
typedef void (^YGLayoutConfigurationBlock)(YGLayout *);
|
typedef void (^YGLayoutConfigurationBlock)(YGLayout *layout);
|
||||||
|
|
||||||
@interface UIView (Yoga)
|
@interface UIView (Yoga)
|
||||||
|
|
||||||
@@ -20,6 +18,10 @@ typedef void (^YGLayoutConfigurationBlock)(YGLayout *);
|
|||||||
The YGLayout that is attached to this view. It is lazily created.
|
The YGLayout that is attached to this view. It is lazily created.
|
||||||
*/
|
*/
|
||||||
@property (nonatomic, readonly, strong) YGLayout *yoga;
|
@property (nonatomic, readonly, strong) YGLayout *yoga;
|
||||||
|
/**
|
||||||
|
Indicates whether or not Yoga is enabled
|
||||||
|
*/
|
||||||
|
@property (nonatomic, readonly, assign) BOOL isYogaEnabled;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
In ObjC land, every time you access `view.yoga.*` you are adding another `objc_msgSend`
|
In ObjC land, every time you access `view.yoga.*` you are adding another `objc_msgSend`
|
||||||
|
@@ -1,10 +1,8 @@
|
|||||||
/**
|
/**
|
||||||
* Copyright (c) 2014-present, Facebook, Inc.
|
* Copyright (c) 2014-present, Facebook, Inc.
|
||||||
* All rights reserved.
|
|
||||||
*
|
*
|
||||||
* This source code is licensed under the BSD-style 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. An additional grant
|
* LICENSE file in the root directory of this source tree.
|
||||||
* of patent rights can be found in the PATENTS file in the same directory.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#import "UIView+Yoga.h"
|
#import "UIView+Yoga.h"
|
||||||
@@ -26,6 +24,11 @@ static const void *kYGYogaAssociatedKey = &kYGYogaAssociatedKey;
|
|||||||
return yoga;
|
return yoga;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (BOOL)isYogaEnabled
|
||||||
|
{
|
||||||
|
return objc_getAssociatedObject(self, kYGYogaAssociatedKey) != nil;
|
||||||
|
}
|
||||||
|
|
||||||
- (void)configureLayoutWithBlock:(YGLayoutConfigurationBlock)block
|
- (void)configureLayoutWithBlock:(YGLayoutConfigurationBlock)block
|
||||||
{
|
{
|
||||||
if (block != nil) {
|
if (block != nil) {
|
||||||
|
@@ -1,10 +1,8 @@
|
|||||||
/**
|
/**
|
||||||
* Copyright (c) 2014-present, Facebook, Inc.
|
* Copyright (c) 2014-present, Facebook, Inc.
|
||||||
* All rights reserved.
|
|
||||||
*
|
*
|
||||||
* This source code is licensed under the BSD-style 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. An additional grant
|
* LICENSE file in the root directory of this source tree.
|
||||||
* of patent rights can be found in the PATENTS file in the same directory.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#import "YGLayout.h"
|
#import "YGLayout.h"
|
||||||
|
@@ -1,24 +1,41 @@
|
|||||||
/**
|
/**
|
||||||
* Copyright (c) 2014-present, Facebook, Inc.
|
* Copyright (c) 2014-present, Facebook, Inc.
|
||||||
* All rights reserved.
|
|
||||||
*
|
*
|
||||||
* This source code is licensed under the BSD-style 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. An additional grant
|
* LICENSE file in the root directory of this source tree.
|
||||||
* of patent rights can be found in the PATENTS file in the same directory.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#import <UIKit/UIKit.h>
|
#import <UIKit/UIKit.h>
|
||||||
#import <yoga/YGEnums.h>
|
#import <yoga/YGEnums.h>
|
||||||
|
#import <yoga/Yoga.h>
|
||||||
|
#import <yoga/YGMacros.h>
|
||||||
|
|
||||||
|
YG_EXTERN_C_BEGIN
|
||||||
|
|
||||||
|
extern YGValue YGPointValue(CGFloat value)
|
||||||
|
NS_SWIFT_UNAVAILABLE("Use the swift Int and FloatingPoint extensions instead");
|
||||||
|
extern YGValue YGPercentValue(CGFloat value)
|
||||||
|
NS_SWIFT_UNAVAILABLE("Use the swift Int and FloatingPoint extensions instead");
|
||||||
|
|
||||||
|
YG_EXTERN_C_END
|
||||||
|
|
||||||
typedef NS_OPTIONS(NSInteger, YGDimensionFlexibility) {
|
typedef NS_OPTIONS(NSInteger, YGDimensionFlexibility) {
|
||||||
YGDimensionFlexibilityFlexibleWidth = 1 << 0,
|
YGDimensionFlexibilityFlexibleWidth = 1 << 0,
|
||||||
YGDimensionFlexibilityFlexibleHeigth = 1 << 1,
|
YGDimensionFlexibilityFlexibleHeight = 1 << 1,
|
||||||
};
|
};
|
||||||
|
|
||||||
@interface YGLayout : NSObject
|
@interface YGLayout : NSObject
|
||||||
|
|
||||||
/**
|
/**
|
||||||
The property that decides if we should include this view when calculating layout. Defaults to YES.
|
Make default init unavailable, as it will not initialise YGNode which is
|
||||||
|
required for the setters and getters of YGLayout's properties to work properly.
|
||||||
|
*/
|
||||||
|
- (instancetype)init
|
||||||
|
__attribute__((unavailable("you are not meant to initialise YGLayout")));
|
||||||
|
|
||||||
|
/**
|
||||||
|
The property that decides if we should include this view when calculating
|
||||||
|
layout. Defaults to YES.
|
||||||
*/
|
*/
|
||||||
@property (nonatomic, readwrite, assign, setter=setIncludedInLayout:) BOOL isIncludedInLayout;
|
@property (nonatomic, readwrite, assign, setter=setIncludedInLayout:) BOOL isIncludedInLayout;
|
||||||
|
|
||||||
@@ -41,34 +58,34 @@ typedef NS_OPTIONS(NSInteger, YGDimensionFlexibility) {
|
|||||||
|
|
||||||
@property (nonatomic, readwrite, assign) CGFloat flexGrow;
|
@property (nonatomic, readwrite, assign) CGFloat flexGrow;
|
||||||
@property (nonatomic, readwrite, assign) CGFloat flexShrink;
|
@property (nonatomic, readwrite, assign) CGFloat flexShrink;
|
||||||
@property (nonatomic, readwrite, assign) CGFloat flexBasis;
|
@property (nonatomic, readwrite, assign) YGValue flexBasis;
|
||||||
|
|
||||||
@property (nonatomic, readwrite, assign) CGFloat left;
|
@property (nonatomic, readwrite, assign) YGValue left;
|
||||||
@property (nonatomic, readwrite, assign) CGFloat top;
|
@property (nonatomic, readwrite, assign) YGValue top;
|
||||||
@property (nonatomic, readwrite, assign) CGFloat right;
|
@property (nonatomic, readwrite, assign) YGValue right;
|
||||||
@property (nonatomic, readwrite, assign) CGFloat bottom;
|
@property (nonatomic, readwrite, assign) YGValue bottom;
|
||||||
@property (nonatomic, readwrite, assign) CGFloat start;
|
@property (nonatomic, readwrite, assign) YGValue start;
|
||||||
@property (nonatomic, readwrite, assign) CGFloat end;
|
@property (nonatomic, readwrite, assign) YGValue end;
|
||||||
|
|
||||||
@property (nonatomic, readwrite, assign) CGFloat marginLeft;
|
@property (nonatomic, readwrite, assign) YGValue marginLeft;
|
||||||
@property (nonatomic, readwrite, assign) CGFloat marginTop;
|
@property (nonatomic, readwrite, assign) YGValue marginTop;
|
||||||
@property (nonatomic, readwrite, assign) CGFloat marginRight;
|
@property (nonatomic, readwrite, assign) YGValue marginRight;
|
||||||
@property (nonatomic, readwrite, assign) CGFloat marginBottom;
|
@property (nonatomic, readwrite, assign) YGValue marginBottom;
|
||||||
@property (nonatomic, readwrite, assign) CGFloat marginStart;
|
@property (nonatomic, readwrite, assign) YGValue marginStart;
|
||||||
@property (nonatomic, readwrite, assign) CGFloat marginEnd;
|
@property (nonatomic, readwrite, assign) YGValue marginEnd;
|
||||||
@property (nonatomic, readwrite, assign) CGFloat marginHorizontal;
|
@property (nonatomic, readwrite, assign) YGValue marginHorizontal;
|
||||||
@property (nonatomic, readwrite, assign) CGFloat marginVertical;
|
@property (nonatomic, readwrite, assign) YGValue marginVertical;
|
||||||
@property (nonatomic, readwrite, assign) CGFloat margin;
|
@property (nonatomic, readwrite, assign) YGValue margin;
|
||||||
|
|
||||||
@property (nonatomic, readwrite, assign) CGFloat paddingLeft;
|
@property (nonatomic, readwrite, assign) YGValue paddingLeft;
|
||||||
@property (nonatomic, readwrite, assign) CGFloat paddingTop;
|
@property (nonatomic, readwrite, assign) YGValue paddingTop;
|
||||||
@property (nonatomic, readwrite, assign) CGFloat paddingRight;
|
@property (nonatomic, readwrite, assign) YGValue paddingRight;
|
||||||
@property (nonatomic, readwrite, assign) CGFloat paddingBottom;
|
@property (nonatomic, readwrite, assign) YGValue paddingBottom;
|
||||||
@property (nonatomic, readwrite, assign) CGFloat paddingStart;
|
@property (nonatomic, readwrite, assign) YGValue paddingStart;
|
||||||
@property (nonatomic, readwrite, assign) CGFloat paddingEnd;
|
@property (nonatomic, readwrite, assign) YGValue paddingEnd;
|
||||||
@property (nonatomic, readwrite, assign) CGFloat paddingHorizontal;
|
@property (nonatomic, readwrite, assign) YGValue paddingHorizontal;
|
||||||
@property (nonatomic, readwrite, assign) CGFloat paddingVertical;
|
@property (nonatomic, readwrite, assign) YGValue paddingVertical;
|
||||||
@property (nonatomic, readwrite, assign) CGFloat padding;
|
@property (nonatomic, readwrite, assign) YGValue padding;
|
||||||
|
|
||||||
@property (nonatomic, readwrite, assign) CGFloat borderLeftWidth;
|
@property (nonatomic, readwrite, assign) CGFloat borderLeftWidth;
|
||||||
@property (nonatomic, readwrite, assign) CGFloat borderTopWidth;
|
@property (nonatomic, readwrite, assign) CGFloat borderTopWidth;
|
||||||
@@ -78,12 +95,12 @@ typedef NS_OPTIONS(NSInteger, YGDimensionFlexibility) {
|
|||||||
@property (nonatomic, readwrite, assign) CGFloat borderEndWidth;
|
@property (nonatomic, readwrite, assign) CGFloat borderEndWidth;
|
||||||
@property (nonatomic, readwrite, assign) CGFloat borderWidth;
|
@property (nonatomic, readwrite, assign) CGFloat borderWidth;
|
||||||
|
|
||||||
@property (nonatomic, readwrite, assign) CGFloat width;
|
@property (nonatomic, readwrite, assign) YGValue width;
|
||||||
@property (nonatomic, readwrite, assign) CGFloat height;
|
@property (nonatomic, readwrite, assign) YGValue height;
|
||||||
@property (nonatomic, readwrite, assign) CGFloat minWidth;
|
@property (nonatomic, readwrite, assign) YGValue minWidth;
|
||||||
@property (nonatomic, readwrite, assign) CGFloat minHeight;
|
@property (nonatomic, readwrite, assign) YGValue minHeight;
|
||||||
@property (nonatomic, readwrite, assign) CGFloat maxWidth;
|
@property (nonatomic, readwrite, assign) YGValue maxWidth;
|
||||||
@property (nonatomic, readwrite, assign) CGFloat maxHeight;
|
@property (nonatomic, readwrite, assign) YGValue maxHeight;
|
||||||
|
|
||||||
// Yoga specific properties, not compatible with flexbox specification
|
// Yoga specific properties, not compatible with flexbox specification
|
||||||
@property (nonatomic, readwrite, assign) CGFloat aspectRatio;
|
@property (nonatomic, readwrite, assign) CGFloat aspectRatio;
|
||||||
@@ -104,7 +121,8 @@ typedef NS_OPTIONS(NSInteger, YGDimensionFlexibility) {
|
|||||||
Perform a layout calculation and update the frames of the views in the hierarchy with the results.
|
Perform a layout calculation and update the frames of the views in the hierarchy with the results.
|
||||||
If the origin is not preserved, the root view's layout results will applied from {0,0}.
|
If the origin is not preserved, the root view's layout results will applied from {0,0}.
|
||||||
*/
|
*/
|
||||||
- (void)applyLayoutPreservingOrigin:(BOOL)preserveOrigin dimensionFlexibility:(YGDimensionFlexibility)dimensionFlexibility
|
- (void)applyLayoutPreservingOrigin:(BOOL)preserveOrigin
|
||||||
|
dimensionFlexibility:(YGDimensionFlexibility)dimensionFlexibility
|
||||||
NS_SWIFT_NAME(applyLayout(preservingOrigin:dimensionFlexibility:));
|
NS_SWIFT_NAME(applyLayout(preservingOrigin:dimensionFlexibility:));
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -113,6 +131,12 @@ typedef NS_OPTIONS(NSInteger, YGDimensionFlexibility) {
|
|||||||
*/
|
*/
|
||||||
@property (nonatomic, readonly, assign) CGSize intrinsicSize;
|
@property (nonatomic, readonly, assign) CGSize intrinsicSize;
|
||||||
|
|
||||||
|
/**
|
||||||
|
Returns the size of the view based on provided constraints. Pass NaN for an unconstrained dimension.
|
||||||
|
*/
|
||||||
|
- (CGSize)calculateLayoutWithSize:(CGSize)size
|
||||||
|
NS_SWIFT_NAME(calculateLayout(with:));
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Returns the number of children that are using Flexbox.
|
Returns the number of children that are using Flexbox.
|
||||||
*/
|
*/
|
||||||
|
@@ -1,10 +1,8 @@
|
|||||||
/**
|
/**
|
||||||
* Copyright (c) 2014-present, Facebook, Inc.
|
* Copyright (c) 2014-present, Facebook, Inc.
|
||||||
* All rights reserved.
|
|
||||||
*
|
*
|
||||||
* This source code is licensed under the BSD-style 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. An additional grant
|
* LICENSE file in the root directory of this source tree.
|
||||||
* of patent rights can be found in the PATENTS file in the same directory.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#import "YGLayout+Private.h"
|
#import "YGLayout+Private.h"
|
||||||
@@ -22,23 +20,53 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
#define YG_VALUE_PROPERTY(lowercased_name, capitalized_name) \
|
#define YG_VALUE_PROPERTY(lowercased_name, capitalized_name) \
|
||||||
- (CGFloat)lowercased_name \
|
- (YGValue)lowercased_name \
|
||||||
{ \
|
{ \
|
||||||
YGValue value = YGNodeStyleGet##capitalized_name(self.node); \
|
return YGNodeStyleGet##capitalized_name(self.node); \
|
||||||
if (value.unit == YGUnitPoint) { \
|
|
||||||
return value.value; \
|
|
||||||
} else { \
|
|
||||||
return YGUndefined; \
|
|
||||||
} \
|
|
||||||
} \
|
} \
|
||||||
\
|
\
|
||||||
- (void)set##capitalized_name:(CGFloat)lowercased_name \
|
- (void)set##capitalized_name:(YGValue)lowercased_name \
|
||||||
{ \
|
{ \
|
||||||
YGNodeStyleSet##capitalized_name(self.node, lowercased_name); \
|
switch (lowercased_name.unit) { \
|
||||||
|
case YGUnitUndefined: \
|
||||||
|
YGNodeStyleSet##capitalized_name(self.node, lowercased_name.value); \
|
||||||
|
break; \
|
||||||
|
case YGUnitPoint: \
|
||||||
|
YGNodeStyleSet##capitalized_name(self.node, lowercased_name.value); \
|
||||||
|
break; \
|
||||||
|
case YGUnitPercent: \
|
||||||
|
YGNodeStyleSet##capitalized_name##Percent(self.node, lowercased_name.value); \
|
||||||
|
break; \
|
||||||
|
default: \
|
||||||
|
NSAssert(NO, @"Not implemented"); \
|
||||||
|
} \
|
||||||
}
|
}
|
||||||
|
|
||||||
#define YG_EDGE_PROPERTY_GETTER(lowercased_name, capitalized_name, property, edge) \
|
#define YG_AUTO_VALUE_PROPERTY(lowercased_name, capitalized_name) \
|
||||||
- (CGFloat)lowercased_name \
|
- (YGValue)lowercased_name \
|
||||||
|
{ \
|
||||||
|
return YGNodeStyleGet##capitalized_name(self.node); \
|
||||||
|
} \
|
||||||
|
\
|
||||||
|
- (void)set##capitalized_name:(YGValue)lowercased_name \
|
||||||
|
{ \
|
||||||
|
switch (lowercased_name.unit) { \
|
||||||
|
case YGUnitPoint: \
|
||||||
|
YGNodeStyleSet##capitalized_name(self.node, lowercased_name.value); \
|
||||||
|
break; \
|
||||||
|
case YGUnitPercent: \
|
||||||
|
YGNodeStyleSet##capitalized_name##Percent(self.node, lowercased_name.value); \
|
||||||
|
break; \
|
||||||
|
case YGUnitAuto: \
|
||||||
|
YGNodeStyleSet##capitalized_name##Auto(self.node); \
|
||||||
|
break; \
|
||||||
|
default: \
|
||||||
|
NSAssert(NO, @"Not implemented"); \
|
||||||
|
} \
|
||||||
|
}
|
||||||
|
|
||||||
|
#define YG_EDGE_PROPERTY_GETTER(type, lowercased_name, capitalized_name, property, edge) \
|
||||||
|
- (type)lowercased_name \
|
||||||
{ \
|
{ \
|
||||||
return YGNodeStyleGet##property(self.node, edge); \
|
return YGNodeStyleGet##property(self.node, edge); \
|
||||||
}
|
}
|
||||||
@@ -50,28 +78,29 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
#define YG_EDGE_PROPERTY(lowercased_name, capitalized_name, property, edge) \
|
#define YG_EDGE_PROPERTY(lowercased_name, capitalized_name, property, edge) \
|
||||||
YG_EDGE_PROPERTY_GETTER(lowercased_name, capitalized_name, property, edge) \
|
YG_EDGE_PROPERTY_GETTER(CGFloat, lowercased_name, capitalized_name, property, edge) \
|
||||||
YG_EDGE_PROPERTY_SETTER(lowercased_name, capitalized_name, property, edge)
|
YG_EDGE_PROPERTY_SETTER(lowercased_name, capitalized_name, property, edge)
|
||||||
|
|
||||||
#define YG_VALUE_EDGE_PROPERTY_GETTER(objc_lowercased_name, objc_capitalized_name, c_name, edge) \
|
#define YG_VALUE_EDGE_PROPERTY_SETTER(objc_lowercased_name, objc_capitalized_name, c_name, edge) \
|
||||||
- (CGFloat)objc_lowercased_name \
|
- (void)set##objc_capitalized_name:(YGValue)objc_lowercased_name \
|
||||||
{ \
|
{ \
|
||||||
YGValue value = YGNodeStyleGet##c_name(self.node, edge); \
|
switch (objc_lowercased_name.unit) { \
|
||||||
if (value.unit == YGUnitPoint) { \
|
case YGUnitUndefined: \
|
||||||
return value.value; \
|
YGNodeStyleSet##c_name(self.node, edge, objc_lowercased_name.value); \
|
||||||
} else { \
|
break; \
|
||||||
return YGUndefined; \
|
case YGUnitPoint: \
|
||||||
|
YGNodeStyleSet##c_name(self.node, edge, objc_lowercased_name.value); \
|
||||||
|
break; \
|
||||||
|
case YGUnitPercent: \
|
||||||
|
YGNodeStyleSet##c_name##Percent(self.node, edge, objc_lowercased_name.value); \
|
||||||
|
break; \
|
||||||
|
default: \
|
||||||
|
NSAssert(NO, @"Not implemented"); \
|
||||||
} \
|
} \
|
||||||
}
|
}
|
||||||
|
|
||||||
#define YG_VALUE_EDGE_PROPERTY_SETTER(objc_lowercased_name, objc_capitalized_name, c_name, edge) \
|
|
||||||
- (void)set##objc_capitalized_name:(CGFloat)objc_lowercased_name \
|
|
||||||
{ \
|
|
||||||
YGNodeStyleSet##c_name(self.node, edge, objc_lowercased_name); \
|
|
||||||
}
|
|
||||||
|
|
||||||
#define YG_VALUE_EDGE_PROPERTY(lowercased_name, capitalized_name, property, edge) \
|
#define YG_VALUE_EDGE_PROPERTY(lowercased_name, capitalized_name, property, edge) \
|
||||||
YG_VALUE_EDGE_PROPERTY_GETTER(lowercased_name, capitalized_name, property, edge) \
|
YG_EDGE_PROPERTY_GETTER(YGValue, lowercased_name, capitalized_name, property, edge) \
|
||||||
YG_VALUE_EDGE_PROPERTY_SETTER(lowercased_name, capitalized_name, property, edge)
|
YG_VALUE_EDGE_PROPERTY_SETTER(lowercased_name, capitalized_name, property, edge)
|
||||||
|
|
||||||
#define YG_VALUE_EDGES_PROPERTIES(lowercased_name, capitalized_name) \
|
#define YG_VALUE_EDGES_PROPERTIES(lowercased_name, capitalized_name) \
|
||||||
@@ -85,6 +114,16 @@ YG_VALUE_EDGE_PROPERTY(lowercased_name##Horizontal, capitalized_name##Horizontal
|
|||||||
YG_VALUE_EDGE_PROPERTY(lowercased_name##Vertical, capitalized_name##Vertical, capitalized_name, YGEdgeVertical) \
|
YG_VALUE_EDGE_PROPERTY(lowercased_name##Vertical, capitalized_name##Vertical, capitalized_name, YGEdgeVertical) \
|
||||||
YG_VALUE_EDGE_PROPERTY(lowercased_name, capitalized_name, capitalized_name, YGEdgeAll)
|
YG_VALUE_EDGE_PROPERTY(lowercased_name, capitalized_name, capitalized_name, YGEdgeAll)
|
||||||
|
|
||||||
|
YGValue YGPointValue(CGFloat value)
|
||||||
|
{
|
||||||
|
return (YGValue) { .value = value, .unit = YGUnitPoint };
|
||||||
|
}
|
||||||
|
|
||||||
|
YGValue YGPercentValue(CGFloat value)
|
||||||
|
{
|
||||||
|
return (YGValue) { .value = value, .unit = YGUnitPercent };
|
||||||
|
}
|
||||||
|
|
||||||
static YGConfigRef globalConfig;
|
static YGConfigRef globalConfig;
|
||||||
|
|
||||||
@interface YGLayout ()
|
@interface YGLayout ()
|
||||||
@@ -103,6 +142,7 @@ static YGConfigRef globalConfig;
|
|||||||
{
|
{
|
||||||
globalConfig = YGConfigNew();
|
globalConfig = YGConfigNew();
|
||||||
YGConfigSetExperimentalFeatureEnabled(globalConfig, YGExperimentalFeatureWebFlexBasis, true);
|
YGConfigSetExperimentalFeatureEnabled(globalConfig, YGExperimentalFeatureWebFlexBasis, true);
|
||||||
|
YGConfigSetPointScaleFactor(globalConfig, [UIScreen mainScreen].scale);
|
||||||
}
|
}
|
||||||
|
|
||||||
- (instancetype)initWithView:(UIView*)view
|
- (instancetype)initWithView:(UIView*)view
|
||||||
@@ -189,7 +229,7 @@ YG_PROPERTY(YGDisplay, display, Display)
|
|||||||
|
|
||||||
YG_PROPERTY(CGFloat, flexGrow, FlexGrow)
|
YG_PROPERTY(CGFloat, flexGrow, FlexGrow)
|
||||||
YG_PROPERTY(CGFloat, flexShrink, FlexShrink)
|
YG_PROPERTY(CGFloat, flexShrink, FlexShrink)
|
||||||
YG_VALUE_PROPERTY(flexBasis, FlexBasis)
|
YG_AUTO_VALUE_PROPERTY(flexBasis, FlexBasis)
|
||||||
|
|
||||||
YG_VALUE_EDGE_PROPERTY(left, Left, Position, YGEdgeLeft)
|
YG_VALUE_EDGE_PROPERTY(left, Left, Position, YGEdgeLeft)
|
||||||
YG_VALUE_EDGE_PROPERTY(top, Top, Position, YGEdgeTop)
|
YG_VALUE_EDGE_PROPERTY(top, Top, Position, YGEdgeTop)
|
||||||
@@ -208,8 +248,8 @@ YG_EDGE_PROPERTY(borderStartWidth, BorderStartWidth, Border, YGEdgeStart)
|
|||||||
YG_EDGE_PROPERTY(borderEndWidth, BorderEndWidth, Border, YGEdgeEnd)
|
YG_EDGE_PROPERTY(borderEndWidth, BorderEndWidth, Border, YGEdgeEnd)
|
||||||
YG_EDGE_PROPERTY(borderWidth, BorderWidth, Border, YGEdgeAll)
|
YG_EDGE_PROPERTY(borderWidth, BorderWidth, Border, YGEdgeAll)
|
||||||
|
|
||||||
YG_VALUE_PROPERTY(width, Width)
|
YG_AUTO_VALUE_PROPERTY(width, Width)
|
||||||
YG_VALUE_PROPERTY(height, Height)
|
YG_AUTO_VALUE_PROPERTY(height, Height)
|
||||||
YG_VALUE_PROPERTY(minWidth, MinWidth)
|
YG_VALUE_PROPERTY(minWidth, MinWidth)
|
||||||
YG_VALUE_PROPERTY(minHeight, MinHeight)
|
YG_VALUE_PROPERTY(minHeight, MinHeight)
|
||||||
YG_VALUE_PROPERTY(maxWidth, MaxWidth)
|
YG_VALUE_PROPERTY(maxWidth, MaxWidth)
|
||||||
@@ -241,11 +281,11 @@ YG_PROPERTY(CGFloat, aspectRatio, AspectRatio)
|
|||||||
if (dimensionFlexibility & YGDimensionFlexibilityFlexibleWidth) {
|
if (dimensionFlexibility & YGDimensionFlexibilityFlexibleWidth) {
|
||||||
size.width = YGUndefined;
|
size.width = YGUndefined;
|
||||||
}
|
}
|
||||||
if (dimensionFlexibility & YGDimensionFlexibilityFlexibleHeigth) {
|
if (dimensionFlexibility & YGDimensionFlexibilityFlexibleHeight) {
|
||||||
size.height = YGUndefined;
|
size.height = YGUndefined;
|
||||||
}
|
}
|
||||||
[self calculateLayoutWithSize:size];
|
[self calculateLayoutWithSize:size];
|
||||||
YGApplyLayoutToViewHierarchy(self.view, NO);
|
YGApplyLayoutToViewHierarchy(self.view, preserveOrigin);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -258,8 +298,6 @@ YG_PROPERTY(CGFloat, aspectRatio, AspectRatio)
|
|||||||
return [self calculateLayoutWithSize:constrainedSize];
|
return [self calculateLayoutWithSize:constrainedSize];
|
||||||
}
|
}
|
||||||
|
|
||||||
#pragma mark - Private
|
|
||||||
|
|
||||||
- (CGSize)calculateLayoutWithSize:(CGSize)size
|
- (CGSize)calculateLayoutWithSize:(CGSize)size
|
||||||
{
|
{
|
||||||
NSAssert([NSThread isMainThread], @"Yoga calculation must be done on main.");
|
NSAssert([NSThread isMainThread], @"Yoga calculation must be done on main.");
|
||||||
@@ -280,6 +318,8 @@ YG_PROPERTY(CGFloat, aspectRatio, AspectRatio)
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#pragma mark - Private
|
||||||
|
|
||||||
static YGSize YGMeasureView(
|
static YGSize YGMeasureView(
|
||||||
YGNodeRef node,
|
YGNodeRef node,
|
||||||
float width,
|
float width,
|
||||||
@@ -348,7 +388,7 @@ static void YGAttachNodesFromViewHierachy(UIView *const view)
|
|||||||
|
|
||||||
NSMutableArray<UIView *> *subviewsToInclude = [[NSMutableArray alloc] initWithCapacity:view.subviews.count];
|
NSMutableArray<UIView *> *subviewsToInclude = [[NSMutableArray alloc] initWithCapacity:view.subviews.count];
|
||||||
for (UIView *subview in view.subviews) {
|
for (UIView *subview in view.subviews) {
|
||||||
if (subview.yoga.isIncludedInLayout) {
|
if (subview.yoga.isEnabled && subview.yoga.isIncludedInLayout) {
|
||||||
[subviewsToInclude addObject:subview];
|
[subviewsToInclude addObject:subview];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
44
YogaKit/Source/YGLayoutExtensions.swift
Normal file
44
YogaKit/Source/YGLayoutExtensions.swift
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
/**
|
||||||
|
* Copyright (c) 2014-present, Facebook, Inc.
|
||||||
|
*
|
||||||
|
* This source code is licensed under the MIT license found in the
|
||||||
|
* LICENSE file in the root directory of this source tree.
|
||||||
|
*/
|
||||||
|
|
||||||
|
postfix operator %
|
||||||
|
|
||||||
|
extension Int {
|
||||||
|
public static postfix func %(value: Int) -> YGValue {
|
||||||
|
return YGValue(value: Float(value), unit: .percent)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
extension Float {
|
||||||
|
public static postfix func %(value: Float) -> YGValue {
|
||||||
|
return YGValue(value: value, unit: .percent)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
extension CGFloat {
|
||||||
|
public static postfix func %(value: CGFloat) -> YGValue {
|
||||||
|
return YGValue(value: Float(value), unit: .percent)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
extension YGValue : ExpressibleByIntegerLiteral, ExpressibleByFloatLiteral {
|
||||||
|
public init(integerLiteral value: Int) {
|
||||||
|
self = YGValue(value: Float(value), unit: .point)
|
||||||
|
}
|
||||||
|
|
||||||
|
public init(floatLiteral value: Float) {
|
||||||
|
self = YGValue(value: value, unit: .point)
|
||||||
|
}
|
||||||
|
|
||||||
|
public init(_ value: Float) {
|
||||||
|
self = YGValue(value: value, unit: .point)
|
||||||
|
}
|
||||||
|
|
||||||
|
public init(_ value: CGFloat) {
|
||||||
|
self = YGValue(value: Float(value), unit: .point)
|
||||||
|
}
|
||||||
|
}
|
@@ -1,10 +1,8 @@
|
|||||||
/**
|
/**
|
||||||
* Copyright (c) 2014-present, Facebook, Inc.
|
* Copyright (c) 2014-present, Facebook, Inc.
|
||||||
* All rights reserved.
|
|
||||||
*
|
*
|
||||||
* This source code is licensed under the BSD-style 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. An additional grant
|
* LICENSE file in the root directory of this source tree.
|
||||||
* of patent rights can be found in the PATENTS file in the same directory.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#import <XCTest/XCTest.h>
|
#import <XCTest/XCTest.h>
|
||||||
@@ -31,11 +29,11 @@
|
|||||||
[view configureLayoutWithBlock:^(YGLayout *layout){
|
[view configureLayoutWithBlock:^(YGLayout *layout){
|
||||||
XCTAssertNotNil(layout);
|
XCTAssertNotNil(layout);
|
||||||
layout.isEnabled = YES;
|
layout.isEnabled = YES;
|
||||||
layout.width = 25;
|
layout.width = YGPointValue(25);
|
||||||
}];
|
}];
|
||||||
|
|
||||||
XCTAssertTrue(view.yoga.isEnabled);
|
XCTAssertTrue(view.yoga.isEnabled);
|
||||||
XCTAssertEqual(view.yoga.width, 25);
|
XCTAssertEqual(view.yoga.width.value, 25);
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)testNodesAreDeallocedWithSingleView
|
- (void)testNodesAreDeallocedWithSingleView
|
||||||
@@ -44,7 +42,7 @@
|
|||||||
|
|
||||||
@autoreleasepool {
|
@autoreleasepool {
|
||||||
UIView *view = [[UIView alloc] initWithFrame:CGRectZero];
|
UIView *view = [[UIView alloc] initWithFrame:CGRectZero];
|
||||||
view.yoga.flexBasis = 1;
|
view.yoga.flexBasis = YGPointValue(1);
|
||||||
|
|
||||||
layoutRef = view.yoga;
|
layoutRef = view.yoga;
|
||||||
XCTAssertNotNil(layoutRef);
|
XCTAssertNotNil(layoutRef);
|
||||||
@@ -63,11 +61,11 @@
|
|||||||
@autoreleasepool {
|
@autoreleasepool {
|
||||||
UIView *view = [[UIView alloc] initWithFrame:CGRectZero];
|
UIView *view = [[UIView alloc] initWithFrame:CGRectZero];
|
||||||
topLayout = view.yoga;
|
topLayout = view.yoga;
|
||||||
topLayout.flexBasis = 1;
|
topLayout.flexBasis = YGPointValue(1);
|
||||||
|
|
||||||
UIView *subview = [[UIView alloc] initWithFrame:CGRectZero];
|
UIView *subview = [[UIView alloc] initWithFrame:CGRectZero];
|
||||||
subviewLayout = subview.yoga;
|
subviewLayout = subview.yoga;
|
||||||
subviewLayout.flexBasis = 1;
|
subviewLayout.flexBasis = YGPointValue(1);
|
||||||
|
|
||||||
view = nil;
|
view = nil;
|
||||||
}
|
}
|
||||||
@@ -113,9 +111,9 @@
|
|||||||
|
|
||||||
UIView *textBadgeView = [[UIView alloc] initWithFrame:CGRectZero];
|
UIView *textBadgeView = [[UIView alloc] initWithFrame:CGRectZero];
|
||||||
textBadgeView.yoga.isEnabled = YES;
|
textBadgeView.yoga.isEnabled = YES;
|
||||||
textBadgeView.yoga.margin = 0;
|
textBadgeView.yoga.margin = YGPointValue(0);
|
||||||
textBadgeView.yoga.width = 10;
|
textBadgeView.yoga.width = YGPointValue(10);
|
||||||
textBadgeView.yoga.height = 10;
|
textBadgeView.yoga.height = YGPointValue(10);
|
||||||
[container addSubview:textBadgeView];
|
[container addSubview:textBadgeView];
|
||||||
|
|
||||||
const CGSize textBadgeViewSize = textBadgeView.yoga.intrinsicSize;
|
const CGSize textBadgeViewSize = textBadgeView.yoga.intrinsicSize;
|
||||||
@@ -136,14 +134,14 @@
|
|||||||
|
|
||||||
UIView *view = [[UIView alloc] initWithFrame:CGRectZero];
|
UIView *view = [[UIView alloc] initWithFrame:CGRectZero];
|
||||||
view.yoga.isEnabled = YES;
|
view.yoga.isEnabled = YES;
|
||||||
view.yoga.flexBasis = 0;
|
view.yoga.flexBasis = YGPointValue(0);
|
||||||
view.yoga.flexGrow = 1;
|
view.yoga.flexGrow = 1;
|
||||||
[container addSubview:view];
|
[container addSubview:view];
|
||||||
|
|
||||||
UIView *view2 = [[UIView alloc] initWithFrame:CGRectZero];
|
UIView *view2 = [[UIView alloc] initWithFrame:CGRectZero];
|
||||||
view2.yoga.isEnabled = YES;
|
view2.yoga.isEnabled = YES;
|
||||||
view2.yoga.marginTop = 25;
|
view2.yoga.marginTop = YGPointValue(25);
|
||||||
view2.yoga.flexBasis = 0;
|
view2.yoga.flexBasis = YGPointValue(0);
|
||||||
view2.yoga.flexGrow = 1;
|
view2.yoga.flexGrow = 1;
|
||||||
[container addSubview:view2];
|
[container addSubview:view2];
|
||||||
|
|
||||||
@@ -161,8 +159,8 @@
|
|||||||
|
|
||||||
UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
|
UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
|
||||||
view.yoga.isEnabled = YES;
|
view.yoga.isEnabled = YES;
|
||||||
view.yoga.width = 100;
|
view.yoga.width = YGPointValue(100);
|
||||||
view.yoga.height = 100;
|
view.yoga.height = YGPointValue(100);
|
||||||
[container addSubview:view];
|
[container addSubview:view];
|
||||||
|
|
||||||
[container.yoga applyLayoutPreservingOrigin:YES dimensionFlexibility:YGDimensionFlexibilityFlexibleWidth];
|
[container.yoga applyLayoutPreservingOrigin:YES dimensionFlexibility:YGDimensionFlexibilityFlexibleWidth];
|
||||||
@@ -177,11 +175,13 @@
|
|||||||
|
|
||||||
UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
|
UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
|
||||||
view.yoga.isEnabled = YES;
|
view.yoga.isEnabled = YES;
|
||||||
view.yoga.width = 100;
|
view.yoga.width = YGPointValue(100);
|
||||||
view.yoga.height = 100;
|
view.yoga.height = YGPointValue(100);
|
||||||
[container addSubview:view];
|
[container addSubview:view];
|
||||||
|
|
||||||
[container.yoga applyLayoutPreservingOrigin:YES dimensionFlexibility:YGDimensionFlexibilityFlexibleHeigth];
|
[container.yoga
|
||||||
|
applyLayoutPreservingOrigin:YES
|
||||||
|
dimensionFlexibility:YGDimensionFlexibilityFlexibleHeight];
|
||||||
XCTAssertEqual(200, container.frame.size.width);
|
XCTAssertEqual(200, container.frame.size.width);
|
||||||
XCTAssertEqual(100, container.frame.size.height);
|
XCTAssertEqual(100, container.frame.size.height);
|
||||||
}
|
}
|
||||||
@@ -193,11 +193,14 @@
|
|||||||
|
|
||||||
UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
|
UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
|
||||||
view.yoga.isEnabled = YES;
|
view.yoga.isEnabled = YES;
|
||||||
view.yoga.width = 100;
|
view.yoga.width = YGPointValue(100);
|
||||||
view.yoga.height = 100;
|
view.yoga.height = YGPointValue(100);
|
||||||
[container addSubview:view];
|
[container addSubview:view];
|
||||||
|
|
||||||
[container.yoga applyLayoutPreservingOrigin:YES dimensionFlexibility:YGDimensionFlexibilityFlexibleWidth | YGDimensionFlexibilityFlexibleHeigth];
|
[container.yoga
|
||||||
|
applyLayoutPreservingOrigin:YES
|
||||||
|
dimensionFlexibility:YGDimensionFlexibilityFlexibleWidth |
|
||||||
|
YGDimensionFlexibilityFlexibleHeight];
|
||||||
XCTAssertEqual(100, container.frame.size.width);
|
XCTAssertEqual(100, container.frame.size.width);
|
||||||
XCTAssertEqual(100, container.frame.size.height);
|
XCTAssertEqual(100, container.frame.size.height);
|
||||||
}
|
}
|
||||||
@@ -437,12 +440,12 @@
|
|||||||
XCTAssertTrue(view.yoga.isLeaf);
|
XCTAssertTrue(view.yoga.isLeaf);
|
||||||
|
|
||||||
view.yoga.isEnabled = YES;
|
view.yoga.isEnabled = YES;
|
||||||
view.yoga.width = 50.0;
|
view.yoga.width = YGPointValue(50);
|
||||||
XCTAssertTrue(view.yoga.isLeaf);
|
XCTAssertTrue(view.yoga.isLeaf);
|
||||||
|
|
||||||
UIView *const subview = view.subviews[0];
|
UIView *const subview = view.subviews[0];
|
||||||
subview.yoga.isEnabled = YES;
|
subview.yoga.isEnabled = YES;
|
||||||
subview.yoga.width = 50.0;
|
subview.yoga.width = YGPointValue(50);
|
||||||
XCTAssertFalse(view.yoga.isLeaf);
|
XCTAssertFalse(view.yoga.isLeaf);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -454,14 +457,14 @@
|
|||||||
|
|
||||||
UIView *subview1 = [[UIView alloc] initWithFrame:CGRectZero];
|
UIView *subview1 = [[UIView alloc] initWithFrame:CGRectZero];
|
||||||
subview1.yoga.isEnabled = YES;
|
subview1.yoga.isEnabled = YES;
|
||||||
subview1.yoga.width = 100;
|
subview1.yoga.width = YGPointValue(100);
|
||||||
subview1.yoga.flexGrow = 1;
|
subview1.yoga.flexGrow = 1;
|
||||||
subview1.yoga.flexDirection = YGFlexDirectionColumn;
|
subview1.yoga.flexDirection = YGFlexDirectionColumn;
|
||||||
[container addSubview:subview1];
|
[container addSubview:subview1];
|
||||||
|
|
||||||
UIView *subview2 = [[UIView alloc] initWithFrame:CGRectZero];
|
UIView *subview2 = [[UIView alloc] initWithFrame:CGRectZero];
|
||||||
subview2.yoga.isEnabled = YES;
|
subview2.yoga.isEnabled = YES;
|
||||||
subview2.yoga.width = 150;
|
subview2.yoga.width = YGPointValue(150);
|
||||||
subview2.yoga.flexGrow = 1;
|
subview2.yoga.flexGrow = 1;
|
||||||
subview2.yoga.flexDirection = YGFlexDirectionColumn;
|
subview2.yoga.flexDirection = YGFlexDirectionColumn;
|
||||||
[container addSubview:subview2];
|
[container addSubview:subview2];
|
||||||
@@ -522,155 +525,195 @@
|
|||||||
[container.yoga applyLayoutPreservingOrigin:YES];
|
[container.yoga applyLayoutPreservingOrigin:YES];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (void)testPointPercent
|
||||||
|
{
|
||||||
|
XCTAssertEqual(YGPointValue(1).value, 1);
|
||||||
|
XCTAssertEqual(YGPointValue(1).unit, YGUnitPoint);
|
||||||
|
XCTAssertEqual(YGPercentValue(2).value, 2);
|
||||||
|
XCTAssertEqual(YGPercentValue(2).unit, YGUnitPercent);
|
||||||
|
}
|
||||||
|
|
||||||
- (void)testPositionalPropertiesWork
|
- (void)testPositionalPropertiesWork
|
||||||
{
|
{
|
||||||
UIView *view = [[UIView alloc] initWithFrame:CGRectZero];
|
UIView *view = [[UIView alloc] initWithFrame:CGRectZero];
|
||||||
|
|
||||||
view.yoga.left = 1;
|
view.yoga.left = YGPointValue(1);
|
||||||
XCTAssertEqual(YGNodeStyleGetPosition(view.yoga.node, YGEdgeLeft).value, 1);
|
XCTAssertEqual(view.yoga.left.value, 1);
|
||||||
XCTAssertEqual(YGNodeStyleGetPosition(view.yoga.node, YGEdgeLeft).unit, YGUnitPoint);
|
XCTAssertEqual(view.yoga.left.unit, YGUnitPoint);
|
||||||
XCTAssertEqual(view.yoga.left, 1);
|
view.yoga.left = YGPercentValue(2);
|
||||||
|
XCTAssertEqual(view.yoga.left.value, 2);
|
||||||
|
XCTAssertEqual(view.yoga.left.unit, YGUnitPercent);
|
||||||
|
|
||||||
view.yoga.right = 2;
|
view.yoga.right = YGPointValue(3);
|
||||||
XCTAssertEqual(YGNodeStyleGetPosition(view.yoga.node, YGEdgeRight).value, 2);
|
XCTAssertEqual(view.yoga.right.value, 3);
|
||||||
XCTAssertEqual(YGNodeStyleGetPosition(view.yoga.node, YGEdgeRight).unit, YGUnitPoint);
|
XCTAssertEqual(view.yoga.right.unit, YGUnitPoint);
|
||||||
XCTAssertEqual(view.yoga.right, 2);
|
view.yoga.right = YGPercentValue(4);
|
||||||
|
XCTAssertEqual(view.yoga.right.value, 4);
|
||||||
|
XCTAssertEqual(view.yoga.right.unit, YGUnitPercent);
|
||||||
|
|
||||||
view.yoga.top = 3;
|
view.yoga.top = YGPointValue(5);
|
||||||
XCTAssertEqual(YGNodeStyleGetPosition(view.yoga.node, YGEdgeTop).value, 3);
|
XCTAssertEqual(view.yoga.top.value, 5);
|
||||||
XCTAssertEqual(YGNodeStyleGetPosition(view.yoga.node, YGEdgeTop).unit, YGUnitPoint);
|
XCTAssertEqual(view.yoga.top.unit, YGUnitPoint);
|
||||||
XCTAssertEqual(view.yoga.top, 3);
|
view.yoga.top = YGPercentValue(6);
|
||||||
|
XCTAssertEqual(view.yoga.top.value, 6);
|
||||||
|
XCTAssertEqual(view.yoga.top.unit, YGUnitPercent);
|
||||||
|
|
||||||
view.yoga.bottom = 4;
|
view.yoga.bottom = YGPointValue(7);
|
||||||
XCTAssertEqual(YGNodeStyleGetPosition(view.yoga.node, YGEdgeBottom).value, 4);
|
XCTAssertEqual(view.yoga.bottom.value, 7);
|
||||||
XCTAssertEqual(YGNodeStyleGetPosition(view.yoga.node, YGEdgeBottom).unit, YGUnitPoint);
|
XCTAssertEqual(view.yoga.bottom.unit, YGUnitPoint);
|
||||||
XCTAssertEqual(view.yoga.bottom, 4);
|
view.yoga.bottom = YGPercentValue(8);
|
||||||
|
XCTAssertEqual(view.yoga.bottom.value, 8);
|
||||||
|
XCTAssertEqual(view.yoga.bottom.unit, YGUnitPercent);
|
||||||
|
|
||||||
view.yoga.start = 5;
|
view.yoga.start = YGPointValue(9);
|
||||||
XCTAssertEqual(YGNodeStyleGetPosition(view.yoga.node, YGEdgeStart).value, 5);
|
XCTAssertEqual(view.yoga.start.value, 9);
|
||||||
XCTAssertEqual(YGNodeStyleGetPosition(view.yoga.node, YGEdgeStart).unit, YGUnitPoint);
|
XCTAssertEqual(view.yoga.start.unit, YGUnitPoint);
|
||||||
XCTAssertEqual(view.yoga.start, 5);
|
view.yoga.start = YGPercentValue(10);
|
||||||
|
XCTAssertEqual(view.yoga.start.value, 10);
|
||||||
|
XCTAssertEqual(view.yoga.start.unit, YGUnitPercent);
|
||||||
|
|
||||||
view.yoga.end = 6;
|
view.yoga.end = YGPointValue(11);
|
||||||
XCTAssertEqual(YGNodeStyleGetPosition(view.yoga.node, YGEdgeEnd).value, 6);
|
XCTAssertEqual(view.yoga.end.value, 11);
|
||||||
XCTAssertEqual(YGNodeStyleGetPosition(view.yoga.node, YGEdgeEnd).unit, YGUnitPoint);
|
XCTAssertEqual(view.yoga.end.unit, YGUnitPoint);
|
||||||
XCTAssertEqual(view.yoga.end, 6);
|
view.yoga.end = YGPercentValue(12);
|
||||||
|
XCTAssertEqual(view.yoga.end.value, 12);
|
||||||
|
XCTAssertEqual(view.yoga.end.unit, YGUnitPercent);
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)testMarginPropertiesWork
|
- (void)testMarginPropertiesWork
|
||||||
{
|
{
|
||||||
UIView *view = [[UIView alloc] initWithFrame:CGRectZero];
|
UIView *view = [[UIView alloc] initWithFrame:CGRectZero];
|
||||||
|
|
||||||
view.yoga.margin = 1;
|
view.yoga.margin = YGPointValue(1);
|
||||||
XCTAssertEqual(view.yoga.margin, 1);
|
XCTAssertEqual(view.yoga.margin.value, 1);
|
||||||
XCTAssertTrue(isnan(view.yoga.marginLeft));
|
XCTAssertEqual(view.yoga.margin.unit, YGUnitPoint);
|
||||||
XCTAssertTrue(isnan(view.yoga.marginRight));
|
view.yoga.margin = YGPercentValue(2);
|
||||||
XCTAssertTrue(isnan(view.yoga.marginStart));
|
XCTAssertEqual(view.yoga.margin.value, 2);
|
||||||
XCTAssertTrue(isnan(view.yoga.marginEnd));
|
XCTAssertEqual(view.yoga.margin.unit, YGUnitPercent);
|
||||||
XCTAssertTrue(isnan(view.yoga.marginTop));
|
|
||||||
XCTAssertTrue(isnan(view.yoga.marginBottom));
|
|
||||||
XCTAssertTrue(isnan(view.yoga.marginHorizontal));
|
|
||||||
XCTAssertTrue(isnan(view.yoga.marginVertical));
|
|
||||||
|
|
||||||
view.yoga.marginHorizontal = 2;
|
view.yoga.marginHorizontal = YGPointValue(3);
|
||||||
XCTAssertEqual(view.yoga.marginHorizontal, 2);
|
XCTAssertEqual(view.yoga.marginHorizontal.value, 3);
|
||||||
XCTAssertTrue(isnan(view.yoga.marginLeft));
|
XCTAssertEqual(view.yoga.marginHorizontal.unit, YGUnitPoint);
|
||||||
XCTAssertTrue(isnan(view.yoga.marginRight));
|
view.yoga.marginHorizontal = YGPercentValue(4);
|
||||||
XCTAssertTrue(isnan(view.yoga.marginStart));
|
XCTAssertEqual(view.yoga.marginHorizontal.value, 4);
|
||||||
XCTAssertTrue(isnan(view.yoga.marginEnd));
|
XCTAssertEqual(view.yoga.marginHorizontal.unit, YGUnitPercent);
|
||||||
|
|
||||||
view.yoga.marginVertical = 3;
|
view.yoga.marginVertical = YGPointValue(5);
|
||||||
XCTAssertEqual(view.yoga.marginVertical, 3);
|
XCTAssertEqual(view.yoga.marginVertical.value, 5);
|
||||||
XCTAssertTrue(isnan(view.yoga.marginTop));
|
XCTAssertEqual(view.yoga.marginVertical.unit, YGUnitPoint);
|
||||||
XCTAssertTrue(isnan(view.yoga.marginBottom));
|
view.yoga.marginVertical = YGPercentValue(6);
|
||||||
|
XCTAssertEqual(view.yoga.marginVertical.value, 6);
|
||||||
|
XCTAssertEqual(view.yoga.marginVertical.unit, YGUnitPercent);
|
||||||
|
|
||||||
view.yoga.marginLeft = 4;
|
view.yoga.marginLeft = YGPointValue(7);
|
||||||
XCTAssertEqual(YGNodeStyleGetMargin(view.yoga.node, YGEdgeLeft).value, 4);
|
XCTAssertEqual(view.yoga.marginLeft.value, 7);
|
||||||
XCTAssertEqual(YGNodeStyleGetMargin(view.yoga.node, YGEdgeLeft).unit, YGUnitPoint);
|
XCTAssertEqual(view.yoga.marginLeft.unit, YGUnitPoint);
|
||||||
XCTAssertEqual(view.yoga.marginLeft, 4);
|
view.yoga.marginLeft = YGPercentValue(8);
|
||||||
|
XCTAssertEqual(view.yoga.marginLeft.value, 8);
|
||||||
|
XCTAssertEqual(view.yoga.marginLeft.unit, YGUnitPercent);
|
||||||
|
|
||||||
view.yoga.marginRight = 5;
|
view.yoga.marginRight = YGPointValue(9);
|
||||||
XCTAssertEqual(YGNodeStyleGetMargin(view.yoga.node, YGEdgeRight).value, 5);
|
XCTAssertEqual(view.yoga.marginRight.value, 9);
|
||||||
XCTAssertEqual(YGNodeStyleGetMargin(view.yoga.node, YGEdgeRight).unit, YGUnitPoint);
|
XCTAssertEqual(view.yoga.marginRight.unit, YGUnitPoint);
|
||||||
XCTAssertEqual(view.yoga.marginRight, 5);
|
view.yoga.marginRight = YGPercentValue(10);
|
||||||
|
XCTAssertEqual(view.yoga.marginRight.value, 10);
|
||||||
|
XCTAssertEqual(view.yoga.marginRight.unit, YGUnitPercent);
|
||||||
|
|
||||||
view.yoga.marginTop = 6;
|
view.yoga.marginTop = YGPointValue(11);
|
||||||
XCTAssertEqual(YGNodeStyleGetMargin(view.yoga.node, YGEdgeTop).value, 6);
|
XCTAssertEqual(view.yoga.marginTop.value, 11);
|
||||||
XCTAssertEqual(YGNodeStyleGetMargin(view.yoga.node, YGEdgeTop).unit, YGUnitPoint);
|
XCTAssertEqual(view.yoga.marginTop.unit, YGUnitPoint);
|
||||||
XCTAssertEqual(view.yoga.marginTop, 6);
|
view.yoga.marginTop = YGPercentValue(12);
|
||||||
|
XCTAssertEqual(view.yoga.marginTop.value, 12);
|
||||||
|
XCTAssertEqual(view.yoga.marginTop.unit, YGUnitPercent);
|
||||||
|
|
||||||
view.yoga.marginBottom = 7;
|
view.yoga.marginBottom = YGPointValue(13);
|
||||||
XCTAssertEqual(YGNodeStyleGetMargin(view.yoga.node, YGEdgeBottom).value, 7);
|
XCTAssertEqual(view.yoga.marginBottom.value, 13);
|
||||||
XCTAssertEqual(YGNodeStyleGetMargin(view.yoga.node, YGEdgeBottom).unit, YGUnitPoint);
|
XCTAssertEqual(view.yoga.marginBottom.unit, YGUnitPoint);
|
||||||
XCTAssertEqual(view.yoga.marginBottom, 7);
|
view.yoga.marginBottom = YGPercentValue(14);
|
||||||
|
XCTAssertEqual(view.yoga.marginBottom.value, 14);
|
||||||
|
XCTAssertEqual(view.yoga.marginBottom.unit, YGUnitPercent);
|
||||||
|
|
||||||
view.yoga.marginStart = 8;
|
view.yoga.marginStart = YGPointValue(15);
|
||||||
XCTAssertEqual(YGNodeStyleGetMargin(view.yoga.node, YGEdgeStart).value, 8);
|
XCTAssertEqual(view.yoga.marginStart.value, 15);
|
||||||
XCTAssertEqual(YGNodeStyleGetMargin(view.yoga.node, YGEdgeStart).unit, YGUnitPoint);
|
XCTAssertEqual(view.yoga.marginStart.unit, YGUnitPoint);
|
||||||
XCTAssertEqual(view.yoga.marginStart, 8);
|
view.yoga.marginStart = YGPercentValue(16);
|
||||||
|
XCTAssertEqual(view.yoga.marginStart.value, 16);
|
||||||
|
XCTAssertEqual(view.yoga.marginStart.unit, YGUnitPercent);
|
||||||
|
|
||||||
view.yoga.marginEnd = 9;
|
view.yoga.marginEnd = YGPointValue(17);
|
||||||
XCTAssertEqual(YGNodeStyleGetMargin(view.yoga.node, YGEdgeEnd).value, 9);
|
XCTAssertEqual(view.yoga.marginEnd.value, 17);
|
||||||
XCTAssertEqual(YGNodeStyleGetMargin(view.yoga.node, YGEdgeEnd).unit, YGUnitPoint);
|
XCTAssertEqual(view.yoga.marginEnd.unit, YGUnitPoint);
|
||||||
XCTAssertEqual(view.yoga.marginEnd, 9);
|
view.yoga.marginEnd = YGPercentValue(18);
|
||||||
|
XCTAssertEqual(view.yoga.marginEnd.value, 18);
|
||||||
|
XCTAssertEqual(view.yoga.marginEnd.unit, YGUnitPercent);
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)testPaddingPropertiesWork
|
- (void)testPaddingPropertiesWork
|
||||||
{
|
{
|
||||||
UIView *view = [[UIView alloc] initWithFrame:CGRectZero];
|
UIView *view = [[UIView alloc] initWithFrame:CGRectZero];
|
||||||
|
|
||||||
view.yoga.padding = 1;
|
view.yoga.padding = YGPointValue(1);
|
||||||
XCTAssertEqual(view.yoga.padding, 1);
|
XCTAssertEqual(view.yoga.padding.value, 1);
|
||||||
XCTAssertTrue(isnan(view.yoga.paddingLeft));
|
XCTAssertEqual(view.yoga.padding.unit, YGUnitPoint);
|
||||||
XCTAssertTrue(isnan(view.yoga.paddingRight));
|
view.yoga.padding = YGPercentValue(2);
|
||||||
XCTAssertTrue(isnan(view.yoga.paddingStart));
|
XCTAssertEqual(view.yoga.padding.value, 2);
|
||||||
XCTAssertTrue(isnan(view.yoga.paddingEnd));
|
XCTAssertEqual(view.yoga.padding.unit, YGUnitPercent);
|
||||||
XCTAssertTrue(isnan(view.yoga.paddingTop));
|
|
||||||
XCTAssertTrue(isnan(view.yoga.paddingBottom));
|
|
||||||
XCTAssertTrue(isnan(view.yoga.paddingHorizontal));
|
|
||||||
XCTAssertTrue(isnan(view.yoga.paddingVertical));
|
|
||||||
|
|
||||||
view.yoga.paddingHorizontal = 2;
|
view.yoga.paddingHorizontal = YGPointValue(3);
|
||||||
XCTAssertEqual(view.yoga.paddingHorizontal, 2);
|
XCTAssertEqual(view.yoga.paddingHorizontal.value, 3);
|
||||||
XCTAssertTrue(isnan(view.yoga.paddingLeft));
|
XCTAssertEqual(view.yoga.paddingHorizontal.unit, YGUnitPoint);
|
||||||
XCTAssertTrue(isnan(view.yoga.paddingRight));
|
view.yoga.paddingHorizontal = YGPercentValue(4);
|
||||||
XCTAssertTrue(isnan(view.yoga.paddingStart));
|
XCTAssertEqual(view.yoga.paddingHorizontal.value, 4);
|
||||||
XCTAssertTrue(isnan(view.yoga.paddingEnd));
|
XCTAssertEqual(view.yoga.paddingHorizontal.unit, YGUnitPercent);
|
||||||
|
|
||||||
view.yoga.paddingVertical = 3;
|
view.yoga.paddingVertical = YGPointValue(5);
|
||||||
XCTAssertEqual(view.yoga.paddingVertical, 3);
|
XCTAssertEqual(view.yoga.paddingVertical.value, 5);
|
||||||
XCTAssertTrue(isnan(view.yoga.paddingTop));
|
XCTAssertEqual(view.yoga.paddingVertical.unit, YGUnitPoint);
|
||||||
XCTAssertTrue(isnan(view.yoga.paddingBottom));
|
view.yoga.paddingVertical = YGPercentValue(6);
|
||||||
|
XCTAssertEqual(view.yoga.paddingVertical.value, 6);
|
||||||
|
XCTAssertEqual(view.yoga.paddingVertical.unit, YGUnitPercent);
|
||||||
|
|
||||||
view.yoga.paddingLeft = 4;
|
view.yoga.paddingLeft = YGPointValue(7);
|
||||||
XCTAssertEqual(YGNodeStyleGetPadding(view.yoga.node, YGEdgeLeft).value, 4);
|
XCTAssertEqual(view.yoga.paddingLeft.value, 7);
|
||||||
XCTAssertEqual(YGNodeStyleGetPadding(view.yoga.node, YGEdgeLeft).unit, YGUnitPoint);
|
XCTAssertEqual(view.yoga.paddingLeft.unit, YGUnitPoint);
|
||||||
XCTAssertEqual(view.yoga.paddingLeft, 4);
|
view.yoga.paddingLeft = YGPercentValue(8);
|
||||||
|
XCTAssertEqual(view.yoga.paddingLeft.value, 8);
|
||||||
|
XCTAssertEqual(view.yoga.paddingLeft.unit, YGUnitPercent);
|
||||||
|
|
||||||
view.yoga.paddingRight = 5;
|
view.yoga.paddingRight = YGPointValue(9);
|
||||||
XCTAssertEqual(YGNodeStyleGetPadding(view.yoga.node, YGEdgeRight).value, 5);
|
XCTAssertEqual(view.yoga.paddingRight.value, 9);
|
||||||
XCTAssertEqual(YGNodeStyleGetPadding(view.yoga.node, YGEdgeRight).unit, YGUnitPoint);
|
XCTAssertEqual(view.yoga.paddingRight.unit, YGUnitPoint);
|
||||||
XCTAssertEqual(view.yoga.paddingRight, 5);
|
view.yoga.paddingRight = YGPercentValue(10);
|
||||||
|
XCTAssertEqual(view.yoga.paddingRight.value, 10);
|
||||||
|
XCTAssertEqual(view.yoga.paddingRight.unit, YGUnitPercent);
|
||||||
|
|
||||||
view.yoga.paddingTop = 6;
|
view.yoga.paddingTop = YGPointValue(11);
|
||||||
XCTAssertEqual(YGNodeStyleGetPadding(view.yoga.node, YGEdgeTop).value, 6);
|
XCTAssertEqual(view.yoga.paddingTop.value, 11);
|
||||||
XCTAssertEqual(YGNodeStyleGetPadding(view.yoga.node, YGEdgeTop).unit, YGUnitPoint);
|
XCTAssertEqual(view.yoga.paddingTop.unit, YGUnitPoint);
|
||||||
XCTAssertEqual(view.yoga.paddingTop, 6);
|
view.yoga.paddingTop = YGPercentValue(12);
|
||||||
|
XCTAssertEqual(view.yoga.paddingTop.value, 12);
|
||||||
|
XCTAssertEqual(view.yoga.paddingTop.unit, YGUnitPercent);
|
||||||
|
|
||||||
view.yoga.paddingBottom = 7;
|
view.yoga.paddingBottom = YGPointValue(13);
|
||||||
XCTAssertEqual(YGNodeStyleGetPadding(view.yoga.node, YGEdgeBottom).value, 7);
|
XCTAssertEqual(view.yoga.paddingBottom.value, 13);
|
||||||
XCTAssertEqual(YGNodeStyleGetPadding(view.yoga.node, YGEdgeBottom).unit, YGUnitPoint);
|
XCTAssertEqual(view.yoga.paddingBottom.unit, YGUnitPoint);
|
||||||
XCTAssertEqual(view.yoga.paddingBottom, 7);
|
view.yoga.paddingBottom = YGPercentValue(14);
|
||||||
|
XCTAssertEqual(view.yoga.paddingBottom.value, 14);
|
||||||
|
XCTAssertEqual(view.yoga.paddingBottom.unit, YGUnitPercent);
|
||||||
|
|
||||||
view.yoga.paddingStart = 8;
|
view.yoga.paddingStart = YGPointValue(15);
|
||||||
XCTAssertEqual(YGNodeStyleGetPadding(view.yoga.node, YGEdgeStart).value, 8);
|
XCTAssertEqual(view.yoga.paddingStart.value, 15);
|
||||||
XCTAssertEqual(YGNodeStyleGetPadding(view.yoga.node, YGEdgeStart).unit, YGUnitPoint);
|
XCTAssertEqual(view.yoga.paddingStart.unit, YGUnitPoint);
|
||||||
XCTAssertEqual(view.yoga.paddingStart, 8);
|
view.yoga.paddingStart = YGPercentValue(16);
|
||||||
|
XCTAssertEqual(view.yoga.paddingStart.value, 16);
|
||||||
|
XCTAssertEqual(view.yoga.paddingStart.unit, YGUnitPercent);
|
||||||
|
|
||||||
view.yoga.paddingEnd = 9;
|
view.yoga.paddingEnd = YGPointValue(17);
|
||||||
XCTAssertEqual(YGNodeStyleGetPadding(view.yoga.node, YGEdgeEnd).value, 9);
|
XCTAssertEqual(view.yoga.paddingEnd.value, 17);
|
||||||
XCTAssertEqual(YGNodeStyleGetPadding(view.yoga.node, YGEdgeEnd).unit, YGUnitPoint);
|
XCTAssertEqual(view.yoga.paddingEnd.unit, YGUnitPoint);
|
||||||
XCTAssertEqual(view.yoga.paddingEnd, 9);
|
view.yoga.paddingEnd = YGPercentValue(18);
|
||||||
|
XCTAssertEqual(view.yoga.paddingEnd.value, 18);
|
||||||
|
XCTAssertEqual(view.yoga.paddingEnd.unit, YGUnitPercent);
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)testBorderWidthPropertiesWork
|
- (void)testBorderWidthPropertiesWork
|
||||||
@@ -679,12 +722,6 @@
|
|||||||
|
|
||||||
view.yoga.borderWidth = 1;
|
view.yoga.borderWidth = 1;
|
||||||
XCTAssertEqual(view.yoga.borderWidth, 1);
|
XCTAssertEqual(view.yoga.borderWidth, 1);
|
||||||
XCTAssertTrue(isnan(view.yoga.borderLeftWidth));
|
|
||||||
XCTAssertTrue(isnan(view.yoga.borderRightWidth));
|
|
||||||
XCTAssertTrue(isnan(view.yoga.borderStartWidth));
|
|
||||||
XCTAssertTrue(isnan(view.yoga.borderEndWidth));
|
|
||||||
XCTAssertTrue(isnan(view.yoga.borderTopWidth));
|
|
||||||
XCTAssertTrue(isnan(view.yoga.borderBottomWidth));
|
|
||||||
|
|
||||||
view.yoga.borderLeftWidth = 2;
|
view.yoga.borderLeftWidth = 2;
|
||||||
XCTAssertEqual(view.yoga.borderLeftWidth, 2);
|
XCTAssertEqual(view.yoga.borderLeftWidth, 2);
|
||||||
|
@@ -4,9 +4,9 @@ PODS:
|
|||||||
- IGListKit/Default (2.1.0):
|
- IGListKit/Default (2.1.0):
|
||||||
- IGListKit/Diffing
|
- IGListKit/Diffing
|
||||||
- IGListKit/Diffing (2.1.0)
|
- IGListKit/Diffing (2.1.0)
|
||||||
- Yoga (1.3.0)
|
- Yoga (1.7.0)
|
||||||
- YogaKit (1.3.0):
|
- YogaKit (1.7.0):
|
||||||
- Yoga (~> 1.3)
|
- Yoga (~> 1.7)
|
||||||
|
|
||||||
DEPENDENCIES:
|
DEPENDENCIES:
|
||||||
- IGListKit (~> 2.1.0)
|
- IGListKit (~> 2.1.0)
|
||||||
@@ -14,13 +14,13 @@ DEPENDENCIES:
|
|||||||
|
|
||||||
EXTERNAL SOURCES:
|
EXTERNAL SOURCES:
|
||||||
YogaKit:
|
YogaKit:
|
||||||
:path: "../../YogaKit.podspec"
|
:path: ../../YogaKit.podspec
|
||||||
|
|
||||||
SPEC CHECKSUMS:
|
SPEC CHECKSUMS:
|
||||||
IGListKit: b826c68ef7a4ae1626c09d4d3e1ea7a169e6c36e
|
IGListKit: b826c68ef7a4ae1626c09d4d3e1ea7a169e6c36e
|
||||||
Yoga: 2ed1d7accfef3610a67f58c0cf101a0662137f2c
|
Yoga: 2ed1d7accfef3610a67f58c0cf101a0662137f2c
|
||||||
YogaKit: cddeccc6a8d2aff563e4c738d3bddb290a6de4cb
|
YogaKit: 31576530e8fcae3175469719ec3212397403330b
|
||||||
|
|
||||||
PODFILE CHECKSUM: 216f8e7127767709e0e43f3711208d238fa5c404
|
PODFILE CHECKSUM: 216f8e7127767709e0e43f3711208d238fa5c404
|
||||||
|
|
||||||
COCOAPODS: 1.2.0
|
COCOAPODS: 1.1.1
|
||||||
|
@@ -12,6 +12,11 @@ import YogaKit
|
|||||||
|
|
||||||
struct DemoItem {
|
struct DemoItem {
|
||||||
let name: String
|
let name: String
|
||||||
|
root.backgroundColor = .red
|
||||||
|
root.yoga.isEnabled = true
|
||||||
|
root.yoga.width = YGValue(self.view.bounds.size.width)
|
||||||
|
root.yoga.height = YGValue(self.view.bounds.size.height)
|
||||||
|
root.yoga.alignItems = .center
|
||||||
}
|
}
|
||||||
|
|
||||||
final class SwiftViewController: UIViewController, IGListAdapterDataSource {
|
final class SwiftViewController: UIViewController, IGListAdapterDataSource {
|
||||||
|
@@ -17,16 +17,16 @@
|
|||||||
UIView *root = self.view;
|
UIView *root = self.view;
|
||||||
root.backgroundColor = [UIColor redColor];
|
root.backgroundColor = [UIColor redColor];
|
||||||
root.yoga.isEnabled = YES;
|
root.yoga.isEnabled = YES;
|
||||||
root.yoga.width = self.view.bounds.size.width;
|
root.yoga.width = YGPointValue(self.view.bounds.size.width);
|
||||||
root.yoga.height = self.view.bounds.size.height;
|
root.yoga.height = YGPointValue(self.view.bounds.size.height);
|
||||||
root.yoga.alignItems = YGAlignCenter;
|
root.yoga.alignItems = YGAlignCenter;
|
||||||
root.yoga.justifyContent = YGJustifyCenter;
|
root.yoga.justifyContent = YGJustifyCenter;
|
||||||
|
|
||||||
UIView *child1 = [UIView new];
|
UIView *child1 = [UIView new];
|
||||||
child1.backgroundColor = [UIColor blueColor];
|
child1.backgroundColor = [UIColor blueColor];
|
||||||
child1.yoga.isEnabled = YES;
|
child1.yoga.isEnabled = YES;
|
||||||
child1.yoga.width = 100;
|
child1.yoga.width = YGPointValue(100);
|
||||||
child1.yoga.height = 100;
|
child1.yoga.height = YGPointValue(100);
|
||||||
|
|
||||||
UIView *child2 = [UIView new];
|
UIView *child2 = [UIView new];
|
||||||
child2.backgroundColor = [UIColor greenColor];
|
child2.backgroundColor = [UIColor greenColor];
|
||||||
|
@@ -17,8 +17,8 @@ final class BasicViewController: UIViewController {
|
|||||||
root.backgroundColor = .white
|
root.backgroundColor = .white
|
||||||
root.configureLayout { (layout) in
|
root.configureLayout { (layout) in
|
||||||
layout.isEnabled = true
|
layout.isEnabled = true
|
||||||
layout.width = containerSize.width
|
layout.width = YGValue(containerSize.width)
|
||||||
layout.height = containerSize.height
|
layout.height = YGValue(containerSize.height)
|
||||||
layout.alignItems = .center
|
layout.alignItems = .center
|
||||||
layout.justifyContent = .center
|
layout.justifyContent = .center
|
||||||
}
|
}
|
||||||
|
@@ -29,7 +29,7 @@ final class LayoutInclusionViewController: UIViewController {
|
|||||||
contentView.configureLayout { (layout) in
|
contentView.configureLayout { (layout) in
|
||||||
layout.isEnabled = true
|
layout.isEnabled = true
|
||||||
layout.height = 300
|
layout.height = 300
|
||||||
layout.width = self.view.bounds.size.width
|
layout.width = YGValue(self.view.bounds.size.width)
|
||||||
layout.flexDirection = .row
|
layout.flexDirection = .row
|
||||||
layout.justifyContent = .center
|
layout.justifyContent = .center
|
||||||
layout.paddingHorizontal = 25
|
layout.paddingHorizontal = 25
|
||||||
|
@@ -1,11 +1,9 @@
|
|||||||
# Copyright (c) 2014-present, Facebook, Inc.
|
# Copyright (c) 2014-present, Facebook, Inc.
|
||||||
# All rights reserved.
|
|
||||||
#
|
#
|
||||||
# This source code is licensed under the BSD-style 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. An additional grant
|
# LICENSE file in the root directory of this source tree.
|
||||||
# of patent rights can be found in the PATENTS file in the same directory.
|
|
||||||
|
|
||||||
include_defs("//YOGA_DEFS")
|
load("//:yoga_defs.bzl", "ANDROID_JAVA_TARGET", "ANDROID_RES_TARGET", "INFER_ANNOTATIONS_TARGET", "JAVA_TARGET", "PROGRUARD_ANNOTATIONS_TARGET", "android_aar", "android_resource")
|
||||||
|
|
||||||
android_aar(
|
android_aar(
|
||||||
name = "android",
|
name = "android",
|
||||||
|
@@ -3,8 +3,8 @@ apply plugin: 'com.android.library'
|
|||||||
apply plugin: 'com.github.dcendents.android-maven'
|
apply plugin: 'com.github.dcendents.android-maven'
|
||||||
apply plugin: 'maven-publish'
|
apply plugin: 'maven-publish'
|
||||||
|
|
||||||
version = '1.4.1'
|
version = VERSION_NAME
|
||||||
group = 'com.facebook.yoga.android'
|
group = GROUP
|
||||||
|
|
||||||
android {
|
android {
|
||||||
compileSdkVersion rootProject.compileSdkVersion
|
compileSdkVersion rootProject.compileSdkVersion
|
||||||
@@ -22,7 +22,7 @@ android {
|
|||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
compile project(':yoga')
|
api project(':yoga')
|
||||||
}
|
}
|
||||||
|
|
||||||
task sourcesJar(type: Jar) {
|
task sourcesJar(type: Jar) {
|
||||||
@@ -42,8 +42,4 @@ task javadocJar(type: Jar, dependsOn: javadoc) {
|
|||||||
from javadoc.destinationDir
|
from javadoc.destinationDir
|
||||||
}
|
}
|
||||||
|
|
||||||
ext {
|
apply from: rootProject.file('gradle/release.gradle')
|
||||||
bintrayName = 'com.facebook.yoga.android:yoga-layout'
|
|
||||||
}
|
|
||||||
|
|
||||||
apply from: rootProject.file('gradle/android-jcenter-install.gradle')
|
|
||||||
|
5
android/gradle.properties
Normal file
5
android/gradle.properties
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
GROUP=com.facebook.yoga.android
|
||||||
|
POM_NAME=YogaLayout
|
||||||
|
POM_DESCRIPTION=YogaLayout
|
||||||
|
POM_ARTIFACT_ID=yoga-layout
|
||||||
|
POM_PACKAGING=aar
|
@@ -4,7 +4,7 @@
|
|||||||
# This source code is licensed under the license found in the
|
# This source code is licensed under the license found in the
|
||||||
# LICENSE-examples file in the root directory of this source tree.
|
# LICENSE-examples file in the root directory of this source tree.
|
||||||
|
|
||||||
include_defs("//YOGA_DEFS")
|
load("//:yoga_defs.bzl", "ANDROID_SAMPLE_JAVA_TARGET", "ANDROID_SAMPLE_RES_TARGET", "ANDROID_RES_TARGET", "android_binary", "android_resource")
|
||||||
|
|
||||||
android_binary(
|
android_binary(
|
||||||
name = "sample",
|
name = "sample",
|
||||||
|
@@ -5,7 +5,7 @@
|
|||||||
# LICENSE file in the root directory of this source tree. An additional grant
|
# LICENSE file in the root directory of this source tree. An additional grant
|
||||||
# of patent rights can be found in the PATENTS file in the same directory.
|
# of patent rights can be found in the PATENTS file in the same directory.
|
||||||
|
|
||||||
include_defs("//YOGA_DEFS")
|
load("//:yoga_defs.bzl", "ANDROID_JAVA_TARGET", "ANDROID_SAMPLE_RES_TARGET", "ANDROID_SUPPORT_TARGET", "APPCOMPAT_TARGET", "SOLOADER_TARGET", "android_library")
|
||||||
|
|
||||||
android_library(
|
android_library(
|
||||||
name = "yoga",
|
name = "yoga",
|
||||||
|
@@ -4,7 +4,7 @@ package com.facebook.samples.yoga;
|
|||||||
|
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.support.v7.app.ActionBarActivity;
|
import android.support.v7.app.AppCompatActivity;
|
||||||
import android.support.v4.app.FragmentPagerAdapter;
|
import android.support.v4.app.FragmentPagerAdapter;
|
||||||
import android.support.v4.app.FragmentManager;
|
import android.support.v4.app.FragmentManager;
|
||||||
import android.support.v4.app.Fragment;
|
import android.support.v4.app.Fragment;
|
||||||
@@ -19,7 +19,7 @@ import android.support.v7.app.ActionBar;
|
|||||||
import com.facebook.samples.yoga.R;
|
import com.facebook.samples.yoga.R;
|
||||||
import com.facebook.yoga.android.YogaViewLayoutFactory;
|
import com.facebook.yoga.android.YogaViewLayoutFactory;
|
||||||
|
|
||||||
public class BenchmarkActivity extends ActionBarActivity {
|
public class BenchmarkActivity extends AppCompatActivity {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onCreate(Bundle savedInstanceState) {
|
public void onCreate(Bundle savedInstanceState) {
|
||||||
|
@@ -10,7 +10,7 @@ package com.facebook.samples.yoga;
|
|||||||
|
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.support.v7.app.ActionBarActivity;
|
import android.support.v7.app.AppCompatActivity;
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
import android.view.MenuInflater;
|
import android.view.MenuInflater;
|
||||||
import android.view.MenuItem;
|
import android.view.MenuItem;
|
||||||
@@ -25,7 +25,7 @@ import com.facebook.yoga.android.YogaViewLayoutFactory;
|
|||||||
* {@code main_layout.xml}) that shows off the awesome functionality of the Yoga layout engine
|
* {@code main_layout.xml}) that shows off the awesome functionality of the Yoga layout engine
|
||||||
* as well as some optimisations on layout systems that it facilitates.
|
* as well as some optimisations on layout systems that it facilitates.
|
||||||
*/
|
*/
|
||||||
public class MainActivity extends ActionBarActivity {
|
public class MainActivity extends AppCompatActivity {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onCreate(Bundle savedInstanceState) {
|
public void onCreate(Bundle savedInstanceState) {
|
||||||
|
@@ -2,11 +2,9 @@
|
|||||||
|
|
||||||
<!--
|
<!--
|
||||||
Copyright (c) 2014-present, Facebook, Inc.
|
Copyright (c) 2014-present, Facebook, Inc.
|
||||||
All rights reserved.
|
|
||||||
|
|
||||||
This source code is licensed under the BSD-style 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. An additional grant
|
LICENSE file in the root directory of this source tree.
|
||||||
of patent rights can be found in the PATENTS file in the same directory.
|
|
||||||
-->
|
-->
|
||||||
|
|
||||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
@@ -1,11 +1,9 @@
|
|||||||
# Copyright (c) 2014-present, Facebook, Inc.
|
# Copyright (c) 2014-present, Facebook, Inc.
|
||||||
# All rights reserved.
|
|
||||||
#
|
#
|
||||||
# This source code is licensed under the BSD-style 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. An additional grant
|
# LICENSE file in the root directory of this source tree.
|
||||||
# of patent rights can be found in the PATENTS file in the same directory.
|
|
||||||
|
|
||||||
include_defs("//YOGA_DEFS")
|
load("//:yoga_defs.bzl", "ANDROID_RES_TARGET", "INFER_ANNOTATIONS_TARGET", "JAVA_TARGET", "JSR_305_TARGET", "SOLOADER_TARGET", "android_library")
|
||||||
|
|
||||||
android_library(
|
android_library(
|
||||||
name = "android",
|
name = "android",
|
||||||
|
@@ -1,10 +1,8 @@
|
|||||||
/**
|
/**
|
||||||
* Copyright (c) 2014-present, Facebook, Inc.
|
* Copyright (c) 2014-present, Facebook, Inc.
|
||||||
* All rights reserved.
|
|
||||||
*
|
*
|
||||||
* This source code is licensed under the BSD-style 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. An additional grant
|
* LICENSE file in the root directory of this source tree.
|
||||||
* of patent rights can be found in the PATENTS file in the same directory.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package com.facebook.yoga.android;
|
package com.facebook.yoga.android;
|
||||||
|
@@ -1,10 +1,8 @@
|
|||||||
/**
|
/**
|
||||||
* Copyright (c) 2014-present, Facebook, Inc.
|
* Copyright (c) 2014-present, Facebook, Inc.
|
||||||
* All rights reserved.
|
|
||||||
*
|
*
|
||||||
* This source code is licensed under the BSD-style 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. An additional grant
|
* LICENSE file in the root directory of this source tree.
|
||||||
* of patent rights can be found in the PATENTS file in the same directory.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package com.facebook.yoga.android;
|
package com.facebook.yoga.android;
|
||||||
|
@@ -1,10 +1,8 @@
|
|||||||
/**
|
/**
|
||||||
* Copyright (c) 2014-present, Facebook, Inc.
|
* Copyright (c) 2014-present, Facebook, Inc.
|
||||||
* All rights reserved.
|
|
||||||
*
|
*
|
||||||
* This source code is licensed under the BSD-style 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. An additional grant
|
* LICENSE file in the root directory of this source tree.
|
||||||
* of patent rights can be found in the PATENTS file in the same directory.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package com.facebook.yoga.android;
|
package com.facebook.yoga.android;
|
||||||
|
@@ -2,11 +2,9 @@
|
|||||||
|
|
||||||
<!--
|
<!--
|
||||||
Copyright (c) 2014-present, Facebook, Inc.
|
Copyright (c) 2014-present, Facebook, Inc.
|
||||||
All rights reserved.
|
|
||||||
|
|
||||||
This source code is licensed under the BSD-style 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. An additional grant
|
LICENSE file in the root directory of this source tree.
|
||||||
of patent rights can be found in the PATENTS file in the same directory.
|
|
||||||
-->
|
-->
|
||||||
|
|
||||||
<resources>
|
<resources>
|
||||||
|
@@ -1,15 +1,15 @@
|
|||||||
# Copyright (c) 2014-present, Facebook, Inc.
|
# Copyright (c) 2014-present, Facebook, Inc.
|
||||||
# All rights reserved.
|
|
||||||
#
|
#
|
||||||
# This source code is licensed under the BSD-style 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. An additional grant
|
# LICENSE file in the root directory of this source tree.
|
||||||
# of patent rights can be found in the PATENTS file in the same directory.
|
|
||||||
|
|
||||||
include_defs("//YOGA_DEFS")
|
load("//:yoga_defs.bzl", "yoga_dep")
|
||||||
|
|
||||||
cxx_binary(
|
cxx_binary(
|
||||||
name = "benchmark",
|
name = "benchmark",
|
||||||
srcs = glob(["*.c"]),
|
srcs = glob(["*.c"]),
|
||||||
|
headers = subdir_glob([("", "*.h")]),
|
||||||
|
header_namespace = "",
|
||||||
compiler_flags = [
|
compiler_flags = [
|
||||||
"-fno-omit-frame-pointer",
|
"-fno-omit-frame-pointer",
|
||||||
"-fexceptions",
|
"-fexceptions",
|
||||||
@@ -18,8 +18,6 @@ cxx_binary(
|
|||||||
"-O3",
|
"-O3",
|
||||||
"-std=c11",
|
"-std=c11",
|
||||||
],
|
],
|
||||||
header_namespace = "",
|
|
||||||
headers = subdir_glob([("", "*.h")]),
|
|
||||||
visibility = ["PUBLIC"],
|
visibility = ["PUBLIC"],
|
||||||
deps = [
|
deps = [
|
||||||
yoga_dep(":yoga"),
|
yoga_dep(":yoga"),
|
||||||
|
@@ -1,10 +1,8 @@
|
|||||||
/**
|
/**
|
||||||
* Copyright (c) 2014-present, Facebook, Inc.
|
* Copyright (c) 2014-present, Facebook, Inc.
|
||||||
* All rights reserved.
|
|
||||||
*
|
*
|
||||||
* This source code is licensed under the BSD-style 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. An additional grant
|
* LICENSE file in the root directory of this source tree.
|
||||||
* of patent rights can be found in the PATENTS file in the same directory.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "YGBenchmark.h"
|
#include "YGBenchmark.h"
|
||||||
|
@@ -1,10 +1,8 @@
|
|||||||
/**
|
/**
|
||||||
* Copyright (c) 2014-present, Facebook, Inc.
|
* Copyright (c) 2014-present, Facebook, Inc.
|
||||||
* All rights reserved.
|
|
||||||
*
|
*
|
||||||
* This source code is licensed under the BSD-style 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. An additional grant
|
* LICENSE file in the root directory of this source tree.
|
||||||
* of patent rights can be found in the PATENTS file in the same directory.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
39
build.gradle
39
build.gradle
@@ -3,12 +3,12 @@
|
|||||||
buildscript {
|
buildscript {
|
||||||
repositories {
|
repositories {
|
||||||
jcenter()
|
jcenter()
|
||||||
|
maven { url 'https://maven.google.com/' }
|
||||||
}
|
}
|
||||||
dependencies {
|
dependencies {
|
||||||
classpath 'com.android.tools.build:gradle:2.3.1'
|
classpath 'com.android.tools.build:gradle:3.0.0'
|
||||||
classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.7.3'
|
classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.7.3'
|
||||||
classpath 'com.github.dcendents:android-maven-gradle-plugin:1.4.1'
|
classpath 'com.github.dcendents:android-maven-gradle-plugin:2.0'
|
||||||
classpath 'com.nabilhachicha:android-native-dependencies:0.1'
|
|
||||||
|
|
||||||
// NOTE: Do not place your application dependencies here; they belong
|
// NOTE: Do not place your application dependencies here; they belong
|
||||||
// in the individual module build.gradle files
|
// in the individual module build.gradle files
|
||||||
@@ -22,14 +22,41 @@ allprojects {
|
|||||||
}
|
}
|
||||||
|
|
||||||
ext {
|
ext {
|
||||||
minSdkVersion = 15
|
minSdkVersion = 14
|
||||||
targetSdkVersion = 25
|
targetSdkVersion = 25
|
||||||
compileSdkVersion = 25
|
compileSdkVersion = 26
|
||||||
buildToolsVersion = '25.0.2'
|
buildToolsVersion = '26.0.2'
|
||||||
sourceCompatibilityVersion = JavaVersion.VERSION_1_7
|
sourceCompatibilityVersion = JavaVersion.VERSION_1_7
|
||||||
targetCompatibilityVersion = JavaVersion.VERSION_1_7
|
targetCompatibilityVersion = JavaVersion.VERSION_1_7
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// If you have an idea on how to avoid this, please get in touch or
|
||||||
|
// answer https://stackoverflow.com/questions/43867014/how-to-use-the-gradle-ndk-build-to-compile-for-the-host-machine.
|
||||||
|
task copyNativeLibs(type: Copy, dependsOn: ':buckBuildNative') {
|
||||||
|
from "${rootDir}/buck-out/gen/java/tests#default,shared-library-symlink-tree/"
|
||||||
|
include '*.so'
|
||||||
|
include '*.dylib'
|
||||||
|
into "$buildDir/jniLibs"
|
||||||
|
}
|
||||||
|
|
||||||
|
task buckBuildNative(type: Exec) {
|
||||||
|
workingDir rootDir
|
||||||
|
environment BUCKVERSION: 'last'
|
||||||
|
commandLine 'buck', 'build', '//java/...'
|
||||||
|
}
|
||||||
|
|
||||||
|
allprojects {
|
||||||
|
afterEvaluate {
|
||||||
|
tasks.withType(Test) {
|
||||||
|
dependsOn copyNativeLibs
|
||||||
|
def libDir = "${rootDir}/build/jniLibs"
|
||||||
|
systemProperty 'java.library.path', libDir
|
||||||
|
environment 'LD_LIBRARY_PATH', libDir
|
||||||
|
environment 'DYLD_LIBRARY_PATH', libDir
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
task clean(type: Delete) {
|
task clean(type: Delete) {
|
||||||
delete rootProject.buildDir
|
delete rootProject.buildDir
|
||||||
}
|
}
|
||||||
|
3
csharp/.gitignore
vendored
3
csharp/.gitignore
vendored
@@ -267,3 +267,6 @@ paket-files/
|
|||||||
# Python Tools for Visual Studio (PTVS)
|
# Python Tools for Visual Studio (PTVS)
|
||||||
__pycache__/
|
__pycache__/
|
||||||
*.pyc
|
*.pyc
|
||||||
|
|
||||||
|
# local buck build
|
||||||
|
lib/
|
||||||
|
@@ -267,3 +267,6 @@ paket-files/
|
|||||||
# Python Tools for Visual Studio (PTVS)
|
# Python Tools for Visual Studio (PTVS)
|
||||||
__pycache__/
|
__pycache__/
|
||||||
*.pyc
|
*.pyc
|
||||||
|
|
||||||
|
# local buck build
|
||||||
|
lib/
|
||||||
|
@@ -1,9 +1,8 @@
|
|||||||
/**
|
/**
|
||||||
* Copyright 2014-present, Facebook, Inc.
|
* Copyright (c) 2014-present, Facebook, Inc.
|
||||||
* All rights reserved.
|
|
||||||
*
|
*
|
||||||
* This source code is licensed under the license found in the
|
* This source code is licensed under the MIT license found in the
|
||||||
* LICENSE-examples file in the root directory of this source tree.
|
* LICENSE file in the root directory of this source tree.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
|
@@ -4,17 +4,17 @@
|
|||||||
<BuildDependsOn>NativeLibraryARMV7;NativeLibraryX86;$(BuildDependsOn)</BuildDependsOn>
|
<BuildDependsOn>NativeLibraryARMV7;NativeLibraryX86;$(BuildDependsOn)</BuildDependsOn>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<Target Name="NativeLibraryARMV7" Outputs="$(ProjectDir)/lib/armeabi-v7a/libyoga.so">
|
<Target Name="NativeLibraryARMV7" Outputs="$(ProjectDir)/lib/armeabi-v7a/libyoga.so">
|
||||||
<Exec WorkingDirectory="$(ProjectDir)" Command="$(ProjectDir)../../Mac/buck-build.sh //csharp:yoganet#android-armv7,shared" />
|
<Exec WorkingDirectory="$(ProjectDir)" Command="$(ProjectDir)../../build-native.sh" />
|
||||||
<Copy SourceFiles="$(ProjectDir)../../../buck-out/gen/csharp/yoganet#android-armv7,shared/libyoga.so" DestinationFiles="$(ProjectDir)/lib/armeabi-v7a/libyoga.so" SkipUnchangedFiles="true" />
|
<Copy SourceFiles="$(ProjectDir)../../../buck-out/gen/csharp/yoganet#android-armv7,shared/libyoga.so" DestinationFiles="$(ProjectDir)/lib/armeabi-v7a/libyoga.so" SkipUnchangedFiles="true" />
|
||||||
</Target>
|
</Target>
|
||||||
<!--
|
<!--
|
||||||
<Target Name="NativeLibraryARM64" Outputs="$(ProjectDir)/lib/arm64-v8a/libyoga.so">
|
<Target Name="NativeLibraryARM64" Outputs="$(ProjectDir)/lib/arm64-v8a/libyoga.so">
|
||||||
<Exec WorkingDirectory="$(ProjectDir)" Command="$(ProjectDir)../../Mac/buck-build.sh //csharp:yoganet#android-arm64,shared" />
|
<Exec WorkingDirectory="$(ProjectDir)" Command="$(ProjectDir)../../build-native.sh" />
|
||||||
<Copy SourceFiles="$(ProjectDir)../../../buck-out/gen/csharp/yoganet#android-arm64,shared/libyoga.so" DestinationFiles="$(ProjectDir)/lib/arm64-v8/libyoga.so" SkipUnchangedFiles="true" />
|
<Copy SourceFiles="$(ProjectDir)../../../buck-out/gen/csharp/yoganet#android-arm64,shared/libyoga.so" DestinationFiles="$(ProjectDir)/lib/arm64-v8/libyoga.so" SkipUnchangedFiles="true" />
|
||||||
</Target>
|
</Target>
|
||||||
-->
|
-->
|
||||||
<Target Name="NativeLibraryX86" Outputs="$(ProjectDir)/lib/x86/libyoga.so">
|
<Target Name="NativeLibraryX86" Outputs="$(ProjectDir)/lib/x86/libyoga.so">
|
||||||
<Exec WorkingDirectory="$(ProjectDir)" Command="$(ProjectDir)../../Mac/buck-build.sh //csharp:yoganet#android-x86,shared" />
|
<Exec WorkingDirectory="$(ProjectDir)" Command="$(ProjectDir)../../build-native.sh" />
|
||||||
<Copy SourceFiles="$(ProjectDir)../../../buck-out/gen/csharp/yoganet#android-x86,shared/libyoga.so" DestinationFiles="$(ProjectDir)/lib/x86/libyoga.so" SkipUnchangedFiles="true" />
|
<Copy SourceFiles="$(ProjectDir)../../../buck-out/gen/csharp/yoganet#android-x86,shared/libyoga.so" DestinationFiles="$(ProjectDir)/lib/x86/libyoga.so" SkipUnchangedFiles="true" />
|
||||||
</Target>
|
</Target>
|
||||||
</Project>
|
</Project>
|
||||||
|
15
csharp/BUCK
15
csharp/BUCK
@@ -1,11 +1,9 @@
|
|||||||
# Copyright (c) 2014-present, Facebook, Inc.
|
# Copyright (c) 2014-present, Facebook, Inc.
|
||||||
# All rights reserved.
|
|
||||||
#
|
#
|
||||||
# This source code is licensed under the BSD-style 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. An additional grant
|
# LICENSE file in the root directory of this source tree.
|
||||||
# of patent rights can be found in the PATENTS file in the same directory.
|
|
||||||
|
|
||||||
include_defs("//YOGA_DEFS")
|
load("//:yoga_defs.bzl", "BASE_COMPILER_FLAGS", "yoga_dep", "cxx_library", "is_apple_platform")
|
||||||
|
|
||||||
COMPILER_FLAGS = BASE_COMPILER_FLAGS + ["-std=c++11"]
|
COMPILER_FLAGS = BASE_COMPILER_FLAGS + ["-std=c++11"]
|
||||||
|
|
||||||
@@ -34,10 +32,10 @@ cxx_library(
|
|||||||
deps = [yoga_dep(":yoga")],
|
deps = [yoga_dep(":yoga")],
|
||||||
)
|
)
|
||||||
|
|
||||||
if isdir('/Applications/Xcode.app'):
|
if is_apple_platform():
|
||||||
yoganet_ios_srcs = []
|
yoganet_ios_srcs = []
|
||||||
for arch in [
|
for arch in [
|
||||||
'iphonesimulator-x86_64', 'iphonesimulator-i386', 'iphoneos-arm64', 'iphoneos-armv7'
|
'iphonesimulator-x86_64', 'iphoneos-arm64'
|
||||||
]:
|
]:
|
||||||
name = 'yoganet-' + arch
|
name = 'yoganet-' + arch
|
||||||
yoganet_ios_srcs.append(':' + name)
|
yoganet_ios_srcs.append(':' + name)
|
||||||
@@ -65,8 +63,7 @@ if isdir('/Applications/Xcode.app'):
|
|||||||
genrule(
|
genrule(
|
||||||
name = 'yoganet-macosx',
|
name = 'yoganet-macosx',
|
||||||
srcs = [
|
srcs = [
|
||||||
yoga_dep(yoganet_macosx_target % 'x86_64'),
|
yoga_dep(yoganet_macosx_target % 'x86_64')
|
||||||
yoga_dep(yoganet_macosx_target % 'i386'),
|
|
||||||
],
|
],
|
||||||
out = 'libyoga.dylib',
|
out = 'libyoga.dylib',
|
||||||
cmd = 'lipo $SRCS -create -output $OUT',
|
cmd = 'lipo $SRCS -create -output $OUT',
|
||||||
|
@@ -1,10 +1,8 @@
|
|||||||
/**
|
/**
|
||||||
* Copyright (c) 2014-present, Facebook, Inc.
|
* Copyright (c) 2014-present, Facebook, Inc.
|
||||||
* All rights reserved.
|
|
||||||
*
|
*
|
||||||
* This source code is licensed under the BSD-style 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. An additional grant
|
* LICENSE file in the root directory of this source tree.
|
||||||
* of patent rights can be found in the PATENTS file in the same directory.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
namespace Facebook.Yoga
|
namespace Facebook.Yoga
|
||||||
|
@@ -10,9 +10,12 @@
|
|||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Compile Include="$(MSBuildThisFileDirectory)BaselineFunction.cs" />
|
<Compile Include="$(MSBuildThisFileDirectory)BaselineFunction.cs" />
|
||||||
|
<Compile Include="$(MSBuildThisFileDirectory)Logger.cs" />
|
||||||
<Compile Include="$(MSBuildThisFileDirectory)MeasureFunction.cs" />
|
<Compile Include="$(MSBuildThisFileDirectory)MeasureFunction.cs" />
|
||||||
<Compile Include="$(MSBuildThisFileDirectory)MeasureOutput.cs" />
|
<Compile Include="$(MSBuildThisFileDirectory)MeasureOutput.cs" />
|
||||||
<Compile Include="$(MSBuildThisFileDirectory)Native.cs" />
|
<Compile Include="$(MSBuildThisFileDirectory)Native.cs" />
|
||||||
|
<Compile Include="$(MSBuildThisFileDirectory)YGConfigHandle.cs" />
|
||||||
|
<Compile Include="$(MSBuildThisFileDirectory)YGNodeHandle.cs" />
|
||||||
<Compile Include="$(MSBuildThisFileDirectory)YogaAlign.cs" />
|
<Compile Include="$(MSBuildThisFileDirectory)YogaAlign.cs" />
|
||||||
<Compile Include="$(MSBuildThisFileDirectory)YogaBaselineFunc.cs" />
|
<Compile Include="$(MSBuildThisFileDirectory)YogaBaselineFunc.cs" />
|
||||||
<Compile Include="$(MSBuildThisFileDirectory)YogaConfig.cs" />
|
<Compile Include="$(MSBuildThisFileDirectory)YogaConfig.cs" />
|
||||||
|
15
csharp/Facebook.Yoga/Logger.cs
Normal file
15
csharp/Facebook.Yoga/Logger.cs
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
/**
|
||||||
|
* Copyright (c) 2014-present, Facebook, Inc.
|
||||||
|
*
|
||||||
|
* 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);
|
||||||
|
}
|
@@ -1,10 +1,8 @@
|
|||||||
/**
|
/**
|
||||||
* Copyright (c) 2014-present, Facebook, Inc.
|
* Copyright (c) 2014-present, Facebook, Inc.
|
||||||
* All rights reserved.
|
|
||||||
*
|
*
|
||||||
* This source code is licensed under the BSD-style 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. An additional grant
|
* LICENSE file in the root directory of this source tree.
|
||||||
* of patent rights can be found in the PATENTS file in the same directory.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
namespace Facebook.Yoga
|
namespace Facebook.Yoga
|
||||||
|
@@ -1,10 +1,8 @@
|
|||||||
/**
|
/**
|
||||||
* Copyright (c) 2014-present, Facebook, Inc.
|
* Copyright (c) 2014-present, Facebook, Inc.
|
||||||
* All rights reserved.
|
|
||||||
*
|
*
|
||||||
* This source code is licensed under the BSD-style 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. An additional grant
|
* LICENSE file in the root directory of this source tree.
|
||||||
* of patent rights can be found in the PATENTS file in the same directory.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
namespace Facebook.Yoga
|
namespace Facebook.Yoga
|
||||||
|
@@ -1,10 +1,8 @@
|
|||||||
/**
|
/**
|
||||||
* Copyright (c) 2014-present, Facebook, Inc.
|
* Copyright (c) 2014-present, Facebook, Inc.
|
||||||
* All rights reserved.
|
|
||||||
*
|
*
|
||||||
* This source code is licensed under the BSD-style 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. An additional grant
|
* LICENSE file in the root directory of this source tree.
|
||||||
* of patent rights can be found in the PATENTS file in the same directory.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
@@ -26,96 +24,9 @@ namespace Facebook.Yoga
|
|||||||
private const string DllName = "yoga";
|
private const string DllName = "yoga";
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
internal class YGNodeHandle : SafeHandle
|
|
||||||
{
|
|
||||||
#if (UNITY_IOS && !UNITY_EDITOR) || ENABLE_IL2CPP || __IOS__
|
|
||||||
private GCHandle _managed;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
private YGNodeHandle() : base(IntPtr.Zero, true)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
public override bool IsInvalid
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return this.handle == IntPtr.Zero;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
protected override bool ReleaseHandle()
|
|
||||||
{
|
|
||||||
#if (UNITY_IOS && !UNITY_EDITOR) || ENABLE_IL2CPP || __IOS__
|
|
||||||
ReleaseManaged();
|
|
||||||
#endif
|
|
||||||
Native.YGNodeFree(this.handle);
|
|
||||||
GC.KeepAlive(this);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
#if (UNITY_IOS && !UNITY_EDITOR) || ENABLE_IL2CPP || __IOS__
|
|
||||||
public void SetContext(YogaNode node)
|
|
||||||
{
|
|
||||||
if (!_managed.IsAllocated)
|
|
||||||
{
|
|
||||||
#if ENABLE_IL2CPP
|
|
||||||
// Weak causes 'GCHandle value belongs to a different domain' error
|
|
||||||
_managed = GCHandle.Alloc(node);
|
|
||||||
#else
|
|
||||||
_managed = GCHandle.Alloc(node, GCHandleType.Weak);
|
|
||||||
#endif
|
|
||||||
Native.YGNodeSetContext(this.handle, GCHandle.ToIntPtr(_managed));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void ReleaseManaged()
|
|
||||||
{
|
|
||||||
if (_managed.IsAllocated)
|
|
||||||
{
|
|
||||||
_managed.Free();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static YogaNode GetManaged(IntPtr ygNodePtr)
|
|
||||||
{
|
|
||||||
var node =
|
|
||||||
GCHandle.FromIntPtr(Native.YGNodeGetContext(ygNodePtr)).Target as YogaNode;
|
|
||||||
if (node == null)
|
|
||||||
{
|
|
||||||
throw new InvalidOperationException("YogaNode is already deallocated");
|
|
||||||
}
|
|
||||||
|
|
||||||
return node;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
internal class YGConfigHandle : SafeHandle
|
|
||||||
{
|
|
||||||
private YGConfigHandle() : base(IntPtr.Zero, true)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
public override bool IsInvalid
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return this.handle == IntPtr.Zero;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
protected override bool ReleaseHandle()
|
|
||||||
{
|
|
||||||
Native.YGConfigFree(this.handle);
|
|
||||||
GC.KeepAlive(this);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
[DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
|
[DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
|
||||||
public static extern void YGInteropSetLogger(
|
public static extern void YGInteropSetLogger(
|
||||||
[MarshalAs(UnmanagedType.FunctionPtr)] YogaLogger.Func func);
|
[MarshalAs(UnmanagedType.FunctionPtr)] YogaLogger logger);
|
||||||
|
|
||||||
[DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
|
[DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
|
||||||
public static extern YGNodeHandle YGNodeNew();
|
public static extern YGNodeHandle YGNodeNew();
|
||||||
@@ -129,6 +40,9 @@ namespace Facebook.Yoga
|
|||||||
[DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
|
[DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
|
||||||
public static extern void YGNodeReset(YGNodeHandle node);
|
public static extern void YGNodeReset(YGNodeHandle node);
|
||||||
|
|
||||||
|
[DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
|
||||||
|
public static extern YGConfigHandle YGConfigGetDefault();
|
||||||
|
|
||||||
[DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
|
[DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
|
||||||
public static extern YGConfigHandle YGConfigNew();
|
public static extern YGConfigHandle YGConfigNew();
|
||||||
|
|
||||||
@@ -445,15 +359,19 @@ namespace Facebook.Yoga
|
|||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region AOT
|
#region Context
|
||||||
|
|
||||||
#if (UNITY_IOS && !UNITY_EDITOR) || ENABLE_IL2CPP || __IOS__
|
|
||||||
[DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
|
[DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
|
||||||
public static extern IntPtr YGNodeGetContext(IntPtr node);
|
public static extern IntPtr YGNodeGetContext(IntPtr node);
|
||||||
|
|
||||||
[DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
|
[DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
|
||||||
public static extern void YGNodeSetContext(IntPtr node, IntPtr managed);
|
public static extern void YGNodeSetContext(IntPtr node, IntPtr managed);
|
||||||
#endif
|
|
||||||
|
[DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
|
||||||
|
public static extern IntPtr YGConfigGetContext(IntPtr config);
|
||||||
|
|
||||||
|
[DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
|
||||||
|
public static extern void YGConfigSetContext(IntPtr config, IntPtr managed);
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
}
|
}
|
||||||
|
82
csharp/Facebook.Yoga/YGConfigHandle.cs
Normal file
82
csharp/Facebook.Yoga/YGConfigHandle.cs
Normal file
@@ -0,0 +1,82 @@
|
|||||||
|
/**
|
||||||
|
* Copyright (c) 2014-present, Facebook, Inc.
|
||||||
|
*
|
||||||
|
* 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) 2014-present, Facebook, Inc.
|
||||||
|
*
|
||||||
|
* 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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@@ -1,10 +1,8 @@
|
|||||||
/**
|
/**
|
||||||
* Copyright (c) 2014-present, Facebook, Inc.
|
* Copyright (c) 2014-present, Facebook, Inc.
|
||||||
* All rights reserved.
|
|
||||||
*
|
*
|
||||||
* This source code is licensed under the BSD-style 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. An additional grant
|
* LICENSE file in the root directory of this source tree.
|
||||||
* of patent rights can be found in the PATENTS file in the same directory.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
namespace Facebook.Yoga
|
namespace Facebook.Yoga
|
||||||
|
@@ -1,10 +1,8 @@
|
|||||||
/**
|
/**
|
||||||
* Copyright (c) 2014-present, Facebook, Inc.
|
* Copyright (c) 2014-present, Facebook, Inc.
|
||||||
* All rights reserved.
|
|
||||||
*
|
*
|
||||||
* This source code is licensed under the BSD-style 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. An additional grant
|
* LICENSE file in the root directory of this source tree.
|
||||||
* of patent rights can be found in the PATENTS file in the same directory.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
@@ -13,5 +11,5 @@ using System.Runtime.InteropServices;
|
|||||||
namespace Facebook.Yoga
|
namespace Facebook.Yoga
|
||||||
{
|
{
|
||||||
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
|
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
|
||||||
public delegate float YogaBaselineFunc(IntPtr node, float width, float height);
|
public delegate float YogaBaselineFunc(IntPtr unmanagedNodePtr, float width, float height);
|
||||||
}
|
}
|
||||||
|
@@ -1,36 +1,97 @@
|
|||||||
/**
|
/**
|
||||||
* Copyright (c) 2014-present, Facebook, Inc.
|
* Copyright (c) 2014-present, Facebook, Inc.
|
||||||
* All rights reserved.
|
|
||||||
*
|
*
|
||||||
* This source code is licensed under the BSD-style 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. An additional grant
|
* LICENSE file in the root directory of this source tree.
|
||||||
* of patent rights can be found in the PATENTS file in the same directory.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
|
#if __IOS__
|
||||||
|
using ObjCRuntime;
|
||||||
|
#endif
|
||||||
|
#if ENABLE_IL2CPP
|
||||||
|
using AOT;
|
||||||
|
#endif
|
||||||
|
|
||||||
namespace Facebook.Yoga
|
namespace Facebook.Yoga
|
||||||
{
|
{
|
||||||
public class YogaConfig
|
public class YogaConfig
|
||||||
{
|
{
|
||||||
private Native.YGConfigHandle _ygConfig;
|
internal static readonly YogaConfig Default = new YogaConfig(YGConfigHandle.Default);
|
||||||
|
private static YogaLogger _managedLogger;
|
||||||
|
|
||||||
public YogaConfig()
|
private YGConfigHandle _ygConfig;
|
||||||
|
private Logger _logger;
|
||||||
|
|
||||||
|
private YogaConfig(YGConfigHandle ygConfig)
|
||||||
{
|
{
|
||||||
_ygConfig = Native.YGConfigNew();
|
_ygConfig = ygConfig;
|
||||||
if (_ygConfig.IsInvalid)
|
if (_ygConfig.IsInvalid)
|
||||||
{
|
{
|
||||||
throw new InvalidOperationException("Failed to allocate native memory");
|
throw new InvalidOperationException("Failed to allocate native memory");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_ygConfig.SetContext(this);
|
||||||
|
|
||||||
|
if (_ygConfig == YGConfigHandle.Default)
|
||||||
|
{
|
||||||
|
_managedLogger = LoggerInternal;
|
||||||
|
Native.YGInteropSetLogger(_managedLogger);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
internal Native.YGConfigHandle Handle
|
public YogaConfig()
|
||||||
|
: this(Native.YGConfigNew())
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
internal YGConfigHandle Handle
|
||||||
{
|
{
|
||||||
get {
|
get {
|
||||||
return _ygConfig;
|
return _ygConfig;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if (UNITY_IOS && !UNITY_EDITOR) || ENABLE_IL2CPP || __IOS__
|
||||||
|
[MonoPInvokeCallback(typeof(YogaLogger))]
|
||||||
|
#endif
|
||||||
|
private static void LoggerInternal(
|
||||||
|
IntPtr unmanagedConfigPtr,
|
||||||
|
IntPtr unmanagedNodePtr,
|
||||||
|
YogaLogLevel level,
|
||||||
|
string message)
|
||||||
|
{
|
||||||
|
var config = YGConfigHandle.GetManaged(unmanagedConfigPtr);
|
||||||
|
if (config == null || config._logger == null)
|
||||||
|
{
|
||||||
|
// Default logger
|
||||||
|
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(
|
public void SetExperimentalFeatureEnabled(
|
||||||
YogaExperimentalFeature feature,
|
YogaExperimentalFeature feature,
|
||||||
bool enabled)
|
bool enabled)
|
||||||
@@ -68,5 +129,10 @@ namespace Facebook.Yoga
|
|||||||
{
|
{
|
||||||
return Native.YGConfigGetInstanceCount();
|
return Native.YGConfigGetInstanceCount();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void SetDefaultLogger(Logger logger)
|
||||||
|
{
|
||||||
|
Default.Logger = logger;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -1,10 +1,8 @@
|
|||||||
/**
|
/**
|
||||||
* Copyright (c) 2014-present, Facebook, Inc.
|
* Copyright (c) 2014-present, Facebook, Inc.
|
||||||
* All rights reserved.
|
|
||||||
*
|
*
|
||||||
* This source code is licensed under the BSD-style 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. An additional grant
|
* LICENSE file in the root directory of this source tree.
|
||||||
* of patent rights can be found in the PATENTS file in the same directory.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
namespace Facebook.Yoga
|
namespace Facebook.Yoga
|
||||||
|
@@ -1,10 +1,8 @@
|
|||||||
/**
|
/**
|
||||||
* Copyright (c) 2014-present, Facebook, Inc.
|
* Copyright (c) 2014-present, Facebook, Inc.
|
||||||
* All rights reserved.
|
|
||||||
*
|
*
|
||||||
* This source code is licensed under the BSD-style 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. An additional grant
|
* LICENSE file in the root directory of this source tree.
|
||||||
* of patent rights can be found in the PATENTS file in the same directory.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
namespace Facebook.Yoga
|
namespace Facebook.Yoga
|
||||||
|
@@ -1,10 +1,8 @@
|
|||||||
/**
|
/**
|
||||||
* Copyright (c) 2014-present, Facebook, Inc.
|
* Copyright (c) 2014-present, Facebook, Inc.
|
||||||
* All rights reserved.
|
|
||||||
*
|
*
|
||||||
* This source code is licensed under the BSD-style 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. An additional grant
|
* LICENSE file in the root directory of this source tree.
|
||||||
* of patent rights can be found in the PATENTS file in the same directory.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
namespace Facebook.Yoga
|
namespace Facebook.Yoga
|
||||||
|
@@ -1,10 +1,8 @@
|
|||||||
/**
|
/**
|
||||||
* Copyright (c) 2014-present, Facebook, Inc.
|
* Copyright (c) 2014-present, Facebook, Inc.
|
||||||
* All rights reserved.
|
|
||||||
*
|
*
|
||||||
* This source code is licensed under the BSD-style 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. An additional grant
|
* LICENSE file in the root directory of this source tree.
|
||||||
* of patent rights can be found in the PATENTS file in the same directory.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
namespace Facebook.Yoga
|
namespace Facebook.Yoga
|
||||||
|
@@ -1,10 +1,8 @@
|
|||||||
/**
|
/**
|
||||||
* Copyright (c) 2014-present, Facebook, Inc.
|
* Copyright (c) 2014-present, Facebook, Inc.
|
||||||
* All rights reserved.
|
|
||||||
*
|
*
|
||||||
* This source code is licensed under the BSD-style 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. An additional grant
|
* LICENSE file in the root directory of this source tree.
|
||||||
* of patent rights can be found in the PATENTS file in the same directory.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
namespace Facebook.Yoga
|
namespace Facebook.Yoga
|
||||||
|
@@ -1,18 +1,14 @@
|
|||||||
/**
|
/**
|
||||||
* Copyright (c) 2014-present, Facebook, Inc.
|
* Copyright (c) 2014-present, Facebook, Inc.
|
||||||
* All rights reserved.
|
|
||||||
*
|
*
|
||||||
* This source code is licensed under the BSD-style 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. An additional grant
|
* LICENSE file in the root directory of this source tree.
|
||||||
* of patent rights can be found in the PATENTS file in the same directory.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
namespace Facebook.Yoga
|
namespace Facebook.Yoga
|
||||||
{
|
{
|
||||||
public enum YogaExperimentalFeature
|
public enum YogaExperimentalFeature
|
||||||
{
|
{
|
||||||
Rounding,
|
|
||||||
WebFlexBasis,
|
WebFlexBasis,
|
||||||
MinFlexFix,
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -1,10 +1,8 @@
|
|||||||
/**
|
/**
|
||||||
* Copyright (c) 2014-present, Facebook, Inc.
|
* Copyright (c) 2014-present, Facebook, Inc.
|
||||||
* All rights reserved.
|
|
||||||
*
|
*
|
||||||
* This source code is licensed under the BSD-style 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. An additional grant
|
* LICENSE file in the root directory of this source tree.
|
||||||
* of patent rights can be found in the PATENTS file in the same directory.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
namespace Facebook.Yoga
|
namespace Facebook.Yoga
|
||||||
|
@@ -1,10 +1,8 @@
|
|||||||
/**
|
/**
|
||||||
* Copyright (c) 2014-present, Facebook, Inc.
|
* Copyright (c) 2014-present, Facebook, Inc.
|
||||||
* All rights reserved.
|
|
||||||
*
|
*
|
||||||
* This source code is licensed under the BSD-style 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. An additional grant
|
* LICENSE file in the root directory of this source tree.
|
||||||
* of patent rights can be found in the PATENTS file in the same directory.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
namespace Facebook.Yoga
|
namespace Facebook.Yoga
|
||||||
@@ -16,5 +14,6 @@ namespace Facebook.Yoga
|
|||||||
FlexEnd,
|
FlexEnd,
|
||||||
SpaceBetween,
|
SpaceBetween,
|
||||||
SpaceAround,
|
SpaceAround,
|
||||||
|
SpaceEvenly,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -1,10 +1,8 @@
|
|||||||
/**
|
/**
|
||||||
* Copyright (c) 2014-present, Facebook, Inc.
|
* Copyright (c) 2014-present, Facebook, Inc.
|
||||||
* All rights reserved.
|
|
||||||
*
|
*
|
||||||
* This source code is licensed under the BSD-style 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. An additional grant
|
* LICENSE file in the root directory of this source tree.
|
||||||
* of patent rights can be found in the PATENTS file in the same directory.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
namespace Facebook.Yoga
|
namespace Facebook.Yoga
|
||||||
@@ -16,5 +14,6 @@ namespace Facebook.Yoga
|
|||||||
Info,
|
Info,
|
||||||
Debug,
|
Debug,
|
||||||
Verbose,
|
Verbose,
|
||||||
|
Fatal,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -1,57 +1,19 @@
|
|||||||
/**
|
/**
|
||||||
* Copyright (c) 2014-present, Facebook, Inc.
|
* Copyright (c) 2014-present, Facebook, Inc.
|
||||||
* All rights reserved.
|
|
||||||
*
|
*
|
||||||
* This source code is licensed under the BSD-style 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. An additional grant
|
* LICENSE file in the root directory of this source tree.
|
||||||
* of patent rights can be found in the PATENTS file in the same directory.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
using System.Runtime.InteropServices;
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
#if __IOS__
|
|
||||||
using ObjCRuntime;
|
|
||||||
#endif
|
|
||||||
#if ENABLE_IL2CPP
|
|
||||||
using AOT;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
namespace Facebook.Yoga
|
namespace Facebook.Yoga
|
||||||
{
|
|
||||||
internal static class YogaLogger
|
|
||||||
{
|
{
|
||||||
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
|
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
|
||||||
public delegate void Func(YogaLogLevel level, string message);
|
public delegate void YogaLogger(
|
||||||
|
IntPtr unmanagedConfigPtr,
|
||||||
private static bool _initialized;
|
IntPtr unmanagedNotePtr,
|
||||||
private static Func _managedLogger = LoggerInternal;
|
YogaLogLevel level,
|
||||||
|
string message);
|
||||||
public static Func Logger = null;
|
|
||||||
|
|
||||||
#if (UNITY_IOS && !UNITY_EDITOR) || ENABLE_IL2CPP || __IOS__
|
|
||||||
[MonoPInvokeCallback(typeof(Func))]
|
|
||||||
#endif
|
|
||||||
public static void LoggerInternal(YogaLogLevel level, string message)
|
|
||||||
{
|
|
||||||
if (Logger != null)
|
|
||||||
{
|
|
||||||
Logger(level, message);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (level == YogaLogLevel.Error)
|
|
||||||
{
|
|
||||||
throw new InvalidOperationException(message);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void Initialize()
|
|
||||||
{
|
|
||||||
if (!_initialized)
|
|
||||||
{
|
|
||||||
Native.YGInteropSetLogger(_managedLogger);
|
|
||||||
_initialized = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@@ -1,10 +1,8 @@
|
|||||||
/**
|
/**
|
||||||
* Copyright (c) 2014-present, Facebook, Inc.
|
* Copyright (c) 2014-present, Facebook, Inc.
|
||||||
* All rights reserved.
|
|
||||||
*
|
*
|
||||||
* This source code is licensed under the BSD-style 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. An additional grant
|
* LICENSE file in the root directory of this source tree.
|
||||||
* of patent rights can be found in the PATENTS file in the same directory.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
@@ -14,7 +12,7 @@ namespace Facebook.Yoga
|
|||||||
{
|
{
|
||||||
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
|
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
|
||||||
public delegate YogaSize YogaMeasureFunc(
|
public delegate YogaSize YogaMeasureFunc(
|
||||||
IntPtr node,
|
IntPtr unmanagedNodePtr,
|
||||||
float width,
|
float width,
|
||||||
YogaMeasureMode widthMode,
|
YogaMeasureMode widthMode,
|
||||||
float height,
|
float height,
|
||||||
|
@@ -1,10 +1,8 @@
|
|||||||
/**
|
/**
|
||||||
* Copyright (c) 2014-present, Facebook, Inc.
|
* Copyright (c) 2014-present, Facebook, Inc.
|
||||||
* All rights reserved.
|
|
||||||
*
|
*
|
||||||
* This source code is licensed under the BSD-style 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. An additional grant
|
* LICENSE file in the root directory of this source tree.
|
||||||
* of patent rights can be found in the PATENTS file in the same directory.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
namespace Facebook.Yoga
|
namespace Facebook.Yoga
|
||||||
|
@@ -1,10 +1,8 @@
|
|||||||
/**
|
/**
|
||||||
* Copyright (c) 2014-present, Facebook, Inc.
|
* Copyright (c) 2014-present, Facebook, Inc.
|
||||||
* All rights reserved.
|
|
||||||
*
|
*
|
||||||
* This source code is licensed under the BSD-style 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. An additional grant
|
* LICENSE file in the root directory of this source tree.
|
||||||
* of patent rights can be found in the PATENTS file in the same directory.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
namespace Facebook.Yoga
|
namespace Facebook.Yoga
|
||||||
|
@@ -1,20 +1,16 @@
|
|||||||
/**
|
/**
|
||||||
* Copyright (c) 2014-present, Facebook, Inc.
|
* Copyright (c) 2014-present, Facebook, Inc.
|
||||||
* All rights reserved.
|
|
||||||
*
|
*
|
||||||
* This source code is licensed under the BSD-style 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. An additional grant
|
* LICENSE file in the root directory of this source tree.
|
||||||
* of patent rights can be found in the PATENTS file in the same directory.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
using System.Collections;
|
using System.Collections;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
|
|
||||||
#if (UNITY_IOS && !UNITY_EDITOR) || ENABLE_IL2CPP || __IOS__
|
|
||||||
using System.Runtime.InteropServices;
|
|
||||||
#endif
|
|
||||||
#if __IOS__
|
#if __IOS__
|
||||||
using ObjCRuntime;
|
using ObjCRuntime;
|
||||||
#endif
|
#endif
|
||||||
@@ -26,49 +22,26 @@ namespace Facebook.Yoga
|
|||||||
{
|
{
|
||||||
public partial class YogaNode : IEnumerable<YogaNode>
|
public partial class YogaNode : IEnumerable<YogaNode>
|
||||||
{
|
{
|
||||||
private readonly Native.YGNodeHandle _ygNode;
|
private readonly YGNodeHandle _ygNode;
|
||||||
private readonly YogaConfig _config;
|
private readonly YogaConfig _config;
|
||||||
private WeakReference _parent;
|
private WeakReference _parent;
|
||||||
private List<YogaNode> _children;
|
private List<YogaNode> _children;
|
||||||
private MeasureFunction _measureFunction;
|
private MeasureFunction _measureFunction;
|
||||||
private BaselineFunction _baselineFunction;
|
private BaselineFunction _baselineFunction;
|
||||||
private object _data;
|
|
||||||
#if (UNITY_IOS && !UNITY_EDITOR) || ENABLE_IL2CPP || __IOS__
|
|
||||||
private static YogaMeasureFunc _managedMeasure;
|
|
||||||
private static YogaBaselineFunc _managedBaseline;
|
|
||||||
#else
|
|
||||||
private YogaMeasureFunc _managedMeasure;
|
private YogaMeasureFunc _managedMeasure;
|
||||||
private YogaBaselineFunc _managedBaseline;
|
private YogaBaselineFunc _managedBaseline;
|
||||||
#endif
|
private object _data;
|
||||||
|
|
||||||
public YogaNode()
|
public YogaNode(YogaConfig config = null)
|
||||||
{
|
{
|
||||||
YogaLogger.Initialize();
|
_config = config == null ? YogaConfig.Default : config;
|
||||||
|
|
||||||
_ygNode = Native.YGNodeNew();
|
|
||||||
if (_ygNode.IsInvalid)
|
|
||||||
{
|
|
||||||
throw new InvalidOperationException("Failed to allocate native memory");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public YogaNode(YogaConfig config)
|
|
||||||
{
|
|
||||||
YogaLogger.Initialize();
|
|
||||||
|
|
||||||
if (config != null)
|
|
||||||
{
|
|
||||||
_config = config;
|
|
||||||
_ygNode = Native.YGNodeNewWithConfig(_config.Handle);
|
_ygNode = Native.YGNodeNewWithConfig(_config.Handle);
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
_ygNode = Native.YGNodeNew();
|
|
||||||
}
|
|
||||||
if (_ygNode.IsInvalid)
|
if (_ygNode.IsInvalid)
|
||||||
{
|
{
|
||||||
throw new InvalidOperationException("Failed to allocate native memory");
|
throw new InvalidOperationException("Failed to allocate native memory");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_ygNode.SetContext(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
public YogaNode(YogaNode srcNode)
|
public YogaNode(YogaNode srcNode)
|
||||||
@@ -83,10 +56,9 @@ namespace Facebook.Yoga
|
|||||||
_baselineFunction = null;
|
_baselineFunction = null;
|
||||||
_data = null;
|
_data = null;
|
||||||
|
|
||||||
Native.YGNodeReset(_ygNode);
|
|
||||||
#if (UNITY_IOS && !UNITY_EDITOR) || ENABLE_IL2CPP || __IOS__
|
|
||||||
_ygNode.ReleaseManaged();
|
_ygNode.ReleaseManaged();
|
||||||
#endif
|
Native.YGNodeReset(_ygNode);
|
||||||
|
_ygNode.SetContext(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool IsDirty
|
public bool IsDirty
|
||||||
@@ -609,109 +581,71 @@ namespace Facebook.Yoga
|
|||||||
public void SetMeasureFunction(MeasureFunction measureFunction)
|
public void SetMeasureFunction(MeasureFunction measureFunction)
|
||||||
{
|
{
|
||||||
_measureFunction = measureFunction;
|
_measureFunction = measureFunction;
|
||||||
if (measureFunction != null)
|
_managedMeasure = measureFunction != null ? MeasureInternal : (YogaMeasureFunc)null;
|
||||||
{
|
|
||||||
#if (UNITY_IOS && !UNITY_EDITOR) || ENABLE_IL2CPP || __IOS__
|
|
||||||
_managedMeasure = MeasureInternalAOT;
|
|
||||||
_ygNode.SetContext(this);
|
|
||||||
#else
|
|
||||||
_managedMeasure = MeasureInternal;
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
_managedMeasure = null;
|
|
||||||
}
|
|
||||||
Native.YGNodeSetMeasureFunc(_ygNode, _managedMeasure);
|
Native.YGNodeSetMeasureFunc(_ygNode, _managedMeasure);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void SetBaselineFunction(BaselineFunction baselineFunction)
|
public void SetBaselineFunction(BaselineFunction baselineFunction)
|
||||||
{
|
{
|
||||||
_baselineFunction = baselineFunction;
|
_baselineFunction = baselineFunction;
|
||||||
if (baselineFunction != null)
|
_managedBaseline =
|
||||||
{
|
baselineFunction != null ? BaselineInternal : (YogaBaselineFunc)null;
|
||||||
#if (UNITY_IOS && !UNITY_EDITOR) || ENABLE_IL2CPP || __IOS__
|
|
||||||
_managedBaseline = BaselineInternalAOT;
|
|
||||||
_ygNode.SetContext(this);
|
|
||||||
#else
|
|
||||||
_managedBaseline = BaselineInternal;
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
_managedBaseline = null;
|
|
||||||
}
|
|
||||||
Native.YGNodeSetBaselineFunc(_ygNode, _managedBaseline);
|
Native.YGNodeSetBaselineFunc(_ygNode, _managedBaseline);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void CalculateLayout()
|
public void CalculateLayout(
|
||||||
|
float width = YogaConstants.Undefined,
|
||||||
|
float height = YogaConstants.Undefined)
|
||||||
{
|
{
|
||||||
Native.YGNodeCalculateLayout(
|
Native.YGNodeCalculateLayout(
|
||||||
_ygNode,
|
_ygNode,
|
||||||
YogaConstants.Undefined,
|
width,
|
||||||
YogaConstants.Undefined,
|
height,
|
||||||
Native.YGNodeStyleGetDirection(_ygNode));
|
Native.YGNodeStyleGetDirection(_ygNode));
|
||||||
}
|
}
|
||||||
|
|
||||||
#if (UNITY_IOS && !UNITY_EDITOR) || ENABLE_IL2CPP || __IOS__
|
#if (UNITY_IOS && !UNITY_EDITOR) || ENABLE_IL2CPP || __IOS__
|
||||||
[MonoPInvokeCallback(typeof(YogaMeasureFunc))]
|
[MonoPInvokeCallback(typeof(YogaMeasureFunc))]
|
||||||
private static YogaSize MeasureInternalAOT(
|
|
||||||
IntPtr ygNodePtr,
|
|
||||||
float width,
|
|
||||||
YogaMeasureMode widthMode,
|
|
||||||
float height,
|
|
||||||
YogaMeasureMode heightMode)
|
|
||||||
{
|
|
||||||
var node = Native.YGNodeHandle.GetManaged(ygNodePtr);
|
|
||||||
return node.MeasureInternal(IntPtr.Zero, width, widthMode, height, heightMode);
|
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
|
private static YogaSize MeasureInternal(
|
||||||
private YogaSize MeasureInternal(
|
IntPtr unmanagedNodePtr,
|
||||||
IntPtr node,
|
|
||||||
float width,
|
float width,
|
||||||
YogaMeasureMode widthMode,
|
YogaMeasureMode widthMode,
|
||||||
float height,
|
float height,
|
||||||
YogaMeasureMode heightMode)
|
YogaMeasureMode heightMode)
|
||||||
{
|
{
|
||||||
if (_measureFunction == null)
|
var node = YGNodeHandle.GetManaged(unmanagedNodePtr);
|
||||||
|
if (node == null || node._measureFunction == null)
|
||||||
{
|
{
|
||||||
throw new InvalidOperationException("Measure function is not defined.");
|
throw new InvalidOperationException("Measure function is not defined.");
|
||||||
}
|
}
|
||||||
|
return node._measureFunction(node, width, widthMode, height, heightMode);
|
||||||
return _measureFunction(this, width, widthMode, height, heightMode);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#if (UNITY_IOS && !UNITY_EDITOR) || ENABLE_IL2CPP || __IOS__
|
#if (UNITY_IOS && !UNITY_EDITOR) || ENABLE_IL2CPP || __IOS__
|
||||||
[MonoPInvokeCallback(typeof(YogaBaselineFunc))]
|
[MonoPInvokeCallback(typeof(YogaBaselineFunc))]
|
||||||
private static float BaselineInternalAOT(
|
#endif
|
||||||
IntPtr ygNodePtr,
|
private static float BaselineInternal(
|
||||||
|
IntPtr unmanagedNodePtr,
|
||||||
float width,
|
float width,
|
||||||
float height)
|
float height)
|
||||||
{
|
{
|
||||||
var node = Native.YGNodeHandle.GetManaged(ygNodePtr);
|
var node = YGNodeHandle.GetManaged(unmanagedNodePtr);
|
||||||
return node.BaselineInternal(IntPtr.Zero, width, height);
|
if (node == null || node._baselineFunction == null)
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
private float BaselineInternal(IntPtr node, float width, float height)
|
|
||||||
{
|
|
||||||
if (_baselineFunction == null)
|
|
||||||
{
|
{
|
||||||
throw new InvalidOperationException("Baseline function is not defined.");
|
throw new InvalidOperationException("Baseline function is not defined.");
|
||||||
}
|
}
|
||||||
|
return node._baselineFunction(node, width, height);
|
||||||
return _baselineFunction(this, width, height);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public string Print(YogaPrintOptions options =
|
public string Print(YogaPrintOptions options =
|
||||||
YogaPrintOptions.Layout|YogaPrintOptions.Style|YogaPrintOptions.Children)
|
YogaPrintOptions.Layout|YogaPrintOptions.Style|YogaPrintOptions.Children)
|
||||||
{
|
{
|
||||||
StringBuilder sb = new StringBuilder();
|
StringBuilder sb = new StringBuilder();
|
||||||
YogaLogger.Func orig = YogaLogger.Logger;
|
Logger orig = _config.Logger;
|
||||||
YogaLogger.Logger = (level, message) => {sb.Append(message);};
|
_config.Logger = (config, node, level, message) => {sb.Append(message);};
|
||||||
Native.YGNodePrint(_ygNode, options);
|
Native.YGNodePrint(_ygNode, options);
|
||||||
YogaLogger.Logger = orig;
|
_config.Logger = orig;
|
||||||
return sb.ToString();
|
return sb.ToString();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
15
csharp/Facebook.Yoga/YogaNodeType.cs
Normal file
15
csharp/Facebook.Yoga/YogaNodeType.cs
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
/**
|
||||||
|
* Copyright (c) 2014-present, Facebook, Inc.
|
||||||
|
*
|
||||||
|
* 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 enum YogaNodeType
|
||||||
|
{
|
||||||
|
Default,
|
||||||
|
Text,
|
||||||
|
}
|
||||||
|
}
|
@@ -1,10 +1,8 @@
|
|||||||
/**
|
/**
|
||||||
* Copyright (c) 2014-present, Facebook, Inc.
|
* Copyright (c) 2014-present, Facebook, Inc.
|
||||||
* All rights reserved.
|
|
||||||
*
|
*
|
||||||
* This source code is licensed under the BSD-style 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. An additional grant
|
* LICENSE file in the root directory of this source tree.
|
||||||
* of patent rights can be found in the PATENTS file in the same directory.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
namespace Facebook.Yoga
|
namespace Facebook.Yoga
|
||||||
|
@@ -1,10 +1,8 @@
|
|||||||
/**
|
/**
|
||||||
* Copyright (c) 2014-present, Facebook, Inc.
|
* Copyright (c) 2014-present, Facebook, Inc.
|
||||||
* All rights reserved.
|
|
||||||
*
|
*
|
||||||
* This source code is licensed under the BSD-style 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. An additional grant
|
* LICENSE file in the root directory of this source tree.
|
||||||
* of patent rights can be found in the PATENTS file in the same directory.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
namespace Facebook.Yoga
|
namespace Facebook.Yoga
|
||||||
|
@@ -1,10 +1,8 @@
|
|||||||
/**
|
/**
|
||||||
* Copyright (c) 2014-present, Facebook, Inc.
|
* Copyright (c) 2014-present, Facebook, Inc.
|
||||||
* All rights reserved.
|
|
||||||
*
|
*
|
||||||
* This source code is licensed under the BSD-style 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. An additional grant
|
* LICENSE file in the root directory of this source tree.
|
||||||
* of patent rights can be found in the PATENTS file in the same directory.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
namespace Facebook.Yoga
|
namespace Facebook.Yoga
|
||||||
|
@@ -1,10 +1,8 @@
|
|||||||
/**
|
/**
|
||||||
* Copyright (c) 2014-present, Facebook, Inc.
|
* Copyright (c) 2014-present, Facebook, Inc.
|
||||||
* All rights reserved.
|
|
||||||
*
|
*
|
||||||
* This source code is licensed under the BSD-style 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. An additional grant
|
* LICENSE file in the root directory of this source tree.
|
||||||
* of patent rights can be found in the PATENTS file in the same directory.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
using System.Runtime.InteropServices;
|
using System.Runtime.InteropServices;
|
||||||
|
@@ -1,10 +1,8 @@
|
|||||||
/**
|
/**
|
||||||
* Copyright (c) 2014-present, Facebook, Inc.
|
* Copyright (c) 2014-present, Facebook, Inc.
|
||||||
* All rights reserved.
|
|
||||||
*
|
*
|
||||||
* This source code is licensed under the BSD-style 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. An additional grant
|
* LICENSE file in the root directory of this source tree.
|
||||||
* of patent rights can be found in the PATENTS file in the same directory.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
namespace Facebook.Yoga
|
namespace Facebook.Yoga
|
||||||
|
@@ -1,10 +1,8 @@
|
|||||||
/**
|
/**
|
||||||
* Copyright (c) 2014-present, Facebook, Inc.
|
* Copyright (c) 2014-present, Facebook, Inc.
|
||||||
* All rights reserved.
|
|
||||||
*
|
*
|
||||||
* This source code is licensed under the BSD-style 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. An additional grant
|
* LICENSE file in the root directory of this source tree.
|
||||||
* of patent rights can be found in the PATENTS file in the same directory.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
|
@@ -1,10 +1,8 @@
|
|||||||
/**
|
/**
|
||||||
* Copyright (c) 2014-present, Facebook, Inc.
|
* Copyright (c) 2014-present, Facebook, Inc.
|
||||||
* All rights reserved.
|
|
||||||
*
|
*
|
||||||
* This source code is licensed under the BSD-style 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. An additional grant
|
* LICENSE file in the root directory of this source tree.
|
||||||
* of patent rights can be found in the PATENTS file in the same directory.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
namespace Facebook.Yoga
|
namespace Facebook.Yoga
|
||||||
|
@@ -1,10 +1,8 @@
|
|||||||
/**
|
/**
|
||||||
* Copyright (c) 2014-present, Facebook, Inc.
|
* Copyright (c) 2014-present, Facebook, Inc.
|
||||||
* All rights reserved.
|
|
||||||
*
|
*
|
||||||
* This source code is licensed under the BSD-style 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. An additional grant
|
* LICENSE file in the root directory of this source tree.
|
||||||
* of patent rights can be found in the PATENTS file in the same directory.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
namespace Facebook.Yoga
|
namespace Facebook.Yoga
|
||||||
|
@@ -4,6 +4,7 @@ using System.Collections.Generic;
|
|||||||
using System.Drawing;
|
using System.Drawing;
|
||||||
#if __IOS__
|
#if __IOS__
|
||||||
using NativeView = UIKit.UIView;
|
using NativeView = UIKit.UIView;
|
||||||
|
using NativeScrollView = UIKit.UIScrollView;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
namespace Facebook.YogaKit
|
namespace Facebook.YogaKit
|
||||||
@@ -699,12 +700,12 @@ namespace Facebook.YogaKit
|
|||||||
{
|
{
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
return _node.StyleAspectRatio;
|
return _node.AspectRatio;
|
||||||
}
|
}
|
||||||
|
|
||||||
set
|
set
|
||||||
{
|
{
|
||||||
_node.StyleAspectRatio = value;
|
_node.AspectRatio = value;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -716,6 +717,17 @@ namespace Facebook.YogaKit
|
|||||||
float width = 0;
|
float width = 0;
|
||||||
float height = 0;
|
float height = 0;
|
||||||
GetWidthHeightOfNativeView(view, out width, out height);
|
GetWidthHeightOfNativeView(view, out width, out height);
|
||||||
|
if (view is NativeScrollView)
|
||||||
|
{
|
||||||
|
if (FlexDirection == YogaFlexDirection.Column || FlexDirection == YogaFlexDirection.ColumnReverse)
|
||||||
|
{
|
||||||
|
height = float.NaN;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
width = float.NaN;
|
||||||
|
}
|
||||||
|
}
|
||||||
CalculateLayoutWithSize(this, width, height);
|
CalculateLayoutWithSize(this, width, height);
|
||||||
ApplyLayoutToViewHierarchy(view);
|
ApplyLayoutToViewHierarchy(view);
|
||||||
}
|
}
|
||||||
@@ -743,9 +755,7 @@ namespace Facebook.YogaKit
|
|||||||
|
|
||||||
var node = layout._node;
|
var node = layout._node;
|
||||||
|
|
||||||
node.Width = width;
|
node.CalculateLayout(width, height);
|
||||||
node.Height = height;
|
|
||||||
node.CalculateLayout();
|
|
||||||
|
|
||||||
return new SizeF { Width = node.LayoutWidth, Height = node.LayoutHeight };
|
return new SizeF { Width = node.LayoutWidth, Height = node.LayoutHeight };
|
||||||
}
|
}
|
||||||
@@ -775,14 +785,14 @@ namespace Facebook.YogaKit
|
|||||||
float result;
|
float result;
|
||||||
if (measureMode == YogaMeasureMode.Exactly)
|
if (measureMode == YogaMeasureMode.Exactly)
|
||||||
{
|
{
|
||||||
result = (float)constrainedSize;
|
result = constrainedSize;
|
||||||
}
|
}
|
||||||
else if (measureMode == YogaMeasureMode.AtMost)
|
else if (measureMode == YogaMeasureMode.AtMost)
|
||||||
{
|
{
|
||||||
result = (float)Math.Min(constrainedSize, measuredSize);
|
result = Math.Min(constrainedSize, measuredSize);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
result = (float)measuredSize;
|
result = measuredSize;
|
||||||
}
|
}
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
@@ -820,7 +830,7 @@ namespace Facebook.YogaKit
|
|||||||
var subviewsToInclude = new List<NativeView>();
|
var subviewsToInclude = new List<NativeView>();
|
||||||
foreach (var subview in view.Subviews)
|
foreach (var subview in view.Subviews)
|
||||||
{
|
{
|
||||||
if (subview.Yoga().IsIncludeInLayout)
|
if (subview.Yoga().IsEnabled && subview.Yoga().IsIncludeInLayout)
|
||||||
{
|
{
|
||||||
subviewsToInclude.Add(subview);
|
subviewsToInclude.Add(subview);
|
||||||
}
|
}
|
||||||
@@ -856,7 +866,7 @@ namespace Facebook.YogaKit
|
|||||||
|
|
||||||
static double RoundPointValue(float value)
|
static double RoundPointValue(float value)
|
||||||
{
|
{
|
||||||
float scale = NativePointScale;
|
float scale = NativePixelScale;
|
||||||
|
|
||||||
return Math.Round(value * scale) / scale;
|
return Math.Round(value * scale) / scale;
|
||||||
}
|
}
|
||||||
|
@@ -1,10 +1,8 @@
|
|||||||
/**
|
/**
|
||||||
* Copyright (c) 2014-present, Facebook, Inc.
|
* Copyright (c) 2014-present, Facebook, Inc.
|
||||||
* All rights reserved.
|
|
||||||
*
|
*
|
||||||
* This source code is licensed under the BSD-style 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. An additional grant
|
* LICENSE file in the root directory of this source tree.
|
||||||
* of patent rights can be found in the PATENTS file in the same directory.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
|
@@ -4,7 +4,7 @@
|
|||||||
<CompileDependsOn>NativeLibrary;$(CompileDependsOn)</CompileDependsOn>
|
<CompileDependsOn>NativeLibrary;$(CompileDependsOn)</CompileDependsOn>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<Target Name="NativeLibrary" Outputs="$(ProjectDir)libyoga.dylib">
|
<Target Name="NativeLibrary" Outputs="$(ProjectDir)libyoga.dylib">
|
||||||
<Exec WorkingDirectory="$(ProjectDir)" Command="$(ProjectDir)buck-build.sh //csharp:yoganet-macosx" />
|
<Exec WorkingDirectory="$(ProjectDir)" Command="$(ProjectDir)../build-native.sh" />
|
||||||
<Copy SourceFiles="$(ProjectDir)..\..\buck-out\gen\csharp\yoganet-macosx\libyoga.dylib" DestinationFiles="$(ProjectDir)libyoga.dylib" SkipUnchangedFiles="true" />
|
<Copy SourceFiles="$(ProjectDir)..\..\buck-out\gen\csharp\yoganet-macosx\libyoga.dylib" DestinationFiles="$(ProjectDir)libyoga.dylib" SkipUnchangedFiles="true" />
|
||||||
</Target>
|
</Target>
|
||||||
</Project>
|
</Project>
|
@@ -1,9 +1,8 @@
|
|||||||
/**
|
/**
|
||||||
* Copyright 2014-present, Facebook, Inc.
|
* Copyright (c) 2014-present, Facebook, Inc.
|
||||||
* All rights reserved.
|
|
||||||
*
|
*
|
||||||
* This source code is licensed under the license found in the
|
* This source code is licensed under the MIT license found in the
|
||||||
* LICENSE-examples file in the root directory of this source tree.
|
* LICENSE file in the root directory of this source tree.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
@@ -33,6 +32,9 @@ namespace Facebook.Yoga.Mac.Tests
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[System.Runtime.InteropServices.DllImport("/usr/lib/libSystem.dylib")]
|
||||||
|
static extern void _exit(int exit_code);
|
||||||
|
|
||||||
class NSRunLoopIntegration : NSObject, IMainLoopIntegration
|
class NSRunLoopIntegration : NSObject, IMainLoopIntegration
|
||||||
{
|
{
|
||||||
public void InitializeToolkit()
|
public void InitializeToolkit()
|
||||||
@@ -51,7 +53,7 @@ namespace Facebook.Yoga.Mac.Tests
|
|||||||
|
|
||||||
public void Shutdown()
|
public void Shutdown()
|
||||||
{
|
{
|
||||||
Environment.Exit(TestRunner.ExitCode);
|
_exit(TestRunner.ExitCode);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -1,6 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
if buck --version >/dev/null 2>&1; then true; else
|
|
||||||
echo "SKIP: Need to install buck https://buckbuild.com/setup/getting_started.html"
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
buck build $1
|
|
@@ -1,10 +1,8 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
# Copyright (c) 2014-present, Facebook, Inc.
|
# Copyright (c) 2014-present, Facebook, Inc.
|
||||||
# All rights reserved.
|
|
||||||
#
|
#
|
||||||
# This source code is licensed under the BSD-style 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. An additional grant
|
# LICENSE file in the root directory of this source tree.
|
||||||
# of patent rights can be found in the PATENTS file in the same directory.
|
|
||||||
|
|
||||||
set -e
|
set -e
|
||||||
|
|
||||||
|
@@ -1,10 +1,8 @@
|
|||||||
/**
|
/**
|
||||||
* Copyright (c) 2014-present, Facebook, Inc.
|
* Copyright (c) 2014-present, Facebook, Inc.
|
||||||
* All rights reserved.
|
|
||||||
*
|
*
|
||||||
* This source code is licensed under the BSD-style 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. An additional grant
|
* LICENSE file in the root directory of this source tree.
|
||||||
* of patent rights can be found in the PATENTS file in the same directory.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
|
@@ -1,10 +1,8 @@
|
|||||||
/**
|
/**
|
||||||
* Copyright (c) 2014-present, Facebook, Inc.
|
* Copyright (c) 2014-present, Facebook, Inc.
|
||||||
* All rights reserved.
|
|
||||||
*
|
*
|
||||||
* This source code is licensed under the BSD-style 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. An additional grant
|
* LICENSE file in the root directory of this source tree.
|
||||||
* of patent rights can be found in the PATENTS file in the same directory.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
|
@@ -1,27 +1,29 @@
|
|||||||
/**
|
/**
|
||||||
* Copyright (c) 2014-present, Facebook, Inc.
|
* Copyright (c) 2014-present, Facebook, Inc.
|
||||||
* All rights reserved.
|
|
||||||
*
|
*
|
||||||
* This source code is licensed under the BSD-style 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. An additional grant
|
* LICENSE file in the root directory of this source tree.
|
||||||
* of patent rights can be found in the PATENTS file in the same directory.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "YGInterop.h"
|
#include "YGInterop.h"
|
||||||
|
|
||||||
static YGInteropLoggerFunc gManagedFunc;
|
static YGInteropLogger gManagedLogger;
|
||||||
|
|
||||||
static int unmanagedLogger(YGLogLevel level, const char *format, va_list args) {
|
static int unmanagedLogger(const YGConfigRef config,
|
||||||
|
const YGNodeRef node,
|
||||||
|
YGLogLevel level,
|
||||||
|
const char *format,
|
||||||
|
va_list args) {
|
||||||
int result = 0;
|
int result = 0;
|
||||||
if (gManagedFunc) {
|
if (gManagedLogger) {
|
||||||
char buffer[256];
|
char message[8192];
|
||||||
result = vsnprintf(buffer, sizeof(buffer), format, args);
|
result = vsnprintf(message, sizeof(message), format, args);
|
||||||
(*gManagedFunc)(level, buffer);
|
(*gManagedLogger)(config, node, level, message);
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
void YGInteropSetLogger(YGInteropLoggerFunc managedFunc) {
|
void YGInteropSetLogger(YGInteropLogger managedLogger) {
|
||||||
gManagedFunc = managedFunc;
|
gManagedLogger = managedLogger;
|
||||||
YGSetLogger(&unmanagedLogger);
|
YGConfigSetLogger(YGConfigGetDefault(), &unmanagedLogger);
|
||||||
}
|
}
|
||||||
|
@@ -1,10 +1,8 @@
|
|||||||
/**
|
/**
|
||||||
* Copyright (c) 2014-present, Facebook, Inc.
|
* Copyright (c) 2014-present, Facebook, Inc.
|
||||||
* All rights reserved.
|
|
||||||
*
|
*
|
||||||
* This source code is licensed under the BSD-style 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. An additional grant
|
* LICENSE file in the root directory of this source tree.
|
||||||
* of patent rights can be found in the PATENTS file in the same directory.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
@@ -13,8 +11,13 @@
|
|||||||
|
|
||||||
YG_EXTERN_C_BEGIN
|
YG_EXTERN_C_BEGIN
|
||||||
|
|
||||||
typedef void (*YGInteropLoggerFunc)(YGLogLevel level, const char *message);
|
typedef int (*YGInteropLogger)(const void *unmanagedConfigPtr,
|
||||||
|
const void *unmanagedNodePtr,
|
||||||
|
YGLogLevel level,
|
||||||
|
const char *message);
|
||||||
|
|
||||||
WIN_EXPORT void YGInteropSetLogger(YGInteropLoggerFunc managedFunc);
|
WIN_EXPORT YGConfigRef YGConfigGetDefault();
|
||||||
|
|
||||||
|
WIN_EXPORT void YGInteropSetLogger(YGInteropLogger managedLogger);
|
||||||
|
|
||||||
YG_EXTERN_C_END
|
YG_EXTERN_C_END
|
||||||
|
@@ -104,7 +104,7 @@
|
|||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||||
<LinkIncremental>true</LinkIncremental>
|
<LinkIncremental>true</LinkIncremental>
|
||||||
<OutDir>bin\Universal\$(PlatformTarget)\$(Configuration)\</OutDir>
|
<OutDir>bin\Universal\$(PlatformTarget)\$(Configuration)\</OutDir>
|
||||||
<IntDir>obj\$(PlatformTarget)\$(Configuration)\</IntDir>
|
<IntDir>obj\Universal\$(PlatformTarget)\$(Configuration)\</IntDir>
|
||||||
<TargetName>yoga</TargetName>
|
<TargetName>yoga</TargetName>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">
|
||||||
@@ -242,8 +242,8 @@
|
|||||||
</Link>
|
</Link>
|
||||||
</ItemDefinitionGroup>
|
</ItemDefinitionGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
<ClInclude Include="..\..\yoga\YGEnums.h" />
|
||||||
<ClInclude Include="..\..\yoga\Yoga.h" />
|
<ClInclude Include="..\..\yoga\Yoga.h" />
|
||||||
<ClInclude Include="..\..\yoga\YGEnums.c" />
|
|
||||||
<ClInclude Include="..\..\yoga\YGMacros.h" />
|
<ClInclude Include="..\..\yoga\YGMacros.h" />
|
||||||
<ClInclude Include="..\..\yoga\YGNodeList.h" />
|
<ClInclude Include="..\..\yoga\YGNodeList.h" />
|
||||||
<ClInclude Include="resource.h" />
|
<ClInclude Include="resource.h" />
|
||||||
@@ -252,8 +252,8 @@
|
|||||||
<ClInclude Include="targetver.h" />
|
<ClInclude Include="targetver.h" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClCompile Include="..\..\yoga\Yoga.c" />
|
|
||||||
<ClCompile Include="..\..\yoga\YGEnums.c" />
|
<ClCompile Include="..\..\yoga\YGEnums.c" />
|
||||||
|
<ClCompile Include="..\..\yoga\Yoga.c" />
|
||||||
<ClCompile Include="..\..\yoga\YGNodeList.c" />
|
<ClCompile Include="..\..\yoga\YGNodeList.c" />
|
||||||
<ClCompile Include="YGInterop.cpp" />
|
<ClCompile Include="YGInterop.cpp" />
|
||||||
<ClCompile Include="dllmain.cpp">
|
<ClCompile Include="dllmain.cpp">
|
||||||
|
@@ -36,6 +36,9 @@
|
|||||||
<ClInclude Include="resource.h">
|
<ClInclude Include="resource.h">
|
||||||
<Filter>Header Files</Filter>
|
<Filter>Header Files</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\..\yoga\YGEnums.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClCompile Include="stdafx.cpp">
|
<ClCompile Include="stdafx.cpp">
|
||||||
@@ -53,6 +56,9 @@
|
|||||||
<ClCompile Include="YGInterop.cpp">
|
<ClCompile Include="YGInterop.cpp">
|
||||||
<Filter>Source Files</Filter>
|
<Filter>Source Files</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\yoga\YGEnums.c">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ResourceCompile Include="Yoga.rc">
|
<ResourceCompile Include="Yoga.rc">
|
||||||
|
@@ -1,10 +1,8 @@
|
|||||||
/**
|
/**
|
||||||
* Copyright (c) 2014-present, Facebook, Inc.
|
* Copyright (c) 2014-present, Facebook, Inc.
|
||||||
* All rights reserved.
|
|
||||||
*
|
*
|
||||||
* This source code is licensed under the BSD-style 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. An additional grant
|
* LICENSE file in the root directory of this source tree.
|
||||||
* of patent rights can be found in the PATENTS file in the same directory.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// dllmain.cpp : Defines the entry point for the DLL application.
|
// dllmain.cpp : Defines the entry point for the DLL application.
|
||||||
|
@@ -1,10 +1,8 @@
|
|||||||
/**
|
/**
|
||||||
* Copyright (c) 2014-present, Facebook, Inc.
|
* Copyright (c) 2014-present, Facebook, Inc.
|
||||||
* All rights reserved.
|
|
||||||
*
|
*
|
||||||
* This source code is licensed under the BSD-style 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. An additional grant
|
* LICENSE file in the root directory of this source tree.
|
||||||
* of patent rights can be found in the PATENTS file in the same directory.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// stdafx.cpp : source file that includes just the standard includes
|
// stdafx.cpp : source file that includes just the standard includes
|
||||||
|
@@ -1,10 +1,8 @@
|
|||||||
/**
|
/**
|
||||||
* Copyright (c) 2014-present, Facebook, Inc.
|
* Copyright (c) 2014-present, Facebook, Inc.
|
||||||
* All rights reserved.
|
|
||||||
*
|
*
|
||||||
* This source code is licensed under the BSD-style 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. An additional grant
|
* LICENSE file in the root directory of this source tree.
|
||||||
* of patent rights can be found in the PATENTS file in the same directory.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// stdafx.h : include file for standard system include files,
|
// stdafx.h : include file for standard system include files,
|
||||||
|
@@ -1,10 +1,8 @@
|
|||||||
/**
|
/**
|
||||||
* Copyright (c) 2014-present, Facebook, Inc.
|
* Copyright (c) 2014-present, Facebook, Inc.
|
||||||
* All rights reserved.
|
|
||||||
*
|
*
|
||||||
* This source code is licensed under the BSD-style 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. An additional grant
|
* LICENSE file in the root directory of this source tree.
|
||||||
* of patent rights can be found in the PATENTS file in the same directory.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user