using LinearAlgebra using AbstractPlotting scene = Scene(raw = true, camera = cam2d!, resolution = (500, 500)) r = LinRange(0, 3, 4) the_time = Node(time()) last_open = false @async while true global last_open the_time[] = time() # this is a bit awkward, since the isopen(scene) is false # as long as the scene isn't displayed last_open && !isopen(scene) && break last_open = isopen(scene) sleep(1/30) end pos = lift(scene.events.mouseposition, the_time) do mpos, t map(LinRange(0, 2pi, 60)) do i circle = Point2f0(sin(i), cos(i)) mouse = to_world(scene, Point2f0(mpos)) secondary = (sin((i * 10f0) + t) * 0.09) * normalize(circle) (secondary .+ circle) .+ mouse end end lines!(scene, pos) p1 = scene[end] p2 = scatter!( scene, pos, markersize = 0.1f0, marker = :star5, color = p1.color, )[end] center!(scene) t = Theme(raw = true, camera = campixel!) b1 = button(t, "color") b2 = button(t, "marker") msize = slider(t, 0.1:0.01:0.5) on(b1[end][:clicks]) do c p1.color = rand(RGBAf0) end markers = ('π', '😹', '⚃', '◑', '▼') on(b2[end][:clicks]) do c p2.marker = markers[rand(1:5)] end on(msize[end][:value]) do val p2.markersize = val end final = hbox( vbox(b1, b2, msize), scene ) # Do not execute beyond this point! RecordEvents(final, "output")