diff --git a/DarkUI/Docking/DarkDockRegion.cs b/DarkUI/Docking/DarkDockRegion.cs index ebbb10b..f65ebc6 100644 --- a/DarkUI/Docking/DarkDockRegion.cs +++ b/DarkUI/Docking/DarkDockRegion.cs @@ -1,4 +1,5 @@ -using System.Collections.Generic; +using System; +using System.Collections.Generic; using System.ComponentModel; using System.Drawing; using System.Windows.Forms; @@ -169,13 +170,13 @@ namespace DarkUI switch (DockArea) { case DarkDockArea.Left: - _splitter = new DarkDockSplitter(this, DarkSplitterType.Right); + _splitter = new DarkDockSplitter(DockPanel, this, DarkSplitterType.Right); break; case DarkDockArea.Right: - _splitter = new DarkDockSplitter(this, DarkSplitterType.Left); + _splitter = new DarkDockSplitter(DockPanel, this, DarkSplitterType.Left); break; case DarkDockArea.Bottom: - _splitter = new DarkDockSplitter(this, DarkSplitterType.Top); + _splitter = new DarkDockSplitter(DockPanel, this, DarkSplitterType.Top); break; default: return; @@ -193,7 +194,7 @@ namespace DarkUI base.OnLayout(e); if (_splitter != null) - _splitter.UpdateBounds(DockPanel); + _splitter.UpdateBounds(); } #endregion diff --git a/DarkUI/Docking/Items/DarkDockSplitter.cs b/DarkUI/Docking/Items/DarkDockSplitter.cs index 3d44b66..472a460 100644 --- a/DarkUI/Docking/Items/DarkDockSplitter.cs +++ b/DarkUI/Docking/Items/DarkDockSplitter.cs @@ -1,4 +1,5 @@ -using System.Drawing; +using System; +using System.Drawing; using System.Windows.Forms; namespace DarkUI @@ -7,6 +8,7 @@ namespace DarkUI { #region Field Region + private Control _parentControl; private Control _control; private DarkSplitterType _splitterType; private DarkTranslucentForm _overlayForm; @@ -23,8 +25,9 @@ namespace DarkUI #region Constructor Region - public DarkDockSplitter(Control control, DarkSplitterType splitterType) + public DarkDockSplitter(Control parentControl, Control control, DarkSplitterType splitterType) { + _parentControl = parentControl; _control = control; _splitterType = splitterType; _overlayForm = new DarkTranslucentForm(Color.Black); @@ -91,23 +94,22 @@ namespace DarkUI _control.Width += difference.X; break; case DarkSplitterType.Right: - _control.Width += difference.X; + _control.Width -= difference.X; break; case DarkSplitterType.Top: - _control.Height -= difference.Y; + _control.Height += difference.Y; break; case DarkSplitterType.Bottom: _control.Height -= difference.Y; break; } + + UpdateBounds(); } - public void UpdateBounds(Control rootControl) + public void UpdateBounds() { - if (rootControl == null) - rootControl = _control; - - var bounds = rootControl.RectangleToScreen(_control.Bounds); + var bounds = _parentControl.RectangleToScreen(_control.Bounds); switch (_splitterType) { diff --git a/DarkUI/Win32/DarkDockResizeFilter.cs b/DarkUI/Win32/DarkDockResizeFilter.cs index 4c22090..f5f6760 100644 --- a/DarkUI/Win32/DarkDockResizeFilter.cs +++ b/DarkUI/Win32/DarkDockResizeFilter.cs @@ -40,6 +40,16 @@ namespace DarkUI m.Msg == (int)WM.RBUTTONDOWN || m.Msg == (int)WM.RBUTTONUP || m.Msg == (int)WM.RBUTTONDBLCLK)) return false; + // Stop drag. + if (m.Msg == (int)WM.LBUTTONUP) + { + if (_isDragging) + { + StopDrag(); + return true; + } + } + // Exit out early if we're simply releasing a non-splitter drag over the area if (m.Msg == (int)WM.LBUTTONUP && !_isDragging) return false; @@ -77,16 +87,6 @@ namespace DarkUI } } - // Stop drag. - if (m.Msg == (int)WM.LBUTTONUP) - { - if (_isDragging) - { - StopDrag(); - return true; - } - } - // Stop events passing through if we're hovering over a splitter if (HotSplitter() != null) return true; @@ -104,17 +104,6 @@ namespace DarkUI private void DragTimer_Tick(object sender, EventArgs e) { - if (_dockPanel.MouseButtonState != MouseButtons.Left) - _isDragging = false; - - if (!_isDragging) - { - _activeSplitter.HideOverlay(); - _dragTimer.Stop(); - ResetCursor(); - return; - } - var difference = new Point(_initialContact.X - Cursor.Position.X, _initialContact.Y - Cursor.Position.Y); _activeSplitter.UpdateOverlay(difference); }