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

Improved keyboard missing handling, implemented keyboard select

This commit is contained in:
SpoinkyNL 2016-02-18 22:33:41 +01:00
parent af2b99b1a7
commit d6ff4a0551
8 changed files with 60 additions and 51 deletions

View File

@ -3,6 +3,7 @@ using System.Drawing;
using System.Windows.Forms; using System.Windows.Forms;
using Artemis.Utilities; using Artemis.Utilities;
using CUE.NET; using CUE.NET;
using CUE.NET.Devices.Generic.Enums;
using CUE.NET.Devices.Keyboard; using CUE.NET.Devices.Keyboard;
using CUE.NET.Exceptions; using CUE.NET.Exceptions;
@ -25,8 +26,9 @@ namespace Artemis.KeyboardProviders.Corsair
} }
catch (CUEException e) catch (CUEException e)
{ {
if (e.Message.Contains("not found")) if (e.Error == CorsairError.ServerNotFound)
return false; return false;
throw;
} }
return true; return true;
@ -82,27 +84,5 @@ namespace Artemis.KeyboardProviders.Corsair
} }
_keyboard.Update(true); _keyboard.Update(true);
} }
/*
RectangleF[,] ledRectangles = new RectangleF[bitmap.Width, bitmap.Height];
RectangleKeyGroup[,] ledGroups = new RectangleKeyGroup[bitmap.Width, bitmap.Height];
//_keyboard.Brush = new SolidColorBrush(Color.Black);
for (var x = 0 ; x < bitmap.Width; x++)
{
for (var y = 0; y < bitmap.Height; y++)
{
ledRectangles[x, y] = new RectangleF(_keyboard.KeyboardRectangle.X * (x*(_keyboard.KeyboardRectangle.Width / bitmap.Width / _keyboard.KeyboardRectangle.X)), _keyboard.KeyboardRectangle.Y*(y*(_keyboard.KeyboardRectangle.Height / bitmap.Height / _keyboard.KeyboardRectangle.Y)), _keyboard.KeyboardRectangle.Width / bitmap.Width, _keyboard.KeyboardRectangle.Height / bitmap.Height);
ledGroups[x, y] = new RectangleKeyGroup(_keyboard, ledRectangles[x, y], 0.01f) { Brush = new SolidColorBrush(bitmap.GetPixel(x, y)) };
}
}
_keyboard.Update();
for (var x = 0; x < bitmap.Width; x++)
{
for (var y = 0; y < bitmap.Height; y++)
{
_keyboard.DetachKeyGroup(ledGroups[x, y]);
}
}
*/
} }
} }

View File

@ -84,27 +84,5 @@ namespace Artemis.KeyboardProviders.Corsair
} }
_keyboard.Update(true); _keyboard.Update(true);
} }
/*
RectangleF[,] ledRectangles = new RectangleF[bitmap.Width, bitmap.Height];
RectangleKeyGroup[,] ledGroups = new RectangleKeyGroup[bitmap.Width, bitmap.Height];
//_keyboard.Brush = new SolidColorBrush(Color.Black);
for (var x = 0 ; x < bitmap.Width; x++)
{
for (var y = 0; y < bitmap.Height; y++)
{
ledRectangles[x, y] = new RectangleF(_keyboard.KeyboardRectangle.X * (x*(_keyboard.KeyboardRectangle.Width / bitmap.Width / _keyboard.KeyboardRectangle.X)), _keyboard.KeyboardRectangle.Y*(y*(_keyboard.KeyboardRectangle.Height / bitmap.Height / _keyboard.KeyboardRectangle.Y)), _keyboard.KeyboardRectangle.Width / bitmap.Width, _keyboard.KeyboardRectangle.Height / bitmap.Height);
ledGroups[x, y] = new RectangleKeyGroup(_keyboard, ledRectangles[x, y], 0.01f) { Brush = new SolidColorBrush(bitmap.GetPixel(x, y)) };
}
}
_keyboard.Update();
for (var x = 0; x < bitmap.Width; x++)
{
for (var y = 0; y < bitmap.Height; y++)
{
_keyboard.DetachKeyGroup(ledGroups[x, y]);
}
}
*/
} }
} }

View File

