diff --git a/dotscape b/dotscape index 569f6b7..bcc024b 100755 Binary files a/dotscape and b/dotscape differ diff --git a/fcore/app-with.sml b/fcore/app-with.sml index 4738112..00702d9 100644 --- a/fcore/app-with.sml +++ b/fcore/app-with.sml @@ -1011,7 +1011,65 @@ struct } end -(* todo: - fun useSquaresAndSetNormalMode (app: app_type, squares, canvasWidth, canvasHeight) = -*) + fun useSquares (app: app_type, squares, canvasWidth, canvasHeight) = + let + val + { mode + , canvasHeight = _ + , canvasWidth = _ + , squares = _ + , arrowX + , arrowY + , windowWidth + , windowHeight + , xClickPoints + , yClickPoints + + , showGraph + , mouseX + , mouseY + , openFilePath + , fileBrowser + , fileBrowserIdx + , r + , g + , b + , a + , modalNum + , undo + , redo + } = app + + val arrowX = Int.min (arrowX, canvasWidth) + val arrowY = Int.min (arrowY, canvasHeight) + val (xClickPoints, yClickPoints) = + ClickPoints.generate + (windowWidth, windowHeight, canvasWidth, canvasHeight) + in + { mode = mode + , canvasHeight = canvasHeight + , canvasWidth = canvasWidth + , arrowX = arrowX + , mouseX = mouseX + , mouseY = mouseY + , squares = squares + , arrowY = arrowY + , windowWidth = windowWidth + , windowHeight = windowHeight + , xClickPoints = xClickPoints + , yClickPoints = yClickPoints + + , showGraph = showGraph + , openFilePath = openFilePath + , fileBrowser = fileBrowser + , fileBrowserIdx = fileBrowserIdx + , r = r + , g = g + , b = b + , a = a + , modalNum = 0 + , undo = undo + , redo = redo + } + end end diff --git a/fcore/normal-mode.sml b/fcore/normal-mode.sml index aabe189..d74b6b8 100644 --- a/fcore/normal-mode.sml +++ b/fcore/normal-mode.sml @@ -265,9 +265,6 @@ struct fun updateCanvas (model, canvasWidth, canvasHeight) = let - val newCanvaidth = #modalNum model - val model = AppWith.canvasWidth (model, canvasWidth) - val { arrowX , arrowY @@ -308,6 +305,7 @@ struct val newCanvasWidth = #modalNum model val (model as {canvasWidth, canvasHeight, ...}) = AppWith.canvasWidth (model, newCanvasWidth) + val {canvasWidth, canvasHeight, ...} = model in updateCanvas (model, canvasWidth, canvasHeight) end @@ -315,8 +313,15 @@ struct fun updateCanvasHeight model = let val newCanvasHeight = #modalNum model - val (model as {canvasWidth, canvasHeight, ...}) = - AppWith.canvasHeight (model, newCanvasHeight) + val model = AppWith.canvasHeight (model, newCanvasHeight) + val {canvasWidth, canvasHeight, ...} = model + in + updateCanvas (model, canvasWidth, canvasHeight) + end + + fun useSquares (model, squares, canvasWidth, canvasHeight) = + let + val model = AppWith.useSquares (model, squares, canvasWidth, canvasHeight) in updateCanvas (model, canvasWidth, canvasHeight) end @@ -358,8 +363,8 @@ struct | KEY_CTRL_S => CommonUpdate.getSaveSquaresMsg model | KEY_CTRL_L => CommonUpdate.getLoadSquaresMsg model | KEY_CTRL_E => CommonUpdate.getExportSquaresMsg model - | USE_SQUARES squares => - CommonUpdate.useSquaresInNormalMode (model, squares) + | USE_SQUARES {squares, canvasWidth, canvasHeight} => + useSquares (model, squares, canvasWidth, canvasHeight) | SQUARES_LOAD_ERROR => CommonUpdate.squaresLoadError model | KEY_CTRL_O => enterBrowseMode model | ARROW_UP => moveArrowUp model diff --git a/imperative-shell/file-thread.sml b/imperative-shell/file-thread.sml index 6d9197e..1523030 100644 --- a/imperative-shell/file-thread.sml +++ b/imperative-shell/file-thread.sml @@ -59,7 +59,12 @@ struct val () = TextIO.closeIn io in case Parser.parse str of - SOME (canvasWidth, canvasHeight, grid) => () + SOME (canvasWidth, canvasHeight, grid) => + Mailbox.send (inputMailbox, USE_SQUARES + { squares = grid + , canvasWidth = canvasWidth + , canvasHeight = canvasHeight + }) | NONE => () end diff --git a/message-types/input-msg.sml b/message-types/input-msg.sml index baa282e..ac589dc 100644 --- a/message-types/input-msg.sml +++ b/message-types/input-msg.sml @@ -27,7 +27,10 @@ struct | KEY_ENTER | KEY_SPACE | USE_SQUARES of - {squares: int vector vector, canvasWidth: int, canvasHeight: int} + { squares: {r: int, g: int, b: int, a: int} vector vector + , canvasWidth: int + , canvasHeight: int + } | SQUARES_LOAD_ERROR | FILE_BROWSER_AND_PATH of {fileBrowser: AppType.file_browser_item vector, path: string}