From 119dfc3ac70db7536e86191eb3c89ffa1fd4f576 Mon Sep 17 00:00:00 2001 From: LukePulverenti Luke Pulverenti luke pulverenti Date: Thu, 20 Sep 2012 11:25:22 -0400 Subject: Adding the UI to the same repo. Made some default theme progress --- MediaBrowser.UI/Controls/EnhancedScrollViewer.cs | 73 ++++++++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 MediaBrowser.UI/Controls/EnhancedScrollViewer.cs (limited to 'MediaBrowser.UI/Controls/EnhancedScrollViewer.cs') diff --git a/MediaBrowser.UI/Controls/EnhancedScrollViewer.cs b/MediaBrowser.UI/Controls/EnhancedScrollViewer.cs new file mode 100644 index 000000000..188715e1e --- /dev/null +++ b/MediaBrowser.UI/Controls/EnhancedScrollViewer.cs @@ -0,0 +1,73 @@ +using System; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Input; + +namespace MediaBrowser.UI.Controls +{ + /// + /// Provides a ScrollViewer that can be scrolled by dragging the mouse + /// + public class EnhancedScrollViewer : ScrollViewer + { + private Point _scrollTarget; + private Point _scrollStartPoint; + private Point _scrollStartOffset; + private const int PixelsToMoveToBeConsideredScroll = 5; + + protected override void OnPreviewMouseDown(MouseButtonEventArgs e) + { + if (IsMouseOver) + { + // Save starting point, used later when determining how much to scroll. + _scrollStartPoint = e.GetPosition(this); + _scrollStartOffset.X = HorizontalOffset; + _scrollStartOffset.Y = VerticalOffset; + + // Update the cursor if can scroll or not. + Cursor = (ExtentWidth > ViewportWidth) || + (ExtentHeight > ViewportHeight) ? + Cursors.ScrollAll : Cursors.Arrow; + + CaptureMouse(); + } + + base.OnPreviewMouseDown(e); + } + + protected override void OnPreviewMouseMove(MouseEventArgs e) + { + if (IsMouseCaptured) + { + Point currentPoint = e.GetPosition(this); + + // Determine the new amount to scroll. + var delta = new Point(_scrollStartPoint.X - currentPoint.X, _scrollStartPoint.Y - currentPoint.Y); + + if (Math.Abs(delta.X) < PixelsToMoveToBeConsideredScroll && + Math.Abs(delta.Y) < PixelsToMoveToBeConsideredScroll) + return; + + _scrollTarget.X = _scrollStartOffset.X + delta.X; + _scrollTarget.Y = _scrollStartOffset.Y + delta.Y; + + // Scroll to the new position. + ScrollToHorizontalOffset(_scrollTarget.X); + ScrollToVerticalOffset(_scrollTarget.Y); + } + + base.OnPreviewMouseMove(e); + } + + protected override void OnPreviewMouseUp(MouseButtonEventArgs e) + { + if (IsMouseCaptured) + { + Cursor = Cursors.Arrow; + ReleaseMouseCapture(); + } + + base.OnPreviewMouseUp(e); + } + } +} -- cgit v1.2.3