From f0a73ed6c36d0045f8cc6b261a672a147b6ed77c Mon Sep 17 00:00:00 2001 From: SpoinkyNL Date: Wed, 15 Jun 2016 14:56:48 +0200 Subject: [PATCH] I'm bad at Git. --- Artemis/Artemis/Managers/DeviceManager.cs | 42 +++++++---------------- Artemis/Artemis/Managers/LoopManager.cs | 24 +++++++++---- 2 files changed, 31 insertions(+), 35 deletions(-) diff --git a/Artemis/Artemis/Managers/DeviceManager.cs b/Artemis/Artemis/Managers/DeviceManager.cs index 5e21c1579..474fe02f2 100644 --- a/Artemis/Artemis/Managers/DeviceManager.cs +++ b/Artemis/Artemis/Managers/DeviceManager.cs @@ -1,7 +1,6 @@ using System; using System.Collections.Generic; using System.Linq; -using System.Threading; using System.Threading.Tasks; using Artemis.DeviceProviders; using Artemis.Events; @@ -67,37 +66,20 @@ namespace Artemis.Managers /// public async void EnableKeyboard(KeyboardProvider keyboardProvider) { - if (ChangingKeyboard) + if (keyboardProvider == null) + throw new ArgumentNullException(nameof(keyboardProvider)); + + if (ChangingKeyboard || ActiveKeyboard?.Name == keyboardProvider.Name) return; + _logger.Debug("Trying to enable keyboard: {0}", keyboardProvider.Name); + ChangingKeyboard = true; + // Store the old keyboard so it can be used in the event we're raising later var oldKeyboard = ActiveKeyboard; - lock (this) - { - ChangingKeyboard = true; - - if (keyboardProvider == null) - throw new ArgumentNullException(nameof(keyboardProvider)); - - if (ActiveKeyboard?.Name == keyboardProvider.Name) - { - ChangingKeyboard = false; - return; - } - - var wasNull = false; - if (ActiveKeyboard == null) - { - wasNull = true; - ActiveKeyboard = keyboardProvider; - } - - if (!wasNull) - ReleaseActiveKeyboard(); - } - - _logger.Debug("Enabling keyboard: {0}", keyboardProvider.Name); + // Release the current keyboard + ReleaseActiveKeyboard(); // Create a dialog to let the user know Artemis hasn't frozen ProgressDialogController dialog = null; @@ -127,14 +109,16 @@ namespace Artemis.Managers } dialog?.SetMessage($"Enabling keyboard: {keyboardProvider.Name}..."); + + // Setup the new keyboard ActiveKeyboard = keyboardProvider; await ActiveKeyboard.EnableAsync(dialog); + EnableUsableDevices(); General.Default.LastKeyboard = ActiveKeyboard.Name; General.Default.Save(); - EnableUsableDevices(); - _events.PublishOnUIThread(new ActiveKeyboardChanged(oldKeyboard, ActiveKeyboard)); + await _events.PublishOnUIThreadAsync(new ActiveKeyboardChanged(oldKeyboard, ActiveKeyboard)); _logger.Debug("Enabled keyboard: {0}", keyboardProvider.Name); if (dialog != null) diff --git a/Artemis/Artemis/Managers/LoopManager.cs b/Artemis/Artemis/Managers/LoopManager.cs index 759f0e1d0..73aa62ab3 100644 --- a/Artemis/Artemis/Managers/LoopManager.cs +++ b/Artemis/Artemis/Managers/LoopManager.cs @@ -3,6 +3,8 @@ using System.Drawing; using System.Linq; using System.Threading.Tasks; using System.Timers; +using Artemis.Events; +using Caliburn.Micro; using Ninject.Extensions.Logging; using Brush = System.Windows.Media.Brush; @@ -11,7 +13,7 @@ namespace Artemis.Managers /// /// Manages the main programn loop /// - public class LoopManager : IDisposable + public class LoopManager : IDisposable, IHandle, IHandle { private readonly DeviceManager _deviceManager; private readonly EffectManager _effectManager; @@ -19,8 +21,9 @@ namespace Artemis.Managers private readonly Timer _loopTimer; private Bitmap _keyboardBitmap; - public LoopManager(ILogger logger, EffectManager effectManager, DeviceManager deviceManager) + public LoopManager(IEventAggregator events, ILogger logger, EffectManager effectManager, DeviceManager deviceManager) { + events.Subscribe(this); _logger = logger; _effectManager = effectManager; _deviceManager = deviceManager; @@ -77,9 +80,6 @@ namespace Artemis.Managers _effectManager.ChangeEffect(lastEffect); } - // I assume that it's safe to use ActiveKeyboard and ActifeEffect here since both is checked above - _keyboardBitmap = _deviceManager.ActiveKeyboard.KeyboardBitmap(_effectManager.ActiveEffect.KeyboardScale); - Running = true; } @@ -110,7 +110,7 @@ namespace Artemis.Managers } var renderEffect = _effectManager.ActiveEffect; - if (_deviceManager.ChangingKeyboard) + if (_deviceManager.ChangingKeyboard || _keyboardBitmap == null) return; // Stop if no active keyboard @@ -165,5 +165,17 @@ namespace Artemis.Managers _deviceManager.ActiveKeyboard?.DrawBitmap(_keyboardBitmap); } } + + public void Handle(ActiveKeyboardChanged message) + { + if (_deviceManager.ActiveKeyboard != null &&_effectManager.ActiveEffect != null) + _keyboardBitmap = _deviceManager.ActiveKeyboard.KeyboardBitmap(_effectManager.ActiveEffect.KeyboardScale); + } + + public void Handle(ActiveEffectChanged message) + { + if (_deviceManager.ActiveKeyboard != null && _effectManager.ActiveEffect != null) + _keyboardBitmap = _deviceManager.ActiveKeyboard.KeyboardBitmap(_effectManager.ActiveEffect.KeyboardScale); + } } } \ No newline at end of file