diff --git a/Greenshot/Drawing/Surface.cs b/Greenshot/Drawing/Surface.cs index 49584b054..0d361d865 100644 --- a/Greenshot/Drawing/Surface.cs +++ b/Greenshot/Drawing/Surface.cs @@ -753,11 +753,17 @@ namespace Greenshot.Drawing { } } + /// + /// Handle the drag/drop + /// + /// + /// private void OnDragDrop(object sender, DragEventArgs e) { List filenames = GetFilenames(e); Point mouse = this.PointToClient(new Point(e.X, e.Y)); if (e.Data.GetDataPresent("Text")) { string possibleUrl = (string)e.Data.GetData("Text"); + // Test if it's an url and try to download the image so we have it in the original form if (possibleUrl != null && possibleUrl.StartsWith("http")) { using (Bitmap image = NetworkHelper.DownloadImage(possibleUrl)) { if (image != null) { @@ -867,6 +873,21 @@ namespace Greenshot.Drawing { } } + /// + /// A simple clear + /// + /// The color for the background + public void Clear(Color newColor) { + //create a blank bitmap the same size as original + Bitmap newBitmap = ImageHelper.CreateEmptyLike((Bitmap)Image, Color.Empty); + if (newBitmap != null) { + // Make undoable + MakeUndoable(new SurfaceBackgroundChangeMemento(this, Point.Empty), false); + SetImage(newBitmap, false); + Invalidate(); + } + } + /// /// Apply a bitmap effect to the surface /// diff --git a/Greenshot/Forms/ImageEditorForm.cs b/Greenshot/Forms/ImageEditorForm.cs index 1b76bea26..79416cc81 100644 --- a/Greenshot/Forms/ImageEditorForm.cs +++ b/Greenshot/Forms/ImageEditorForm.cs @@ -501,7 +501,6 @@ namespace Greenshot { refreshFieldControls(); } - void BtnCropClick(object sender, EventArgs e) { surface.DrawingMode = DrawingModes.Crop; refreshFieldControls(); @@ -749,19 +748,38 @@ namespace Greenshot { case Keys.C: BtnCropClick(sender, e); break; - case Keys.P: - //surface.PreviewMode = !surface.PreviewMode; - break; } } else if (e.Modifiers.Equals(Keys.Control)) { switch (e.KeyCode) { case Keys.Z: - surface.Undo(); - updateUndoRedoSurfaceDependencies(); + UndoToolStripMenuItemClick(sender, e); break; case Keys.Y: - surface.Redo(); - updateUndoRedoSurfaceDependencies(); + RedoToolStripMenuItemClick(sender, e); + break; + case Keys.Q: // Dropshadow Ctrl + Q + AddDropshadowToolStripMenuItemClick(sender, e); + break; + case Keys.B: // Border Ctrl + B + AddBorderToolStripMenuItemClick(sender, e); + break; + case Keys.T: // Torn edge Ctrl + T + TornEdgesToolStripMenuItemClick(sender, e); + break; + case Keys.I: // Invert Ctrl + I + InvertToolStripMenuItemClick(sender, e); + break; + case Keys.G: // Grayscale Ctrl + G + GrayscaleToolStripMenuItemClick(sender, e); + break; + case Keys.Delete: // Grayscale Ctrl + Delete + ClearToolStripMenuItemClick(sender, e); + break; + case Keys.Oemcomma: // Rotate CCW Ctrl + , + RotateCcwToolstripButtonClick(sender, e); + break; + case Keys.OemPeriod: // Rotate CW Ctrl + . + RotateCwToolstripButtonClick(sender, e); break; } } @@ -1157,15 +1175,7 @@ namespace Greenshot { this.Activate(); WindowDetails.ToForeground(this.Handle); if (capture!= null && capture.Image != null) { - bool addShadow = false; - if (addShadow) { - Point offset = new Point(-1,-1); - using (Bitmap shadowImage = ImageHelper.CreateShadow(capture.Image, 1f, 7, ref offset, PixelFormat.Format32bppArgb)) { - surface.AddBitmapContainer(shadowImage, 100, 100); - } - } else { - surface.AddBitmapContainer((Bitmap)capture.Image, 100, 100); - } + surface.AddBitmapContainer((Bitmap)capture.Image, 100, 100); } } @@ -1176,52 +1186,49 @@ namespace Greenshot { LOG.Error(exception); } } - + void AutoCropToolStripMenuItemClick(object sender, EventArgs e) { if (surface.AutoCrop()) { refreshFieldControls(); } } - - void AddBorderToolStripMenuItemClick(object sender, EventArgs e) - { + void AddBorderToolStripMenuItemClick(object sender, EventArgs e) { surface.ApplyBitmapEffect(Effects.Border); updateUndoRedoSurfaceDependencies(); } - - void AddDropshadowToolStripMenuItemClick(object sender, EventArgs e) - { + + void AddDropshadowToolStripMenuItemClick(object sender, EventArgs e) { surface.ApplyBitmapEffect(Effects.Shadow); updateUndoRedoSurfaceDependencies(); } - - void TornEdgesToolStripMenuItemClick(object sender, EventArgs e) - { + + void TornEdgesToolStripMenuItemClick(object sender, EventArgs e) { surface.ApplyBitmapEffect(Effects.TornEdge); updateUndoRedoSurfaceDependencies(); } - - void GrayscaleToolStripMenuItemClick(object sender, EventArgs e) - { + + void GrayscaleToolStripMenuItemClick(object sender, EventArgs e) { surface.ApplyBitmapEffect(Effects.Grayscale); updateUndoRedoSurfaceDependencies(); } - - void RotateCwToolstripButtonClick(object sender, EventArgs e) - { + + void ClearToolStripMenuItemClick(object sender, EventArgs e) { + surface.Clear(Color.Transparent); + updateUndoRedoSurfaceDependencies(); + } + + void RotateCwToolstripButtonClick(object sender, EventArgs e) { surface.ApplyBitmapEffect(Effects.RotateClockwise); updateUndoRedoSurfaceDependencies(); } - void RotateCcwToolstripButtonClick(object sender, EventArgs e) - { + void RotateCcwToolstripButtonClick(object sender, EventArgs e) { surface.ApplyBitmapEffect(Effects.RotateCounterClockwise); updateUndoRedoSurfaceDependencies(); } - void InvertToolStripMenuItemClick(object sender, EventArgs e) - { + void InvertToolStripMenuItemClick(object sender, EventArgs e) { surface.ApplyBitmapEffect(Effects.Invert); updateUndoRedoSurfaceDependencies(); } diff --git a/GreenshotPlugin/Core/ImageHelper.cs b/GreenshotPlugin/Core/ImageHelper.cs index 08466b402..9f1e0c63e 100644 --- a/GreenshotPlugin/Core/ImageHelper.cs +++ b/GreenshotPlugin/Core/ImageHelper.cs @@ -1115,7 +1115,11 @@ namespace GreenshotPlugin.Core { /// The color to fill with, or Color.Empty to take the default depending on the pixel format /// public static Bitmap CreateEmptyLike(Bitmap sourceBitmap, Color backgroundColor) { - return CreateEmpty(sourceBitmap.Width, sourceBitmap.Height, sourceBitmap.PixelFormat, backgroundColor, sourceBitmap.HorizontalResolution, sourceBitmap.VerticalResolution); + PixelFormat pixelFormat = sourceBitmap.PixelFormat; + if (backgroundColor.A < 255) { + pixelFormat = PixelFormat.Format32bppArgb; + } + return CreateEmpty(sourceBitmap.Width, sourceBitmap.Height, pixelFormat, backgroundColor, sourceBitmap.HorizontalResolution, sourceBitmap.VerticalResolution); } ///