private void Swap(bool redraw) { // Grab the original surface ImageSurface surf = userLayer.Surface; if (userSurfaceDiff != null) { userSurfaceDiff.ApplyAndSwap(surf); PintaCore.Workspace.Invalidate(userSurfaceDiff.GetBounds()); } else { // Undo to the "old" surface userLayer.Surface = userSurface; // Store the original surface for Redo userSurface = surf; //Redraw everything since surfaces were swapped. PintaCore.Workspace.Invalidate(); } Swap(ref sEngines, ref BaseEditEngine.SEngines); //Ensure that all of the shapes that should no longer be drawn have their ReEditableLayer removed from the drawing loop. foreach (ShapeEngine se in sEngines) { //Determine if it is currently in the drawing loop and should no longer be. Note: a DrawingLayer could be both removed and then //later added in the same swap operation, but this is faster than looping through each ShapeEngine in BaseEditEngine.SEngines. if (se.DrawingLayer.InTheLoop && !BaseEditEngine.SEngines.Contains(se)) { se.DrawingLayer.TryRemoveLayer(); } } //Ensure that all of the shapes that should now be drawn have their ReEditableLayer in the drawing loop. foreach (ShapeEngine se in BaseEditEngine.SEngines) { //Determine if it is currently out of the drawing loop; if not, it should be. if (!se.DrawingLayer.InTheLoop) { se.DrawingLayer.TryAddLayer(); } } Swap(ref selectedPointIndex, ref ee.SelectedPointIndex); Swap(ref selectedShapeIndex, ref ee.SelectedShapeIndex); //Determine if the currently active tool matches the shape's corresponding tool, and if not, switch to it. if (BaseEditEngine.ActivateCorrespondingTool(ee.SelectedShapeIndex, true) != null) { //The currently active tool now matches the shape's corresponding tool. if (redraw) { ((ShapeTool)PintaCore.Tools.CurrentTool).EditEngine.DrawAllShapes(); } } }
private void Swap() { Swap(ref sEngines, ref BaseEditEngine.SEngines); //Ensure that all of the shapes that should no longer be drawn have their ReEditableLayer removed from the drawing loop. foreach (ShapeEngine se in sEngines) { //Determine if it is currently in the drawing loop and should no longer be. Note: a DrawingLayer could be both removed and then //later added in the same swap operation, but this is faster than looping through each ShapeEngine in BaseEditEngine.SEngines. if (se.DrawingLayer.InTheLoop && !BaseEditEngine.SEngines.Contains(se)) { se.DrawingLayer.TryRemoveLayer(); } } //Ensure that all of the shapes that should now be drawn have their ReEditableLayer in the drawing loop. foreach (ShapeEngine se in BaseEditEngine.SEngines) { //Determine if it is currently out of the drawing loop; if not, it should be. if (!se.DrawingLayer.InTheLoop) { se.DrawingLayer.TryAddLayer(); } } Swap(ref selectedPointIndex, ref ee.SelectedPointIndex); Swap(ref selectedShapeIndex, ref ee.SelectedShapeIndex); //Determine if the currently active tool matches the shape's corresponding tool, and if not, switch to it. BaseEditEngine.ActivateCorrespondingTool(selectedShapeIndex, true); }
private void Swap() { //Store the old shape data temporarily. ShapeEngineCollection oldSEngines = sEngines; //Swap half of the data. sEngines = BaseEditEngine.SEngines; //Swap the other half. BaseEditEngine.SEngines = oldSEngines; //Ensure that all of the shapes that should no longer be drawn have their ReEditableLayer removed from the drawing loop. foreach (ShapeEngine se in sEngines) { //Determine if it is currently in the drawing loop and should no longer be. Note: a DrawingLayer could be both removed and then //later added in the same swap operation, but this is faster than looping through each ShapeEngine in BaseEditEngine.SEngines. if (se.DrawingLayer.InTheLoop && !BaseEditEngine.SEngines.Contains(se)) { se.DrawingLayer.TryRemoveLayer(); } } //Ensure that all of the shapes that should now be drawn have their ReEditableLayer in the drawing loop. foreach (ShapeEngine se in BaseEditEngine.SEngines) { //Determine if it is currently out of the drawing loop; if not, it should be. if (!se.DrawingLayer.InTheLoop) { se.DrawingLayer.TryAddLayer(); } } //Swap the selected point data. int temp = selectedPointIndex; selectedPointIndex = ee.SelectedPointIndex; ee.SelectedPointIndex = temp; //Swap the selected shape data. temp = selectedShapeIndex; selectedShapeIndex = ee.SelectedShapeIndex; ee.SelectedShapeIndex = temp; //Determine if the currently active tool matches the shape's corresponding tool, and if not, switch to it. BaseEditEngine.ActivateCorrespondingTool(selectedShapeIndex, true); //The currently active tool should now match the shape's corresponding tool. }