both YGRoundToPixelGrid and YGRoundValueToPixelGrid accumulated errror #901
Reference in New Issue
Block a user
No description provided.
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Report
Issues and Steps to Reproduce
Replaces this with steps to repro your issue.
node {
position = 5 5 0 0
dimensions = 365, 252
}
NodeType = Text;
others pading boder margin = 0;
pointScaleFactor = 3
absoluteLeft = 5
absoluteTop = 411.666656
1 YGRoundToPixelGrid
const float absoluteNodeTop = absoluteTop + nodeTop;
const float absoluteNodeBottom = absoluteNodeTop + nodeHeight;
const bool hasFractionalHeight = !YGFloatsEqual(fmodf(nodeHeight * pointScaleFactor, 1.0), 0) &&
!YGFloatsEqual(fmodf(nodeHeight * pointScaleFactor, 1.0), 1.0);
node->setLayoutDimension(
YGRoundValueToPixelGrid(
absoluteNodeBottom,
pointScaleFactor,
(textRounding && hasFractionalHeight),
(textRounding && !hasFractionalHeight)) -
YGRoundValueToPixelGrid(
absoluteNodeTop, pointScaleFactor, false, textRounding),
YGDimensionHeight);
This is unreasonable, maybe we just want YGRoundValueToPixelGrid(nodeHeight);
2 YGRoundValueToPixelGrid
used too much
YGFloatsEqual
bool YGFloatsEqual(const float a, const float b) { if (!YGFloatIsUndefined(a) && !YGFloatIsUndefined(b)) { return fabs(a - b) < 0.0001f; } return YGFloatIsUndefined(a) && YGFloatIsUndefined(b); }
screen one pixel is not < 0.0001f, nicer precision at this place is 1/pointScaleFactor
Expected Behavior
Describe what you expected would happen.
nodeHeight beginWith 252 ,after 251.666656
Except nodeHeight never lost precision
Actual Behavior
Describe what actually happened.
Link to Code
19035c90e9
When applicable, use this fiddle to post a web repro.
see my MR
Ping! I have the same issue with my project and the above pull request ^ fixes the issue. It would be great if any active maintainer of this project can fix it