From b8ab605c9028ad8b18fe36e64dc72b19b2581c08 Mon Sep 17 00:00:00 2001 From: Humza Shahid Date: Tue, 30 Jul 2024 19:04:36 +0100 Subject: [PATCH] code function that indicates which area, if any, was clicked --- dot-to-dot | Bin 903936 -> 903936 bytes dot-to-dot.mlb | 3 +- functional-core/app-update.sml | 76 +++++++++++++++++- imperative-shell/input-callbacks.sml | 2 +- imperative-shell/shell.sml | 2 +- message-types/draw-msg.sml | 9 +++ .../msg.sml => message-types/input-msg.sml | 4 +- 7 files changed, 90 insertions(+), 6 deletions(-) create mode 100644 message-types/draw-msg.sml rename functional-core/msg.sml => message-types/input-msg.sml (75%) diff --git a/dot-to-dot b/dot-to-dot index ba4ff478a1f2c878fac6669ac48e2887632b83ac..80fcfa482c3c61325981860a5369707ba1649ba5 100755 GIT binary patch delta 8135 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 delta 8138 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 curVerticalPos + 10 then + getVerticalClickPos (idx + 1, horizontalPos, mouseX, mouseY) + else + let + val left = Real32.fromInt ((horizontalPos - 10) div 500) + val right = Real32.fromInt ((horizontalPos + 10) div 500) + val bottom = Real32.fromInt ((curVerticalPos - 10) div 500) + val top = Real32.fromInt ((curVerticalPos + 10) div 500) + in + val highlightSquare = #[ + left, bottom, (* lower left *) + right, bottom, (* lower right *) + left, top, (* upper left *) + + left, top, (* upper left *) + right, bottom, (* lower right *) + right, top (* upper right *) + ] + end + end + + fun getHorizontalClickPos (idx, mouseX, mouseY) = + if idx = Vector.length clickPoints then + #[] + else + let + val curPos = Vector.sub (clickPoints, idx) + in + if mouseX < curPos - 10 orelse mouseX > curPos + 10 then + getHorizontalClickPos (idx + 1, mouseX, mouseY) + else + getVerticalClickPos (0, curPos, mouseX, mouseY) + end + in + (* + * This function returns a vector containing the position data of the + * clicked square. + * If a square wasn't found at the clicked position, + * an empty vector is returned. + *) + fun getClickPos (mouseX, mouseY) = getHorizontalClickPos (0, mouseX, mouseY) + end +end diff --git a/imperative-shell/input-callbacks.sml b/imperative-shell/input-callbacks.sml index 99eb570..252560d 100644 --- a/imperative-shell/input-callbacks.sml +++ b/imperative-shell/input-callbacks.sml @@ -1,7 +1,7 @@ structure InputCallbacks = struct open CML - open Msg + open InputMessage fun mouseMoveCallback mailbox (x, y) = Mailbox.send (mailbox, (MOUSE_MOVE {x = x, y = y})) diff --git a/imperative-shell/shell.sml b/imperative-shell/shell.sml index 225fba3..2370f0e 100644 --- a/imperative-shell/shell.sml +++ b/imperative-shell/shell.sml @@ -4,7 +4,7 @@ struct fun callbackListener mailbox = let - open Msg + open InputMessage val _ = case Mailbox.recv mailbox of MOUSE_MOVE {x, y} => diff --git a/message-types/draw-msg.sml b/message-types/draw-msg.sml new file mode 100644 index 0000000..d6adc1e --- /dev/null +++ b/message-types/draw-msg.sml @@ -0,0 +1,9 @@ +signature DRAW_MESSAGE = +sig + +end + +structure DrawMessage :> DRAW_MESSAGE = +struct + +end diff --git a/functional-core/msg.sml b/message-types/input-msg.sml similarity index 75% rename from functional-core/msg.sml rename to message-types/input-msg.sml index 9eb30a7..d15c69f 100644 --- a/functional-core/msg.sml +++ b/message-types/input-msg.sml @@ -1,4 +1,4 @@ -signature MSG = +signature INPUT_MESSAGE = sig datatype t = MOUSE_MOVE of {x: int, y: int} @@ -6,7 +6,7 @@ sig | MOUSE_LEFT_RELEASE end -structure Msg :> MSG = +structure InputMessage :> INPUT_MESSAGE = struct datatype t = MOUSE_MOVE of {x: int, y: int}