const std = @import("std"); const Canvas = @import("canvas.zig").Canvas; pub const ToolType = enum { Brush, Eraser, }; pub const Tools = struct { current_tool: ToolType, brush_size: u32, color: u32, // RGBA 格式 pub fn init() Tools { return Tools{ .current_tool = .Brush, .brush_size = 5, .color = 0xFF0000FF, // 默认红色 }; } pub fn handleMouseDown(self: *Tools, x: i32, y: i32, canvas: *Canvas) void { self.draw(x, y, canvas); } pub fn handleMouseMotion(self: *Tools, x: i32, y: i32, canvas: *Canvas) void { self.draw(x, y, canvas); } fn draw(self: *Tools, x: i32, y: i32, canvas: *Canvas) void { const color = if (self.current_tool == .Eraser) 0xFFFFFFFF else self.color; const size = self.brush_size; var dy: i32 = -@as(i32, @intCast(size / 2)); while (dy <= size / 2) : (dy += 1) { var dx: i32 = -@as(i32, @intCast(size / 2)); while (dx <= size / 2) : (dx += 1) { canvas.setPixel(x + dx, y + dy, color); } } } };