1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- /////////////////////////////////////////////////////////////////////////////////
- // Paint.NET //
- // Copyright (C) dotPDN LLC, Rick Brewster, Tom Jackson, and contributors. //
- // Portions Copyright (C) Microsoft Corporation. All Rights Reserved. //
- // See src/Resources/Files/License.txt for full licensing and attribution //
- // details. //
- // . //
- /////////////////////////////////////////////////////////////////////////////////
- using System;
- namespace PaintDotNet.Measurement.HistoryMementos
- {
- public class SwapLayerHistoryMemento
- : HistoryMemento
- {
- private int layerIndex1;
- private int layerIndex2;
- private IDocumentWorkspace historyWorkspace;
- protected override HistoryMemento OnUndo()
- {
- SwapLayerHistoryMemento slha = new SwapLayerHistoryMemento(this.Name, this.Image,
- this.historyWorkspace, this.layerIndex2, this.layerIndex1);
- Layer layer1 = (Layer)this.historyWorkspace.GetDocument().Layers[this.layerIndex1];
- Layer layer2 = (Layer)this.historyWorkspace.GetDocument().Layers[this.layerIndex2];
- int firstIndex = Math.Min(layerIndex1, layerIndex2);
- int secondIndex = Math.Max(layerIndex1, layerIndex2);
- if (secondIndex - firstIndex == 1)
- {
- this.historyWorkspace.GetDocument().Layers.RemoveAt(layerIndex1);
- this.historyWorkspace.GetDocument().Layers.Insert(layerIndex2, layer1);
- }
- else
- {
- // general version
- this.historyWorkspace.GetDocument().Layers[layerIndex1] = layer2;
- this.historyWorkspace.GetDocument().Layers[layerIndex2] = layer1;
- }
- ((Layer)this.historyWorkspace.GetDocument().Layers[this.layerIndex1]).Invalidate();
- ((Layer)this.historyWorkspace.GetDocument().Layers[this.layerIndex2]).Invalidate();
- return slha;
- }
- public SwapLayerHistoryMemento(string name, ImageResource image, IDocumentWorkspace historyWorkspace, int layerIndex1, int layerIndex2)
- : base(name, image)
- {
- this.historyWorkspace = historyWorkspace;
- this.layerIndex1 = layerIndex1;
- this.layerIndex2 = layerIndex2;
- if (this.layerIndex1 < 0 || this.layerIndex2 < 0 ||
- this.layerIndex1 >= this.historyWorkspace.GetDocument().Layers.Count ||
- this.layerIndex2 >= this.historyWorkspace.GetDocument().Layers.Count)
- {
- throw new ArgumentOutOfRangeException("layerIndex[1|2]", "out of range");
- }
- }
- }
- }
|