77#include < yoga/algorithm/BoundAxis.h>
88#include < yoga/algorithm/CalculateLayout.h>
99#include < yoga/algorithm/grid/GridLayout.h>
10+ #include < yoga/numeric/Comparison.h>
1011#include < yoga/style/StyleSizeLength.h>
1112#include < set>
1213
@@ -263,7 +264,7 @@ struct TrackSizing {
263264 std::set<GridTrackSize*> frozenTracks;
264265
265266 // 2.2. Distribute space up to limits
266- while (frozenTracks.size () < affectedTracks.size () && spaceToDistribute > 0 .0f ) {
267+ while (frozenTracks.size () < affectedTracks.size () && spaceToDistribute > 0 .0f && ! yoga::inexactEquals (spaceToDistribute, 0 . 0f ) ) {
267268 auto unfrozenTrackCount = affectedTracks.size () - frozenTracks.size ();
268269 auto distributionPerTrack = spaceToDistribute / unfrozenTrackCount;
269270
@@ -292,7 +293,7 @@ struct TrackSizing {
292293 // https://github.com/w3c/csswg-drafts/issues/3648
293294
294295 // 2.4. Distribute space beyond limits
295- if (spaceToDistribute > 0 .0f ) {
296+ if (spaceToDistribute > 0 .0f && ! yoga::inexactEquals (spaceToDistribute, 0 . 0f ) ) {
296297 std::vector<GridTrackSize*> tracksToGrowBeyondLimits;
297298 if (sizeContributionPhase == SpaceDistributionPhase::AccommodateMinimumContribution) {
298299 for (auto & track: affectedTracks) {
@@ -316,7 +317,7 @@ struct TrackSizing {
316317 }
317318
318319 frozenTracks.clear ();
319- while (spaceToDistribute > 0 .0f && tracksToGrowBeyondLimits.size () > 0 ) {
320+ while (spaceToDistribute > 0 .0f && ! yoga::inexactEquals (spaceToDistribute, 0 . 0f ) && tracksToGrowBeyondLimits.size () > 0 ) {
320321 auto unfrozenTrackCount = tracksToGrowBeyondLimits.size () - frozenTracks.size ();
321322 auto distributionPerTrack = spaceToDistribute / unfrozenTrackCount;
322323 for (auto & track: tracksToGrowBeyondLimits) {
@@ -371,7 +372,7 @@ struct TrackSizing {
371372 // then each item-incurred increase will be zero."
372373
373374 // 2.2. Distribute space up to limits
374- while (frozenTracks.size () < affectedTracks.size () && spaceToDistribute > 0 .0f ) {
375+ while (frozenTracks.size () < affectedTracks.size () && spaceToDistribute > 0 .0f && ! yoga::inexactEquals (spaceToDistribute, 0 . 0f ) ) {
375376 auto unfrozenTrackCount = affectedTracks.size () - frozenTracks.size ();
376377 auto distributionPerTrack = spaceToDistribute / unfrozenTrackCount;
377378
@@ -409,15 +410,15 @@ struct TrackSizing {
409410 // https://github.com/w3c/csswg-drafts/issues/3648
410411
411412 // 2.4. Distribute space beyond limits
412- if (spaceToDistribute > 0 .0f ) {
413+ if (spaceToDistribute > 0 .0f && ! yoga::inexactEquals (spaceToDistribute, 0 . 0f ) ) {
413414 std::vector<GridTrackSize*> tracksToGrowBeyondLimits;
414415 for (auto & track: affectedTracks) {
415416 if (isIntrinsicSizingFunction (track->maxSizingFunction , containerSize)) {
416417 tracksToGrowBeyondLimits.push_back (track);
417418 }
418419 }
419420 frozenTracks.clear ();
420- while (spaceToDistribute > 0 .0f && tracksToGrowBeyondLimits.size () > 0 ) {
421+ while (spaceToDistribute > 0 .0f && ! yoga::inexactEquals (spaceToDistribute, 0 . 0f ) && tracksToGrowBeyondLimits.size () > 0 ) {
421422 // TODO: handle fit-content check here
422423 auto unfrozenTrackCount = tracksToGrowBeyondLimits.size () - frozenTracks.size ();
423424 auto distributionPerTrack = spaceToDistribute / unfrozenTrackCount;
@@ -518,7 +519,7 @@ struct TrackSizing {
518519 std::set<GridTrackSize*> frozenTracks;
519520 auto extraSpace = freeSpace;
520521
521- while (frozenTracks.size () < tracks.size () && extraSpace > 0 .0f ) {
522+ while (frozenTracks.size () < tracks.size () && extraSpace > 0 .0f && ! yoga::inexactEquals (extraSpace, 0 . 0f ) ) {
522523 auto unfrozenTrackCount = tracks.size () - frozenTracks.size ();
523524 auto distributionPerTrack = extraSpace / unfrozenTrackCount;
524525
@@ -656,7 +657,7 @@ struct TrackSizing {
656657 }
657658
658659 // If the free space is zero or if sizing the grid container under a min-content constraint:
659- if (freeSpace == 0 .0f ) {
660+ if (yoga::inexactEquals ( freeSpace, 0 .0f ) ) {
660661 usedFlexFraction = 0 .0f ;
661662 }
662663 // Otherwise, if the free space is a definite length:
0 commit comments