summaryrefslogtreecommitdiff
path: root/src/Waylean.lean
diff options
context:
space:
mode:
Diffstat (limited to 'src/Waylean.lean')
-rw-r--r--src/Waylean.lean36
1 files changed, 18 insertions, 18 deletions
diff --git a/src/Waylean.lean b/src/Waylean.lean
index a13b867..354b609 100644
--- a/src/Waylean.lean
+++ b/src/Waylean.lean
@@ -1,21 +1,21 @@
import Wayland
-open Wayland.Native
+open Wayland
-partial def mainLoop (loop : EventLoop (IO Unit)) : IO Unit := do
- match (← loop.poll) with
- | .none => return
- | .some msg => msg; mainLoop loop
+structure State where
+ count : Int
-partial def main : IO Unit := do
- let disp : Display ← Display.new .none
- let loop : EventLoop (IO Unit) ← EventLoop.new
- _ ← loop.addDisplay disp
- _ ← loop.addSignal SIGINT (do
- IO.println "Received SIGINT"
- loop.quit)
- let rec setUpTimer := loop.addTimer 500 (do
- IO.println "Timer tick"
- _ ← setUpTimer)
- _ ← setUpTimer
- disp.roundtrip
- mainLoop loop
+partial def nextTimer : DisplayM Int Unit := do
+ _ ← DisplayM.registerTimer 16ms do
+ let newCount := (← get) + 1
+ set newCount
+ DisplayM.liftIO (IO.println s!"Timer tick {newCount}")
+ nextTimer
+
+def launch : DisplayM State Unit := do
+ _ ← DisplayM.registerSignal .SIGINT do
+ DisplayM.liftIO (IO.println "Received SIGINT")
+ DisplayM.requestQuit
+ DisplayM.zoom (mk_lens count) nextTimer
+
+def main : IO Unit :=
+ DisplayM.run launch { count := 0 }