1
0
mirror of https://github.com/Artemis-RGB/Artemis synced 2025-12-13 05:48:35 +00:00

I'm bad at Git.

This commit is contained in:
SpoinkyNL 2016-06-15 14:56:48 +02:00
parent 5bbb6803b5
commit f0a73ed6c3
2 changed files with 31 additions and 35 deletions

View File

@ -1,7 +1,6 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
using Artemis.DeviceProviders; using Artemis.DeviceProviders;
using Artemis.Events; using Artemis.Events;
@ -67,37 +66,20 @@ namespace Artemis.Managers
/// <param name="keyboardProvider"></param> /// <param name="keyboardProvider"></param>
public async void EnableKeyboard(KeyboardProvider keyboardProvider) public async void EnableKeyboard(KeyboardProvider keyboardProvider)
{ {
if (ChangingKeyboard) if (keyboardProvider == null)
throw new ArgumentNullException(nameof(keyboardProvider));
if (ChangingKeyboard || ActiveKeyboard?.Name == keyboardProvider.Name)
return; 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 // Store the old keyboard so it can be used in the event we're raising later
var oldKeyboard = ActiveKeyboard; var oldKeyboard = ActiveKeyboard;
lock (this) // Release the current keyboard
{
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(); ReleaseActiveKeyboard();
}
_logger.Debug("Enabling keyboard: {0}", keyboardProvider.Name);
// Create a dialog to let the user know Artemis hasn't frozen // Create a dialog to let the user know Artemis hasn't frozen
ProgressDialogController dialog = null; ProgressDialogController dialog = null;
@ -127,14 +109,16 @@ namespace Artemis.Managers
} }
dialog?.SetMessage($"Enabling keyboard: {keyboardProvider.Name}..."); dialog?.SetMessage($"Enabling keyboard: {keyboardProvider.Name}...");
// Setup the new keyboard
ActiveKeyboard = keyboardProvider; ActiveKeyboard = keyboardProvider;
await ActiveKeyboard.EnableAsync(dialog); await ActiveKeyboard.EnableAsync(dialog);
EnableUsableDevices();
General.Default.LastKeyboard = ActiveKeyboard.Name; General.Default.LastKeyboard = ActiveKeyboard.Name;
General.Default.Save(); General.Default.Save();
EnableUsableDevices(); await _events.PublishOnUIThreadAsync(new ActiveKeyboardChanged(oldKeyboard, ActiveKeyboard));
_events.PublishOnUIThread(new ActiveKeyboardChanged(oldKeyboard, ActiveKeyboard));
_logger.Debug("Enabled keyboard: {0}", keyboardProvider.Name); _logger.Debug("Enabled keyboard: {0}", keyboardProvider.Name);
if (dialog != null) if (dialog != null)

View File

@ -3,6 +3,8 @@ using System.Drawing;
using System.Linq; using System.Linq;
using System.Threading.Tasks; using System.Threading.Tasks;
using System.Timers; using System.Timers;
using Artemis.Events;
using Caliburn.Micro;
using Ninject.Extensions.Logging; using Ninject.Extensions.Logging;
using Brush = System.Windows.Media.Brush; using Brush = System.Windows.Media.Brush;
@ -11,7 +13,7 @@ namespace Artemis.Managers
/// <summary> /// <summary>
/// Manages the main programn loop /// Manages the main programn loop
/// </summary> /// </summary>
public class LoopManager : IDisposable public class LoopManager : IDisposable, IHandle<ActiveKeyboardChanged>, IHandle<ActiveEffectChanged>
{ {
private readonly DeviceManager _deviceManager; private readonly DeviceManager _deviceManager;
private readonly EffectManager _effectManager; private readonly EffectManager _effectManager;
@ -19,8 +21,9 @@ namespace Artemis.Managers
private readonly Timer _loopTimer; private readonly Timer _loopTimer;
private Bitmap _keyboardBitmap; 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; _logger = logger;
_effectManager = effectManager; _effectManager = effectManager;
_deviceManager = deviceManager; _deviceManager = deviceManager;
@ -77,9 +80,6 @@ namespace Artemis.Managers
_effectManager.ChangeEffect(lastEffect); _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; Running = true;
} }
@ -110,7 +110,7 @@ namespace Artemis.Managers
} }
var renderEffect = _effectManager.ActiveEffect; var renderEffect = _effectManager.ActiveEffect;
if (_deviceManager.ChangingKeyboard) if (_deviceManager.ChangingKeyboard || _keyboardBitmap == null)
return; return;
// Stop if no active keyboard // Stop if no active keyboard
@ -165,5 +165,17 @@ namespace Artemis.Managers
_deviceManager.ActiveKeyboard?.DrawBitmap(_keyboardBitmap); _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);
}
} }
} }