private static Document ResizeDocument(DocumentWorkspace documentWorkspace, AnchorEdge initialAnchor, ColorBgra background, bool loadAndSaveMaintainAspect, bool saveAnchor) { Document document2; CleanupManager.RequestCleanup(); IWin32Window owner = documentWorkspace; Document document = documentWorkspace.Document; Size size = document.Size; using (CanvasSizeDialog dialog = new CanvasSizeDialog()) { bool flag; if (loadAndSaveMaintainAspect) { flag = AppSettings.Instance.Workspace.LastMaintainAspectRatioCS.Value; } else { flag = false; } dialog.OriginalSize = document.Size; dialog.OriginalDpuUnit = document.DpuUnit; dialog.OriginalDpu = document.DpuX; dialog.ImageWidth = size.Width; dialog.ImageHeight = size.Height; dialog.LayerCount = document.Layers.Count; dialog.AnchorEdge = initialAnchor; dialog.Units = dialog.OriginalDpuUnit; dialog.Resolution = document.DpuX; dialog.Units = AppSettings.Instance.Workspace.LastNonPixelUnits.Value; dialog.ConstrainToAspect = flag; DialogResult result = dialog.ShowDialog(owner); Size newSize = new Size(dialog.ImageWidth, dialog.ImageHeight); MeasurementUnit units = dialog.Units; double resolution = dialog.Resolution; if (result == DialogResult.Cancel) { return(null); } if (loadAndSaveMaintainAspect) { AppSettings.Instance.Workspace.LastMaintainAspectRatioCS.Value = dialog.ConstrainToAspect; } if (saveAnchor) { AppSettings.Instance.Workspace.LastCanvasSizeAnchorEdge.Value = dialog.AnchorEdge; } if (((newSize == document.Size) && (units == document.DpuUnit)) && (resolution == document.DpuX)) { document2 = null; } else { try { documentWorkspace.FlushTool(); CleanupManager.RequestCleanup(); Document document3 = ResizeDocument(document, newSize, dialog.AnchorEdge, background); document3.DpuUnit = units; document3.DpuX = resolution; document3.DpuY = resolution; document2 = document3; } catch (OutOfMemoryException exception) { ExceptionDialog.ShowErrorDialog(owner, PdnResources.GetString("CanvasSizeAction.ResizeDocument.OutOfMemory"), exception.ToString()); document2 = null; } catch (Exception) { document2 = null; } } } return(document2); }
public override HistoryMemento PerformAction(DocumentWorkspace docWorkspace) { int newWidth; int newHeight; MeasurementUnit newDpuUnit; double newDpu; ResamplingAlgorithm algorithm = AppSettings.Instance.Workspace.LastResamplingMethod.Value; if (algorithm == ResamplingAlgorithm.SuperSampling) { algorithm = ResamplingAlgorithm.Fant; } bool flag = AppSettings.Instance.Workspace.LastMaintainAspectRatio.Value; using (ResizeDialog dialog = new ResizeDialog()) { dialog.OriginalSize = docWorkspace.Document.Size; dialog.OriginalDpuUnit = docWorkspace.Document.DpuUnit; dialog.OriginalDpu = docWorkspace.Document.DpuX; dialog.ImageHeight = docWorkspace.Document.Height; dialog.ImageWidth = docWorkspace.Document.Width; dialog.ResamplingAlgorithm = algorithm; dialog.LayerCount = docWorkspace.Document.Layers.Count; dialog.Units = dialog.OriginalDpuUnit; dialog.Resolution = docWorkspace.Document.DpuX; dialog.Units = AppSettings.Instance.Workspace.LastNonPixelUnits.Value; dialog.ConstrainToAspect = flag; if (dialog.ShowDialog(docWorkspace) == DialogResult.Cancel) { return(null); } AppSettings.Instance.Workspace.LastResamplingMethod.Value = dialog.ResamplingAlgorithm; AppSettings.Instance.Workspace.LastMaintainAspectRatio.Value = dialog.ConstrainToAspect; newDpuUnit = dialog.Units; newWidth = dialog.ImageWidth; newHeight = dialog.ImageHeight; newDpu = dialog.Resolution; algorithm = dialog.ResamplingAlgorithm; if (newDpuUnit != MeasurementUnit.Pixel) { AppSettings.Instance.Workspace.LastNonPixelUnits.Value = newDpuUnit; if (docWorkspace.AppWorkspace.Units != MeasurementUnit.Pixel) { docWorkspace.AppWorkspace.Units = newDpuUnit; } } if (((docWorkspace.Document.Size == new Size(dialog.ImageWidth, dialog.ImageHeight)) && (docWorkspace.Document.DpuX == newDpu)) && (docWorkspace.Document.DpuUnit == newDpuUnit)) { return(null); } } if ((newWidth == docWorkspace.Document.Width) && (newHeight == docWorkspace.Document.Height)) { MetadataHistoryMemento memento2 = new MetadataHistoryMemento(StaticName, PdnResources.GetImageResource(StaticImageName), docWorkspace); docWorkspace.Document.DpuUnit = newDpuUnit; docWorkspace.Document.DpuX = newDpu; docWorkspace.Document.DpuY = newDpu; return(memento2); } docWorkspace.FlushTool(); using (TaskProgressDialog progressDialog = new TaskProgressDialog()) {