mirror of
https://github.com/Artemis-RGB/Artemis
synced 2025-12-12 21:38:38 +00:00
Added images for all the Corsair keyboards. ProfileEditor now shows layers
This commit is contained in:
parent
2c1ddb824a
commit
e78906bfa3
@ -267,6 +267,7 @@
|
||||
</Compile>
|
||||
<Compile Include="ArtemisBootstrapper.cs" />
|
||||
<Compile Include="DAL\ProfileProvider.cs" />
|
||||
<Compile Include="Events\ActiveKeyboardChanged.cs" />
|
||||
<Compile Include="Events\ToggleEnabled.cs" />
|
||||
<Compile Include="Events\ActiveEffectChanged.cs" />
|
||||
<Compile Include="Events\ChangeBitmap.cs" />
|
||||
@ -498,8 +499,8 @@
|
||||
</Compile>
|
||||
<EmbeddedResource Include="Properties\Resources.resx">
|
||||
<Generator>ResXFileCodeGenerator</Generator>
|
||||
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
|
||||
<SubType>Designer</SubType>
|
||||
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
|
||||
</EmbeddedResource>
|
||||
<None Include="Modules\Effects\AudioVisualizer\AudioVisualization.settings">
|
||||
<Generator>SettingsSingleFileGenerator</Generator>
|
||||
@ -546,6 +547,10 @@
|
||||
<Resource Include="Resources\Dota2\dotaGamestateConfiguration.txt" />
|
||||
<None Include="Resources\LogitechLED.dll" />
|
||||
<None Include="Resources\folder.png" />
|
||||
<Resource Include="Resources\Keyboards\k65.png" />
|
||||
<Resource Include="Resources\Keyboards\k70.png" />
|
||||
<Resource Include="Resources\Keyboards\k95.png" />
|
||||
<Resource Include="Resources\Keyboards\strafe.png" />
|
||||
<Content Include="Resources\Witcher3\playerWitcher.txt" />
|
||||
<Content Include="Resources\Witcher3\artemis.txt" />
|
||||
<Resource Include="Resources\Entypo.ttf" />
|
||||
|
||||
@ -1,6 +1,7 @@
|
||||
using System.Diagnostics;
|
||||
using System.Linq;
|
||||
using System.Windows;
|
||||
using System.Windows.Controls;
|
||||
using System.Windows.Forms;
|
||||
using Artemis.ViewModels;
|
||||
using Autofac;
|
||||
@ -18,6 +19,47 @@ namespace Artemis
|
||||
CheckDuplicateInstances();
|
||||
|
||||
Initialize();
|
||||
|
||||
MessageBinder.SpecialValues.Add("$scaledmousex", (ctx) =>
|
||||
{
|
||||
var img = ctx.Source as Image;
|
||||
var input = ctx.Source as IInputElement;
|
||||
var e = ctx.EventArgs as System.Windows.Input.MouseEventArgs;
|
||||
|
||||
// If there is an image control, get the scaled position
|
||||
if (img != null && e != null)
|
||||
{
|
||||
Point position = e.GetPosition(img);
|
||||
return (int)(img.Source.Width * (position.X / img.ActualWidth));
|
||||
}
|
||||
|
||||
// If there is another type of of IInputControl get the non-scaled position - or do some processing to get a scaled position, whatever needs to happen
|
||||
if (e != null && input != null)
|
||||
return e.GetPosition(input).X;
|
||||
|
||||
// Return 0 if no processing could be done
|
||||
return 0;
|
||||
});
|
||||
MessageBinder.SpecialValues.Add("$scaledmousey", (ctx) =>
|
||||
{
|
||||
var img = ctx.Source as Image;
|
||||
var input = ctx.Source as IInputElement;
|
||||
var e = ctx.EventArgs as System.Windows.Input.MouseEventArgs;
|
||||
|
||||
// If there is an image control, get the scaled position
|
||||
if (img != null && e != null)
|
||||
{
|
||||
Point position = e.GetPosition(img);
|
||||
return (int)(img.Source.Width * (position.Y / img.ActualWidth));
|
||||
}
|
||||
|
||||
// If there is another type of of IInputControl get the non-scaled position - or do some processing to get a scaled position, whatever needs to happen
|
||||
if (e != null && input != null)
|
||||
return e.GetPosition(input).Y;
|
||||
|
||||
// Return 0 if no processing could be done
|
||||
return 0;
|
||||
});
|
||||
}
|
||||
|
||||
protected override void ConfigureContainer(ContainerBuilder builder)
|
||||
@ -45,5 +87,6 @@ namespace Artemis
|
||||
"Artemis (╯°□°)╯︵ ┻━┻", MessageBoxButtons.OK, MessageBoxIcon.Warning);
|
||||
Application.Current.Shutdown();
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
12
Artemis/Artemis/Events/ActiveKeyboardChanged.cs
Normal file
12
Artemis/Artemis/Events/ActiveKeyboardChanged.cs
Normal file
@ -0,0 +1,12 @@
|
||||
namespace Artemis.Events
|
||||
{
|
||||
public class ActiveKeyboardChanged
|
||||
{
|
||||
public ActiveKeyboardChanged(string activeKeyboard)
|
||||
{
|
||||
ActiveKeyboard = activeKeyboard;
|
||||
}
|
||||
|
||||
public string ActiveKeyboard { get; set; }
|
||||
}
|
||||
}
|
||||
@ -1,20 +1,22 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Drawing;
|
||||
using System.Threading;
|
||||
using System.Windows;
|
||||
using Artemis.Properties;
|
||||
using Artemis.Utilities;
|
||||
using CUE.NET;
|
||||
using CUE.NET.Brushes;
|
||||
using CUE.NET.Devices.Generic.Enums;
|
||||
using CUE.NET.Devices.Headset;
|
||||
using CUE.NET.Devices.Keyboard;
|
||||
using CUE.NET.Devices.Mouse;
|
||||
using CUE.NET.Exceptions;
|
||||
using Point = System.Drawing.Point;
|
||||
|
||||
namespace Artemis.KeyboardProviders.Corsair
|
||||
{
|
||||
internal class CorsairRGB : KeyboardProvider
|
||||
{
|
||||
private CorsairKeyboard _keyboard;
|
||||
|
||||
public CorsairRGB()
|
||||
{
|
||||
Name = "Corsair RGB Keyboards";
|
||||
@ -74,6 +76,7 @@ namespace Artemis.KeyboardProviders.Corsair
|
||||
case "K95 RGB":
|
||||
Height = 7;
|
||||
Width = 25;
|
||||
PreviewSettings = new PreviewSettings(626, 175, new Thickness(0,-15,0,0), Resources.k95);
|
||||
KeyboardRegions.Add(new KeyboardRegion("TopRow", new Point(0, 1), new Point(20, 1)));
|
||||
KeyboardRegions.Add(new KeyboardRegion("NumPad", new Point(21, 2), new Point(25, 7)));
|
||||
KeyboardRegions.Add(new KeyboardRegion("QWER", new Point(5, 3), new Point(8, 3)));
|
||||
@ -81,6 +84,7 @@ namespace Artemis.KeyboardProviders.Corsair
|
||||
case "K70 RGB":
|
||||
Height = 7;
|
||||
Width = 21;
|
||||
PreviewSettings = new PreviewSettings(626, 175, new Thickness(0, -15, 0, 0), Resources.k70);
|
||||
KeyboardRegions.Add(new KeyboardRegion("TopRow", new Point(0, 1), new Point(18, 1)));
|
||||
KeyboardRegions.Add(new KeyboardRegion("NumPad", new Point(17, 2), new Point(21, 7)));
|
||||
KeyboardRegions.Add(new KeyboardRegion("QWER", new Point(2, 3), new Point(5, 3)));
|
||||
@ -88,16 +92,18 @@ namespace Artemis.KeyboardProviders.Corsair
|
||||
case "K65 RGB":
|
||||
Height = 7;
|
||||
Width = 18;
|
||||
PreviewSettings = new PreviewSettings(626, 175, new Thickness(0, -15, 0, 0), Resources.k65);
|
||||
KeyboardRegions.Add(new KeyboardRegion("TopRow", new Point(0, 1), new Point(18, 1)));
|
||||
KeyboardRegions.Add(new KeyboardRegion("NumPad", new Point(17, 2), new Point(20, 7)));
|
||||
KeyboardRegions.Add(new KeyboardRegion("QWER", new Point(2, 3), new Point(5, 3)));
|
||||
break;
|
||||
case "STRAFE RGB":
|
||||
Height = 6;
|
||||
Width = 22;
|
||||
PreviewSettings = new PreviewSettings(626, 175, new Thickness(0, -15, 0, 0), Resources.strafe);
|
||||
KeyboardRegions.Add(new KeyboardRegion("TopRow", new Point(0, 1), new Point(18, 1)));
|
||||
KeyboardRegions.Add(new KeyboardRegion("NumPad", new Point(18, 2), new Point(22, 7)));
|
||||
KeyboardRegions.Add(new KeyboardRegion("QWER", new Point(1, 3), new Point(4, 3)));
|
||||
Width = 22;
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -106,7 +112,7 @@ namespace Artemis.KeyboardProviders.Corsair
|
||||
{
|
||||
CueSDK.Reinitialize();
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Properly resizes any size bitmap to the keyboard by creating a rectangle whose size is dependent on the bitmap
|
||||
/// size.
|
||||
@ -118,7 +124,7 @@ namespace Artemis.KeyboardProviders.Corsair
|
||||
using (var g = Graphics.FromImage(fixedBmp))
|
||||
{
|
||||
g.Clear(Color.Black);
|
||||
g.DrawImage(bitmap, 0,0);
|
||||
g.DrawImage(bitmap, 0, 0);
|
||||
}
|
||||
|
||||
var fixedImage = ImageUtilities.ResizeImage(fixedBmp, Width, Height);
|
||||
@ -131,4 +137,4 @@ namespace Artemis.KeyboardProviders.Corsair
|
||||
_keyboard.Update();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -14,6 +14,8 @@ namespace Artemis.KeyboardProviders
|
||||
|
||||
public List<KeyboardRegion> KeyboardRegions { get; set; }
|
||||
|
||||
public PreviewSettings PreviewSettings { get; set; }
|
||||
|
||||
public abstract bool CanEnable();
|
||||
public abstract void Enable();
|
||||
public abstract void Disable();
|
||||
@ -33,4 +35,20 @@ namespace Artemis.KeyboardProviders
|
||||
|
||||
public Rect KeyboardRectangle(int scale) => new Rect(new Size(Width*scale, Height*scale));
|
||||
}
|
||||
|
||||
public struct PreviewSettings
|
||||
{
|
||||
public int Width { get; set; }
|
||||
public int Height { get; set; }
|
||||
public Thickness Margin { get; set; }
|
||||
public Bitmap Image { get; set; }
|
||||
|
||||
public PreviewSettings(int width, int height, Thickness margin, Bitmap image)
|
||||
{
|
||||
Width = width;
|
||||
Height = height;
|
||||
Margin = margin;
|
||||
Image = image;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -14,6 +14,7 @@ namespace Artemis.Managers
|
||||
private readonly MainManager _mainManager;
|
||||
private bool _clearing;
|
||||
private EffectModel _pauseEffect;
|
||||
private EffectModel _activeEffect;
|
||||
|
||||
public EffectManager(MainManager mainManager, IEventAggregator events)
|
||||
{
|
||||
@ -24,7 +25,16 @@ namespace Artemis.Managers
|
||||
}
|
||||
|
||||
public List<EffectModel> EffectModels { get; set; }
|
||||
public EffectModel ActiveEffect { get; private set; }
|
||||
|
||||
public EffectModel ActiveEffect
|
||||
{
|
||||
get { return _activeEffect; }
|
||||
private set
|
||||
{
|
||||
_activeEffect = value;
|
||||
_events.PublishOnUIThread(new ActiveEffectChanged(value?.Name));
|
||||
}
|
||||
}
|
||||
|
||||
public IEnumerable<OverlayModel> EnabledOverlays
|
||||
{
|
||||
@ -101,7 +111,7 @@ namespace Artemis.Managers
|
||||
ActiveEffect.Enable();
|
||||
|
||||
// Let the ViewModels know
|
||||
_events.PublishOnUIThread(new ActiveEffectChanged(ActiveEffect.Name));
|
||||
//_events.PublishOnUIThread(new ActiveEffectChanged(ActiveEffect.Name));
|
||||
|
||||
_mainManager.Unpause();
|
||||
_pauseEffect = null;
|
||||
@ -143,7 +153,7 @@ namespace Artemis.Managers
|
||||
General.Default.LastEffect = null;
|
||||
General.Default.Save();
|
||||
|
||||
_events.PublishOnUIThread(new ActiveEffectChanged(""));
|
||||
//_events.PublishOnUIThread(new ActiveEffectChanged(""));
|
||||
|
||||
_clearing = false;
|
||||
_mainManager.Unpause();
|
||||
|
||||
@ -1,23 +1,37 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Windows.Forms;
|
||||
using Artemis.Events;
|
||||
using Artemis.KeyboardProviders;
|
||||
using Artemis.Settings;
|
||||
using Caliburn.Micro;
|
||||
|
||||
namespace Artemis.Managers
|
||||
{
|
||||
public class KeyboardManager
|
||||
{
|
||||
private readonly IEventAggregator _events;
|
||||
private readonly MainManager _mainManager;
|
||||
private KeyboardProvider _activeKeyboard;
|
||||
|
||||
public KeyboardManager(MainManager mainManager)
|
||||
public KeyboardManager(MainManager mainManager, IEventAggregator events)
|
||||
{
|
||||
_mainManager = mainManager;
|
||||
_events = events;
|
||||
KeyboardProviders = ProviderHelper.GetKeyboardProviders();
|
||||
}
|
||||
|
||||
public List<KeyboardProvider> KeyboardProviders { get; set; }
|
||||
public KeyboardProvider ActiveKeyboard { get; set; }
|
||||
|
||||
public KeyboardProvider ActiveKeyboard
|
||||
{
|
||||
get { return _activeKeyboard; }
|
||||
set
|
||||
{
|
||||
_activeKeyboard = value;
|
||||
// Let the ViewModels know
|
||||
_events.PublishOnUIThread(new ActiveKeyboardChanged(value?.Name));
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Enables the last keyboard according to the settings file
|
||||
|
||||
@ -25,7 +25,7 @@ namespace Artemis.Managers
|
||||
Events = events;
|
||||
DialogService = dialogService;
|
||||
|
||||
KeyboardManager = new KeyboardManager(this);
|
||||
KeyboardManager = new KeyboardManager(this, Events);
|
||||
EffectManager = new EffectManager(this, Events);
|
||||
KeyboardHook = new KeyboardHook();
|
||||
|
||||
|
||||
@ -26,8 +26,9 @@ namespace Artemis.Models.Profiles
|
||||
|
||||
public string Name { get; set; }
|
||||
public LayerType LayerType { get; set; }
|
||||
public bool Enabled { get; set; }
|
||||
public LayerPropertiesModel LayerUserProperties { get; set; }
|
||||
|
||||
|
||||
public List<LayerModel> Children { get; set; }
|
||||
public List<LayerConditionModel> LayerConditions { get; set; }
|
||||
public List<LayerDynamicPropertiesModel> LayerProperties { get; set; }
|
||||
@ -40,11 +41,12 @@ namespace Artemis.Models.Profiles
|
||||
|
||||
public bool ConditionsMet<T>(IGameDataModel dataModel)
|
||||
{
|
||||
return LayerConditions.All(cm => cm.ConditionMet<T>(dataModel));
|
||||
return Enabled && LayerConditions.All(cm => cm.ConditionMet<T>(dataModel));
|
||||
}
|
||||
|
||||
public void DrawPreview(DrawingContext c)
|
||||
{
|
||||
GeneralHelpers.CopyProperties(LayerCalculatedProperties, LayerUserProperties);
|
||||
if (LayerType == LayerType.KeyboardRectangle || LayerType == LayerType.KeyboardEllipse)
|
||||
_drawer.Draw(c);
|
||||
else if (LayerType == LayerType.KeyboardGif)
|
||||
|
||||
@ -13,7 +13,7 @@ namespace Artemis.Models.Profiles
|
||||
public int Y { get; set; }
|
||||
public int Width { get; set; }
|
||||
public int Height { get; set; }
|
||||
public int Opacity { get; set; }
|
||||
public double Opacity { get; set; }
|
||||
public bool ContainedBrush { get; set; }
|
||||
public LayerAnimation Animation { get; set; }
|
||||
public double AnimationSpeed { get; set; }
|
||||
|
||||
@ -1,4 +1,5 @@
|
||||
using System.Drawing;
|
||||
using System.Diagnostics;
|
||||
using System.Drawing;
|
||||
using System.Windows.Media;
|
||||
using Artemis.Managers;
|
||||
using Artemis.Models;
|
||||
@ -88,6 +89,8 @@ namespace Artemis.Modules.Games.CounterStrike
|
||||
if (!jsonString.Contains("Counter-Strike: Global Offensive"))
|
||||
return;
|
||||
|
||||
Debug.WriteLine("Received data");
|
||||
|
||||
// Parse the JSON
|
||||
GameDataModel = JsonConvert.DeserializeObject<CounterStrikeDataModel>(jsonString);
|
||||
}
|
||||
|
||||
45
Artemis/Artemis/Properties/Resources.Designer.cs
generated
45
Artemis/Artemis/Properties/Resources.Designer.cs
generated
@ -91,10 +91,7 @@ namespace Artemis.Properties {
|
||||
/// Looks up a localized string similar to "Artemis"
|
||||
///{
|
||||
/// "uri" "http://localhost:{{port}}/csgo_game_event"
|
||||
/// "timeout" "5.0"
|
||||
/// "buffer" "0.1"
|
||||
/// "throttle" "0.1"
|
||||
/// "heartbeat" "30.0"
|
||||
/// "timeout" "0.1"
|
||||
/// "data"
|
||||
/// {
|
||||
/// "provider" "1"
|
||||
@ -148,6 +145,36 @@ namespace Artemis.Properties {
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized resource of type System.Drawing.Bitmap.
|
||||
/// </summary>
|
||||
internal static System.Drawing.Bitmap k65 {
|
||||
get {
|
||||
object obj = ResourceManager.GetObject("k65", resourceCulture);
|
||||
return ((System.Drawing.Bitmap)(obj));
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized resource of type System.Drawing.Bitmap.
|
||||
/// </summary>
|
||||
internal static System.Drawing.Bitmap k70 {
|
||||
get {
|
||||
object obj = ResourceManager.GetObject("k70", resourceCulture);
|
||||
return ((System.Drawing.Bitmap)(obj));
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized resource of type System.Drawing.Bitmap.
|
||||
/// </summary>
|
||||
internal static System.Drawing.Bitmap k95 {
|
||||
get {
|
||||
object obj = ResourceManager.GetObject("k95", resourceCulture);
|
||||
return ((System.Drawing.Bitmap)(obj));
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized resource of type System.Byte[].
|
||||
/// </summary>
|
||||
@ -201,5 +228,15 @@ namespace Artemis.Properties {
|
||||
return ResourceManager.GetString("playerWitcherWs", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized resource of type System.Drawing.Bitmap.
|
||||
/// </summary>
|
||||
internal static System.Drawing.Bitmap strafe {
|
||||
get {
|
||||
object obj = ResourceManager.GetObject("strafe", resourceCulture);
|
||||
return ((System.Drawing.Bitmap)(obj));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -145,4 +145,16 @@
|
||||
<data name="folder" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\folder.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="k65" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\resources\keyboards\k65.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="k70" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\resources\keyboards\k70.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="k95" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\resources\keyboards\k95.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="strafe" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\resources\keyboards\strafe.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
</root>
|
||||
@ -1,10 +1,7 @@
|
||||
"Artemis"
|
||||
{
|
||||
"uri" "http://localhost:{{port}}/csgo_game_event"
|
||||
"timeout" "5.0"
|
||||
"buffer" "0.1"
|
||||
"throttle" "0.1"
|
||||
"heartbeat" "30.0"
|
||||
"timeout" "0.1"
|
||||
"data"
|
||||
{
|
||||
"provider" "1"
|
||||
|
||||
BIN
Artemis/Artemis/Resources/Keyboards/k65.png
Normal file
BIN
Artemis/Artemis/Resources/Keyboards/k65.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 229 KiB |
BIN
Artemis/Artemis/Resources/Keyboards/k70.png
Normal file
BIN
Artemis/Artemis/Resources/Keyboards/k70.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 284 KiB |
BIN
Artemis/Artemis/Resources/Keyboards/k95.png
Normal file
BIN
Artemis/Artemis/Resources/Keyboards/k95.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 308 KiB |
BIN
Artemis/Artemis/Resources/Keyboards/strafe.png
Normal file
BIN
Artemis/Artemis/Resources/Keyboards/strafe.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 230 KiB |
@ -189,7 +189,7 @@
|
||||
|
||||
<Popup IsOpen="{Binding ElementName=PART_OpenPopup,Path=IsChecked}" StaysOpen="False"
|
||||
AllowsTransparency="True" Width="{Binding ActualWidth, ElementName=PART_Root}"
|
||||
MinWidth="250" HorizontalOffset="-1" Placement="Center" PopupAnimation="Fade">
|
||||
MinWidth="250" HorizontalOffset="-1" Placement="Top" PopupAnimation="Fade">
|
||||
<Border Background="{StaticResource ControlBackgroundBrush}"
|
||||
BorderBrush="{StaticResource AccentColorBrush}" BorderThickness="1"
|
||||
Margin="10,0,10,10">
|
||||
@ -492,8 +492,7 @@
|
||||
SelectedGradient="{Binding}"
|
||||
Margin="0,0,0,2">
|
||||
<nc:GradientStopSlider.Background>
|
||||
<SolidColorBrush
|
||||
Color="{Binding Color}" />
|
||||
<SolidColorBrush Color="{Binding Color}"/>
|
||||
</nc:GradientStopSlider.Background>
|
||||
</nc:GradientStopSlider>
|
||||
|
||||
|
||||
@ -57,8 +57,8 @@ namespace Artemis.Utilities.GameState
|
||||
return;
|
||||
try
|
||||
{
|
||||
var rstr = HandleRequest(ctx.Request);
|
||||
var buf = Encoding.UTF8.GetBytes(rstr);
|
||||
HandleRequest(ctx.Request);
|
||||
var buf = Encoding.UTF8.GetBytes("ok");
|
||||
ctx.Response.ContentLength64 = buf.Length;
|
||||
ctx.Response.OutputStream.Write(buf, 0, buf.Length);
|
||||
}
|
||||
|
||||
@ -1,4 +1,5 @@
|
||||
using System.Windows;
|
||||
using System;
|
||||
using System.Windows;
|
||||
using System.Windows.Media;
|
||||
using System.Windows.Media.Imaging;
|
||||
using Artemis.Models.Profiles;
|
||||
@ -27,6 +28,8 @@ namespace Artemis.Utilities
|
||||
if (_layerModel.LayerCalculatedProperties.Brush == null)
|
||||
return;
|
||||
|
||||
UpdateAnimation();
|
||||
|
||||
// Set up variables for this frame
|
||||
_rectangle = new Rect(_layerModel.LayerCalculatedProperties.X*Scale,
|
||||
_layerModel.LayerCalculatedProperties.Y*Scale, _layerModel.LayerCalculatedProperties.Width*Scale,
|
||||
@ -36,12 +39,14 @@ namespace Artemis.Utilities
|
||||
_layerModel.LayerCalculatedProperties.Brush.Dispatcher.Invoke(() => DrawRectangle(c));
|
||||
else if (_layerModel.LayerType == LayerType.KeyboardEllipse)
|
||||
_layerModel.LayerCalculatedProperties.Brush.Dispatcher.Invoke(() => DrawEllipse(c));
|
||||
|
||||
UpdateAnimation();
|
||||
}
|
||||
|
||||
private void UpdateAnimation()
|
||||
{
|
||||
if (!_layerModel.Enabled)
|
||||
return;
|
||||
|
||||
// Slide right animation
|
||||
if (_layerModel.LayerCalculatedProperties.Animation == LayerAnimation.SlideRight)
|
||||
{
|
||||
_firstRect = new Rect(new Point(_rectangle.X + _animationProgress, _rectangle.Y),
|
||||
@ -52,16 +57,20 @@ namespace Artemis.Utilities
|
||||
if (_animationProgress > _layerModel.LayerCalculatedProperties.Width*4)
|
||||
_animationProgress = 0;
|
||||
}
|
||||
|
||||
// Slide left animation
|
||||
if (_layerModel.LayerCalculatedProperties.Animation == LayerAnimation.SlideLeft)
|
||||
{
|
||||
_firstRect = new Rect(new Point(_rectangle.X - _animationProgress, _rectangle.Y),
|
||||
new Size(_rectangle.Width + 1, _rectangle.Height));
|
||||
_secondRect = new Rect(new Point(_firstRect.X + _rectangle.Width, _rectangle.Y),
|
||||
new Size(_rectangle.Width , _rectangle.Height));
|
||||
new Size(_rectangle.Width, _rectangle.Height));
|
||||
|
||||
if (_animationProgress > _layerModel.LayerCalculatedProperties.Width*4)
|
||||
_animationProgress = 0;
|
||||
}
|
||||
|
||||
// Slide down animation
|
||||
if (_layerModel.LayerCalculatedProperties.Animation == LayerAnimation.SlideDown)
|
||||
{
|
||||
_firstRect = new Rect(new Point(_rectangle.X, _rectangle.Y + _animationProgress),
|
||||
@ -69,9 +78,11 @@ namespace Artemis.Utilities
|
||||
_secondRect = new Rect(new Point(_firstRect.X, _firstRect.Y - _rectangle.Height),
|
||||
new Size(_rectangle.Width, _rectangle.Height));
|
||||
|
||||
if (_animationProgress > _layerModel.LayerCalculatedProperties.Height * 4)
|
||||
if (_animationProgress > _layerModel.LayerCalculatedProperties.Height*4)
|
||||
_animationProgress = 0;
|
||||
}
|
||||
|
||||
// Slide up animation
|
||||
if (_layerModel.LayerCalculatedProperties.Animation == LayerAnimation.SlideUp)
|
||||
{
|
||||
_firstRect = new Rect(new Point(_rectangle.X, _rectangle.Y - _animationProgress),
|
||||
@ -79,12 +90,25 @@ namespace Artemis.Utilities
|
||||
_secondRect = new Rect(new Point(_firstRect.X, _firstRect.Y + _rectangle.Height),
|
||||
new Size(_rectangle.Width, _rectangle.Height));
|
||||
|
||||
if (_animationProgress > _layerModel.LayerCalculatedProperties.Height * 4)
|
||||
if (_animationProgress > _layerModel.LayerCalculatedProperties.Height*4)
|
||||
_animationProgress = 0;
|
||||
}
|
||||
|
||||
// Update the rotation progress
|
||||
_animationProgress = _animationProgress + _layerModel.LayerCalculatedProperties.AnimationSpeed;
|
||||
// Pulse animation
|
||||
if (_layerModel.LayerCalculatedProperties.Animation == LayerAnimation.Pulse)
|
||||
{
|
||||
var opac = (Math.Sin(_animationProgress*Math.PI) + 1)*(_layerModel.LayerUserProperties.Opacity/2);
|
||||
_layerModel.LayerCalculatedProperties.Opacity = opac;
|
||||
if (_animationProgress > 2)
|
||||
_animationProgress = 0;
|
||||
|
||||
_animationProgress = _animationProgress + _layerModel.LayerCalculatedProperties.AnimationSpeed/2;
|
||||
}
|
||||
else
|
||||
{
|
||||
// Update the animation progress
|
||||
_animationProgress = _animationProgress + _layerModel.LayerCalculatedProperties.AnimationSpeed;
|
||||
}
|
||||
}
|
||||
|
||||
public BitmapImage GetThumbnail()
|
||||
@ -131,7 +155,9 @@ namespace Artemis.Utilities
|
||||
|
||||
public void DrawRectangle(DrawingContext c)
|
||||
{
|
||||
_layerModel.LayerCalculatedProperties.Brush.Opacity = _layerModel.LayerCalculatedProperties.Opacity;
|
||||
//_layerModel.LayerCalculatedProperties.Brush.Opacity = _layerModel.LayerCalculatedProperties.Opacity;
|
||||
var brush = _layerModel.LayerCalculatedProperties.Brush.CloneCurrentValue();
|
||||
brush.Opacity = _layerModel.LayerCalculatedProperties.Opacity;
|
||||
|
||||
if (_layerModel.LayerCalculatedProperties.Animation == LayerAnimation.SlideDown ||
|
||||
_layerModel.LayerCalculatedProperties.Animation == LayerAnimation.SlideLeft ||
|
||||
@ -139,13 +165,13 @@ namespace Artemis.Utilities
|
||||
_layerModel.LayerCalculatedProperties.Animation == LayerAnimation.SlideUp)
|
||||
{
|
||||
c.PushClip(new RectangleGeometry(_rectangle));
|
||||
c.DrawRectangle(_layerModel.LayerCalculatedProperties.Brush, null, _firstRect);
|
||||
c.DrawRectangle(_layerModel.LayerCalculatedProperties.Brush, null, _secondRect);
|
||||
c.DrawRectangle(brush, null, _firstRect);
|
||||
c.DrawRectangle(brush, null, _secondRect);
|
||||
c.Pop();
|
||||
}
|
||||
else
|
||||
{
|
||||
c.DrawRectangle(_layerModel.LayerCalculatedProperties.Brush, null, _rectangle);
|
||||
c.DrawRectangle(brush, null, _rectangle);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -90,7 +90,7 @@ namespace Artemis.ViewModels.Flyouts
|
||||
|
||||
public void Handle(ActiveEffectChanged message)
|
||||
{
|
||||
var effectDisplay = message.ActiveEffect.Length > 0 ? message.ActiveEffect : "none";
|
||||
var effectDisplay = string.IsNullOrEmpty(message.ActiveEffect) ? message.ActiveEffect : "none";
|
||||
ActiveEffectName = $"Active effect: {effectDisplay}";
|
||||
}
|
||||
|
||||
|
||||
@ -1,9 +1,7 @@
|
||||
using System;
|
||||
using System.ComponentModel;
|
||||
using System.Diagnostics;
|
||||
using System.Linq;
|
||||
using System.Threading;
|
||||
using System.Windows;
|
||||
using System.Windows.Media;
|
||||
using Artemis.DAL;
|
||||
using Artemis.KeyboardProviders;
|
||||
@ -19,6 +17,7 @@ namespace Artemis.ViewModels
|
||||
private readonly KeyboardProvider _activeKeyboard;
|
||||
private readonly BackgroundWorker _previewWorker;
|
||||
private readonly ProfileModel _profile;
|
||||
private readonly bool _wasEnabled;
|
||||
private LayerModel _layer;
|
||||
private LayerPropertiesModel _proposedProperties;
|
||||
|
||||
@ -26,8 +25,11 @@ namespace Artemis.ViewModels
|
||||
{
|
||||
_activeKeyboard = activeKeyboard;
|
||||
_profile = profile;
|
||||
_wasEnabled = layer.Enabled;
|
||||
Layer = layer;
|
||||
|
||||
Layer.Enabled = false;
|
||||
|
||||
DataModelProps = new BindableCollection<GeneralHelpers.PropertyCollection>();
|
||||
ProposedProperties = new LayerPropertiesModel();
|
||||
DataModelProps.AddRange(GeneralHelpers.GenerateTypeMap<T>());
|
||||
@ -39,7 +41,8 @@ namespace Artemis.ViewModels
|
||||
_previewWorker = new BackgroundWorker {WorkerSupportsCancellation = true};
|
||||
_previewWorker.DoWork += PreviewWorkerOnDoWork;
|
||||
_previewWorker.RunWorkerAsync();
|
||||
|
||||
|
||||
PropertyChanged += AnimationUiHandler;
|
||||
PreSelect();
|
||||
}
|
||||
|
||||
@ -101,7 +104,7 @@ namespace Artemis.ViewModels
|
||||
while (!_previewWorker.CancellationPending)
|
||||
{
|
||||
NotifyOfPropertyChange(() => LayerImage);
|
||||
Thread.Sleep(1000 / 25);
|
||||
Thread.Sleep(1000/25);
|
||||
}
|
||||
}
|
||||
|
||||
@ -110,6 +113,12 @@ namespace Artemis.ViewModels
|
||||
GeneralHelpers.CopyProperties(ProposedProperties, Layer.LayerUserProperties);
|
||||
}
|
||||
|
||||
private void AnimationUiHandler(object sender, PropertyChangedEventArgs e)
|
||||
{
|
||||
if (e.PropertyName != "_proposedProperties")
|
||||
return;
|
||||
}
|
||||
|
||||
public void AddCondition()
|
||||
{
|
||||
var condition = new LayerConditionModel();
|
||||
@ -133,6 +142,7 @@ namespace Artemis.ViewModels
|
||||
public override void CanClose(Action<bool> callback)
|
||||
{
|
||||
_previewWorker.CancelAsync();
|
||||
_layer.Enabled = _wasEnabled;
|
||||
base.CanClose(callback);
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,7 +1,16 @@
|
||||
using System.Dynamic;
|
||||
using System;
|
||||
using System.Drawing.Imaging;
|
||||
using System.Dynamic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Windows;
|
||||
using System.Windows.Controls;
|
||||
using System.Windows.Input;
|
||||
using System.Windows.Media;
|
||||
using System.Windows.Media.Imaging;
|
||||
using Artemis.DAL;
|
||||
using Artemis.Events;
|
||||
using Artemis.KeyboardProviders;
|
||||
using Artemis.Managers;
|
||||
using Artemis.Models;
|
||||
using Artemis.Models.Profiles;
|
||||
@ -9,7 +18,7 @@ using Caliburn.Micro;
|
||||
|
||||
namespace Artemis.ViewModels
|
||||
{
|
||||
public class ProfileEditorViewModel<T> : Screen
|
||||
public class ProfileEditorViewModel<T> : Screen, IHandle<ActiveKeyboardChanged>
|
||||
{
|
||||
private readonly GameModel _gameModel;
|
||||
private readonly MainManager _mainManager;
|
||||
@ -23,6 +32,7 @@ namespace Artemis.ViewModels
|
||||
_gameModel = gameModel;
|
||||
|
||||
ProfileModels = new BindableCollection<ProfileModel>();
|
||||
_mainManager.Events.Subscribe(this);
|
||||
LoadProfiles();
|
||||
}
|
||||
|
||||
@ -44,12 +54,78 @@ namespace Artemis.ViewModels
|
||||
{
|
||||
if (Equals(value, _selectedProfileModel)) return;
|
||||
_selectedProfileModel = value;
|
||||
NotifyOfPropertyChange();
|
||||
NotifyOfPropertyChange(() => SelectedProfileModel);
|
||||
}
|
||||
}
|
||||
|
||||
public LayerModel SelectedLayer { get; set; }
|
||||
|
||||
public ImageSource KeyboardPreview
|
||||
{
|
||||
get
|
||||
{
|
||||
if (_selectedProfileModel == null)
|
||||
return null;
|
||||
|
||||
var keyboardRect = _mainManager.KeyboardManager.ActiveKeyboard.KeyboardRectangle(4);
|
||||
var visual = new DrawingVisual();
|
||||
using (var drawingContext = visual.RenderOpen())
|
||||
{
|
||||
// Setup the DrawingVisual's size
|
||||
drawingContext.PushClip(new RectangleGeometry(keyboardRect));
|
||||
drawingContext.DrawRectangle(new SolidColorBrush(Color.FromArgb(0, 0, 0, 0)), null, keyboardRect);
|
||||
|
||||
// Draw the layer
|
||||
foreach (var layerModel in _selectedProfileModel.Layers)
|
||||
{
|
||||
// if (layerModel.Selected)
|
||||
drawingContext.DrawRectangle(null, new Pen(new SolidColorBrush(Colors.White), 0.5),new Rect(layerModel.LayerUserProperties.X*4,layerModel.LayerUserProperties.Y*4, layerModel.LayerUserProperties.Width*4,layerModel.LayerUserProperties.Height*4));
|
||||
layerModel.DrawPreview(drawingContext);
|
||||
}
|
||||
|
||||
// Remove the clip
|
||||
drawingContext.Pop();
|
||||
}
|
||||
var image = new DrawingImage(visual.Drawing);
|
||||
|
||||
return image;
|
||||
}
|
||||
}
|
||||
|
||||
public ImageSource KeyboardImage
|
||||
{
|
||||
get
|
||||
{
|
||||
using (var memory = new MemoryStream())
|
||||
{
|
||||
if (_mainManager.KeyboardManager.ActiveKeyboard?.PreviewSettings == null)
|
||||
return null;
|
||||
|
||||
_mainManager.KeyboardManager.ActiveKeyboard.PreviewSettings.Image.Save(memory, ImageFormat.Png);
|
||||
memory.Position = 0;
|
||||
|
||||
var bitmapImage = new BitmapImage();
|
||||
bitmapImage.BeginInit();
|
||||
bitmapImage.StreamSource = memory;
|
||||
bitmapImage.CacheOption = BitmapCacheOption.OnLoad;
|
||||
bitmapImage.EndInit();
|
||||
|
||||
return bitmapImage;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public PreviewSettings? PreviewSettings
|
||||
{
|
||||
get { return _mainManager.KeyboardManager.ActiveKeyboard?.PreviewSettings; }
|
||||
}
|
||||
|
||||
public void Handle(ActiveKeyboardChanged message)
|
||||
{
|
||||
NotifyOfPropertyChange(() => KeyboardImage);
|
||||
NotifyOfPropertyChange(() => PreviewSettings);
|
||||
}
|
||||
|
||||
private void LoadProfiles()
|
||||
{
|
||||
ProfileModels.Clear();
|
||||
@ -94,7 +170,8 @@ namespace Artemis.ViewModels
|
||||
public void LayerEditor(LayerModel layer)
|
||||
{
|
||||
IWindowManager manager = new WindowManager();
|
||||
_editorVm = new LayerEditorViewModel<T>(_mainManager.KeyboardManager.ActiveKeyboard, SelectedProfileModel, layer);
|
||||
_editorVm = new LayerEditorViewModel<T>(_mainManager.KeyboardManager.ActiveKeyboard, SelectedProfileModel,
|
||||
layer);
|
||||
dynamic settings = new ExpandoObject();
|
||||
|
||||
settings.Title = "Artemis | Edit " + layer.Name;
|
||||
@ -104,6 +181,7 @@ namespace Artemis.ViewModels
|
||||
public void SetSelectedLayer(LayerModel layer)
|
||||
{
|
||||
SelectedLayer = layer;
|
||||
NotifyOfPropertyChange(() => KeyboardPreview);
|
||||
}
|
||||
|
||||
public void AddLayer()
|
||||
@ -113,12 +191,22 @@ namespace Artemis.ViewModels
|
||||
Name = "Layer " + (_selectedProfileModel.Layers.Count + 1),
|
||||
LayerType = LayerType.KeyboardRectangle
|
||||
});
|
||||
NotifyOfPropertyChange();
|
||||
NotifyOfPropertyChange(() => SelectedProfileModel);
|
||||
}
|
||||
|
||||
private ImageSource GenerateKeyboardImage()
|
||||
public void MouseMoveKeyboardPreview(MouseEventArgs e)
|
||||
{
|
||||
return null;
|
||||
var pos = e.GetPosition((Image) e.OriginalSource);
|
||||
var realX =
|
||||
(int)
|
||||
Math.Round(pos.X/
|
||||
(_mainManager.KeyboardManager.ActiveKeyboard.PreviewSettings.Width/
|
||||
_mainManager.KeyboardManager.ActiveKeyboard.Width));
|
||||
var realY =
|
||||
(int)
|
||||
Math.Round(pos.Y/
|
||||
(_mainManager.KeyboardManager.ActiveKeyboard.PreviewSettings.Height/
|
||||
_mainManager.KeyboardManager.ActiveKeyboard.Height));
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -120,17 +120,17 @@
|
||||
<TextBlock Grid.Row="7" Grid.Column="2" Margin="10" FontSize="13.333" Text="Animation speed:"
|
||||
VerticalAlignment="Center" Height="18" />
|
||||
<Slider x:Name="RotationSpeed" Grid.Row="7" Grid.Column="3" VerticalAlignment="Center"
|
||||
TickPlacement="BottomRight" TickFrequency="0.1"
|
||||
Value="{Binding Path=ProposedProperties.AnimationSpeed, Mode=TwoWay}" Minimum="0.1" Maximum="3"
|
||||
SmallChange="1" IsSnapToTickEnabled="True" Margin="10,7" Height="24" />
|
||||
TickPlacement="None" TickFrequency="0.05"
|
||||
Value="{Binding Path=ProposedProperties.AnimationSpeed, Mode=TwoWay}" Minimum="0.05" Maximum="3"
|
||||
SmallChange="1" IsSnapToTickEnabled="True" Margin="10,12,10,2" Height="24" />
|
||||
|
||||
<!-- Opacity -->
|
||||
<TextBlock Grid.Row="8" Grid.Column="0" Margin="10" FontSize="13.333" Text="Opacity:"
|
||||
VerticalAlignment="Center" Height="18" />
|
||||
<Slider x:Name="Sensitivity" Grid.Row="8" Grid.Column="1" VerticalAlignment="Center"
|
||||
TickPlacement="BottomRight" TickFrequency="20"
|
||||
Value="{Binding Path=ProposedProperties.Opacity, Mode=TwoWay}" Minimum="1" Maximum="255"
|
||||
SmallChange="1" Margin="10,7" Height="24" />
|
||||
TickPlacement="BottomRight" TickFrequency="0.05"
|
||||
Value="{Binding Path=ProposedProperties.Opacity, Mode=TwoWay}" Minimum="0.0" Maximum="1.0"
|
||||
SmallChange="0.05" Margin="10,7" Height="24" />
|
||||
|
||||
<!-- Preview -->
|
||||
<TextBlock Grid.Row="9" Grid.Column="0" Margin="10,13,10,0" FontSize="13.333" Text="Preview:"
|
||||
|
||||
@ -31,7 +31,17 @@
|
||||
Opacity="1"
|
||||
BlurRadius="20" />
|
||||
</Border.Effect>
|
||||
<Image Source="D:\Gebruiker folder\Mijn afbeeldingen\Artemis logo\keyboards\k95.png" Margin="50" />
|
||||
<Grid>
|
||||
|
||||
<Image Grid.Column="0" Grid.Row="0" Source="{Binding Path=KeyboardImage}" Margin="50" />
|
||||
<Image Grid.Column="0" Grid.Row="0" Source="{Binding Path=KeyboardPreview}" Opacity="0.666"
|
||||
Width="{Binding Path=PreviewSettings.Width}"
|
||||
Height="{Binding Path=PreviewSettings.Height}"
|
||||
Margin="{Binding Path=PreviewSettings.Margin}"
|
||||
Stretch="Fill"
|
||||
cal:Message.Attach="[Event MouseMove] = [Action MouseMoveKeyboardPreview($eventArgs)]"/>
|
||||
|
||||
</Grid>
|
||||
</Border>
|
||||
</Border>
|
||||
<!-- Profile management -->
|
||||
@ -59,15 +69,17 @@
|
||||
</TreeView.Resources>
|
||||
<TreeView.ItemTemplate>
|
||||
<HierarchicalDataTemplate ItemsSource="{Binding Children}">
|
||||
<StackPanel Orientation="Horizontal" Tag="{Binding DataContext, ElementName=ProfileTree}" cal:Message.Attach="SetSelectedLayer($datacontext)">
|
||||
<StackPanel Orientation="Horizontal" Tag="{Binding DataContext, ElementName=ProfileTree}"
|
||||
cal:Message.Attach="SetSelectedLayer($datacontext)">
|
||||
<StackPanel.ContextMenu>
|
||||
<ContextMenu cal:Action.TargetWithoutContext="{Binding Path=PlacementTarget.Tag, RelativeSource={RelativeSource Self}}">
|
||||
<ContextMenu
|
||||
cal:Action.TargetWithoutContext="{Binding Path=PlacementTarget.Tag, RelativeSource={RelativeSource Self}}">
|
||||
<MenuItem Header="Rename" />
|
||||
<MenuItem Header="Delete" />
|
||||
<MenuItem Header="Properties" cal:Message.Attach="LayerEditor($datacontext)"/>
|
||||
<MenuItem Header="Properties" cal:Message.Attach="LayerEditor($datacontext)" />
|
||||
</ContextMenu>
|
||||
</StackPanel.ContextMenu>
|
||||
<CheckBox VerticalAlignment="Center" ToolTip="Layer enabled" />
|
||||
<CheckBox VerticalAlignment="Center" ToolTip="Layer enabled" IsChecked="{Binding Enabled}" />
|
||||
<Image Height="18" Width="18" Source="{Binding LayerImage}" />
|
||||
<TextBlock Margin="5,0,0,0" Text="{Binding Name}" VerticalAlignment="Center" />
|
||||
</StackPanel>
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user