Commit Graph

1265 Commits

Author SHA1 Message Date
Valentin Shergin
383b881748 Introducing on-dirty handler (aka YGNodeSetDirtiedFunc)
Summary:
@public
Currently, we can dirty leaf nodes with `measure` function, we also can get `dirty` status for any node, but we cannot handle a moment when this change happen. This diff introduces a new call-back-manner handler for it.
We need this to plug Yoga inside and outside other layout systems without maintaining own dirty propagation infrastructure.
Consider using Yoga for flex-box layout in React Native where we can have deeply nested layout like `<View><Text><View><Text/></View></Text></View>` where all content of all <Text> nodes are laid out using native text/inline (not flex-box!) layout system. In this case, when some change dirties some deeply nested Yoga node, we have to propagate the dirty state down to outer one. Having this handler makes possible to wire up `on-dirty` handler on the root node and `setDirtied` for the leaf node.
Removing custom dirting mechanism from React Native should drastically simplify rendering layer and bring a huge performance win.

Reviewed By: emilsjolander

Differential Revision: D6597856

fbshipit-source-id: 6588cd712f9c1dede4af32f3d326f90103e48ff0
2018-01-10 10:09:38 -08:00
Pritesh Nandgaonkar
47543c8fba Move utility functions to utils file
Summary: Move utility functions to utils file

Reviewed By: emilsjolander

Differential Revision: D6682933

fbshipit-source-id: 0fd90fdaf5ca4f9b7a11cbd15d8c54c7d0ce8a03
2018-01-10 05:03:52 -08:00
Pritesh Nandgaonkar
dc6ed89bfa Fix warnings of casting and null pointer handling
Summary: There were warnings of castings and null pointer handling in yoga.cpp. This diff fixes the warnings. The issue was brought up here https://github.com/facebook/react-native/issues/17274

Reviewed By: emilsjolander

Differential Revision: D6675111

fbshipit-source-id: 884659fabb05033b4d43d3aa6629e22481d39b7e
2018-01-09 04:27:01 -08:00
Pritesh Nandgaonkar
348dd368b5 Move YGNodeResolveFlexShrink to a method on YGNode
Summary: Move YGNodeResolveFlexShrink to a method on YGNode

Reviewed By: emilsjolander

Differential Revision: D6611418

fbshipit-source-id: 6e5ba39b555d313a967800589891027920112c15
2018-01-08 03:00:46 -08:00
Pritesh Nandgaonkar
40eeefd4f7 Moved YGResolveFlexGrow as a method on YGNode
Summary: Moved YGResolveFlexGrow as a method on YGNode

Reviewed By: emilsjolander

Differential Revision: D6611385

fbshipit-source-id: 71660946c469fac77c5ffa0284c793e6adc9db7b
2018-01-08 03:00:46 -08:00
Pritesh Nandgaonkar
47892c17ce Move markDirtyInternal as a method in YGNode
Summary: Moved YGNodeMarkDirtyInternal as a method in YGNode

Reviewed By: emilsjolander

Differential Revision: D6611287

fbshipit-source-id: 54402145d51ea717553ea136be739b9880a79817
2018-01-08 03:00:46 -08:00
Pritesh Nandgaonkar
f2a369fb73 Move YGCloneChildrenIfNeeded as a method on YGNode
Summary:
- Removed the default() static method, instead of this, its zero argument initialiser is used
  - Moved `YGCloneChildrenIfNeeded` to `cloneChildrenIfNeeded` as a method on `YGNode`.

Reviewed By: emilsjolander

Differential Revision: D6611155

fbshipit-source-id: 463723a363e0fbd2c7686f65226eca73236bd07e
2018-01-08 03:00:46 -08:00
Pritesh Nandgaonkar
61dc10ef66 Optimize the performance of Origami
Summary: With this flag the the workflow successfully passed.

Reviewed By: emilsjolander

Differential Revision: D6619293

