mirror of
https://github.com/ghostty-org/ghostty.git
synced 2025-07-22 11:46:11 +03:00

Introduces static path methods and a reworked context API that makes things generally cleaner. This update incidentally fixed a bug we had before where the corner triangle shade characters were drawn solid rather than medium shade.
62 lines
1.8 KiB
Zig
62 lines
1.8 KiB
Zig
//! This file renders cursor sprites.
|
|
const std = @import("std");
|
|
const builtin = @import("builtin");
|
|
const assert = std.debug.assert;
|
|
const Allocator = std.mem.Allocator;
|
|
const font = @import("../main.zig");
|
|
const Sprite = font.sprite.Sprite;
|
|
|
|
/// Draw a cursor.
|
|
pub fn renderGlyph(
|
|
alloc: Allocator,
|
|
atlas: *font.Atlas,
|
|
sprite: Sprite,
|
|
width: u32,
|
|
height: u32,
|
|
thickness: u32,
|
|
) !font.Glyph {
|
|
// Make a canvas of the desired size
|
|
var canvas = try font.sprite.Canvas.init(alloc, width, height);
|
|
defer canvas.deinit();
|
|
|
|
// Draw the appropriate sprite
|
|
switch (sprite) {
|
|
Sprite.cursor_rect => canvas.rect(.{
|
|
.x = 0,
|
|
.y = 0,
|
|
.width = width,
|
|
.height = height,
|
|
}, .on),
|
|
Sprite.cursor_hollow_rect => {
|
|
// left
|
|
canvas.rect(.{ .x = 0, .y = 0, .width = thickness, .height = height }, .on);
|
|
// right
|
|
canvas.rect(.{ .x = width -| thickness, .y = 0, .width = thickness, .height = height }, .on);
|
|
// top
|
|
canvas.rect(.{ .x = 0, .y = 0, .width = width, .height = thickness }, .on);
|
|
// bottom
|
|
canvas.rect(.{ .x = 0, .y = height -| thickness, .width = width, .height = thickness }, .on);
|
|
},
|
|
Sprite.cursor_bar => canvas.rect(.{
|
|
.x = 0,
|
|
.y = 0,
|
|
.width = thickness,
|
|
.height = height,
|
|
}, .on),
|
|
else => unreachable,
|
|
}
|
|
|
|
// Write the drawing to the atlas
|
|
const region = try canvas.writeAtlas(alloc, atlas);
|
|
|
|
return font.Glyph{
|
|
.width = width,
|
|
.height = height,
|
|
.offset_x = 0,
|
|
.offset_y = @intCast(height),
|
|
.atlas_x = region.x,
|
|
.atlas_y = region.y,
|
|
.advance_x = @floatFromInt(width),
|
|
};
|
|
}
|