diff --git a/Greenshot/Destinations/PrinterDestination.cs b/Greenshot/Destinations/PrinterDestination.cs
index 88840f077..e85988901 100644
--- a/Greenshot/Destinations/PrinterDestination.cs
+++ b/Greenshot/Destinations/PrinterDestination.cs
@@ -106,15 +106,21 @@ namespace Greenshot.Destinations {
///
/// ExportInformation
public override ExportInformation ExportCapture(bool manuallyInitiated, ISurface surface, ICaptureDetails captureDetails) {
- ExportInformation exportInformation = new ExportInformation(this.Designation, this.Description);
- PrinterSettings printerSettings = null;
+ ExportInformation exportInformation = new ExportInformation(this.Designation, this.Description);
+ PrinterSettings printerSettings = null;
if (!string.IsNullOrEmpty(printerName)) {
- printerSettings = new PrintHelper(surface, captureDetails).PrintTo(printerName);
+ using (PrintHelper printHelper = new PrintHelper(surface, captureDetails)) {
+ printerSettings = printHelper.PrintTo(printerName);
+ }
} else if (!manuallyInitiated) {
PrinterSettings settings = new PrinterSettings();
- printerSettings = new PrintHelper(surface, captureDetails).PrintTo(settings.PrinterName);
+ using (PrintHelper printHelper = new PrintHelper(surface, captureDetails)) {
+ printerSettings = printHelper.PrintTo(settings.PrinterName);
+ }
} else {
- printerSettings = new PrintHelper(surface, captureDetails).PrintWithDialog();
+ using (PrintHelper printHelper = new PrintHelper(surface, captureDetails)) {
+ printerSettings = printHelper.PrintWithDialog();
+ }
}
if (printerSettings != null) {
exportInformation.ExportMade = true;
diff --git a/Greenshot/Helpers/PrintHelper.cs b/Greenshot/Helpers/PrintHelper.cs
index 63941bb9a..044c2ac1e 100644
--- a/Greenshot/Helpers/PrintHelper.cs
+++ b/Greenshot/Helpers/PrintHelper.cs
@@ -39,13 +39,13 @@ namespace Greenshot.Helpers {
private static readonly log4net.ILog LOG = log4net.LogManager.GetLogger(typeof(PrintHelper));
private static CoreConfiguration conf = IniConfig.GetIniSection();
- private ISurface surface;
+ private ISurface surface;
private ICaptureDetails captureDetails;
private PrintDocument printDocument = new PrintDocument();
private PrintDialog printDialog = new PrintDialog();
public PrintHelper(ISurface surface, ICaptureDetails captureDetails) {
- this.surface = surface;
+ this.surface = surface;
this.captureDetails = captureDetails;
printDialog.UseEXDialog = true;
printDocument.DocumentName = FilenameHelper.GetFilenameWithoutExtensionFromPattern(conf.OutputFileFilenamePattern, captureDetails);
@@ -75,9 +75,6 @@ namespace Greenshot.Helpers {
*/
protected virtual void Dispose(bool disposing) {
if (disposing) {
- if (surface != null) {
- surface.Dispose();
- }
if (printDocument != null) {
printDocument.Dispose();
}
@@ -85,7 +82,7 @@ namespace Greenshot.Helpers {
printDialog.Dispose();
}
}
- surface = null;
+ surface = null;
printDocument = null;
printDialog = null;
}
@@ -111,8 +108,6 @@ namespace Greenshot.Helpers {
LOG.Error("An error ocurred while trying to print", e);
MessageBox.Show(Language.GetString(LangKey.print_error), Language.GetString(LangKey.error));
}
- surface.Dispose();
- surface = null;
return returnPrinterSettings;
}
@@ -127,7 +122,7 @@ namespace Greenshot.Helpers {
DialogResult? printOptionsResult = ShowPrintOptionsDialog();
try {
if (printOptionsResult == null || printOptionsResult == DialogResult.OK) {
- if (IsColorPrint()) {
+ if (IsColorPrint()) {
printDocument.DefaultPageSettings.Color = false;
}
printDocument.Print();
@@ -139,14 +134,12 @@ namespace Greenshot.Helpers {
}
}
- surface.Dispose();
- surface = null;
return returnPrinterSettings;
}
- private bool IsColorPrint() {
- return !conf.OutputPrintGrayscale && !conf.OutputPrintMonochrome;
- }
+ private bool IsColorPrint() {
+ return !conf.OutputPrintGrayscale && !conf.OutputPrintMonochrome;
+ }
///
/// display print options dialog (if the user has not configured Greenshot not to)
@@ -165,93 +158,92 @@ namespace Greenshot.Helpers {
void DrawImageForPrint(object sender, PrintPageEventArgs e) {
- // Create the output settins
- SurfaceOutputSettings printOutputSettings = new SurfaceOutputSettings(OutputFormat.png, 100, false);
+ // Create the output settins
+ SurfaceOutputSettings printOutputSettings = new SurfaceOutputSettings(OutputFormat.png, 100, false);
- ApplyEffects(printOutputSettings);
+ ApplyEffects(printOutputSettings);
- Image image;
- Boolean disposeImage = ImageOutput.CreateImageFromSurface(surface, printOutputSettings, out image);
- try {
- ContentAlignment alignment = conf.OutputPrintCenter ? ContentAlignment.MiddleCenter : ContentAlignment.TopLeft;
+ Image image;
+ bool disposeImage = ImageOutput.CreateImageFromSurface(surface, printOutputSettings, out image);
+ try {
+ ContentAlignment alignment = conf.OutputPrintCenter ? ContentAlignment.MiddleCenter : ContentAlignment.TopLeft;
- // prepare timestamp
- float footerStringWidth = 0;
- float footerStringHeight = 0;
- string footerString = null; //DateTime.Now.ToLongDateString() + " " + DateTime.Now.ToLongTimeString();
- if (conf.OutputPrintFooter) {
- footerString = FilenameHelper.FillPattern(conf.OutputPrintFooterPattern, captureDetails, false);
- using (Font f = new Font(FontFamily.GenericSansSerif, 10, FontStyle.Regular)) {
- footerStringWidth = e.Graphics.MeasureString(footerString, f).Width;
- footerStringHeight = e.Graphics.MeasureString(footerString, f).Height;
- }
- }
+ // prepare timestamp
+ float footerStringWidth = 0;
+ float footerStringHeight = 0;
+ string footerString = null; //DateTime.Now.ToLongDateString() + " " + DateTime.Now.ToLongTimeString();
+ if (conf.OutputPrintFooter) {
+ footerString = FilenameHelper.FillPattern(conf.OutputPrintFooterPattern, captureDetails, false);
+ using (Font f = new Font(FontFamily.GenericSansSerif, 10, FontStyle.Regular)) {
+ footerStringWidth = e.Graphics.MeasureString(footerString, f).Width;
+ footerStringHeight = e.Graphics.MeasureString(footerString, f).Height;
+ }
+ }
- // Get a rectangle representing the printable Area
- RectangleF pageRect = e.PageSettings.PrintableArea;
- if(e.PageSettings.Landscape) {
- float origWidth = pageRect.Width;
- pageRect.Width = pageRect.Height;
- pageRect.Height = origWidth;
- }
+ // Get a rectangle representing the printable Area
+ RectangleF pageRect = e.PageSettings.PrintableArea;
+ if(e.PageSettings.Landscape) {
+ float origWidth = pageRect.Width;
+ pageRect.Width = pageRect.Height;
+ pageRect.Height = origWidth;
+ }
- // Subtract the dateString height from the available area, this way the area stays free
- pageRect.Height -= footerStringHeight;
+ // Subtract the dateString height from the available area, this way the area stays free
+ pageRect.Height -= footerStringHeight;
- GraphicsUnit gu = GraphicsUnit.Pixel;
- RectangleF imageRect = image.GetBounds(ref gu);
- // rotate the image if it fits the page better
- if (conf.OutputPrintAllowRotate) {
- if ((pageRect.Width > pageRect.Height && imageRect.Width < imageRect.Height) || (pageRect.Width < pageRect.Height && imageRect.Width > imageRect.Height)) {
- image.RotateFlip(RotateFlipType.Rotate90FlipNone);
- imageRect = image.GetBounds(ref gu);
- if (alignment.Equals(ContentAlignment.TopLeft)) {
- alignment = ContentAlignment.TopRight;
- }
- }
- }
+ GraphicsUnit gu = GraphicsUnit.Pixel;
+ RectangleF imageRect = image.GetBounds(ref gu);
+ // rotate the image if it fits the page better
+ if (conf.OutputPrintAllowRotate) {
+ if ((pageRect.Width > pageRect.Height && imageRect.Width < imageRect.Height) || (pageRect.Width < pageRect.Height && imageRect.Width > imageRect.Height)) {
+ image.RotateFlip(RotateFlipType.Rotate90FlipNone);
+ imageRect = image.GetBounds(ref gu);
+ if (alignment.Equals(ContentAlignment.TopLeft)) {
+ alignment = ContentAlignment.TopRight;
+ }
+ }
+ }
- RectangleF printRect = new RectangleF(0, 0, imageRect.Width, imageRect.Height);
- // scale the image to fit the page better
- if (conf.OutputPrintAllowEnlarge || conf.OutputPrintAllowShrink) {
- SizeF resizedRect = ScaleHelper.GetScaledSize(imageRect.Size, pageRect.Size, false);
- if ((conf.OutputPrintAllowShrink && resizedRect.Width < printRect.Width) || conf.OutputPrintAllowEnlarge && resizedRect.Width > printRect.Width) {
- printRect.Size = resizedRect;
- }
- }
+ RectangleF printRect = new RectangleF(0, 0, imageRect.Width, imageRect.Height);
+ // scale the image to fit the page better
+ if (conf.OutputPrintAllowEnlarge || conf.OutputPrintAllowShrink) {
+ SizeF resizedRect = ScaleHelper.GetScaledSize(imageRect.Size, pageRect.Size, false);
+ if ((conf.OutputPrintAllowShrink && resizedRect.Width < printRect.Width) || conf.OutputPrintAllowEnlarge && resizedRect.Width > printRect.Width) {
+ printRect.Size = resizedRect;
+ }
+ }
- // align the image
- printRect = ScaleHelper.GetAlignedRectangle(printRect, new RectangleF(0, 0, pageRect.Width, pageRect.Height), alignment);
- if (conf.OutputPrintFooter) {
- //printRect = new RectangleF(0, 0, printRect.Width, printRect.Height - (dateStringHeight * 2));
- using (Font f = new Font(FontFamily.GenericSansSerif, 10, FontStyle.Regular)) {
- e.Graphics.DrawString(footerString, f, Brushes.Black, pageRect.Width / 2 - (footerStringWidth / 2), pageRect.Height);
- }
- }
- e.Graphics.DrawImage(image, printRect, imageRect, GraphicsUnit.Pixel);
+ // align the image
+ printRect = ScaleHelper.GetAlignedRectangle(printRect, new RectangleF(0, 0, pageRect.Width, pageRect.Height), alignment);
+ if (conf.OutputPrintFooter) {
+ //printRect = new RectangleF(0, 0, printRect.Width, printRect.Height - (dateStringHeight * 2));
+ using (Font f = new Font(FontFamily.GenericSansSerif, 10, FontStyle.Regular)) {
+ e.Graphics.DrawString(footerString, f, Brushes.Black, pageRect.Width / 2 - (footerStringWidth / 2), pageRect.Height);
+ }
+ }
+ e.Graphics.DrawImage(image, printRect, imageRect, GraphicsUnit.Pixel);
- } finally {
+ } finally {
if (disposeImage && image != null) {
- image.Dispose();
- image = null;
+ image.Dispose();
+ image = null;
}
}
}
- private void ApplyEffects(SurfaceOutputSettings printOutputSettings)
- {
- // TODO:
- // add effects here
- if (conf.OutputPrintMonochrome) {
- byte threshold = conf.OutputPrintMonochromeThreshold;
- printOutputSettings.Effects.Add(new MonochromeEffect(threshold));
- printOutputSettings.ReduceColors = true;
- }
+ private void ApplyEffects(SurfaceOutputSettings printOutputSettings) {
+ // TODO:
+ // add effects here
+ if (conf.OutputPrintMonochrome) {
+ byte threshold = conf.OutputPrintMonochromeThreshold;
+ printOutputSettings.Effects.Add(new MonochromeEffect(threshold));
+ printOutputSettings.ReduceColors = true;
+ }
- // the invert effect should probably be the last
- if (conf.OutputPrintInverted) {
- printOutputSettings.Effects.Add(new InvertEffect());
- }
- }
+ // the invert effect should probably be the last
+ if (conf.OutputPrintInverted) {
+ printOutputSettings.Effects.Add(new InvertEffect());
+ }
+ }
}
}