fbshipit-source-id: c1632efd97f47696b7f8bb1b3e763de92c707287
2017-12-22 06:55:20 -08:00
Pritesh Nandgaonkar
7d01f4d8b1 Do not set FB_ASSERTION_ENABLED
Summary: Currently whenever `Yoga.h` is imported by someone we set `FB_ASSERTION_ENABLED`. The use case of this flag is to use assert calls of `FBAssert.h`, since we do not use it anymore, there is no need to set this flag.

Reviewed By: emilsjolander

Differential Revision: D6611904

fbshipit-source-id: f01ac144159c1b333d8deb8cbb5ba0288e4bf7a4
2017-12-21 04:56:09 -08:00
Pritesh Nandgaonkar
c7a5e1e290 Fix typo in YogaKit's YGDimensionFlexibility
Summary: Fix typo in `YGDimensionFlexibility` enum

Reviewed By: emilsjolander

Differential Revision: D6601679

fbshipit-source-id: 3a7d98322de3383de65ff5164d4c7a632ac6916f
2017-12-20 03:11:46 -08:00
Pritesh Nandgaonkar
fbd332dee8 Make YGNode as c++ struct with properties exposed through accessors
Summary: Moved c implementation of `YGNode` to C++ struct. Not moving to C++ class as the React Classes dependent on `Yoga.h` assume it to be C. Thats why keeping `Yoga.h` C compatible. Sorry for the long diff, didn't thought that it will turn out to be this much big.Will keep an eye on number of lines next time 😉

Reviewed By: emilsjolander

Differential Revision: D6592257

fbshipit-source-id: 641e8b9462ad00731a094511f9f5608b23a6bb21
2017-12-19 11:33:07 -08:00
Pritesh Nandgaonkar
dbf6a12134 Hide init of YGLayout
Summary:
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. In setters and getters we call the corresponding `YGNode`'s setters and getters. Thus the following code will crash

```
let layout = YGLayout()
layout.flexDirection = .row
```

Reviewed By: emilsjolander

Differential Revision: D6597796

fbshipit-source-id: 653d275d7314bfdd7a1106884fa3fbc0a13e1be7
2017-12-19 07:48:35 -08:00
Amir Shalem
dbc47ae383 Disable assert code in release builds (define DNDEBUG)
Summary:
Disable assert code in release builds (define DNDEBUG).
This disables assertions in Facebook JNI library - which checks that our references to Yoga JNI objects are correct.
This saves CPU time, since those checks are costly.

Reviewed By: emilsjolander

Differential Revision: D6592023

fbshipit-source-id: eaf869c7990cab3a72ae2bbdc67e709153f5020c
2017-12-18 11:32:36 -08:00
Amir Shalem
f22cfd52e0 Add buck mode/opt compile file to support release compilation mode
Summary:
Currently we have `-O3` hardcoded inside our BUCK target files, this will allow us afterwards to remove that.
Follow up commit will also add `-DNDEBUG` which will disable `assert` in release builds.

Reviewed By: emilsjolander

Differential Revision: D6592024

fbshipit-source-id: f541ee8728ff44db8e31885f2085dc036a400f70
2017-12-18 11:32:36 -08:00
Jonathan Kim
2a10337344 Consolidate mobile yoga into top-level xplat
Reviewed By: emilsjolander

Differential Revision: D6494379

fbshipit-source-id: f6b78d8a1b3d4bcdeef350ad7bd097cdbe5d15b1
2017-12-13 15:08:03 -08:00
Greg McGary
836eaa62df Explicitly #define isnan __builtin_isnan for Android clang-5 to mimic gcc's default behavior
Summary:
GCC internally aliases isnan and a dozen other math.h primitives to their `__builtin_` counterparts, which compile straight to assembler. Clang does not do this, so calls to `isnan` compile to a function call. The Android libc does not define `isnan` because it assumes all application code compiled `__builtin_isnan` and has no need for the function `isnan`.

This is a temporary kludge: Starting with NDK r16, the math.h header has appropriate `#defines` to alias primitives to their `__builtin_` counterparts. Upon upgrade to NDK r16, this can be reverted.

Reviewed By: passy

Differential Revision: D6527499

