tools.zig 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. const std = @import("std");
  2. const Canvas = @import("canvas.zig").Canvas;
  3. pub const ToolType = enum {
  4. Brush,
  5. Eraser,
  6. };
  7. pub const Tools = struct {
  8. current_tool: ToolType,
  9. brush_size: u32,
  10. color: u32, // RGBA 格式
  11. pub fn init() Tools {
  12. return Tools{
  13. .current_tool = .Brush,
  14. .brush_size = 5,
  15. .color = 0xFF0000FF, // 默认红色
  16. };
  17. }
  18. pub fn handleMouseDown(self: *Tools, x: i32, y: i32, canvas: *Canvas) void {
  19. self.draw(x, y, canvas);
  20. }
  21. pub fn handleMouseMotion(self: *Tools, x: i32, y: i32, canvas: *Canvas) void {
  22. self.draw(x, y, canvas);
  23. }
  24. fn draw(self: *Tools, x: i32, y: i32, canvas: *Canvas) void {
  25. const color = if (self.current_tool == .Eraser) 0xFFFFFFFF else self.color;
  26. const size = self.brush_size;
  27. var dy: i32 = -@as(i32, @intCast(size / 2));
  28. while (dy <= size / 2) : (dy += 1) {
  29. var dx: i32 = -@as(i32, @intCast(size / 2));
  30. while (dx <= size / 2) : (dx += 1) {
  31. canvas.setPixel(x + dx, y + dy, color);
  32. }
  33. }
  34. }
  35. };