Skip to content

Commit

Permalink
Avoid calling fmod twice in roundLayoutResultsToPixelGrid
Browse files Browse the repository at this point in the history
Differential Revision: D67689065
  • Loading branch information
rshest authored and facebook-github-bot committed Dec 28, 2024
1 parent 85bdd75 commit 26c554e
Showing 1 changed file with 9 additions and 6 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,8 @@ void roundLayoutResultsToPixelGrid(
yoga::Node* const node,
const double absoluteLeft,
const double absoluteTop) {
const auto pointScaleFactor = node->getConfig()->getPointScaleFactor();
const double pointScaleFactor =
static_cast<double>(node->getConfig()->getPointScaleFactor());

const double nodeLeft = node->getLayout().position(PhysicalEdge::Left);
const double nodeTop = node->getLayout().position(PhysicalEdge::Top);
Expand All @@ -80,7 +81,7 @@ void roundLayoutResultsToPixelGrid(
const double absoluteNodeRight = absoluteNodeLeft + nodeWidth;
const double absoluteNodeBottom = absoluteNodeTop + nodeHeight;

if (pointScaleFactor != 0.0f) {
if (pointScaleFactor != 0.0) {
// If a node has a custom measure function we never want to round down its
// size as this could lead to unwanted text truncation.
const bool textRounding = node->getNodeType() == NodeType::Text;
Expand All @@ -96,12 +97,14 @@ void roundLayoutResultsToPixelGrid(
// We multiply dimension by scale factor and if the result is close to the
// whole number, we don't have any fraction To verify if the result is close
// to whole number we want to check both floor and ceil numbers

const double scaledNodeWith = nodeWidth * pointScaleFactor;
const bool hasFractionalWidth =
!yoga::inexactEquals(fmod(nodeWidth * pointScaleFactor, 1.0), 0) &&
!yoga::inexactEquals(fmod(nodeWidth * pointScaleFactor, 1.0), 1.0);
!yoga::inexactEquals(round(scaledNodeWith), scaledNodeWith);

const double scaledNodeHeight = nodeHeight * pointScaleFactor;
const bool hasFractionalHeight =
!yoga::inexactEquals(fmod(nodeHeight * pointScaleFactor, 1.0), 0) &&
!yoga::inexactEquals(fmod(nodeHeight * pointScaleFactor, 1.0), 1.0);
!yoga::inexactEquals(round(scaledNodeHeight), scaledNodeHeight);

node->setLayoutDimension(
roundValueToPixelGrid(
Expand Down

0 comments on commit 26c554e

Please sign in to comment.