fbshipit-source-id: 65d9e43c7e7d973a6c92e9863ebe469b35a24ac8
2017-12-12 16:56:48 -08:00
Taras Tsugrii
a01c7adcfb Skylarkify default_platform_defs macros.
Reviewed By: adamjernst

Differential Revision: D6527119

fbshipit-source-id: 1e31b9491d2cf501f348d544482c025096fd81b1
2017-12-09 10:28:47 -08:00
Ben Nham
5133faa1ad Revert D6155682: Use clang-5.0 -Oz
Summary:
This reverts commit 2f64e742f4dc44be171274c2ad0a41fb1e7079d7

bypass-lint

Differential Revision: D6155682

fbshipit-source-id: 9139ed14e0d24784bf25b2783e364a511173ab83
2017-12-08 09:42:21 -08:00
Emil Sjölander
6a8c2960ad New javascript release
Summary: https://www.npmjs.com/package/yoga-layout

Reviewed By: arcanis

Differential Revision: D6496634

fbshipit-source-id: 2d834edcfce6c1e3d3f481822b3ccd22b39e1a13
2017-12-07 19:02:32 -08:00
Greg McGary
0c98e89fdb Use clang-5.0 -Oz
Summary:
Use clang-5.0 -Oz as default NDK compiler for android.
It does 3 good things:
* brings us into compliance with deprecation of gcc for android NDKs since r13
* yields slightly smaller native code, on the order of many-10s-to-small-100s of KB
* slight improvement in startup performance, on the order of 10s of ms

Reviewed By: mzlee

Differential Revision: D6155682

fbshipit-source-id: 2f64e742f4dc44be171274c2ad0a41fb1e7079d7
2017-12-07 13:27:20 -08:00
Yaroslav Pavlov
5f78181911 Round size geometry for Button and RichText components.
Summary:
ComponentKit requires all size geometry provided to be rounded to pixel grid. This ensures
that layout will not truncate provided sizes.

Reviewed By: cuva

Differential Revision: D6466875

fbshipit-source-id: 62a480411e7d2354a6879917c42bbf0ee96cdadd
2017-12-06 16:27:45 -08:00
Pritesh Nandgaonkar
03dd1d23fa vector instead of YGNodeList
Summary: Replaced YGNodeList with std::vector

Reviewed By: jonathandann, emilsjolander

Differential Revision: D6442379

fbshipit-source-id: d2d48ef0676351d2eeaa2d427dcd72e082cd15a1
2017-12-05 08:28:54 -08:00
Luc Dion
91683be798 YogaKit: Changes so we are able to reset properties to their initial value
Summary:
Changes so we are able to reset properties to their initial value.
This is required to reset these properties.

Add the support of YGUnitUndefined to many properties:
* minWidth
* maxWidth
* minHeight
* maxHeight

Also, these properties must be reset to YGUnitAuto.
* width
* height
* flexBasis

This now matches completely how these properties are initialized in Yoga.cpp
Closes https://github.com/facebook/yoga/pull/672

Reviewed By: dshahidehpour

Differential Revision: D6407908

Pulled By: emilsjolander

fbshipit-source-id: ac20c7b2c06349115aea7d31240204d17e2f1b44
2017-12-04 04:26:46 -08:00
Cory Reed
109cb1a562 Fix Android comment and docblock typos
Summary:
👋 Hello! Thanks for react-native, it’s a great project.

