mirror of
https://github.com/exoticorn/microw8.git
synced 2026-01-20 19:26:43 +01:00
Compare commits
2 Commits
0f22b1efb9
...
6ca63b87e5
| Author | SHA1 | Date | |
|---|---|---|---|
| 6ca63b87e5 | |||
| bf7604d385 |
Binary file not shown.
Binary file not shown.
@@ -115,6 +115,26 @@ export fn rectangle(x: f32, y: f32, w: f32, h: f32, col: i32) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export fn rectangle_outline(x: f32, y: f32, w: f32, h: f32, col: i32) {
|
||||||
|
let xl = nearest(x) as i32;
|
||||||
|
let xr = nearest(x + w) as i32;
|
||||||
|
let yt = nearest(y) as i32;
|
||||||
|
let yb = nearest(y + h) as i32;
|
||||||
|
|
||||||
|
hline(xl, xr, yt, col);
|
||||||
|
if yt < yb {
|
||||||
|
hline(xl, xr, yb - 1, col);
|
||||||
|
|
||||||
|
loop y {
|
||||||
|
setPixel(xl, yt, col);
|
||||||
|
if xl < xr {
|
||||||
|
setPixel(xr - 1, yt, col);
|
||||||
|
}
|
||||||
|
branch_if (yt := yt + 1) < yb: y;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
export fn circle(cx: f32, cy: f32, radius: f32, col: i32) {
|
export fn circle(cx: f32, cy: f32, radius: f32, col: i32) {
|
||||||
let y = clamp(nearest(cy - radius) as i32, 0, 240);
|
let y = clamp(nearest(cy - radius) as i32, 0, 240);
|
||||||
let maxY = clamp(nearest(cy + radius) as i32, 0, 240);
|
let maxY = clamp(nearest(cy + radius) as i32, 0, 240);
|
||||||
@@ -136,6 +156,58 @@ export fn circle(cx: f32, cy: f32, radius: f32, col: i32) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export fn circle_outline(cx: f32, cy: f32, radius: f32, col: i32) {
|
||||||
|
let prev_w: f32;
|
||||||
|
let y = clamp(nearest(cy - radius) as i32, -1, 241);
|
||||||
|
let maxY = clamp(nearest(cy + radius) as i32, -1, 241);
|
||||||
|
|
||||||
|
loop lines {
|
||||||
|
let lazy dy = y as f32 - cy + 0.5;
|
||||||
|
let inline q = radius * radius - dy * dy;
|
||||||
|
let w = sqrt(max(0 as f32, q));
|
||||||
|
|
||||||
|
let xlp = nearest(cx - prev_w) as i32;
|
||||||
|
let xl = nearest(cx - w) as i32;
|
||||||
|
let xrp = nearest(cx + prev_w) as i32;
|
||||||
|
let xr = nearest(cx + w) as i32;
|
||||||
|
if w >= prev_w {
|
||||||
|
if xl < xlp {
|
||||||
|
hline(xl, xlp, y, col);
|
||||||
|
} else {
|
||||||
|
if xl < xr {
|
||||||
|
setPixel(xl, y, col);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if xr > xrp {
|
||||||
|
hline(xrp, xr, y, col);
|
||||||
|
} else {
|
||||||
|
if xl < xr {
|
||||||
|
setPixel(xr - 1, y, col);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if xl > xlp {
|
||||||
|
hline(xlp, xl, y - 1, col);
|
||||||
|
} else {
|
||||||
|
if xlp < xrp {
|
||||||
|
setPixel(xlp, y - 1, col);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if xr < xrp {
|
||||||
|
hline(xr, xrp, y - 1, col);
|
||||||
|
} else {
|
||||||
|
if xlp < xrp {
|
||||||
|
setPixel(xrp - 1, y - 1, col);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
y = y + 1;
|
||||||
|
prev_w = w;
|
||||||
|
branch_if y <= maxY: lines;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
export fn line(x1: f32, y1: f32, x2: f32, y2: f32, col: i32) {
|
export fn line(x1: f32, y1: f32, x2: f32, y2: f32, col: i32) {
|
||||||
let swapTmp: f32;
|
let swapTmp: f32;
|
||||||
if x1 > x2 {
|
if x1 > x2 {
|
||||||
|
|||||||
@@ -89,6 +89,9 @@ impl BaseModule {
|
|||||||
add_function(&mut functions, &type_map, "setBackgroundColor", &[I32], None);
|
add_function(&mut functions, &type_map, "setBackgroundColor", &[I32], None);
|
||||||
add_function(&mut functions, &type_map, "setCursorPosition", &[I32, I32], None);
|
add_function(&mut functions, &type_map, "setCursorPosition", &[I32, I32], None);
|
||||||
|
|
||||||
|
add_function(&mut functions, &type_map, "rectangle_outline", &[F32, F32, F32, F32, I32], None);
|
||||||
|
add_function(&mut functions, &type_map, "circle_outline", &[F32, F32, F32, I32], None);
|
||||||
|
|
||||||
for i in functions.len()..64 {
|
for i in functions.len()..64 {
|
||||||
add_function(
|
add_function(
|
||||||
&mut functions,
|
&mut functions,
|
||||||
|
|||||||
Reference in New Issue
Block a user