public BitmapHistoryMemento(string name, ImageResource image, IHistoryWorkspace historyWorkspace, int layerIndex, IEnumerable <RectInt32> changedRegion, Surface copyFromThisSurface) : base(name, image) { RectInt32[] scans = changedRegion.ToArrayEx <RectInt32>(); this.historyWorkspace = historyWorkspace; this.layerIndex = layerIndex; this.tempFileName = FileSystem.GetTempFileName(); FileStream output = null; try { output = FileSystem.OpenStreamingFile(this.tempFileName, FileAccess.Write); SaveSurfaceRegion(output, copyFromThisSurface, scans); } finally { if (output != null) { output.Dispose(); output = null; } } this.tempFileHandle = new DeleteFileOnFree(this.tempFileName); BitmapHistoryMementoData data = new BitmapHistoryMementoData(scans); base.Data = data; }
protected override HistoryMemento OnUndo(ProgressEventHandler progressCallback) { BitmapHistoryMementoData data = base.Data as BitmapHistoryMementoData; BitmapLayer layer = (BitmapLayer)this.historyWorkspace.Document.Layers[this.layerIndex]; RectInt32[] savedRegion = data.SavedRegion; MaskedSurface surface = null; BitmapHistoryMemento memento = new BitmapHistoryMemento(base.Name, base.Image, this.historyWorkspace, this.layerIndex, savedRegion); if (surface != null) { surface.Draw(layer.Surface); } else { using (FileStream stream = FileSystem.OpenStreamingFile(this.tempFileName, FileAccess.Read)) { LoadSurfaceRegion(stream, layer.Surface, data.SavedRegion); } this.tempFileHandle.Dispose(); this.tempFileHandle = null; } if (savedRegion.Length != 0) { RectInt32 roi = savedRegion.Bounds(); layer.Invalidate(roi); } return(memento); }
public BitmapHistoryMemento(string name, ImageResource image, IHistoryWorkspace historyWorkspace, int layerIndex, PdnRegion changedRegion, Surface copyFromThisSurface) : base(name, image) { this.historyWorkspace = historyWorkspace; this.layerIndex = layerIndex; PdnRegion region = changedRegion.Clone(); this.tempFileName = FileSystem.GetTempFileName(); FileStream outputStream = null; try { outputStream = FileSystem.OpenStreamingFile(this.tempFileName, FileAccess.Write); SaveSurfaceRegion(outputStream, copyFromThisSurface, region); } finally { if (outputStream != null) { outputStream.Dispose(); outputStream = null; } } this.tempFileHandle = new DeleteFileOnFree(this.tempFileName); BitmapHistoryMementoData data = new BitmapHistoryMementoData(null, region); this.Data = data; }
protected override HistoryMemento OnUndo() { BitmapHistoryMementoData data = this.Data as BitmapHistoryMementoData; BitmapLayer layer = (BitmapLayer)this.historyWorkspace.Document.Layers[this.layerIndex]; PdnRegion region; MaskedSurface maskedSurface = null; if (this.poMaskedSurfaceRef != Guid.Empty) { PersistedObject <MaskedSurface> poMS = PersistedObjectLocker.Get <MaskedSurface>(this.poMaskedSurfaceRef); maskedSurface = poMS.Object; region = maskedSurface.CreateRegion(); } else if (data.UndoImage == null) { region = data.SavedRegion; } else { region = data.UndoImage.Region; } BitmapHistoryMemento redo; if (this.poUndoMaskedSurfaceRef == Guid.Empty) { redo = new BitmapHistoryMemento(Name, Image, this.historyWorkspace, this.layerIndex, region); redo.poUndoMaskedSurfaceRef = this.poMaskedSurfaceRef; } else { redo = new BitmapHistoryMemento(Name, Image, this.historyWorkspace, this.layerIndex, this.poUndoMaskedSurfaceRef); } PdnRegion simplified = Utility.SimplifyAndInflateRegion(region); if (maskedSurface != null) { maskedSurface.Draw(layer.Surface); } else if (data.UndoImage == null) { using (FileStream input = FileSystem.OpenStreamingFile(this.tempFileName, FileAccess.Read)) { LoadSurfaceRegion(input, layer.Surface, data.SavedRegion); } data.SavedRegion.Dispose(); this.tempFileHandle.Dispose(); this.tempFileHandle = null; } else { data.UndoImage.Draw(layer.Surface); data.UndoImage.Dispose(); } layer.Invalidate(simplified); simplified.Dispose(); return(redo); }
protected override HistoryMemento OnUndo() { BitmapHistoryMementoData data = this.Data as BitmapHistoryMementoData; BitmapLayer layer = (BitmapLayer)this.historyWorkspace.Document.Layers[this.layerIndex]; PdnRegion region; MaskedSurface maskedSurface = null; if (this.poMaskedSurfaceRef != Guid.Empty) { PersistedObject<MaskedSurface> poMS = PersistedObjectLocker.Get<MaskedSurface>(this.poMaskedSurfaceRef); maskedSurface = poMS.Object; region = maskedSurface.CreateRegion(); } else if (data.UndoImage == null) { region = data.SavedRegion; } else { region = data.UndoImage.Region; } BitmapHistoryMemento redo; if (this.poUndoMaskedSurfaceRef == Guid.Empty) { redo = new BitmapHistoryMemento(Name, Image, this.historyWorkspace, this.layerIndex, region); redo.poUndoMaskedSurfaceRef = this.poMaskedSurfaceRef; } else { redo = new BitmapHistoryMemento(Name, Image, this.historyWorkspace, this.layerIndex, this.poUndoMaskedSurfaceRef); } PdnRegion simplified = Utility.SimplifyAndInflateRegion(region); if (maskedSurface != null) { maskedSurface.Draw(layer.Surface); } else if (data.UndoImage == null) { using (FileStream input = FileSystem.OpenStreamingFile(this.tempFileName, FileAccess.Read)) { LoadSurfaceRegion(input, layer.Surface, data.SavedRegion); } data.SavedRegion.Dispose(); this.tempFileHandle.Dispose(); this.tempFileHandle = null; } else { data.UndoImage.Draw(layer.Surface); data.UndoImage.Dispose(); } layer.Invalidate(simplified); simplified.Dispose(); return redo; }