From 94611eceee7f7181b238fd37d7222403cc54db3f Mon Sep 17 00:00:00 2001 From: Humza Shahid Date: Wed, 31 Jul 2024 10:03:30 +0100 Subject: [PATCH] a little refactoring --- dot-to-dot | Bin 903992 -> 903992 bytes dot-to-dot.mlb | 8 ++------ imperative-shell/app-draw.sml | 4 ++-- imperative-shell/event-loop.sml | 35 ++++++++++++++++++++++++++++++++ imperative-shell/shell.sml | 35 ++------------------------------ 5 files changed, 41 insertions(+), 41 deletions(-) create mode 100644 imperative-shell/event-loop.sml diff --git a/dot-to-dot b/dot-to-dot index 1cec7692591ad13c1390fccf729040cba7ec9493..84ecf9d52320c358de35d2e798da6f4735eb2463 100755 GIT binary patch delta 7722 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 diff --git a/dot-to-dot.mlb b/dot-to-dot.mlb index 8b2a57d..f91b646 100644 --- a/dot-to-dot.mlb +++ b/dot-to-dot.mlb @@ -27,9 +27,5 @@ in end imperative-shell/input-callbacks.sml - -ann - "allowVectorExps true" -in - imperative-shell/shell.sml -end +imperative-shell/event-loop.sml +imperative-shell/shell.sml diff --git a/imperative-shell/app-draw.sml b/imperative-shell/app-draw.sml index 466a556..c6c07b7 100644 --- a/imperative-shell/app-draw.sml +++ b/imperative-shell/app-draw.sml @@ -93,7 +93,7 @@ struct () end - fun drawButton (buttonDrawObject: draw_object, vec) = + fun drawButton (buttonDrawObject: draw_object, buttonDrawLength) = let val {vertexBuffer, program, ...} = buttonDrawObject val _ = Gles3.bindBuffer vertexBuffer @@ -102,7 +102,7 @@ struct val _ = Gles3.vertexAttribPointer (1, 3, 5, 8) val _ = Gles3.enableVertexAttribArray 1 val _ = Gles3.useProgram program - val _ = Gles3.drawArrays (Gles3.TRIANGLES (), 0, Vector.length vec div 5) + val _ = Gles3.drawArrays (Gles3.TRIANGLES (), 0, buttonDrawLength) in () end diff --git a/imperative-shell/event-loop.sml b/imperative-shell/event-loop.sml new file mode 100644 index 0000000..81d0257 --- /dev/null +++ b/imperative-shell/event-loop.sml @@ -0,0 +1,35 @@ +structure EventLoop = +struct + open CML + open InputMessage + + fun update inputMailbox = + let + val _ = + case Mailbox.recv inputMailbox of + MOUSE_MOVE {x, y} => + print (String.concat + ["x pos: ", Int.toString x, ", y pos: ", Int.toString y, "\n"]) + | MOUSE_LEFT_CLICK => print "clicked mouse\n" + | MOUSE_LEFT_RELEASE => print "released mouse\n" + in + update inputMailbox + end + + fun draw (window, graphDrawObject, buttonDrawObject, buttonDrawLength) = + if not (Glfw.windowShouldClose window) then + let + val _ = Gles3.clearColor (1.0, 1.0, 1.0, 1.0) + val _ = Gles3.clear () + + val _ = AppDraw.drawGraphLines graphDrawObject + val _ = AppDraw.drawButton (buttonDrawObject, buttonDrawLength) + + val _ = Glfw.pollEvents () + val _ = Glfw.swapBuffers window + in + draw (window, graphDrawObject, buttonDrawObject, buttonDrawLength) + end + else + Glfw.terminate () +end diff --git a/imperative-shell/shell.sml b/imperative-shell/shell.sml index 0077ece..9cda3f9 100644 --- a/imperative-shell/shell.sml +++ b/imperative-shell/shell.sml @@ -2,37 +2,6 @@ structure Shell = struct open CML - fun callbackListener mailbox = - let - open InputMessage - val _ = - case Mailbox.recv mailbox of - MOUSE_MOVE {x, y} => - print (String.concat - ["x pos: ", Int.toString x, ", y pos: ", Int.toString y, "\n"]) - | MOUSE_LEFT_CLICK => print "clicked mouse\n" - | MOUSE_LEFT_RELEASE => print "released mouse\n" - in - callbackListener mailbox - end - - fun loop (window, graphDrawObject, buttonDrawObject) = - if not (Glfw.windowShouldClose window) then - let - val _ = Gles3.clearColor (1.0, 1.0, 1.0, 1.0) - val _ = Gles3.clear () - - val _ = AppDraw.drawGraphLines graphDrawObject - val _ = AppDraw.drawButton (buttonDrawObject, #[]) - - val _ = Glfw.pollEvents () - val _ = Glfw.swapBuffers window - in - loop (window, graphDrawObject, buttonDrawObject) - end - else - Glfw.terminate () - fun main () = let (* Set up GLFW. *) @@ -63,9 +32,9 @@ struct () end) (* Set callback listener *) - val _ = CML.spawn (fn () => callbackListener inputMailbox) + val _ = CML.spawn (fn () => EventLoop.update inputMailbox) in - loop (window, graphDrawObject, buttonDrawObject) + EventLoop.draw (window, graphDrawObject, buttonDrawObject, 0) end end