From 2d817cc998f391dc67a8aa64bf18f44c807e2988 Mon Sep 17 00:00:00 2001 From: Humza Shahid Date: Fri, 20 Sep 2024 10:17:57 +0100 Subject: [PATCH] adjust app type by adding arrowX and arrowY integer fields, and subsequent refactoring, as preparation for being able to draw with arrow keys --- dotscape | Bin 1048952 -> 1048952 bytes functional-core/app/app-init.sml | 2 + functional-core/app/app-type.sml | 9 +++- functional-core/app/app-update.sml | 12 +++-- functional-core/app/app-with.sml | 69 +++++++++++++++++++++++------ 5 files changed, 69 insertions(+), 23 deletions(-) diff --git a/dotscape b/dotscape index 43a368b5b390a5bdaf089b15ced7ec80b19f2286..b2b71b4d210ee50935c4d6037ce025a6c2ee021b 100755 GIT binary patch delta 12074 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 delta 11983 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 let val model = AppWith.addTriangle - (model, x1, y1, x2, y2, hpos, vpos, newUndoTuple) + (model, x1, y1, x2, y2, hpos, vpos, newUndoTuple, hIdx, vIdx) val drawVec = Triangles.toVector model val drawMsg = DRAW_TRIANGLES_AND_RESET_DOTS drawVec in diff --git a/functional-core/app/app-with.sml b/functional-core/app/app-with.sml index 169cf51..4f057ae 100644 --- a/functional-core/app/app-with.sml +++ b/functional-core/app/app-with.sml @@ -27,7 +27,11 @@ sig * and also add new click position to undo stack. *) val addTriangleStage: - AppType.app_type * AppType.triangle_stage * (Real32.real * Real32.real) + AppType.app_type + * AppType.triangle_stage + * (Real32.real * Real32.real) + * int + * int -> AppType.app_type val addTriangle: @@ -39,6 +43,8 @@ sig * Real32.real * Real32.real * (Real32.real * Real32.real) + * int + * int -> AppType.app_type val useTriangles: AppType.app_type * AppType.triangle list -> AppType.app_type @@ -50,7 +56,8 @@ struct (* add to undo, clear redo *) fun addTriangleStage - (app: app_type, newTriangleStage: triangle_stage, newUndoHd) : app_type = + (app: app_type, newTriangleStage: triangle_stage, newUndoHd, arrowX, arrowY) : + app_type = let val { triangleStage = _ @@ -61,9 +68,11 @@ struct , windowHeight , undo , redo = _ + , showGraph , mouseX , mouseY - , showGraph + , arrowX = _ + , arrowY = _ } = app val newUndo = newUndoHd :: undo @@ -76,13 +85,17 @@ struct , yClickPoints = yClickPoints , windowWidth = windowWidth , windowHeight = windowHeight + , showGraph = showGraph , mouseX = mouseX , mouseY = mouseY - , showGraph = showGraph + , arrowX = arrowX + , arrowY = arrowY } end - fun addTriangle (app: app_type, x1, y1, x2, y2, x3, y3, newUndoHd) : app_type = + fun addTriangle + (app: app_type, x1, y1, x2, y2, x3, y3, newUndoHd, arrowX, arrowY) : + app_type = let val { triangles @@ -93,9 +106,11 @@ struct , windowHeight , undo , redo = _ + , showGraph , mouseX , mouseY - , showGraph + , arrowX = _ + , arrowY = _ } = app val newTriangle = {x1 = x1, y1 = y1, x2 = x2, y2 = y2, x3 = x3, y3 = y3} @@ -110,9 +125,11 @@ struct , yClickPoints = yClickPoints , windowWidth = windowWidth , windowHeight = windowHeight + , showGraph = showGraph , mouseX = mouseX , mouseY = mouseY - , showGraph = showGraph + , arrowX = arrowX + , arrowY = arrowY } end @@ -129,9 +146,11 @@ struct , triangleStage , undo , redo + , showGraph , mouseX , mouseY - , showGraph + , arrowX + , arrowY } = app val xClickPoints = ClickPoints.generate (wStart, wFinish) @@ -145,9 +164,11 @@ struct , windowHeight = windowHeight , undo = undo , redo = redo + , showGraph = showGraph , mouseX = mouseX , mouseY = mouseY - , showGraph = showGraph + , arrowX = arrowX + , arrowY = arrowY } end @@ -188,6 +209,8 @@ struct , undo , redo , showGraph + , arrowX + , arrowY } = app in { mouseX = mouseX @@ -201,6 +224,8 @@ struct , undo = undo , redo = redo , showGraph = showGraph + , arrowX = arrowX + , arrowY = arrowY } end @@ -216,9 +241,11 @@ struct , windowHeight , undo , redo + , showGraph , mouseX , mouseY - , showGraph + , arrowX + , arrowY } = app val newUndo = @@ -236,9 +263,11 @@ struct , yClickPoints = yClickPoints , windowWidth = windowWidth , windowHeight = windowHeight + , showGraph = showGraph , mouseX = mouseX , mouseY = mouseY - , showGraph = showGraph + , arrowX = arrowX + , arrowY = arrowY } end @@ -254,9 +283,11 @@ struct , windowHeight , undo , redo + , showGraph , mouseX , mouseY - , showGraph + , arrowX + , arrowY } = app val newUndo = newUndoHd :: undo @@ -273,9 +304,11 @@ struct , yClickPoints = yClickPoints , windowWidth = windowWidth , windowHeight = windowHeight + , showGraph = showGraph , mouseX = mouseX , mouseY = mouseY - , showGraph = showGraph + , arrowX = arrowX + , arrowY = arrowY } end @@ -292,6 +325,8 @@ struct , redo , mouseX , mouseY + , arrowX + , arrowY , showGraph = _ } = app in @@ -306,6 +341,8 @@ struct , windowHeight = windowHeight , mouseX = mouseX , mouseY = mouseY + , arrowX = arrowX + , arrowY = arrowY } end @@ -318,9 +355,11 @@ struct , windowHeight , undo , redo + , showGraph , mouseX , mouseY - , showGraph + , arrowX + , arrowY , triangles = _ , triangleStage = _ } = app @@ -338,6 +377,8 @@ struct , windowHeight = windowHeight , mouseX = mouseX , mouseY = mouseY + , arrowX = arrowX + , arrowY = arrowY } end end