Inertia

Subversion Repositories:
Compare Path: Rev
With Path: Rev
?path1? @ 1  →  ?path2? @ HEAD
/trunk/Inertia/Form1.cs
@@ -1,5 +1,6 @@
using System;
using System.ComponentModel;
using System.Configuration;
using System.Diagnostics;
using System.Threading;
using System.Threading.Tasks;
@@ -7,6 +8,8 @@
using WindowsInput;
using AutoUpdaterDotNET;
using Gma.System.MouseKeyHook;
using Inertia.Properties;
using Inertia.Utilities;
 
namespace Inertia
{
@@ -43,8 +46,21 @@
InitializeComponent();
AutoUpdater.Start("http://inertia.grimore.org/update/update.xml");
 
// Upgrade settings if required.
if (!ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.PerUserRoamingAndLocal).HasFile)
{
Settings.Default.Upgrade();
}
 
// Bind to settings changed event.
Settings.Default.SettingsLoaded += DefaultOnSettingsLoaded;
Settings.Default.SettingsSaving += DefaultOnSettingsSaving;
Settings.Default.PropertyChanged += DefaultOnPropertyChanged;
 
_inputSimulator = new InputSimulator();
 
_scrollCancellationTokenSource = new CancellationTokenSource();
 
_globalMouseKeyHook = Hook.GlobalEvents();
_globalMouseKeyHook.MouseWheel += GlobalMouseKeyHookMouseWheel;
 
@@ -73,6 +89,19 @@
 
#region Event Handlers
 
private void DefaultOnSettingsSaving(object sender, CancelEventArgs e)
{
}
 
private void DefaultOnSettingsLoaded(object sender, SettingsLoadedEventArgs e)
{
}
 
private void DefaultOnPropertyChanged(object sender, PropertyChangedEventArgs e)
{
Settings.Default.Save();
}
 
private static void GlobalMouseKeyHookMouseWheel(object sender, MouseEventArgs e)
{
var delta = Math.Abs(e.Delta);
@@ -120,9 +149,18 @@
 
private void QuitToolStripMenuItem_Click(object sender, EventArgs e)
{
Application.Exit();
Close();
 
Environment.Exit(0);
}
 
private void LaunchOnBootToolStripMenuItem_Click(object sender, EventArgs e)
{
Settings.Default.LaunchOnBoot = ((ToolStripMenuItem) sender).Checked;
 
LaunchOnBoot.Set(Settings.Default.LaunchOnBoot);
}
 
#endregion
 
#region Private Methods
@@ -129,6 +167,10 @@
 
private static async void ScrollDown()
{
_scrollCancellationTokenSource.Cancel();
_scrollCancellationTokenSource = new CancellationTokenSource();
var cancellationToken = _scrollCancellationTokenSource.Token;
 
var downDelta = Interlocked.Read(ref _downDelta);
var delta = Math.Abs(downDelta / SystemInformation.MouseWheelScrollDelta);
Interlocked.Exchange(ref _downDelta, 0);
@@ -135,20 +177,16 @@
 
Debug.WriteLine($"Down event expired with delta {delta}");
 
if (_scrollCancellationTokenSource != null)
{
_scrollCancellationTokenSource.Cancel();
}
 
_scrollCancellationTokenSource = new CancellationTokenSource();
var cancellationToken = _scrollCancellationTokenSource.Token;
 
_globalMouseKeyHook.MouseWheel -= GlobalMouseKeyHookMouseWheel;
 
try
{
{
await ScrollDown((int) delta, cancellationToken);
}
catch (TaskCanceledException)
{
// We do not care.
}
finally
{
_globalMouseKeyHook.MouseWheel += GlobalMouseKeyHookMouseWheel;
@@ -157,6 +195,10 @@
 
private static async void ScrollUp()
{
_scrollCancellationTokenSource.Cancel();
_scrollCancellationTokenSource = new CancellationTokenSource();
var cancellationToken = _scrollCancellationTokenSource.Token;
 
var upDelta = Interlocked.Read(ref _upDelta);
var delta = Math.Abs(upDelta / SystemInformation.MouseWheelScrollDelta);
Interlocked.Exchange(ref _upDelta, 0);
@@ -163,14 +205,6 @@
 
Debug.WriteLine($"Up event expired with delta {delta}");
 
if (_scrollCancellationTokenSource != null)
{
_scrollCancellationTokenSource.Cancel();
}
 
_scrollCancellationTokenSource = new CancellationTokenSource();
var cancellationToken = _scrollCancellationTokenSource.Token;
 
_globalMouseKeyHook.MouseWheel -= GlobalMouseKeyHookMouseWheel;
 
try
@@ -177,6 +211,10 @@
{
await ScrollUp((int) delta, cancellationToken);
}
catch (TaskCanceledException)
{
// We do not care.
}
finally
{
_globalMouseKeyHook.MouseWheel += GlobalMouseKeyHookMouseWheel;
@@ -185,7 +223,7 @@
 
private static async Task ScrollUp(int delta, CancellationToken cancellationToken)
{
while (!cancellationToken.IsCancellationRequested && delta > 0)
while (!cancellationToken.IsCancellationRequested && delta > 1)
{
_inputSimulator.Mouse.VerticalScroll(delta);
await Task.Delay(25 * delta, cancellationToken);
@@ -196,7 +234,7 @@
 
private static async Task ScrollDown(int delta, CancellationToken cancellationToken)
{
while (!cancellationToken.IsCancellationRequested && delta > 0)
while (!cancellationToken.IsCancellationRequested && delta > 1)
{
_inputSimulator.Mouse.VerticalScroll(-delta);
await Task.Delay(25 * delta, cancellationToken);