From 1f8e6e98b924ee4661be2e7b75cf09a6a8bb7cd3 Mon Sep 17 00:00:00 2001 From: ubq323 Date: Sun, 14 Apr 2024 18:38:10 +0100 Subject: change brush size and colour --- drawing/drawing.ha | 27 +++++++++++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) (limited to 'drawing/drawing.ha') diff --git a/drawing/drawing.ha b/drawing/drawing.ha index fc59e1b..54a877b 100644 --- a/drawing/drawing.ha +++ b/drawing/drawing.ha @@ -77,15 +77,38 @@ export fn circle(picture: *picture, c: pos, r: i32, color: u32) void = { }; }; +export fn circle_hollow(picture: *picture, c: pos, r: i32, color: u32) void = { + const (cx,cy) = c; + const ymin = max(0, cy-r); + const ymax = min(picture.h:i32-1, cy+r); + const xmin = max(0, cx-r); + const xmax = min(picture.w:i32-1, cx+r); + + const r2l = r*r - r; + const r2u = r*r + r; + + for (let y = ymin; y<=ymax; y+=1) { + const yd = y-cy; + for (let x = xmin; x<=xmax; x+=1) { + const xd = x-cx; + const v = yd*yd + xd*xd; + if (r2l <= v && v <= r2u) { + pic_set(picture, (x,y), color); + }; + }; + }; +}; export fn perform(pictures: []picture, op: op) void = { match (op) { case op_other => abort("oopsy"); case let o: op_circle => - const x = o.0, y=o.1; + const x = o.pos.0, y=o.pos.1; + const r = o.radius; + const c = o.color & 0xffffff; for (const pic &.. pictures) { let pos_within_pic = (x - pic.world_pos.0, y - pic.world_pos.1): pos; - circle(pic, pos_within_pic, 20, 0xff0088); + circle(pic, pos_within_pic, r: i32, c); }; }; }; -- cgit v1.2.3