Skip to content

Commit

Permalink
Fix flooring of border (facebook#1562)
Browse files Browse the repository at this point in the history
Summary:
X-link: facebook/react-native#42411


I added a small regression D52605596, where negative border would not be correctly floored. This fixes that, and starts adding tests specifically targeting the computed style API, now decoupled from the yoga node.

Reviewed By: joevilches

Differential Revision: D52930827
  • Loading branch information
NickGerleman authored and facebook-github-bot committed Jan 23, 2024
1 parent 8fe38fc commit c169c93
Show file tree
Hide file tree
Showing 2 changed files with 60 additions and 12 deletions.
44 changes: 44 additions & 0 deletions tests/StyleTest.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
/*
* Copyright (c) Meta Platforms, Inc. and affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/

#include <gtest/gtest.h>
#include <yoga/style/Style.h>

namespace facebook::yoga {

TEST(Style, computed_padding_is_floored) {
yoga::Style style;
style.setPadding(Edge::All, value::points(-1.0f));
auto paddingStart = style.computeInlineStartPadding(
FlexDirection::Row, Direction::LTR, 0.0f /*widthSize*/);
ASSERT_EQ(paddingStart, 0.0f);
}

TEST(Style, computed_border_is_floored) {
yoga::Style style;
style.setBorder(Edge::All, value::points(-1.0f));
auto borderStart =
style.computeInlineStartBorder(FlexDirection::Row, Direction::LTR);
ASSERT_EQ(borderStart, 0.0f);
}

TEST(Style, computed_gap_is_floored) {
yoga::Style style;
style.setGap(Gutter::Column, value::points(-1.0f));
auto gapBetweenColumns = style.computeGapForAxis(FlexDirection::Row);
ASSERT_EQ(gapBetweenColumns, 0.0f);
}

TEST(Style, computed_margin_is_not_floored) {
yoga::Style style;
style.setMargin(Edge::All, value::points(-1.0f));
auto marginStart = style.computeInlineStartMargin(
FlexDirection::Row, Direction::LTR, 0.0f /*widthSize*/);
ASSERT_EQ(marginStart, -1.0f);
}

} // namespace facebook::yoga
28 changes: 16 additions & 12 deletions yoga/style/Style.h
Original file line number Diff line number Diff line change
Expand Up @@ -312,28 +312,32 @@ class YG_EXPORT Style {
}

float computeFlexStartBorder(FlexDirection axis, Direction direction) const {
return computeBorder(flexStartEdge(axis), direction)
.resolve(0.0f)
.unwrapOrDefault(0.0f);
return maxOrDefined(
computeBorder(flexStartEdge(axis), direction).resolve(0.0f).unwrap(),
0.0f);
}

float computeInlineStartBorder(FlexDirection axis, Direction direction)
const {
return computeBorder(inlineStartEdge(axis, direction), direction)
.resolve(0.0f)
.unwrapOrDefault(0.0f);
return maxOrDefined(
computeBorder(inlineStartEdge(axis, direction), direction)
.resolve(0.0f)
.unwrap(),
0.0f);
}

float computeFlexEndBorder(FlexDirection axis, Direction direction) const {
return computeBorder(flexEndEdge(axis), direction)
.resolve(0.0f)
.unwrapOrDefault(0.0f);
return maxOrDefined(
computeBorder(flexEndEdge(axis), direction).resolve(0.0f).unwrap(),
0.0f);
}

float computeInlineEndBorder(FlexDirection axis, Direction direction) const {
return computeBorder(inlineEndEdge(axis, direction), direction)
.resolve(0.0f)
.unwrapOrDefault(0.0f);
return maxOrDefined(
computeBorder(inlineEndEdge(axis, direction), direction)
.resolve(0.0f)
.unwrap(),
0.0f);
}

float computeFlexStartPadding(
Expand Down

0 comments on commit c169c93

Please sign in to comment.