From 94670aac43ddadf9ecc9f9265ce83d56e04e7ae7 Mon Sep 17 00:00:00 2001 From: Robin Date: Sun, 5 Mar 2017 21:03:21 +0000 Subject: [PATCH] Scrollbars will now visually looked disabled. Can now choose to have scrollbars always visible in scrollbase. --- DarkUI/Controls/DarkScrollBar.cs | 41 +++++++++++-------- DarkUI/Controls/DarkScrollBase.cs | 25 ++++++++++- DarkUI/DarkUI.csproj | 3 ++ DarkUI/Icons/ScrollIcons.Designer.cs | 12 +++++- DarkUI/Icons/ScrollIcons.resx | 3 ++ DarkUI/Resources/scrollbar_disabled.png | Bin 0 -> 15659 bytes Example/Forms/Docking/DockLayers.Designer.cs | 1 + 7 files changed, 66 insertions(+), 19 deletions(-) create mode 100644 DarkUI/Resources/scrollbar_disabled.png diff --git a/DarkUI/Controls/DarkScrollBar.cs b/DarkUI/Controls/DarkScrollBar.cs index 4b9ab16..55d5a80 100644 --- a/DarkUI/Controls/DarkScrollBar.cs +++ b/DarkUI/Controls/DarkScrollBar.cs @@ -388,16 +388,8 @@ namespace DarkUI.Controls public void UpdateScrollBar() { - if (ViewSize >= Maximum) - return; - var area = ClientRectangle; - // Cap to maximum value - var maximumValue = Maximum - ViewSize; - if (Value > maximumValue) - Value = maximumValue; - // Arrow buttons if (_scrollOrientation == DarkScrollOrientation.Vertical) { @@ -427,7 +419,15 @@ namespace DarkUI.Controls } private void UpdateThumb(bool forceRefresh = false) - { + { + if (ViewSize >= Maximum) + return; + + // Cap to maximum value + var maximumValue = Maximum - ViewSize; + if (Value > maximumValue) + Value = maximumValue; + // Calculate size ratio _viewContentRatio = (float)ViewSize / (float)Maximum; var viewAreaSize = Maximum - ViewSize; @@ -493,6 +493,9 @@ namespace DarkUI.Controls if (_upArrowClicked) upIcon = ScrollIcons.scrollbar_arrow_clicked; + if (!Enabled) + upIcon = ScrollIcons.scrollbar_arrow_disabled; + if (_scrollOrientation == DarkScrollOrientation.Vertical) upIcon.RotateFlip(RotateFlipType.RotateNoneFlipY); else if (_scrollOrientation == DarkScrollOrientation.Horizontal) @@ -508,6 +511,9 @@ namespace DarkUI.Controls if (_downArrowClicked) downIcon = ScrollIcons.scrollbar_arrow_clicked; + if (!Enabled) + downIcon = ScrollIcons.scrollbar_arrow_disabled; + if (_scrollOrientation == DarkScrollOrientation.Horizontal) downIcon.RotateFlip(RotateFlipType.Rotate270FlipNone); @@ -516,14 +522,17 @@ namespace DarkUI.Controls _downArrowArea.Top + (_downArrowArea.Height / 2) - (downIcon.Height / 2)); // Draw thumb - var scrollColor = _thumbHot ? Colors.GreyHighlight : Colors.GreySelection; - - if (_isScrolling) - scrollColor = Colors.ActiveControl; - - using (var b = new SolidBrush(scrollColor)) + if (Enabled) { - g.FillRectangle(b, _thumbArea); + var scrollColor = _thumbHot ? Colors.GreyHighlight : Colors.GreySelection; + + if (_isScrolling) + scrollColor = Colors.ActiveControl; + + using (var b = new SolidBrush(scrollColor)) + { + g.FillRectangle(b, _thumbArea); + } } } diff --git a/DarkUI/Controls/DarkScrollBase.cs b/DarkUI/Controls/DarkScrollBase.cs index f0d56c1..46426ae 100644 --- a/DarkUI/Controls/DarkScrollBase.cs +++ b/DarkUI/Controls/DarkScrollBase.cs @@ -30,6 +30,8 @@ namespace DarkUI.Controls private int _maxDragChange = 0; private Timer _dragTimer; + private bool _hideScrollBars = true; + #endregion #region Property Region @@ -88,6 +90,19 @@ namespace DarkUI.Controls [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public bool IsDragging { get; private set; } + [Category("Behavior")] + [Description("Determines whether scrollbars will remain visible when disabled.")] + [DefaultValue(true)] + public bool HideScrollBars + { + get { return _hideScrollBars; } + set + { + _hideScrollBars = value; + UpdateScrollBars(); + } + } + #endregion #region Constructor Region @@ -159,8 +174,14 @@ namespace DarkUI.Controls private void SetScrollBarVisibility() { - _vScrollBar.Visible = _visibleSize.Height < ContentSize.Height; - _hScrollBar.Visible = _visibleSize.Width < ContentSize.Width; + _vScrollBar.Enabled = _visibleSize.Height < ContentSize.Height; + _hScrollBar.Enabled = _visibleSize.Width < ContentSize.Width; + + if (_hideScrollBars) + { + _vScrollBar.Visible = _vScrollBar.Enabled; + _hScrollBar.Visible = _hScrollBar.Enabled; + } } private void SetVisibleSize() diff --git a/DarkUI/DarkUI.csproj b/DarkUI/DarkUI.csproj index 5d274ca..f4fcfc8 100644 --- a/DarkUI/DarkUI.csproj +++ b/DarkUI/DarkUI.csproj @@ -309,6 +309,9 @@ + + +