Added key handling for the effects and added a clear operation. Also some code cleanup.

git-svn-id: http://svn.code.sf.net/p/greenshot/code/trunk@2360 7dccd23d-a4a3-4e1f-8c07-b4c1b4018ab4
This commit is contained in:
RKrom 2012-12-06 17:06:26 +00:00
parent 82eddefe4e
commit e148f2103c
3 changed files with 70 additions and 38 deletions

View file

@ -753,11 +753,17 @@ namespace Greenshot.Drawing {
} }
} }
/// <summary>
/// Handle the drag/drop
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void OnDragDrop(object sender, DragEventArgs e) { private void OnDragDrop(object sender, DragEventArgs e) {
List<string> filenames = GetFilenames(e); List<string> filenames = GetFilenames(e);
Point mouse = this.PointToClient(new Point(e.X, e.Y)); Point mouse = this.PointToClient(new Point(e.X, e.Y));
if (e.Data.GetDataPresent("Text")) { if (e.Data.GetDataPresent("Text")) {
string possibleUrl = (string)e.Data.GetData("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")) { if (possibleUrl != null && possibleUrl.StartsWith("http")) {
using (Bitmap image = NetworkHelper.DownloadImage(possibleUrl)) { using (Bitmap image = NetworkHelper.DownloadImage(possibleUrl)) {
if (image != null) { if (image != null) {
@ -867,6 +873,21 @@ namespace Greenshot.Drawing {
} }
} }
/// <summary>
/// A simple clear
/// </summary>
/// <param name="newColor">The color for the background</param>
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();
}
}
/// <summary> /// <summary>
/// Apply a bitmap effect to the surface /// Apply a bitmap effect to the surface
/// </summary> /// </summary>

View file

@ -501,7 +501,6 @@ namespace Greenshot {
refreshFieldControls(); refreshFieldControls();
} }
void BtnCropClick(object sender, EventArgs e) { void BtnCropClick(object sender, EventArgs e) {
surface.DrawingMode = DrawingModes.Crop; surface.DrawingMode = DrawingModes.Crop;
refreshFieldControls(); refreshFieldControls();
@ -749,19 +748,38 @@ namespace Greenshot {
case Keys.C: case Keys.C:
BtnCropClick(sender, e); BtnCropClick(sender, e);
break; break;
case Keys.P:
//surface.PreviewMode = !surface.PreviewMode;
break;
} }
} else if (e.Modifiers.Equals(Keys.Control)) { } else if (e.Modifiers.Equals(Keys.Control)) {
switch (e.KeyCode) { switch (e.KeyCode) {
case Keys.Z: case Keys.Z:
surface.Undo(); UndoToolStripMenuItemClick(sender, e);
updateUndoRedoSurfaceDependencies();
break; break;
case Keys.Y: case Keys.Y:
surface.Redo(); RedoToolStripMenuItemClick(sender, e);
updateUndoRedoSurfaceDependencies(); 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; break;
} }
} }
@ -1157,15 +1175,7 @@ namespace Greenshot {
this.Activate(); this.Activate();
WindowDetails.ToForeground(this.Handle); WindowDetails.ToForeground(this.Handle);
if (capture!= null && capture.Image != null) { if (capture!= null && capture.Image != null) {
bool addShadow = false; surface.AddBitmapContainer((Bitmap)capture.Image, 100, 100);
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);
}
} }
} }
@ -1176,52 +1186,49 @@ namespace Greenshot {
LOG.Error(exception); LOG.Error(exception);
} }
} }
void AutoCropToolStripMenuItemClick(object sender, EventArgs e) { void AutoCropToolStripMenuItemClick(object sender, EventArgs e) {
if (surface.AutoCrop()) { if (surface.AutoCrop()) {
refreshFieldControls(); refreshFieldControls();
} }
} }
void AddBorderToolStripMenuItemClick(object sender, EventArgs e) {
void AddBorderToolStripMenuItemClick(object sender, EventArgs e)
{
surface.ApplyBitmapEffect(Effects.Border); surface.ApplyBitmapEffect(Effects.Border);
updateUndoRedoSurfaceDependencies(); updateUndoRedoSurfaceDependencies();
} }
void AddDropshadowToolStripMenuItemClick(object sender, EventArgs e) void AddDropshadowToolStripMenuItemClick(object sender, EventArgs e) {
{
surface.ApplyBitmapEffect(Effects.Shadow); surface.ApplyBitmapEffect(Effects.Shadow);
updateUndoRedoSurfaceDependencies(); updateUndoRedoSurfaceDependencies();
} }
void TornEdgesToolStripMenuItemClick(object sender, EventArgs e) void TornEdgesToolStripMenuItemClick(object sender, EventArgs e) {
{
surface.ApplyBitmapEffect(Effects.TornEdge); surface.ApplyBitmapEffect(Effects.TornEdge);
updateUndoRedoSurfaceDependencies(); updateUndoRedoSurfaceDependencies();
} }
void GrayscaleToolStripMenuItemClick(object sender, EventArgs e) void GrayscaleToolStripMenuItemClick(object sender, EventArgs e) {
{
surface.ApplyBitmapEffect(Effects.Grayscale); surface.ApplyBitmapEffect(Effects.Grayscale);
updateUndoRedoSurfaceDependencies(); 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); surface.ApplyBitmapEffect(Effects.RotateClockwise);
updateUndoRedoSurfaceDependencies(); updateUndoRedoSurfaceDependencies();
} }
void RotateCcwToolstripButtonClick(object sender, EventArgs e) void RotateCcwToolstripButtonClick(object sender, EventArgs e) {
{
surface.ApplyBitmapEffect(Effects.RotateCounterClockwise); surface.ApplyBitmapEffect(Effects.RotateCounterClockwise);
updateUndoRedoSurfaceDependencies(); updateUndoRedoSurfaceDependencies();
} }
void InvertToolStripMenuItemClick(object sender, EventArgs e) void InvertToolStripMenuItemClick(object sender, EventArgs e) {
{
surface.ApplyBitmapEffect(Effects.Invert); surface.ApplyBitmapEffect(Effects.Invert);
updateUndoRedoSurfaceDependencies(); updateUndoRedoSurfaceDependencies();
} }

View file

@ -1115,7 +1115,11 @@ namespace GreenshotPlugin.Core {
/// <param name="backgroundColor">The color to fill with, or Color.Empty to take the default depending on the pixel format</param> /// <param name="backgroundColor">The color to fill with, or Color.Empty to take the default depending on the pixel format</param>
/// <returns></returns> /// <returns></returns>
public static Bitmap CreateEmptyLike(Bitmap sourceBitmap, Color backgroundColor) { 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);
} }
/// <summary> /// <summary>