I was digging into the Android implementation in _ReactAndroid_ and noticed a couple typos in the documentation. I went through and tried to fix all the typos I could find using [aspell](http://aspell.net).

Not applicable: these changes are only to comments, and CI should be skipped.

[ANDROID][ENHANCEMENT][*] - Correct comment and docblock typos
Closes https://github.com/facebook/react-native/pull/17049

Differential Revision: D6472182

Pulled By: shergin

fbshipit-source-id: 7e62cab118609596b483d1cf16c3abf651d6753b
2017-12-03 20:15:49 -08:00
Lukas Wöhrl
ad1240e276 Fix min/max percentage constraints on measured nodes
Summary:
Fix min/max percentage constraints on measured nodes. Currently we passed in the available size instead of the parent size.
Fixes #611
Closes https://github.com/facebook/yoga/pull/649

Reviewed By: priteshrnandgaonkar

Differential Revision: D6408019

Pulled By: emilsjolander

fbshipit-source-id: 18be5056dbc0dc179970ec231ab8b4e2cdba65c5
2017-11-30 08:02:05 -08:00
Emil Sjölander
2e468d9c8c Update watir
Summary: We were using a very out-dated version of watir which did not run with latest ruby

Reviewed By: priteshrnandgaonkar

Differential Revision: D6447029

fbshipit-source-id: ff4ccb8c96947811ff09f7e87cb504e3e7cb834e
2017-11-30 07:01:32 -08:00
Huge Rocker
6caa94b779 Fix can not find source files in CMakeLists.txt
Summary:
Because the source files are *.cpp, not *.c. This fixes building issue with gradle.
Closes https://github.com/facebook/yoga/pull/676

Reviewed By: emilsjolander

Differential Revision: D6446545

Pulled By: priteshrnandgaonkar

fbshipit-source-id: 809229057db26665b2d97b3002ade73632dd9117
2017-11-30 07:01:31 -08:00
Lukas Wöhrl
429a7eeee3 Suppress unused warnings on YGDefaultLog
Summary:
Suppresses the unused warnings on ```YGDefaultLog```. It uses a more generic macro which simply casts the variable to ```(void)```. This is the simples approach to make mutiple different compilers happy. Fixes #650
Closes https://github.com/facebook/yoga/pull/651

Differential Revision: D6407999

Pulled By: emilsjolander

fbshipit-source-id: 19fd78dd8b84eafdbb48875dd003d506a98c4807
2017-11-28 10:26:07 -08:00
Taras Tsugrii
dec1172f38 Migrate yoga defs to Skylark syntax.
Summary: https://our.intern.facebook.com/intern/dex/buck/python-to-skylark/

Reviewed By: adamjernst

Differential Revision: D6411822

fbshipit-source-id: 2abe2c183d1b1a28349d0c7bd765754688ec4441
2017-11-27 14:00:52 -08:00
Lukas Wöhrl
afaafb4126 Measure nodes which have margin: auto and align-item: stretch
Summary:
If you have a measurable node and set ```marign-left: auto``` + ```align-item:stretch``` on it, it won't get measured and they get a width/height of ```-(nan)```. This change fixes that behaviour. Fixes #644.
Closes https://github.com/facebook/yoga/pull/645

Differential Revision: D6413512

Pulled By: emilsjolander

fbshipit-source-id: 755febeb33bb0d4520ca6b3c28d56ac333e4a14d
2017-11-27 05:36:48 -08:00
Jake Larson
e566fcca08 Fix invalid value check for entry-common.js
Summary:
`!Object.prototype.hasOwnProperty.call(methods, unit))` doesn't correctly return `true` when an unsupported value is passed into `setMaxWidth` within an Automator (macOS) javascript/cocoascript environment.

This PR fixes the issue and also adds the `value` information to the returned error to help with debugging
Closes https://github.com/facebook/yoga/pull/643

Differential Revision: D6413569

Pulled By: emilsjolander

fbshipit-source-id: a42a66710a3ca578b5c25ecef8722f9c3f082b73
2017-11-27 05:12:37 -08:00
vincentriemer
c7f7ba250c Add Config::setPointScaleFactor to JavaScript binding
Summary:
Needed for a project I'm working on to properly render on high dpi screens. I've manually tested against my project to confirm it works.
Closes https://github.com/facebook/yoga/pull/612

Differential Revision: D6413517

Pulled By: emilsjolander

fbshipit-source-id: c298d7f6b58dc45aaaede2bb995df8615911a4a9
2017-11-27 04:59:53 -08:00
Lukas Wöhrl
7e3be21811 Add justify-content: space-evenly
Summary:
Adds new ```space-evenly``` for ```justify-content```.

Also adds a typofix in one of the other justify-content tests.

Fixes #657
Closes https://github.com/facebook/yoga/pull/658

Differential Revision: D6407996

Pulled By: emilsjolander

fbshipit-source-id: cc837409e1345624b4bd72c31e25fe68dcb0f6a3
2017-11-27 03:47:23 -08:00
Lukas Wöhrl
5e39f1a57c Fix shrinking in non strech alignments while retaining legacy behaviour
Summary:
This fixes shrinking of elements which are in a non stretch alignment, but keeps the legacy stretch behaviour in place. Additionally this adds a testcase for ```useLegacyStretchBehaviour```

Fixes #633
Closes https://github.com/facebook/yoga/pull/635

Differential Revision: D6408037

Pulled By: emilsjolander

fbshipit-source-id: 377ab0308dd3a75a148a0af31ab5eb3ffb5b5d83
2017-11-27 03:14:59 -08:00
Lukas Wöhrl
5aa0f44a9b Do not mark node as dirty if, new and old values are undefined
Summary:
If we have a values already set to undefined and set it to undefined again, we invalidate the layout. This change takes this case into account and keeps the layout valid.
Fixes #630
Closes https://github.com/facebook/yoga/pull/648

Differential Revision: D6408013

Pulled By: emilsjolander

fbshipit-source-id: dc2a848d84d3de9f4650fac9e41d7c8169446406
2017-11-27 03:14:54 -08:00
Jake Teton-Landis
55c767ba7f Fix assertion preventing YGNodeLayoutGet* with YGEdgeEnd
Summary:
Expected to be able to call `YGNodeLayoutGetMargin(node, YGEdgeEnd)`, but instead, the program aborts with `"Cannot get layout properties of multi-edge shorthands"`.

This bug seems to incorrectly prevent properties from YGEdgeEnd for all Layout properties.
Closes https://github.com/facebook/yoga/pull/632

Differential Revision: D6408060

Pulled By: emilsjolander

fbshipit-source-id: 4ab3b2ffb2f1bb6fd3a27f780caf0123abcdb230
2017-11-27 03:00:05 -08:00
Taras Tsugrii
5502a97f7f Replace include_defs with load.
Summary: https://our.intern.facebook.com/intern/dex/buck/python-to-skylark/

Reviewed By: adamjernst

Differential Revision: D6411777

fbshipit-source-id: 5553d75a650d906a280a61b38492e20d7bc7081a
2017-11-26 21:30:14 -08:00
Taras Tsugrii
8ab1d81917 Do not use isdir in build files.
Summary: This leads to slow, non-reproducible builds.

Reviewed By: adamjernst

Differential Revision: D6411750

fbshipit-source-id: 566424fa813edd20813da15101e6640d6c8fff19
2017-11-26 21:05:54 -08:00
Alexander Sarkisov
942543f6a5 Add default block attribute.
Summary:
It is very inconvenient to enter block attribute name for each view in Objective-C.
Closes https://github.com/facebook/yoga/pull/618

Differential Revision: D6408138

Pulled By: emilsjolander

fbshipit-source-id: 71fe8eadda7233e5055560667d0fc3840ab7259b
2017-11-24 08:12:33 -08:00
Lukas Wöhrl
a69545a6ae Fix justify content with min/max constraint parent
Summary:
The min/max inner width shouldn't take the margins into account.
Adds a test for both cases.

Fixes #664
Closes https://github.com/facebook/yoga/pull/665

Differential Revision: D6407982

Pulled By: emilsjolander

fbshipit-source-id: ffa549a06f802263e3b8488e90756aa3f722d52d
2017-11-24 07:24:51 -08:00
Lukas Wöhrl
0b13a0c168 Fix generation of license header for java
Summary:
If you run ```enums.py``` it will revert the changes from 835b2bb . This changes the license header for java to  not be a javadocs comment.
Closes https://github.com/facebook/yoga/pull/660

Differential Revision: D6407985

Pulled By: emilsjolander

fbshipit-source-id: 49efe555fecb8d740675c6b4631dce2a64f10417
2017-11-24 06:57:23 -08:00
Yury Zholobov
d8341ca3b0 Fix horizontally to vertically in FlexDirection=Column doc
Summary: Closes https://github.com/facebook/yoga/pull/663

Differential Revision: D6407915

Pulled By: emilsjolander

fbshipit-source-id: 03e2896b9b98cf476a92e7c87fd8dc3f7cef9047
2017-11-24 06:26:37 -08:00
Pritesh Nandgaonkar
34ac314101 Refactor and move YGNodeToString implementation to different file
Summary: Refactored the `YGNodeToString` function from c to c++.

Reviewed By: emilsjolander

Differential Revision: D6397372

fbshipit-source-id: 79e701efe7f19db6dac1aea6328ebf0ac84a7ac3
2017-11-23 09:42:21 -08:00
Pritesh Nandgaonkar
02c00f2711 Change c files to cpp
Summary: Changed the extensions of c files to cpp and made the project build successfully

Reviewed By: gkassabli

Differential Revision: D6271299

fbshipit-source-id: 66c0e54ccf019d72d1fd0b4d117826e4e84fdc89
2017-11-21 10:28:51 -08:00
Flarnie Marchan
15231c3304 Add Code of Conduct
Summary:
**what is the change?:**
Adding a document linking to the Facebook Open Source Code of Conduct,
for visibility and to meet Github community standards.

**why make this change?:**
Facebook Open Source provides a Code of Conduct statement for all
projects to follow.

Exposing the COC via a separate markdown file is a standard being
promoted by Github via the Community Profile in order to meet their Open
Source Guide's recommended community standards.

As you can see, adding this file will complete [Yoga's Community Profile](https://github.com/facebook/yoga/community)
checklist and increase the visibility of our COC.

We also added a link to the COC in the CONTRIBUTING doc because folks may miss the separate CODE_OF_CONDUCT document.

**test plan:**
Viewing it on my branch -
![screen shot 2017-11-20 at 6 02 25 pm](https://user-images.githubusercontent.com/1114467/33051133-4dc293e6-ce1d-11e7-9b0a-776cad6211f5.png)
![screen shot 2017-11-20 at 6 02 33 pm](https://user-images.githubusercontent.com/1114467/33051135-4dee35fa-ce1d-11e7-9077-a2d6d6f2ed3e.png)

**issue:**
internal task t23481323
Closes https://github.com/facebook/yoga/pull/670

Reviewed By: emilsjolander

Differential Revision: D6384655

Pulled By: flarnie

fbshipit-source-id: 6c5557094719cc8f1b08deb4d477ab56603caf39
2017-11-21 05:27:53 -08:00
Pritesh Nandgaonkar
d98e5aef97 Deleted YGSetMemoryFucs as it is unused
Summary: Removed YGSetMemoryFuncs, as it is not used internally and barely externally.

Reviewed By: emilsjolander

Differential Revision: D6374147

fbshipit-source-id: 8c896dce23571268a1a52df5cc72486af9d66df7
2017-11-21 03:43:23 -08:00
Pritesh Nandgaonkar
5b0dfa471f Use internal clang format settings
Summary: Use internal linting rules instead of the custom once.

Differential Revision: D6284667

fbshipit-source-id: 65aae336f1d7f14dfefed7391b0f5b89b333495e
2017-11-20 03:17:53 -08:00
Pritesh Nandgaonkar
26481a6553 Replace printf with YGLog calls
Summary: Replace printf calls with YGLog

Reviewed By: gkassabli

Differential Revision: D6297015

fbshipit-source-id: 6a67bdf33ef121785ac14938f5d3ed6e9d6f2656
2017-11-16 05:43:23 -08:00
Pascal Hartig
64e08aa98b v1.7.1-SNAPSHOT
Summary: Back to snapshot releases.

Reviewed By: emilsjolander

Differential Revision: D6284123

fbshipit-source-id: 30ec356d0da63e7bf6c33cbc20d446aea7be5a05
2017-11-16 03:15:52 -08:00
Pascal Hartig
0c3168f150 v1.7.0
Summary: Version bumps.

Reviewed By: emilsjolander

Differential Revision: D6284124

fbshipit-source-id: 08f6116bb0237791210847976533206055376f1a
1.7.0
2017-11-16 03:15:52 -08:00