diff --git a/dotscape b/dotscape index 036a862..f8ca62f 100755 Binary files a/dotscape and b/dotscape differ diff --git a/fcore/app-init.sml b/fcore/app-init.sml index 4a1b4d9..25dde11 100644 --- a/fcore/app-init.sml +++ b/fcore/app-init.sml @@ -47,6 +47,7 @@ struct , g = 0 , b = 0 , a = 1 + , layer = 0 , modalNum = 0 , undo = [] , redo = [] diff --git a/fcore/app-type.sml b/fcore/app-type.sml index 69111df..385e7b0 100644 --- a/fcore/app-type.sml +++ b/fcore/app-type.sml @@ -33,6 +33,7 @@ struct , g: int , b: int , a: int + , layer: int , modalNum: int , undo: square list , redo: square list diff --git a/fcore/app-with.sml b/fcore/app-with.sml index 94d0942..b6d1399 100644 --- a/fcore/app-with.sml +++ b/fcore/app-with.sml @@ -51,6 +51,7 @@ struct , g , b , a + , layer , modalNum , undo , redo @@ -80,6 +81,7 @@ struct , g = g , b = b , a = a + , layer = layer , modalNum = modalNum , undo = undo , redo = redo @@ -110,6 +112,7 @@ struct , g , b , a + , layer , modalNum , undo , redo @@ -139,6 +142,7 @@ struct , g = g , b = b , a = a + , layer = layer , modalNum = modalNum , undo = undo , redo = redo @@ -169,6 +173,7 @@ struct , g , b , a + , layer , modalNum , undo , redo @@ -195,6 +200,7 @@ struct , g = g , b = b , a = a + , layer = layer , modalNum = modalNum , undo = undo , redo = redo @@ -225,6 +231,7 @@ struct , g , b , a + , layer , modalNum , undo , redo @@ -251,6 +258,7 @@ struct , g = g , b = b , a = a + , layer = layer , modalNum = modalNum , undo = undo , redo = redo @@ -281,6 +289,7 @@ struct , g , b , a + , layer , modalNum , undo , redo @@ -307,6 +316,7 @@ struct , g = g , b = b , a = a + , layer = layer , modalNum = modalNum , undo = undo , redo = redo @@ -337,6 +347,7 @@ struct , g , b , a + , layer , modalNum , undo , redo @@ -367,6 +378,7 @@ struct , g = g , b = b , a = a + , layer = layer , modalNum = modalNum , undo = undo , redo = redo @@ -397,6 +409,7 @@ struct , g , b , a + , layer , modalNum , undo , redo @@ -423,6 +436,7 @@ struct , g = g , b = b , a = a + , layer = layer , modalNum = modalNum , undo = undo , redo = redo @@ -453,6 +467,7 @@ struct , g , b , a + , layer , modalNum , undo , redo @@ -479,6 +494,7 @@ struct , g = g , b = b , a = a + , layer = layer , modalNum = modalNum , undo = undo , redo = redo @@ -509,6 +525,7 @@ struct , g , b , a + , layer , modalNum , undo , redo @@ -535,6 +552,7 @@ struct , g = g , b = b , a = a + , layer = layer , modalNum = modalNum , undo = undo , redo = redo @@ -565,6 +583,7 @@ struct , g , b , a + , layer , modalNum , undo , redo @@ -591,6 +610,7 @@ struct , g = g , b = b , a = a + , layer = layer , modalNum = modalNum , undo = undo , redo = redo @@ -621,6 +641,7 @@ struct , g , b , a + , layer , modalNum , undo , redo @@ -647,6 +668,7 @@ struct , g = g , b = b , a = a + , layer = layer , modalNum = modalNum , undo = undo , redo = redo @@ -677,6 +699,7 @@ struct , g , b , a + , layer , modalNum = prevNum , undo , redo @@ -705,6 +728,7 @@ struct , g = g , b = b , a = a + , layer = layer , modalNum = newNum , undo = undo , redo = redo @@ -735,6 +759,7 @@ struct , g , b , a + , layer , modalNum , undo , redo @@ -763,6 +788,7 @@ struct , g = g , b = b , a = a + , layer = layer , modalNum = 0 , undo = undo , redo = redo @@ -793,6 +819,7 @@ struct , g = _ , b , a + , layer , modalNum , undo , redo @@ -821,6 +848,7 @@ struct , g = g , b = b , a = a + , layer = layer , modalNum = 0 , undo = undo , redo = redo @@ -851,6 +879,7 @@ struct , g , b = _ , a + , layer , modalNum , undo , redo @@ -879,6 +908,7 @@ struct , g = g , b = b , a = a + , layer = layer , modalNum = 0 , undo = undo , redo = redo @@ -909,6 +939,7 @@ struct , g , b , a = _ + , layer , modalNum , undo , redo @@ -937,12 +968,73 @@ struct , g = g , b = b , a = a + , layer = layer , modalNum = 0 , undo = undo , redo = redo } end + fun layer (app: app_type) : app_type = + let + val + { mode + , mouseX + , mouseY + , xClickPoints + , yClickPoints + , windowWidth + , windowHeight + , squares + , arrowX + , arrowY + , canvasWidth + , canvasHeight + + , showGraph + , openFilePath + , fileBrowser + , fileBrowserIdx + , r + , g + , b + , a + , layer = _ + , modalNum + , undo + , redo + } = app + + val layer = modalNum + in + { mode = mode + , mouseX = mouseX + , mouseY = mouseY + , squares = squares + , arrowX = arrowX + , arrowY = arrowY + , canvasWidth = canvasWidth + , canvasHeight = canvasHeight + , windowWidth = windowWidth + , windowHeight = windowHeight + , xClickPoints = xClickPoints + , yClickPoints = yClickPoints + + , showGraph = showGraph + , openFilePath = openFilePath + , fileBrowser = fileBrowser + , fileBrowserIdx = fileBrowserIdx + , r = r + , g = g + , b = b + , a = a + , layer = layer + , modalNum = modalNum + , undo = undo + , redo = redo + } + end + fun canvasWidth (app: app_type, newCanvasWidth) = let val @@ -967,6 +1059,7 @@ struct , g , b , a + , layer , modalNum , undo , redo @@ -999,6 +1092,7 @@ struct , g = g , b = b , a = a + , layer = layer , modalNum = 0 , undo = undo , redo = redo @@ -1029,6 +1123,7 @@ struct , g , b , a + , layer , modalNum , undo , redo @@ -1061,6 +1156,7 @@ struct , g = g , b = b , a = a + , layer = layer , modalNum = 0 , undo = undo , redo = redo @@ -1091,6 +1187,7 @@ struct , g , b , a + , layer , modalNum , undo , redo @@ -1123,6 +1220,7 @@ struct , g = g , b = b , a = a + , layer = layer , modalNum = 0 , undo = undo , redo = redo @@ -1153,6 +1251,7 @@ struct , g = _ , b = _ , a = _ + , layer , modalNum , undo , redo @@ -1179,6 +1278,7 @@ struct , g = g , b = b , a = a + , layer = layer , modalNum = 0 , undo = undo , redo = redo diff --git a/fcore/layer-tree.sml b/fcore/layer-tree.sml index db87c01..0506e45 100644 --- a/fcore/layer-tree.sml +++ b/fcore/layer-tree.sml @@ -1,16 +1,19 @@ structure LayerTree = struct type square = {r: int, g: int, b: int, a: int} - val emptyPixel = {r = 0, g = 0, b = 0, a = 0} type grid = square vector vector - fun isBlank ({a, ...}: square) = a = 0 - datatype tree = NODE of {key: int, value: grid, left: tree, right: tree} | LEAF + val emptyPixel = {r = 0, g = 0, b = 0, a = 0} + + val emptyTree = LEAF + + fun isBlank ({a, ...}: square) = a = 0 + fun insert (newKey, newValue, tree) = case tree of LEAF => NODE {key = newKey, value = newValue, left = LEAF, right = LEAF}