예제 #1
0
        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();
                }
            }
        }
예제 #2
0
        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);
        }
예제 #3
0
        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.
        }