Initial project import
This commit is contained in:
commit
23f2d29e32
11957 files changed
+1754577
No files matched your search
@@ -0,0 +1,100 @@
|
||||
import term.ui as tui
|
||||
import rand
|
||||
|
||||
struct Rect {
|
||||
mut:
|
||||
c tui.Color
|
||||
x int
|
||||
y int
|
||||
x2 int
|
||||
y2 int
|
||||
}
|
||||
|
||||
struct App {
|
||||
mut:
|
||||
tui &tui.Context = unsafe { nil }
|
||||
rects []Rect
|
||||
cur_rect Rect
|
||||
is_drag bool
|
||||
redraw bool
|
||||
}
|
||||
|
||||
fn random_color() tui.Color {
|
||||
return tui.Color{
|
||||
r: rand.u8()
|
||||
g: rand.u8()
|
||||
b: rand.u8()
|
||||
}
|
||||
}
|
||||
|
||||
fn event(e &tui.Event, mut app App) {
|
||||
match e.typ {
|
||||
.mouse_down {
|
||||
app.is_drag = true
|
||||
app.cur_rect = Rect{
|
||||
c: random_color()
|
||||
x: e.x
|
||||
y: e.y
|
||||
x2: e.x
|
||||
y2: e.y
|
||||
}
|
||||
}
|
||||
.mouse_drag {
|
||||
app.cur_rect.x2 = e.x
|
||||
app.cur_rect.y2 = e.y
|
||||
}
|
||||
.mouse_up {
|
||||
app.rects << app.cur_rect
|
||||
app.is_drag = false
|
||||
}
|
||||
.key_down {
|
||||
if e.code == .c {
|
||||
app.rects.clear()
|
||||
} else if e.code == .escape {
|
||||
exit(0)
|
||||
}
|
||||
}
|
||||
else {}
|
||||
}
|
||||
|
||||
app.redraw = true
|
||||
}
|
||||
|
||||
fn frame(mut app App) {
|
||||
if !app.redraw {
|
||||
return
|
||||
}
|
||||
|
||||
app.tui.clear()
|
||||
|
||||
for rect in app.rects {
|
||||
app.tui.set_bg_color(rect.c)
|
||||
app.tui.draw_rect(rect.x, rect.y, rect.x2, rect.y2)
|
||||
}
|
||||
|
||||
if app.is_drag {
|
||||
r := app.cur_rect
|
||||
app.tui.set_bg_color(r.c)
|
||||
app.tui.draw_empty_rect(r.x, r.y, r.x2, r.y2)
|
||||
}
|
||||
|
||||
app.tui.reset_bg_color()
|
||||
app.tui.flush()
|
||||
app.redraw = false
|
||||
}
|
||||
|
||||
type EventFn = fn (&tui.Event, voidptr)
|
||||
|
||||
type FrameFn = fn (voidptr)
|
||||
|
||||
fn main() {
|
||||
mut app := &App{}
|
||||
app.tui = tui.init(
|
||||
user_data: app
|
||||
event_fn: EventFn(event)
|
||||
frame_fn: FrameFn(frame)
|
||||
hide_cursor: true
|
||||
frame_rate: 60
|
||||
)
|
||||
app.tui.run()!
|
||||
}
|
||||
Reference in new issue
Block a user