signature APP_INIT = sig val fromWindowWidthAndHeight: int * int * int * int -> AppType.app_type end structure AppInit :> APP_INIT = struct open AppType fun helpFromWidthAndHeight ( windowWidth , windowHeight , wStart , wFinish , hStart , hFinish , canvasWidth , canvasHeight ) : app_type = let val xClickPoints = ClickPoints.generate (wStart, wFinish, canvasWidth) val yClickPoints = ClickPoints.generate (hStart, hFinish, canvasHeight) val maxPoints = Int.max (canvasWidth, canvasHeight) val squares = Vector.tabulate (maxPoints, fn _ => Vector.tabulate (maxPoints, fn _ => 0)) in { mode = AppType.NORMAL_MODE , squares = squares , canvasWidth = canvasWidth , canvasHeight = canvasHeight , windowWidth = windowWidth , windowHeight = windowHeight , xClickPoints = xClickPoints , yClickPoints = yClickPoints , mouseX = 0.0 , mouseY = 0.0 , showGraph = true , arrowX = 0 , arrowY = 0 , openFilePath = "" , fileBrowser = Vector.fromList [] , fileBrowserIdx = 0 , r = 0.0 , g = 0.0 , b = 0.0 , modalNum = 0 } end fun fromWindowWidthAndHeight (windowWidth, windowHeight, canvasWidth, canvasHeight) = if windowWidth > windowHeight then let val difference = windowWidth - windowHeight val wStart = difference div 2 val wFinish = wStart + windowHeight in helpFromWidthAndHeight ( windowWidth , windowHeight , wStart , wFinish , 0 , windowHeight , canvasWidth , canvasHeight ) end else let val difference = windowHeight - windowWidth val hStart = difference div 2 val hFinish = hStart + windowWidth in helpFromWidthAndHeight ( windowWidth , windowHeight , 0 , windowWidth , hStart , hFinish , canvasWidth , canvasHeight ) end end