using System ;
using System.Collections.Generic ;
using System.Linq ;
using System.Text ;
using System.Threading.Tasks ;
using System.Windows ;
using System.Windows.Controls ;
using System.Windows.Data ;
using System.Windows.Documents ;
using System.Windows.Input ;
using System.Windows.Media ;
using System.Windows.Media.Imaging ;
using System.Windows.Navigation ;
using System.Windows.Shapes ;
namespace SerialMonitor
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow ( )
{
InitializeComponent ( ) ;
var context = new MainWindowContext ( this ) ;
context . WriteLine ( "Connecting..." ) ;
this . DataContext = context ;
this . MouseWheel + = OnMouseWheel ;
}
private void OnMouseWheel ( object sender , MouseWheelEventArgs e )
{
MainWindowContext context = ( MainWindowContext ) this . DataContext ;
Point cursorPos = e . GetPosition ( context . OscilloscopeCanvas ) ;
if ( cursorPos . X < 0 | | cursorPos . X > context . OscilloscopeCanvas . ActualWidth | | cursorPos . Y < 0 | | cursorPos . Y > context . OscilloscopeCanvas . ActualHeight )
return ;
double cursorPosRatio = cursorPos . X / context . OscilloscopeCanvas . ActualWidth ;
double cursorTime = context . ViewportStartTime + cursorPosRatio * context . ViewportTimeWidth ;
double newTimeWidth = context . ViewportTimeWidth ;
if ( e . Delta > 0 )
newTimeWidth / = e . Delta * 0.01 ;
else if ( e . Delta < 0 )
newTimeWidth * = - e . Delta * 0.01 ;
double totalTimeWidth = Math . Max ( 0.1 , context . MaxTime - context . MinTime ) ;
if ( newTimeWidth > totalTimeWidth )
newTimeWidth = totalTimeWidth ;
double newStartTime = cursorTime - cursorPosRatio * newTimeWidth ;
if ( newStartTime < context . MinTime )
newStartTime = context . MinTime ;
if ( newStartTime + newTimeWidth > context . MaxTime )
newStartTime = context . MaxTime - newTimeWidth ;
context . SetViewport ( newStartTime , newTimeWidth ) ;
}
}
}