ludic migrate state packages <every example program> packages/ludic.lab/example/plate.ludic 1804 vars into 126 states, 64 into lets; 23498 edits in 460 files Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
32 lines
1.4 KiB
Text
32 lines
1.4 KiB
Text
# ui_scroll_hold.ludic — scroll-top holds a box at an offset: one follows its state, which on-scroll
|
|
# keeps in step with the wheel; one stays where it is held; and ui_scroll_set moves another once.
|
|
import "ludic.ui"
|
|
import "ui_scroll_hold_parts/Held.ludic"
|
|
program UiScrollHold {
|
|
numbers float
|
|
function frame(ui_st: mut UiState, x: float, y: float, wheel: float) -> UiNode {
|
|
let i = new UiInput
|
|
i.x = x
|
|
i.y = y
|
|
i.wheel = wheel
|
|
ui_input(ui_st, i)
|
|
ui_show(ui_st, "Held", null, 0.0, 0.0, 400.0, 600.0)
|
|
let root: UiNode = ui_nodes(ui_st, "Held", null)
|
|
ui_place(ui_st, root, 0.0, 0.0, 400.0, 600.0)
|
|
return root.children[0]
|
|
}
|
|
function at(p: UiNode) -> string { return `{int(p.children[0].scroll_y)} {int(p.children[1].scroll_y)} {int(p.children[2].scroll_y)} {p.children[3].text}` }
|
|
entry (ui_st: mut UiState) {
|
|
ui_backend(ui_st, new UiBackend)
|
|
let p = frame(ui_st, -1.0, -1.0, 0.0)
|
|
let first = at(frame(ui_st, -1.0, -1.0, 0.0))
|
|
frame(ui_st, p.children[0].x + 5.0, p.children[0].y + 5.0, 1.0)
|
|
let followed = at(frame(ui_st, -1.0, -1.0, 0.0))
|
|
frame(ui_st, p.children[1].x + 5.0, p.children[1].y + 5.0, -1.0)
|
|
let fixed = at(frame(ui_st, -1.0, -1.0, 0.0))
|
|
ui_scroll_set(ui_st, "free", 70.0)
|
|
let set = at(frame(ui_st, -1.0, -1.0, 0.0))
|
|
frame(ui_st, p.children[2].x + 5.0, p.children[2].y + 5.0, 1.0)
|
|
print(`{first} | {followed} | {fixed} | {set} | {at(frame(ui_st, -1.0, -1.0, 0.0))}`)
|
|
}
|
|
}
|