diff --git a/OnTopReplica/MainForm.cs b/OnTopReplica/MainForm.cs index dae4008..a1e6305 100644 --- a/OnTopReplica/MainForm.cs +++ b/OnTopReplica/MainForm.cs @@ -29,6 +29,7 @@ namespace OnTopReplica { _startupOptions = startupOptions; FullscreenManager = new FullscreenFormManager(this); + _quickRegionDrawingHandler = new ThumbnailPanel.RegionDrawnHandler(HandleQuickRegionDrawn); //WinForms init pass InitializeComponent(); @@ -163,6 +164,8 @@ namespace OnTopReplica { } } + private ThumbnailPanel.RegionDrawnHandler _quickRegionDrawingHandler; + protected override void WndProc(ref Message m) { if (_msgPumpManager != null) { if (_msgPumpManager.PumpMessage(ref m)) { @@ -181,6 +184,19 @@ namespace OnTopReplica { } break; + case WM.NCLBUTTONDOWN: + if ((ModifierKeys & Keys.Control) == Keys.Control && + ThumbnailPanel.IsShowingThumbnail && + !ThumbnailPanel.DrawMouseRegions) { + + ThumbnailPanel.EnableMouseRegionsDrawingWithMouseDown(); + ThumbnailPanel.RegionDrawn += _quickRegionDrawingHandler; + + m.Result = IntPtr.Zero; + return; + } + break; + case WM.NCLBUTTONDBLCLK: //Toggle fullscreen mode if double click on caption (whole glass area) if (m.WParam.ToInt32() == HT.CAPTION) { @@ -205,6 +221,14 @@ namespace OnTopReplica { base.WndProc(ref m); } + private void HandleQuickRegionDrawn(object sender, ThumbnailRegion region) { + //Reset region drawing state + ThumbnailPanel.DrawMouseRegions = false; + ThumbnailPanel.RegionDrawn -= _quickRegionDrawingHandler; + + SelectedThumbnailRegion = region; + } + #endregion #region Keyboard event handling diff --git a/OnTopReplica/ThumbnailPanel.cs b/OnTopReplica/ThumbnailPanel.cs index 0121304..6422176 100644 --- a/OnTopReplica/ThumbnailPanel.cs +++ b/OnTopReplica/ThumbnailPanel.cs @@ -74,6 +74,19 @@ namespace OnTopReplica { } } + /// + /// Enables mouse regions drawing, simulating one first click on the panel at the current cursor's position. + /// + public void EnableMouseRegionsDrawingWithMouseDown() { + if (DrawMouseRegions) + return; + + var localCursor = this.PointToClient(Cursor.Position); + + DrawMouseRegions = true; + OnMouseDown(new MouseEventArgs(System.Windows.Forms.MouseButtons.Left, 1, localCursor.X, localCursor.Y, 0)); + } + bool _drawMouseRegions = false; /// @@ -178,7 +191,7 @@ namespace OnTopReplica { //Check whether this is a hit-test on "client" surface if (m.Msg == WM.NCHITTEST && m.Result.ToInt32() == HT.CLIENT) { //Check whether clicks must be reported - if(!DrawMouseRegions && !ReportThumbnailClicks /*&& !InputMethods.IsKeyPressed(VirtualKeyState.VK_SHIFT)*/){ + if(!DrawMouseRegions && !ReportThumbnailClicks){ m.Result = new IntPtr(HT.TRANSPARENT); } }