diff options
author | ubq323 <ubq323@ubq323.website> | 2024-04-14 18:38:10 +0100 |
---|---|---|
committer | ubq323 <ubq323@ubq323.website> | 2024-04-14 18:38:34 +0100 |
commit | 1f8e6e98b924ee4661be2e7b75cf09a6a8bb7cd3 (patch) | |
tree | 057c24efd61e8d417199be70cdd487722c652f6c /drawing/drawing.ha | |
parent | 047718ad845ee5850fe70316d7c1ac9dec10b6dd (diff) |
change brush size and colour
Diffstat (limited to 'drawing/drawing.ha')
-rw-r--r-- | drawing/drawing.ha | 27 |
1 files changed, 25 insertions, 2 deletions
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); }; }; }; |