Commit Graph

26 Commits

Author SHA1 Message Date
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
Emil Sjolander
7bd6b2b7dd Add support for measure mode 2016-04-01 11:01:16 +01:00
Pieter De Baets
b157ab4a00 Reset child position/sizes before calculating layout 2016-03-29 11:05:53 +01: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
Lucas Rocha
d1a49a4f0b Reduce search range of flexible children
We were traversing all children to only perform calculations/changes to
flexible children in order to avoid new allocations during layout. This
diff ensures we only visit flexible children during layout calculations
if any are present. We accomplish this by keeping a private linked list
of flexible children.
2015-09-08 15:34:51 +01:00
Lucas Rocha
793220faf8 Skip final loop on absolute children, if possible
There's no need to go through all absolute children at the end of the
layout calculation if the node at hand doesn't have any. This also
ensures only absolutely positioned children are traversed in the final
loop.
2015-09-08 15:34:51 +01:00
Lucas Rocha
524b44200a Expose the resolved direction in the node's layout 2015-05-20 11:35:01 +01: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
Lucas Rocha
36a46673f9 Support ROW_REVERSE, COLUMN_REVERSE and RTL direction 2015-05-11 11:24:21 +01:00
Pierre Renaux
998fa1d6ba [Issue facebook/css-layout#78]: Implemented alignContent ; 2015-05-10 00:19:27 +08:00
Pierre Renaux
ee5e8c1722 [Layout.c/h]: Minor modifications so that the Microsoft compiler can compile the file as C++ directly ; 2015-05-05 18:07:06 +08:00
Russell Keith-Magee
c523b7c404 Added support for min/max width and height constraints. 2015-03-31 17:32:54 +08:00
Christopher Chedeau
10fb645777 Initial implementation of flexWrap 2014-12-12 12:03:31 +00:00
Christopher Chedeau
c2aa92cd0b Add licenses and remove third party libraries 2014-10-29 08:01:22 -07:00
Andrew Rasmussen
91786cd2c7 make isUndefined public, add CSS_POSITION_COUNT back 2014-09-30 13:18:03 -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
eae5cdfe68 -Weverything and fix all the warnings 2014-05-16 18:04:24 -07:00
Christopher Chedeau
6123dbb33b initial support for string in c 2014-04-28 12:34:04 -07:00
Christopher Chedeau
c06f48c45f initial support for text layout 2014-04-26 12:16:27 -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
02d8f35b9a use calloc instead of memset and get rid of a duplicated field 2014-04-18 16:03:29 -07:00
Christopher Chedeau
75ab7b6f39 split .c and .h 2014-04-18 16:00:53 -07:00