Commit Graph

57 Commits

Author SHA1 Message Date
Emil Sjolander
ca34ff4446 Correctly size cross axis when measuring flex basis 2016-07-08 16:05:21 +01:00
Adam Comella
8779d942ea Fix positioning of items with min/max width/height
We found a case where a flexible item with a max width that was supposed
to be centered was positioned in the wrong location.

The problem was with our 2 pass approach for sizing flexible items with
a min/max width/height. Items sized in the first pass were being double
counted when calculating the remainingFreeSpace. Specifically, their
sizes were being subtracted from remainingFreeSpace in both the first
and second passes.

I also noticed a second unrelated bug. We weren't correctly calculating
deltaFreeSpace in the first pass. When calculating deltaFreeSpace, we
need to take into account the flex basis like we do in the second pass.
Consequently, in the first pass I changed this:
  deltaFreeSpace -= boundMainSize;

To this:
  deltaFreeSpace -= boundMainSize - childFlexBasis;

The problem there was that we'd end up double counting childFlexBasis
in the remainingFreeSpace.
2016-05-11 00:29:40 -07:00
Adam Comella
f3dd51ab97 Alter layout engine to conform closer to W3C spec
The primary goals of this change are:
  - Better conformance to the W3C flexbox standard (https://www.w3.org/TR/css-flexbox-1/)
    and a clear articulation of the areas where it deviates from the spec.
  - Support for flex-shrink.
  - Conformance with layout effects of "overflow: hidden".

Specifically, here are the limitations of this implementation as compared to the W3C
flexbox standard (this is also documented in Layout.js):
  - Display property is always assumed to be 'flex' except for Text nodes, which
    are assumed to be 'inline-flex'.
  - The 'zIndex' property (or any form of z ordering) is not supported. Nodes are
    stacked in document order.
  - The 'order' property is not supported. The order of flex items is always defined
    by document order.
  - The 'visibility' property is always assumed to be 'visible'. Values of 'collapse'
    and 'hidden' are not supported.
  - The 'wrap' property supports only 'nowrap' (which is the default) or 'wrap'. The
    rarely-used 'wrap-reverse' is not supported.
  - Rather than allowing arbitrary combinations of flexGrow, flexShrink and
    flexBasis, this algorithm supports only the three most common combinations:
      - flex: 0 is equiavlent to flex: 0 0 auto
      - flex: n (where n is a positive value) is equivalent to flex: n 0 0
      - flex: -1 (or any negative value) is equivalent to flex: 0 1 auto
  - Margins cannot be specified as 'auto'. They must be specified in terms of pixel
    values, and the default value is 0.
  - The 'baseline' value is not supported for alignItems and alignSelf properties.
  - Values of width, maxWidth, minWidth, height, maxHeight and minHeight must be
    specified as pixel values, not as percentages.
  - There is no support for calculation of dimensions based on intrinsic aspect ratios
    (e.g. images).
  - There is no support for forced breaks.
  - It does not support vertical inline directions (top-to-bottom or bottom-to-top text).

And here is how the implementation deviates from the standard (this is also documented in
Layout.js):
  - Section 4.5 of the spec indicates that all flex items have a default minimum
    main size. For text blocks, for example, this is the width of the widest word.
    Calculating the minimum width is expensive, so we forego it and assume a default
    minimum main size of 0.
  - Min/Max sizes in the main axis are not honored when resolving flexible lengths.
  - The spec indicates that the default value for 'flexDirection' is 'row', but
    the algorithm below assumes a default of 'column'.
2016-04-26 19:45:58 -07:00
Pieter De Baets
b157ab4a00 Reset child position/sizes before calculating layout 2016-03-29 11:05:53 +01:00
Alex Bogomazov
425345aa8d Redo layout of 'stretch' aligned items for correct positioning of nested
items

Fixes facebook/css-layout#83, facebook/css-layout#100,
facebook/css-layout#127.
2016-02-26 00:43:58 +03:00
Emil Sjolander
c9094f94d0 Check layout instead of style before setting height and width to whatever is set in layout 2016-01-06 15:07:41 +00:00
Martin Kralik
f2aa5ba604 passing height to the measure function
This diff:
* adds height as another parameter passed to the measure function, computed the same way width is
* adds tests for this extension, which has involved adding a new measure function to all of js, c, java and c# tests
2015-12-14 15:00:13 +00:00
Christopher Chedeau
e280a577ae Fix width being ignored when has a value of 0
8f6a96adbc added a test in isDimDefined that checks if `value > 0.0`, but unfortunately, it did not faithfully port the JavaScript version which is `value >= 0.0`. Sadly, no test covered this so it went unnoticed.
2015-09-25 13:10:21 -07:00
Jared Forsyth
f7bab441e0 change to an xit 2015-08-06 12:35:12 -07:00
Pierre Renaux
019fc9b88c Merge remote-tracking branch 'upstream/master' 2015-05-17 21:54:30 +08:00
Lucas Rocha
03dfe7bb17 Implement (padding|border|margin)-(start|end) support 2015-05-14 17:43:33 +01:00
Nick Lockwood
bf1d7eacfd Fixed spacing for wrapped elements 2015-05-12 09:54:02 +01:00
Lucas Rocha
36a46673f9 Support ROW_REVERSE, COLUMN_REVERSE and RTL direction 2015-05-11 11:24:21 +01:00
Pierre Renaux
14e264f5be Made relevant JS tests transpile to C ; [src/Layout.c]: print_css_node_rec(): print alignContent ; [src/Layout-test-utils.c]: add_failed_test(): Sets failed_test->next to NULL, otherwise the test crashes if there's one and only one failure ; Added type casts so that it can be compiled as C++ by MSVC on Windows ; [Makefile]: Added c_test_msvc target when running in Windows so that the test executable can be built and debugged with Visual Studio on Windows ; 2015-05-10 00:20:28 +08:00
Pierre Renaux
7679ed77d9 Updated generated C & Java code ; 2015-05-10 00:19:28 +08:00
Andrew Rasmussen
86c39b5e4f Revert "Ensure that flex children adopt their parent's cross-axis min dimension."
This reverts commit b8316413b3.

This was causing issues for existing components built with React
Native.. we need to investigate more in the future.
2015-05-01 12:16:47 -07:00
Andrew Rasmussen
5f52e947cb Fix layout for absolutely positioned nodes with absolutely positioned parents that have border and/or padding 2015-04-30 14:40:39 -07:00
Eunchong Yu
129e41f832 Transpile to update the changes of consts omitted in #69 2015-04-26 14:11:05 +09:00
Russell Keith-Magee
b8316413b3 Ensure that flex children adopt their parent's cross-axis min dimension. 2015-04-07 10:52:15 +08:00
Russell Keith-Magee
9cf2e71e01 Added extra test to check for potential division by zero. 2015-04-01 14:46:28 +08:00
Russell Keith-Magee
c523b7c404 Added support for min/max width and height constraints. 2015-03-31 17:32:54 +08:00
Russell Keith-Magee
8f6a96adbc Normalized C and Java definition of isDimDefined.
The JavaScript implementation of isDimDefined contains a check to ensure
that the dimension value is positive; the C and Java versions did not
have this check. As a result, a negative style value for 'width' (such
as that used by the "should layout node with negative width" test) would
have different layout under the C/Java implementation to the JavaScript
implementation.

This was hidden because the C/Java transpilers filtered out any negative
instantiation values from the test suite. In effect, the negative value
tests weren't running on the C/Java implementation.

This patch removes the negative value filter from the transpiler, and
makes the isDimDefined definition consistent between the three
implementations.
2015-03-22 14:36:16 +08:00
Christopher Chedeau
0e56641b28 Update font constants 2015-02-04 07:57:13 -08:00
Christopher Chedeau
5f8c3b0eb7 Update C version 2015-02-04 07:50:15 -08:00
Christopher Chedeau
10fb645777 Initial implementation of flexWrap 2014-12-12 12:03:31 +00:00
Christopher Chedeau
28243156e4 make C and Java tests pass and update their code 2014-12-11 20:23:53 +00:00
Christopher Chedeau
c2aa92cd0b Add licenses and remove third party libraries 2014-10-29 08:01:22 -07:00
Christopher Chedeau
c0f895c6f2 Make align-items: stretch the default 2014-10-08 09:35:44 -07:00
Andrew Rasmussen
7eef01f299 make setting bottom/right calculate top/left 2014-09-30 15:24:42 -07:00
Andrew Rasmussen
0ae8bcf8f6 Add second position: absolute pass 2014-09-30 13:11:32 -07:00
Andrew Rasmussen
c149d3110d rename position: absolute test case 2014-09-29 14:07:47 -07:00
Alex Kotliarskyi
ba4cf35804 Return bad error code when tests fail 2014-09-26 20:08:37 -07:00
Alex Kotliarskyi
b6b7849740 Ignore skipped tests 2014-09-26 17:52:27 -07:00
Alex Kotliarskyi
a047e4d5fe Automated script to transpile code and tests to C 2014-09-26 17:19:59 -07:00
Andrew Rasmussen
e506416fa3 aggregate test failures and print a summary after running tests 2014-09-25 17:56:02 -07:00
Andrew Rasmussen
b91bc8b3fc rename position: absolute bottom test case 2014-09-25 16:21:20 -07:00
Andrew Rasmussen
6f347d74a3 Added another pass to calclulate absolutely positioned elements last 2014-09-25 16:05:01 -07:00
Christopher Chedeau
d7f3ea868d Import latest changes 2014-09-11 09:23:30 -07:00
Christopher Chedeau
9a45599b84 better print utils 2014-06-11 21:00:57 -07:00
Christopher Chedeau
d2ce2420f4 Lots of changes that I forgot to properly commit 2014-06-04 10:51:23 -07:00
Christopher Chedeau
e53bf49746 fix bug where nested align: stretch were not properly working
The way the algorithm work is that you first layout fixed children on the main axis, then compute all the dimensions so that you can layout flexible children. This separation doesn't work anymore if we add the other axis. The solution here is a hacky (but working!) attempt at fixing the issue. We start by doing a pass to set the children dimensions if they are stretch.
2014-05-19 12:43:26 -07:00
Christopher Chedeau
eae5cdfe68 -Weverything and fix all the warnings 2014-05-16 18:04:24 -07:00
Christopher Chedeau
e9550a6116 split test utils for c 2014-04-28 12:36:36 -07:00
Christopher Chedeau
6123dbb33b initial support for string in c 2014-04-28 12:34:04 -07:00
Christopher Chedeau
c63281a064 update C 2014-04-22 17:37:55 -07:00
Christopher Chedeau
aad9fab75f port latest updates to C 2014-04-22 14:59:59 -07:00
Christopher Chedeau
db510d590a port changes to C 2014-04-22 13:20:51 -07:00
Christopher Chedeau
901db3c3a6 All the generated tests are passing :) 2014-04-19 22:08:10 -07:00
Christopher Chedeau
94aedd25f6 swap space_around and between. all tests pass! 2014-04-19 15:21:57 -07:00
Christopher Chedeau
c95de81d37 print what when wrong in case of errors 2014-04-19 14:41:42 -07:00