diff --git a/Greenshot/Forms/CaptureForm.cs b/Greenshot/Forms/CaptureForm.cs index c77327948..6adc7f00c 100644 --- a/Greenshot/Forms/CaptureForm.cs +++ b/Greenshot/Forms/CaptureForm.cs @@ -40,7 +40,7 @@ namespace Greenshot.Forms { /// /// The capture form is used to select a part of the capture /// - public partial class CaptureForm : AnimatingForm { + public sealed partial class CaptureForm : AnimatingForm { private enum FixMode {None, Initiated, Horizontal, Vertical}; private static readonly ILog LOG = LogManager.GetLogger(typeof(CaptureForm)); @@ -74,6 +74,7 @@ namespace Greenshot.Forms { private RectangleAnimator _zoomAnimator; private readonly bool _isZoomerTransparent = Conf.ZoomerOpacity < 1; private bool _isCtrlPressed; + private bool _showDebugInfo; /// /// Property to access the selected capture rectangle @@ -108,9 +109,9 @@ namespace Greenshot.Forms { protected override CreateParams CreateParams { [SecurityPermission(SecurityAction.LinkDemand, Flags = SecurityPermissionFlag.UnmanagedCode)] get { - CreateParams cp = base.CreateParams; - cp.ExStyle |= 0x02000000; - return cp; + CreateParams createParams = base.CreateParams; + createParams.ExStyle |= 0x02000000; + return createParams; } } @@ -263,6 +264,14 @@ namespace Greenshot.Forms { Invalidate(); } break; + case Keys.D: + if (_captureMode == CaptureMode.Window) + { + // Toggle debug + _showDebugInfo = !_showDebugInfo; + Invalidate(); + } + break; case Keys.Space: // Toggle capture mode switch (_captureMode) { @@ -394,7 +403,7 @@ namespace Greenshot.Forms { /// /// /// - bool isAnimating(IAnimator animator) { + private bool IsAnimating(IAnimator animator) { if (animator == null) { return false; } @@ -408,7 +417,7 @@ namespace Greenshot.Forms { Point lastPos = _cursorPos; _cursorPos = _mouseMovePos; - if (_selectedCaptureWindow != null && lastPos.Equals(_cursorPos) && !isAnimating(_zoomAnimator) && !isAnimating(_windowAnimator)) { + if (_selectedCaptureWindow != null && lastPos.Equals(_cursorPos) && !IsAnimating(_zoomAnimator) && !IsAnimating(_windowAnimator)) { return; } @@ -515,8 +524,8 @@ namespace Greenshot.Forms { // always animate the Window area through to the last frame, so we see the fade-in/out untill the end // Using a safety "offset" to make sure the text is invalidated too const int safetySize = 30; - // Check if the - if (isAnimating(_windowAnimator)) { + // Check if the animation needs to be drawn + if (IsAnimating(_windowAnimator)) { invalidateRectangle = _windowAnimator.Current; invalidateRectangle.Inflate(safetySize, safetySize); Invalidate(invalidateRectangle); @@ -524,12 +533,12 @@ namespace Greenshot.Forms { invalidateRectangle.Inflate(safetySize, safetySize); Invalidate(invalidateRectangle); // Check if this was the last of the windows animations in the normal region capture. - if (_captureMode != CaptureMode.Window && !isAnimating(_windowAnimator)) { + if (_captureMode != CaptureMode.Window && !IsAnimating(_windowAnimator)) { Invalidate(); } } - if (_zoomAnimator != null && (isAnimating(_zoomAnimator) || _captureMode != CaptureMode.Window)) { + if (_zoomAnimator != null && (IsAnimating(_zoomAnimator) || _captureMode != CaptureMode.Window)) { // Make sure we invalidate the old zoom area invalidateRectangle = _zoomAnimator.Current; invalidateRectangle.Offset(lastPos); @@ -540,11 +549,7 @@ namespace Greenshot.Forms { } // The following logic is not needed, next always returns the current if there are no frames left // but it makes more sense if we want to change something in the logic - if (isAnimating(_zoomAnimator)) { - invalidateRectangle = _zoomAnimator.Next(); - } else { - invalidateRectangle = _zoomAnimator.Current; - } + invalidateRectangle = IsAnimating(_zoomAnimator) ? _zoomAnimator.Next() : _zoomAnimator.Current; invalidateRectangle.Offset(_cursorPos); Invalidate(invalidateRectangle); } @@ -709,12 +714,12 @@ namespace Greenshot.Forms { graphics.DrawIcon(_capture.Cursor, _capture.CursorLocation.X, _capture.CursorLocation.Y); } - if (_mouseDown || _captureMode == CaptureMode.Window || isAnimating(_windowAnimator)) { + if (_mouseDown || _captureMode == CaptureMode.Window || IsAnimating(_windowAnimator)) { _captureRect.Intersect(new Rectangle(Point.Empty, _capture.ScreenBounds.Size)); // crop what is outside the screen Rectangle fixedRect; //if (captureMode == CaptureMode.Window) { - if (isAnimating(_windowAnimator)) { + if (IsAnimating(_windowAnimator)) { // Use the animator fixedRect = _windowAnimator.Current; } else { @@ -725,7 +730,7 @@ namespace Greenshot.Forms { //if (capture.CaptureDetails.CaptureMode == CaptureMode.Video) { // graphics.FillRectangle(RedOverlayBrush, fixedRect); //} else { - graphics.FillRectangle(GreenOverlayBrush, fixedRect); + graphics.FillRectangle(GreenOverlayBrush, fixedRect); //} graphics.DrawRectangle(OverlayPen, fixedRect); @@ -796,12 +801,12 @@ namespace Greenshot.Forms { // When capturing a Region we need to add 1 to the height/width for correction string sizeText; if (_captureMode == CaptureMode.Region) { - // correct the GUI width to real width for the shown size - sizeText = _captureRect.Width + 1 + " x " + (_captureRect.Height + 1); + // correct the GUI width to real width for the shown size + sizeText = _captureRect.Width + 1 + " x " + (_captureRect.Height + 1); } else { sizeText = _captureRect.Width + " x " + _captureRect.Height; } - + // Calculate the scaled font size. SizeF extent = graphics.MeasureString( sizeText, sizeFont ); float hRatio = _captureRect.Height / (extent.Height * 2); @@ -818,6 +823,13 @@ namespace Greenshot.Forms { using (Font newSizeFont = new Font(FontFamily.GenericSansSerif, newSize, FontStyle.Bold)) { PointF sizeLocation = new PointF(fixedRect.X + _captureRect.Width / 2 - extent.Width / 2, fixedRect.Y + _captureRect.Height / 2 - newSizeFont.GetHeight() / 2); graphics.DrawString(sizeText, newSizeFont, Brushes.LightSeaGreen, sizeLocation); + + if (_showDebugInfo && _selectedCaptureWindow != null) + { + string title = string.Format("#{0:X}{1}{2}", _selectedCaptureWindow.Handle.ToInt64(), _selectedCaptureWindow.Text.Length > 0 ? " - ": "", _selectedCaptureWindow.Text); + PointF debugLocation = new PointF(fixedRect.X, fixedRect.Y); + graphics.DrawString(title, sizeFont, Brushes.DarkOrange, debugLocation); + } } } } @@ -848,7 +860,7 @@ namespace Greenshot.Forms { } // Zoom - if (_zoomAnimator != null && (isAnimating(_zoomAnimator) || _captureMode != CaptureMode.Window)) { + if (_zoomAnimator != null && (IsAnimating(_zoomAnimator) || _captureMode != CaptureMode.Window)) { const int zoomSourceWidth = 25; const int zoomSourceHeight = 25; diff --git a/GreenshotPlugin/Core/WindowsHelper.cs b/GreenshotPlugin/Core/WindowsHelper.cs index 37bd7a40c..2cd6c4ba3 100644 --- a/GreenshotPlugin/Core/WindowsHelper.cs +++ b/GreenshotPlugin/Core/WindowsHelper.cs @@ -1625,7 +1625,7 @@ namespace GreenshotPlugin.Core { { return false; } - // Skip everything which is not rendered normally. + // Skip everything which is not rendered "normally", trying to fix if (!window.IsApp && (exWindowStyle & ExtendedWindowStyleFlags.WS_EX_NOREDIRECTIONBITMAP) != 0) { return false; @@ -1637,6 +1637,7 @@ namespace GreenshotPlugin.Core { } return window.Visible || window.Iconic; } + /// /// Get all the top level windows ///