From 7d411b0affba6a7a47e00b090f1a08102d1cf5fd Mon Sep 17 00:00:00 2001 From: Terry MacDonald Date: Sun, 28 Feb 2021 20:55:03 +1300 Subject: [PATCH] FIxed invalid shortcut detection Made the shortcuts that were invalid visually different to the others. This is now working properly! --- DisplayMagician/DisplayMagician.csproj | 1 + .../Properties/Resources.Designer.cs | 20 +++++ DisplayMagician/Properties/Resources.resx | 6 ++ DisplayMagician/Resources/warning.png | Bin 0 -> 21988 bytes .../UIForms/ImageListViewRenderers.cs | 75 +++++++++++++++++- .../UIForms/ShortcutLibraryForm.cs | 11 +-- 6 files changed, 105 insertions(+), 8 deletions(-) create mode 100644 DisplayMagician/Resources/warning.png diff --git a/DisplayMagician/DisplayMagician.csproj b/DisplayMagician/DisplayMagician.csproj index b1a94a7..97fa9b0 100644 --- a/DisplayMagician/DisplayMagician.csproj +++ b/DisplayMagician/DisplayMagician.csproj @@ -308,6 +308,7 @@ + diff --git a/DisplayMagician/Properties/Resources.Designer.cs b/DisplayMagician/Properties/Resources.Designer.cs index 2efbfb9..a325a0b 100644 --- a/DisplayMagician/Properties/Resources.Designer.cs +++ b/DisplayMagician/Properties/Resources.Designer.cs @@ -90,6 +90,16 @@ namespace DisplayMagician.Properties { } } + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + public static System.Drawing.Bitmap RedArrows { + get { + object obj = ResourceManager.GetObject("RedArrows", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + /// /// Looks up a localized resource of type System.Drawing.Icon similar to (Icon). /// @@ -109,5 +119,15 @@ namespace DisplayMagician.Properties { return ((System.Drawing.Icon)(obj)); } } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + public static System.Drawing.Bitmap Warning { + get { + object obj = ResourceManager.GetObject("Warning", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } } } diff --git a/DisplayMagician/Properties/Resources.resx b/DisplayMagician/Properties/Resources.resx index a071c82..959aa8a 100644 --- a/DisplayMagician/Properties/Resources.resx +++ b/DisplayMagician/Properties/Resources.resx @@ -133,4 +133,10 @@ ..\Resources\Uplay.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\resources\redarrows.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\warning.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + \ No newline at end of file diff --git a/DisplayMagician/Resources/warning.png b/DisplayMagician/Resources/warning.png new file mode 100644 index 0000000000000000000000000000000000000000..de476dd5e409fa7f29fbe3c0abf556d031beb6b4 GIT binary patch literal 21988 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 Cra&hE literal 0 HcmV?d00001 diff --git a/DisplayMagician/UIForms/ImageListViewRenderers.cs b/DisplayMagician/UIForms/ImageListViewRenderers.cs index 1d15806..aec64d6 100644 --- a/DisplayMagician/UIForms/ImageListViewRenderers.cs +++ b/DisplayMagician/UIForms/ImageListViewRenderers.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Drawing; using System.Drawing.Drawing2D; +using System.Drawing.Imaging; using System.Linq; using System.Text; using System.Threading.Tasks; @@ -9,10 +10,14 @@ using Manina.Windows.Forms; namespace DisplayMagician.UIForms { +#pragma warning disable CS3009 // Base type is not CLS-compliant public class ShortcutILVRenderer : ImageListView.ImageListViewRenderer +#pragma warning restore CS3009 // Base type is not CLS-compliant { // Returns item size for the given view mode. +#pragma warning disable CS3001 // Argument type is not CLS-compliant public override Size MeasureItem(View view) +#pragma warning restore CS3001 // Argument type is not CLS-compliant { Size itemPadding = new Size(4, 4); Size sz = ImageListView.ThumbnailSize + @@ -39,9 +44,20 @@ namespace DisplayMagician.UIForms base.DrawBackground(g, bounds); } // Draws the specified item on the given graphics. - public override void DrawItem(Graphics g, ImageListViewItem item, - ItemState state, Rectangle bounds) +#pragma warning disable CS3001 // Argument type is not CLS-compliant + public override void DrawItem(Graphics g, ImageListViewItem item, ItemState state, Rectangle bounds) +#pragma warning restore CS3001 // Argument type is not CLS-compliant { + if (g is null) + { + throw new ArgumentNullException(nameof(g)); + } + + if (item is null) + { + throw new ArgumentNullException(nameof(item)); + } + Size itemPadding = new Size(4, 4); bool alternate = (item.Index % 2 == 1); @@ -106,7 +122,24 @@ namespace DisplayMagician.UIForms if (img != null) { Rectangle pos = Utility.GetSizedImageBounds(img, new Rectangle(bounds.Location + itemPadding, ImageListView.ThumbnailSize)); - g.DrawImage(img, pos); + + if (ShortcutLibraryForm.shortcutValidity[item.Text]) + { + // Draw the full color image as the shortcuts is not invalid + g.DrawImage(img, pos); + } + else + { + // THe shortcut is invalid + // so we make the image grayscale + Image grayImg = MakeGrayscale(img); + g.DrawImage(grayImg, pos); + + // Draw a warning triangle over it + // right in the centre + g.DrawImage(Properties.Resources.Warning, pos.X + 30, pos.Y + 30, 40, 40); + } + // Draw image border if (Math.Min(pos.Width, pos.Height) > 32) { @@ -298,5 +331,41 @@ namespace DisplayMagician.UIForms path.CloseFigure(); return path; } + + public static Image MakeGrayscale(Image original) + { + //create a blank bitmap the same size as original + Image newBitmap = new Bitmap(original.Width, original.Height); + + //get a graphics object from the new image + using (Graphics g = Graphics.FromImage(newBitmap)) + { + + //create the grayscale ColorMatrix + ColorMatrix colorMatrix = new ColorMatrix( + new float[][] + { + new float[] {.3f, .3f, .3f, 0, 0}, + new float[] {.59f, .59f, .59f, 0, 0}, + new float[] {.11f, .11f, .11f, 0, 0}, + new float[] {0, 0, 0, 1, 0}, + new float[] {0, 0, 0, 0, 1} + }); + + //create some image attributes + using (ImageAttributes attributes = new ImageAttributes()) + { + + //set the color matrix attribute + attributes.SetColorMatrix(colorMatrix); + + //draw the original image on the new image + //using the grayscale color matrix + g.DrawImage(original, new Rectangle(0, 0, original.Width, original.Height), + 0, 0, original.Width, original.Height, GraphicsUnit.Pixel, attributes); + } + } + return newBitmap; + } } } diff --git a/DisplayMagician/UIForms/ShortcutLibraryForm.cs b/DisplayMagician/UIForms/ShortcutLibraryForm.cs index 3ac61c1..249e1a9 100644 --- a/DisplayMagician/UIForms/ShortcutLibraryForm.cs +++ b/DisplayMagician/UIForms/ShortcutLibraryForm.cs @@ -19,6 +19,7 @@ namespace DisplayMagician.UIForms private ShortcutAdaptor _shortcutAdaptor = new ShortcutAdaptor(); private ShortcutItem _selectedShortcut = null; + public static Dictionary shortcutValidity = new Dictionary(); public ShortcutLibraryForm() { @@ -55,8 +56,8 @@ namespace DisplayMagician.UIForms ImageListViewItem newItem = null; ilv_saved_shortcuts.Items.Clear(); + shortcutValidity.Clear(); - foreach (ShortcutItem loadedShortcut in ShortcutRepository.AllShortcuts.OrderBy(s => s.Name)) { newItem = new ImageListViewItem(loadedShortcut, loadedShortcut.Name); @@ -65,6 +66,9 @@ namespace DisplayMagician.UIForms if (_selectedShortcut is ShortcutItem && _selectedShortcut.Equals(loadedShortcut)) newItem.Selected = true; + (bool result, string thing) = loadedShortcut.IsValid(); + shortcutValidity[loadedShortcut.Name] = result; + //ilv_saved_profiles.Items.Add(newItem); ilv_saved_shortcuts.Items.Add(newItem, _shortcutAdaptor); } @@ -240,10 +244,7 @@ namespace DisplayMagician.UIForms // Only run the if shortcut is valid (bool result, string validityMessage) = _selectedShortcut.IsValid(); - if (result) - // Run the selected shortcut - btn_run.PerformClick(); - else + if (!result) { // We tell the user the reason that we couldnt run the shortcut if (MessageBox.Show($"The shortcut '{_selectedShortcut.Name}' isn't valid for some reason so we cannot run the application or game. Has your hardware or screen layout changed from when the shortcut was made? We recommend that you edit the shortcut to make it valid again, or reverse the hardware changes you made. Do you want to do that now?", $"Edit the '{_selectedShortcut.Name}' Shortcut?", MessageBoxButtons.YesNo, MessageBoxIcon.Error) == DialogResult.No)