@ -1,7 +1,9 @@
using System.Drawing; using System;
using System.Drawing;
using Artemis.KeyboardProviders.Razer.Utilities; using Artemis.KeyboardProviders.Razer.Utilities;
using Corale.Colore.Core; using Corale.Colore.Core;
using Corale.Colore.Razer.Keyboard; using Corale.Colore.Razer.Keyboard;
using Color = Corale.Colore.Core.Color;
namespace Artemis.KeyboardProviders.Razer namespace Artemis.KeyboardProviders.Razer
{ {
@ -14,7 +16,23 @@ namespace Artemis.KeyboardProviders.Razer
public override bool CanEnable() public override bool CanEnable()
{ {
return Chroma.IsSdkAvailable(); if (!Chroma.IsSdkAvailable())
return false;
// Some people have Synapse installed, but not a Chroma keyboard, deal with this
try
{
// Create a bitmap to send as a test
var b = new Bitmap(22, 6);
var razerArray = RazerUtilities.BitmapColorArray(b, 6, 22);
Chroma.Instance.Keyboard.SetGrid(razerArray);
Chroma.Instance.Keyboard.Clear();
}
catch (NullReferenceException)
{
return false;
}
return true;
} }
public override void Enable() public override void Enable()

View File

@ -88,7 +88,7 @@ namespace Artemis.Models
ChangeKeyboard(keyboard ?? KeyboardProviders.First(k => k.Name == "Logitech G910 Orion Spark RGB")); ChangeKeyboard(keyboard ?? KeyboardProviders.First(k => k.Name == "Logitech G910 Orion Spark RGB"));
} }
private void ChangeKeyboard(KeyboardProvider keyboardProvider) public void ChangeKeyboard(KeyboardProvider keyboardProvider)
{ {
if (ActiveKeyboard != null && keyboardProvider.Name == ActiveKeyboard.Name) if (ActiveKeyboard != null && keyboardProvider.Name == ActiveKeyboard.Name)
return; return;

View File

@ -33,6 +33,7 @@ namespace Artemis.ViewModels
return; return;
_isOpen = value; _isOpen = value;
HandleOpen();
NotifyOfPropertyChange(() => IsOpen); NotifyOfPropertyChange(() => IsOpen);
} }
} }
@ -50,5 +51,7 @@ namespace Artemis.ViewModels
NotifyOfPropertyChange(() => Position); NotifyOfPropertyChange(() => Position);
} }
} }
protected abstract void HandleOpen();
} }
} }

View File

@ -1,19 +1,48 @@
using System.Diagnostics; using System.Diagnostics;
using System.Linq;
using System.Windows.Forms;
using Artemis.Models;
using Caliburn.Micro;
using MahApps.Metro.Controls; using MahApps.Metro.Controls;
namespace Artemis.ViewModels.Flyouts namespace Artemis.ViewModels.Flyouts
{ {
public class FlyoutSettingsViewModel : FlyoutBaseViewModel public class FlyoutSettingsViewModel : FlyoutBaseViewModel
{ {
public FlyoutSettingsViewModel() private string _selectedKeyboardProvider;
public MainModel MainModel { get; set; }
public FlyoutSettingsViewModel(MainModel mainModel)
{ {
MainModel = mainModel;
Header = "settings"; Header = "settings";
Position = Position.Right; Position = Position.Right;
} }
public BindableCollection<string> KeyboardProviders
=> new BindableCollection<string>(MainModel.KeyboardProviders.Select(k => k.Name));
public string SelectedKeyboardProvider
{
get { return _selectedKeyboardProvider; }
set
{
if (value == _selectedKeyboardProvider) return;
_selectedKeyboardProvider = value;
NotifyOfPropertyChange(() => SelectedKeyboardProvider);
MainModel.ChangeKeyboard(MainModel.KeyboardProviders.First(k => k.Name == _selectedKeyboardProvider));
}
}
public void NavigateTo(string url) public void NavigateTo(string url)
{ {
Process.Start(new ProcessStartInfo(url)); Process.Start(new ProcessStartInfo(url));
} }
protected override void HandleOpen()
{
SelectedKeyboardProvider = MainModel.ActiveKeyboard?.Name;
}
} }
} }

View File

@ -23,7 +23,7 @@ namespace Artemis.ViewModels
_gamesVm = new GamesViewModel(MainModel) {DisplayName = "Games"}; _gamesVm = new GamesViewModel(MainModel) {DisplayName = "Games"};
_overlaysVm = new OverlaysViewModel(MainModel) {DisplayName = "Overlays"}; _overlaysVm = new OverlaysViewModel(MainModel) {DisplayName = "Overlays"};
Flyouts.Add(new FlyoutSettingsViewModel()); Flyouts.Add(new FlyoutSettingsViewModel(MainModel));
// By now Effects are added to the MainModel so we can savely start one // By now Effects are added to the MainModel so we can savely start one
ToggleEffects(); ToggleEffects();

View File

@ -42,8 +42,9 @@
<!-- Keyboard selection --> <!-- Keyboard selection -->
<Label Grid.Row="2" Grid.Column="0" Margin="5" VerticalAlignment="Center" HorizontalAlignment="Left" <Label Grid.Row="2" Grid.Column="0" Margin="5" VerticalAlignment="Center" HorizontalAlignment="Left"
Content="Keyboard:" /> Content="Keyboard:" />
<ComboBox Grid.Row="2" Grid.Column="1" Margin="10" VerticalAlignment="Center" HorizontalAlignment="Right" <ComboBox Grid.Row="2" Grid.Column="1" x:Name="KeyboardProviders" Margin="10" VerticalAlignment="Center" HorizontalAlignment="Right"
Width="120" /> Width="120" />
<!-- TODO: Ugly -->
<!-- Gamestate port --> <!-- Gamestate port -->
<Label Grid.Row="3" Grid.Column="0" Margin="5" VerticalAlignment="Center" HorizontalAlignment="Left" <Label Grid.Row="3" Grid.Column="0" Margin="5" VerticalAlignment="Center" HorizontalAlignment="Left"