From 22173a0cdb47334fa2d9898ef8672603350afb5a Mon Sep 17 00:00:00 2001 From: Humza Shahid Date: Fri, 11 Jul 2025 23:55:12 +0100 Subject: [PATCH] add functionality to delete pixel --- dotscape | Bin 979528 -> 979528 bytes dotscape.mlb | 22 ---------------------- fcore/normal-mode.sml | 42 ++++++------------------------------------ 3 files changed, 6 insertions(+), 58 deletions(-) diff --git a/dotscape b/dotscape index 1f71638e4aa8c0831755ccb655150bd9df930a7f..63455cfc9d32abe335c4ea085e6a8e0c44b217a1 100755 GIT binary patch delta 27863 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⩔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 delta 28447 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 diff --git a/dotscape.mlb b/dotscape.mlb index 9719888..01cd0dc 100644 --- a/dotscape.mlb +++ b/dotscape.mlb @@ -3,13 +3,6 @@ $(SML_LIB)/basis/basis.mlb (* FUNCTIONAL CORE *) fcore/app-type.sml -ann - "allowVectorExps true" -in - fcore/ndc.sml - cozette-sml/fonts/cozette-ascii.mlb -end - fcore/graph-lines.sml fcore/click-points.sml fcore/app-init.sml @@ -34,21 +27,6 @@ fcore/parse-file.sml $(SML_LIB)/basis/mlton.mlb $(SML_LIB)/cml/cml.mlb -ann - "allowFFI true" -in - ffi/gles3-import.sml - ffi/glfw-import.sml - ffi/glfw-input.sml -end - -ann - "allowVectorExps true" -in - imperative-shell/constants.sml - imperative-shell/app-draw.sml -end - imperative-shell/input-callbacks.sml imperative-shell/update-thread.sml diff --git a/fcore/normal-mode.sml b/fcore/normal-mode.sml index 10b372c..aabe189 100644 --- a/fcore/normal-mode.sml +++ b/fcore/normal-mode.sml @@ -134,7 +134,7 @@ struct fun realToInt x = Real32.toInt IEEEReal.TO_NEAREST x - fun addCoordinates (model: app_type, hIdx, vIdx) = + fun changeSquare (model: app_type, hIdx, vIdx, fModel) = let val { windowWidth @@ -149,7 +149,7 @@ struct val xpos = Vector.sub (xClickPoints, hIdx) val ypos = Vector.sub (yClickPoints, vIdx) - val model = AppWith.addSquare (model, hIdx, vIdx, hIdx, vIdx) + val model = fModel (model, hIdx, vIdx, hIdx, vIdx) val squares = #squares model val dotVec = getDotVecFromIndices (model, hIdx, vIdx) @@ -170,6 +170,9 @@ struct (model, [DRAW drawMsg]) end + fun addCoordinates (model, hIdx, vIdx) = + changeSquare (model, hIdx, vIdx, AppWith.addSquare) + fun mouseLeftClick model = case ClickPoints.getClickPositionFromMouse model of SOME (hIdx, vIdx) => addCoordinates (model, hIdx, vIdx) @@ -181,40 +184,7 @@ struct end fun deletePixel (model, hIdx, vIdx) = - let - val - { windowWidth - , windowHeight - , xClickPoints - , yClickPoints - , canvasWidth - , canvasHeight - , ... - } = model - - val xpos = Vector.sub (xClickPoints, hIdx) - val ypos = Vector.sub (yClickPoints, vIdx) - - val model = AppWith.deleteSquare (model, hIdx, vIdx, hIdx, vIdx) - val squares = #squares model - - val dotVec = getDotVecFromIndices (model, hIdx, vIdx) - - val maxSide = Int.max (canvasWidth, canvasHeight) - val squares = CollisionTree.toTriangles - ( windowWidth - , windowHeight - , squares - , maxSide - , canvasWidth - , canvasHeight - , xClickPoints - , yClickPoints - ) - val drawMsg = DRAW_SQUARES_AND_DOTS {squares = squares, dots = dotVec} - in - (model, [DRAW drawMsg]) - end + changeSquare (model, hIdx, vIdx, AppWith.deleteSquare) fun backspace model = let val {arrowX, arrowY, ...} = model