[css-flexbox] Tweaking the old "resolving flexible lengths" algorithm to produce same behavior as new algorithm

As noted in
I'm curious how much the old "resolving flexible lengths" algorithm
would have to change to produce the same results as the new (quite
differently-worded/structured) algorithm.

For reference, the old algorithm is available here:

After some thought, I *think* the old algorithm can be changed to
produce the same results as the new one if we simply insert a "step
4.5", as follows:

 # Step 4.5: Adjust Free Space
 #   Compute the sum of the unfrozen flex items' flex factors.
 #   If this sum is less than 1, then multiply the free space
 #   by this sum (reducing the magnitude of the free space).

In other words: if our flex items have flex-grow values that sum up to
0.5, then this makes us only distribute 50% of the free space. Similarly
for the flex-shrink values -- if there's negative free space and the
flex-shrink values sum to 0.8, then we'll only allow ourselves to use
80% of the negative free space.

I believe this tweak produces the same results as the new "resoling
flexible lengths" algorithm, with one (nice) exception: this version
doesn't have the bug that I described in the other thread that I started
today, with frozen items' flex-shrink values impacting other items'
resolved sizes. That thread is:

Please correct me if I'm missing something, though.

If I'm correct that my suggested "step 4.5" makes us match the new spec
behavior [please sanity-check me on that], then: would it be worth
rolling back to the longer-implemented & more-hardened old algorithm
text, and inserting the step that I laid out above, rather then using
the all-new algorithm text?

(IMHO, the old algorithm is conceptually similar to follow, too -- i.e.
I admit I didn't entirely understand what was going on in the new
algorithm until I implemented it.  But I may be biased from having
worked with the old algorithm for longer.)


Received on Friday, 18 April 2014 21:55:26 UTC