git.lucas.co / cce-compositor
Wayland compositor (wlroots)
git clone https://git.lucas.co/cce-compositor.git

commit714b0214cb396ca1b9a888e2808c3b5fbbe8543d
parent0069516182
authorIsaac Freund <[email protected]>
date2023-01-08 15:25
render: fix rounding for fractional scaling

We currently scale the width/height of rectangles based on the scaled
x/y instead of the unscaled x/y. This however leads to inconsistent
width/height due to rounding. Fix this bug by basing width/height
scaling off of the original x/y.

Furthermore, fix a typo where we scaled the height off of the x
coordinate instead of the y coordinate.

 river/render.zig | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/river/render.zig b/river/render.zig
index 6c1280c..9642eac 100644
--- a/river/render.zig
+++ b/river/render.zig
@@ -418,10 +418,10 @@ fn renderRect(output: *const Output, box: wlr.Box, color: *const [4]f32) void {
 
 /// Scale a wlr_box, taking the possibility of fractional scaling into account.
 fn scaleBox(box: *wlr.Box, scale: f64) void {
+    box.width = scaleLength(box.width, box.x, scale);
+    box.height = scaleLength(box.height, box.y, scale);
     box.x = @floatToInt(c_int, @round(@intToFloat(f64, box.x) * scale));
     box.y = @floatToInt(c_int, @round(@intToFloat(f64, box.y) * scale));
-    box.width = scaleLength(box.width, box.x, scale);
-    box.height = scaleLength(box.height, box.x, scale);
 }
 
 /// Scales a width/height.