diff --git a/src/font/sprite/canvas.zig b/src/font/sprite/canvas.zig index 5f869ae98..e7072f56a 100644 --- a/src/font/sprite/canvas.zig +++ b/src/font/sprite/canvas.zig @@ -424,9 +424,6 @@ const PixmanImpl = struct { /// Draw and fill a rectangle. This is the main primitive for drawing /// lines as well (which are just generally skinny rectangles...) pub fn rect(self: *Canvas, v: Rect, color: Color) void { - assert(v.x >= 0); - assert(v.y >= 0); - const boxes = &[_]pixman.Box32{ .{ .x1 = @intCast(v.x), @@ -436,6 +433,10 @@ const PixmanImpl = struct { }, }; + assert(boxes[0].x1 >= 0); + assert(boxes[0].y1 >= 0); + assert(boxes[0].x2 <= @as(i32, @intCast(self.image.getWidth()))); + assert(boxes[0].y2 <= @as(i32, @intCast(self.image.getHeight()))); self.image.fillBoxes(.src, color.pixmanColor(), boxes) catch {}; } diff --git a/src/font/sprite/underline.zig b/src/font/sprite/underline.zig index 64859b0a6..064efc74f 100644 --- a/src/font/sprite/underline.zig +++ b/src/font/sprite/underline.zig @@ -80,13 +80,14 @@ const Draw = struct { // Ensure we never overflow out of bounds on the canvas const y_max = self.height -| 1; const bottom = @min(self.pos + self.thickness, y_max); - const y = @as(i32, @intCast(bottom -| self.thickness)); + const y = bottom -| self.thickness; + const max_height = self.height - y; canvas.rect(.{ .x = 0, - .y = y, + .y = @intCast(y), .width = self.width, - .height = self.thickness, + .height = @min(self.thickness, max_height), }, .on); }