A child pinned with bottom: 0 can end a pixel above its parent's bottom after pixel rounding
Maintainer thường phản hồi trong vòng 1 ngày
Đánh giá
- Độ khó
- 4/5
- Thời gian dự kiến
- 3-5 ngày
- Mức phù hợp với người mới
- 25/100
Hướng nghiên cứu
Start with PixelGrid.cpp and the roundLayoutResultsToPixelGrid logic described in the issue. Review draft PR #2068 and the gentest position rounding and generated expectations it identifies. Done means bottom-pinned children align with the parent after rounding, text positions avoid cumulative drift, and the reported gentest expectations are updated.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Mô tả
- I have searched existing issues and this is not a duplicate
Summary
roundLayoutResultsToPixelGrid: position rounded from relative offset (nodeTop), size from absolute edges (round(absoluteNodeBottom) - round(absoluteNodeTop)).- Parent on a fractional pixel → child pinned
bottom: 0ends 1 px above parent's bottom.
Repro
yoga-layout 3.2.1; PixelGrid.cpp on main rounds the same way.
import Yoga, { Edge, PositionType } from "yoga-layout";
const config = Yoga.Config.create();
config.setPointScaleFactor(1);
const root = Yoga.Node.create(config);
root.setWidth(100);
const parent = Yoga.Node.create(config);
parent.setPositionType(PositionType.Absolute);
parent.setPosition(Edge.Top, 0.25);
parent.setWidth(100);
parent.setHeight(10.5);
const child = Yoga.Node.create(config);
child.setPositionType(PositionType.Absolute);
child.setPosition(Edge.Bottom, 0);
child.setWidth(100);
child.setHeight(10.25);
parent.insertChild(child, 0);
root.insertChild(parent, 0);
root.calculateLayout(undefined, undefined);
parent.getComputedLayout(); // { top: 0, height: 11 }
child.getComputedLayout(); // { top: 0, height: 10 } -> bottom 10, parent bottom 11
- Expected: child
top: 1, height: 10, flush with parent bottom. - Actual: 1 px gap.
Why
- Child absolute edges 0.5 / 10.75 → rounded 1 / 11 → height 10.
- Position:
round(0.25) = 0, notround(0.5) - round(0.25) = 1.
Scale
- Scale 2.25 (Pixel 8 Pro), parent 506 tall at offset 0–4,
bottom: 0child 150–260 tall: 2003 / 9176 layouts 1 px short. top: 0; bottom: 0child: 0 / 9176.- Seen in React Native 0.88, Android: card shade
bottom: 0stops 1 px above the card edge, image line shows.
Related
- #1574: rounding is meant to avoid gaps between touching edges. This is one.
Possible fix
- Non-text position:
round(absoluteNodeTop) - round(absoluteTop)(same for left), reusing the rounded leading edge of the size. - Text nodes keep floored relative position: absolute flooring drifts text 1 px per relayout.
- gentest reads positions with the same relative rounding (
Math.round(rect.top - parentTop)); change it too. 2 generated expectations move. - Draft PR: #2068.
Written with help from Claude (AI); reviewed and tested by me.
- Ngôn ngữ chính
- C++
- Star
- 18.9k
- Fork
- 1.6k
- Merge trung bình
- 1 ngày 31 phút
- Pull request đã merge (30 ngày)
- 14
Chuẩn bị môi trường
- Không có Dockerfile hay tệp Docker Compose
- Không có mẫu pull request
- Đọc hướng dẫn đóng góp
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Issue khác của react/yoga
-
Yoga 3.2.2 patch releaseĐang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 25/100
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 4/5 3-5 ngày Mức phù hợp với người mới 35/100
Maintainer thường phản hồi trong vòng 1 ngày
-
Measured nodes in a cached subtree grow by a rounding step on every layout passCó thể đã có người làm @salmanmkc đã nhận 7 ngày trước. Đang mở
Độ khó 4/5 3-5 ngày Mức phù hợp với người mới 68/100
Maintainer thường phản hồi trong vòng 1 ngày
-
Auto cross axis margins are ignored in wrapping containers and baseline rowsCó thể đã có người làm @sorinc03 đã nhận 5 ngày trước. Đang mở
Độ khó 4/5 3-5 ngày Mức phù hợp với người mới 56/100
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 4/5 3-5 ngày Mức phù hợp với người mới 68/100
Maintainer thường phản hồi trong vòng 1 ngày
Issue tương tự
-
#2754 make deepseek api not workĐang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 66/100
xiaoyifang/goldendict-ng#3148 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 91/100
triton-inference-server/server#9069 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 76/100
Maintainer thường phản hồi trong vòng 4 ngày
-
documentation
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100
-
[Bug]: Launching Space Calibrator causes Bluetooth mouse lag due to a 100% duty-cycle BLE scanCó thể đã có người làm @Yuuki204 đã nhận hôm nay. Đang mởbug
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100