diff --git a/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Missing.png b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Missing.png index 42807f806..0b7841f81 100644 Binary files a/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Missing.png and b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Missing.png differ diff --git a/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/0_BracketRight.png b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/0_BracketRight.png new file mode 100644 index 000000000..7078bef40 Binary files /dev/null and b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/0_BracketRight.png differ diff --git a/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/1_ExclamationMark.png b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/1_ExclamationMark.png new file mode 100644 index 000000000..41c1ac0b4 Binary files /dev/null and b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/1_ExclamationMark.png differ diff --git a/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/2_At.png b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/2_At.png new file mode 100644 index 000000000..8d084eef4 Binary files /dev/null and b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/2_At.png differ diff --git a/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/3_Hash.png b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/3_Hash.png new file mode 100644 index 000000000..0aea21d28 Binary files /dev/null and b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/3_Hash.png differ diff --git a/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/4_Dollar.png b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/4_Dollar.png new file mode 100644 index 000000000..1920a6c8b Binary files /dev/null and b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/4_Dollar.png differ diff --git a/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/5_Percent.png b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/5_Percent.png new file mode 100644 index 000000000..dcc9995bd Binary files /dev/null and b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/5_Percent.png differ diff --git a/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/6_Circumflex.png b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/6_Circumflex.png new file mode 100644 index 000000000..93780889b Binary files /dev/null and b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/6_Circumflex.png differ diff --git a/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/7_Ampersand.png b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/7_Ampersand.png new file mode 100644 index 000000000..e7429ef18 Binary files /dev/null and b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/7_Ampersand.png differ diff --git a/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/8_Asterisk.png b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/8_Asterisk.png new file mode 100644 index 000000000..f00a186ab Binary files /dev/null and b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/8_Asterisk.png differ diff --git a/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/9_BracketRight.png b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/9_BracketRight.png new file mode 100644 index 000000000..98c1cdc7f Binary files /dev/null and b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/9_BracketRight.png differ diff --git a/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/A.png b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/A.png new file mode 100644 index 000000000..7c6a0ded7 Binary files /dev/null and b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/A.png differ diff --git a/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/A1.png b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/A1.png new file mode 100644 index 000000000..f241804db Binary files /dev/null and b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/A1.png differ diff --git a/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/A2.png b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/A2.png new file mode 100644 index 000000000..c5d1fa255 Binary files /dev/null and b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/A2.png differ diff --git a/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/A3.png b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/A3.png new file mode 100644 index 000000000..dce95f57a Binary files /dev/null and b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/A3.png differ diff --git a/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/AccentGrave_Tilde.png b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/AccentGrave_Tilde.png new file mode 100644 index 000000000..47b0c2916 Binary files /dev/null and b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/AccentGrave_Tilde.png differ diff --git a/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/Alt.png b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/Alt.png new file mode 100644 index 000000000..a637b9829 Binary files /dev/null and b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/Alt.png differ diff --git a/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/Apostrophe_QuotationMark.png b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/Apostrophe_QuotationMark.png new file mode 100644 index 000000000..823df9cb9 Binary files /dev/null and b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/Apostrophe_QuotationMark.png differ diff --git a/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/Asterisk.png b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/Asterisk.png new file mode 100644 index 000000000..0fbaa8117 Binary files /dev/null and b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/Asterisk.png differ diff --git a/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/B.png b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/B.png new file mode 100644 index 000000000..763f23259 Binary files /dev/null and b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/B.png differ diff --git a/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/Backspace.png b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/Backspace.png new file mode 100644 index 000000000..ea5a5d832 Binary files /dev/null and b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/Backspace.png differ diff --git a/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/Blackslash_Pipe.png b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/Blackslash_Pipe.png new file mode 100644 index 000000000..922703e51 Binary files /dev/null and b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/Blackslash_Pipe.png differ diff --git a/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/C.png b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/C.png new file mode 100644 index 000000000..046d52624 Binary files /dev/null and b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/C.png differ diff --git a/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/CapsLock.png b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/CapsLock.png new file mode 100644 index 000000000..17cf88e69 Binary files /dev/null and b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/CapsLock.png differ diff --git a/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/CaretDown.png b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/CaretDown.png new file mode 100644 index 000000000..0dcdea5d8 Binary files /dev/null and b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/CaretDown.png differ diff --git a/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/CaretLeft.png b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/CaretLeft.png new file mode 100644 index 000000000..7e1f29d33 Binary files /dev/null and b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/CaretLeft.png differ diff --git a/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/CaretRight.png b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/CaretRight.png new file mode 100644 index 000000000..7bc088596 Binary files /dev/null and b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/CaretRight.png differ diff --git a/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/CaretUp.png b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/CaretUp.png new file mode 100644 index 000000000..0d6494426 Binary files /dev/null and b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/CaretUp.png differ diff --git a/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/Ctrl.png b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/Ctrl.png new file mode 100644 index 000000000..20374eca1 Binary files /dev/null and b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/Ctrl.png differ diff --git a/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/D.png b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/D.png new file mode 100644 index 000000000..07a1b640e Binary files /dev/null and b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/D.png differ diff --git a/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/Delete.png b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/Delete.png new file mode 100644 index 000000000..8d7127741 Binary files /dev/null and b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/Delete.png differ diff --git a/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/E.png b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/E.png new file mode 100644 index 000000000..701ca825b Binary files /dev/null and b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/E.png differ diff --git a/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/End.png b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/End.png new file mode 100644 index 000000000..d7ef50df9 Binary files /dev/null and b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/End.png differ diff --git a/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/EnterSmall.png b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/EnterSmall.png new file mode 100644 index 000000000..2b5b1e4aa Binary files /dev/null and b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/EnterSmall.png differ diff --git a/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/Equals_Plus.png b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/Equals_Plus.png new file mode 100644 index 000000000..bd489f812 Binary files /dev/null and b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/Equals_Plus.png differ diff --git a/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/Escape.png b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/Escape.png new file mode 100644 index 000000000..39a1f62c8 Binary files /dev/null and b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/Escape.png differ diff --git a/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/F.png b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/F.png new file mode 100644 index 000000000..c62a60d7c Binary files /dev/null and b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/F.png differ diff --git a/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/F1.png b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/F1.png new file mode 100644 index 000000000..46cea944b Binary files /dev/null and b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/F1.png differ diff --git a/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/F10.png b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/F10.png new file mode 100644 index 000000000..bd42b46a8 Binary files /dev/null and b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/F10.png differ diff --git a/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/F11.png b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/F11.png new file mode 100644 index 000000000..2c4835e89 Binary files /dev/null and b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/F11.png differ diff --git a/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/F12.png b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/F12.png new file mode 100644 index 000000000..b3bb6cfda Binary files /dev/null and b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/F12.png differ diff --git a/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/F2.png b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/F2.png new file mode 100644 index 000000000..9439b8f7c Binary files /dev/null and b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/F2.png differ diff --git a/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/F3.png b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/F3.png new file mode 100644 index 000000000..31b21d6d0 Binary files /dev/null and b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/F3.png differ diff --git a/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/F4.png b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/F4.png new file mode 100644 index 000000000..4ad05bf73 Binary files /dev/null and b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/F4.png differ diff --git a/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/F5.png b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/F5.png new file mode 100644 index 000000000..8da2154a3 Binary files /dev/null and b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/F5.png differ diff --git a/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/F6.png b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/F6.png new file mode 100644 index 000000000..b4f2e74a5 Binary files /dev/null and b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/F6.png differ diff --git a/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/F7.png b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/F7.png new file mode 100644 index 000000000..591a58d9e Binary files /dev/null and b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/F7.png differ diff --git a/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/F8.png b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/F8.png new file mode 100644 index 000000000..0ff79fc90 Binary files /dev/null and b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/F8.png differ diff --git a/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/F9.png b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/F9.png new file mode 100644 index 000000000..e56dbdf21 Binary files /dev/null and b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/F9.png differ diff --git a/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/Function.png b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/Function.png new file mode 100644 index 000000000..ca1b9030b Binary files /dev/null and b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/Function.png differ diff --git a/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/G.png b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/G.png new file mode 100644 index 000000000..441c89ce0 Binary files /dev/null and b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/G.png differ diff --git a/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/GreaterThan_Dot.png b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/GreaterThan_Dot.png new file mode 100644 index 000000000..64f02dae1 Binary files /dev/null and b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/GreaterThan_Dot.png differ diff --git a/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/H.png b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/H.png new file mode 100644 index 000000000..a92c2fd9e Binary files /dev/null and b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/H.png differ diff --git a/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/Home.png b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/Home.png new file mode 100644 index 000000000..82dbd74da Binary files /dev/null and b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/Home.png differ diff --git a/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/Hyphen_Underscore.png b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/Hyphen_Underscore.png new file mode 100644 index 000000000..46269c44c Binary files /dev/null and b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/Hyphen_Underscore.png differ diff --git a/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/I.png b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/I.png new file mode 100644 index 000000000..057bb6e09 Binary files /dev/null and b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/I.png differ diff --git a/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/Insert.png b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/Insert.png new file mode 100644 index 000000000..d47e9d6ce Binary files /dev/null and b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/Insert.png differ diff --git a/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/J.png b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/J.png new file mode 100644 index 000000000..93a4aa2a8 Binary files /dev/null and b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/J.png differ diff --git a/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/K.png b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/K.png new file mode 100644 index 000000000..2a9e2a742 Binary files /dev/null and b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/K.png differ diff --git a/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/L.png b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/L.png new file mode 100644 index 000000000..cad193e20 Binary files /dev/null and b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/L.png differ diff --git a/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/LessThan_Comma.png b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/LessThan_Comma.png new file mode 100644 index 000000000..9dbf9ddc7 Binary files /dev/null and b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/LessThan_Comma.png differ diff --git a/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/M.png b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/M.png new file mode 100644 index 000000000..4ed744c77 Binary files /dev/null and b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/M.png differ diff --git a/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/Minus.png b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/Minus.png new file mode 100644 index 000000000..002502081 Binary files /dev/null and b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/Minus.png differ diff --git a/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/Mode.png b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/Mode.png new file mode 100644 index 000000000..68b2cc4a9 Binary files /dev/null and b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/Mode.png differ diff --git a/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/N.png b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/N.png new file mode 100644 index 000000000..bec9eeb5d Binary files /dev/null and b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/N.png differ diff --git a/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/Num.png b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/Num.png new file mode 100644 index 000000000..9ff1bf7c1 Binary files /dev/null and b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/Num.png differ diff --git a/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/Num0.png b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/Num0.png new file mode 100644 index 000000000..1c28cce97 Binary files /dev/null and b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/Num0.png differ diff --git a/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/Num1.png b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/Num1.png new file mode 100644 index 000000000..470efce05 Binary files /dev/null and b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/Num1.png differ diff --git a/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/Num2.png b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/Num2.png new file mode 100644 index 000000000..7255a6a84 Binary files /dev/null and b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/Num2.png differ diff --git a/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/Num3.png b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/Num3.png new file mode 100644 index 000000000..a01d0d447 Binary files /dev/null and b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/Num3.png differ diff --git a/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/Num4.png b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/Num4.png new file mode 100644 index 000000000..227b56bf7 Binary files /dev/null and b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/Num4.png differ diff --git a/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/Num5.png b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/Num5.png new file mode 100644 index 000000000..765efd0d5 Binary files /dev/null and b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/Num5.png differ diff --git a/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/Num6.png b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/Num6.png new file mode 100644 index 000000000..664e883aa Binary files /dev/null and b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/Num6.png differ diff --git a/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/Num7.png b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/Num7.png new file mode 100644 index 000000000..beef30a76 Binary files /dev/null and b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/Num7.png differ diff --git a/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/Num8.png b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/Num8.png new file mode 100644 index 000000000..1a4c5a34f Binary files /dev/null and b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/Num8.png differ diff --git a/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/Num9.png b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/Num9.png new file mode 100644 index 000000000..a1470df27 Binary files /dev/null and b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/Num9.png differ diff --git a/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/NumEnter.png b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/NumEnter.png new file mode 100644 index 000000000..42fdc311e Binary files /dev/null and b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/NumEnter.png differ diff --git a/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/NumPlus.png b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/NumPlus.png new file mode 100644 index 000000000..a04a8f6ce Binary files /dev/null and b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/NumPlus.png differ diff --git a/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/Num_Dot.png b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/Num_Dot.png new file mode 100644 index 000000000..bd75333a6 Binary files /dev/null and b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/Num_Dot.png differ diff --git a/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/O.png b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/O.png new file mode 100644 index 000000000..b93c09753 Binary files /dev/null and b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/O.png differ diff --git a/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/P.png b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/P.png new file mode 100644 index 000000000..4a57802b9 Binary files /dev/null and b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/P.png differ diff --git a/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/PageDown.png b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/PageDown.png new file mode 100644 index 000000000..2bc10c3a5 Binary files /dev/null and b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/PageDown.png differ diff --git a/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/PageUp.png b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/PageUp.png new file mode 100644 index 000000000..6f13ed1a0 Binary files /dev/null and b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/PageUp.png differ diff --git a/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/PauseBreak.png b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/PauseBreak.png new file mode 100644 index 000000000..452000e80 Binary files /dev/null and b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/PauseBreak.png differ diff --git a/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/PrintScreen.png b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/PrintScreen.png new file mode 100644 index 000000000..6aa95540b Binary files /dev/null and b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/PrintScreen.png differ diff --git a/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/Q.png b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/Q.png new file mode 100644 index 000000000..323293c77 Binary files /dev/null and b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/Q.png differ diff --git a/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/QuestionMark_Slash.png b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/QuestionMark_Slash.png new file mode 100644 index 000000000..05915b91e Binary files /dev/null and b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/QuestionMark_Slash.png differ diff --git a/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/R.png b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/R.png new file mode 100644 index 000000000..09137ddc2 Binary files /dev/null and b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/R.png differ diff --git a/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/S.png b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/S.png new file mode 100644 index 000000000..c4f998551 Binary files /dev/null and b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/S.png differ diff --git a/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/ScrollLock.png b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/ScrollLock.png new file mode 100644 index 000000000..8d010279b Binary files /dev/null and b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/ScrollLock.png differ diff --git a/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/Semicolon_Colon.png b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/Semicolon_Colon.png new file mode 100644 index 000000000..2af9c3226 Binary files /dev/null and b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/Semicolon_Colon.png differ diff --git a/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/Shift.png b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/Shift.png new file mode 100644 index 000000000..dcecad70b Binary files /dev/null and b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/Shift.png differ diff --git a/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/ShiftBig.png b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/ShiftBig.png new file mode 100644 index 000000000..3d9e331c7 Binary files /dev/null and b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/ShiftBig.png differ diff --git a/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/Slash.png b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/Slash.png new file mode 100644 index 000000000..a13443c2e Binary files /dev/null and b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/Slash.png differ diff --git a/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/Space.png b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/Space.png new file mode 100644 index 000000000..975cf6ec7 Binary files /dev/null and b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/Space.png differ diff --git a/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/SquareBracketLeft_CurlyBracketLeft.png b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/SquareBracketLeft_CurlyBracketLeft.png new file mode 100644 index 000000000..76e6e9dd3 Binary files /dev/null and b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/SquareBracketLeft_CurlyBracketLeft.png differ diff --git a/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/SquareBracketRight_CurlyBracketRight.png b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/SquareBracketRight_CurlyBracketRight.png new file mode 100644 index 000000000..2778d26a5 Binary files /dev/null and b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/SquareBracketRight_CurlyBracketRight.png differ diff --git a/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/T.png b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/T.png new file mode 100644 index 000000000..64937027d Binary files /dev/null and b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/T.png differ diff --git a/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/Tab.png b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/Tab.png new file mode 100644 index 000000000..c7909e1d6 Binary files /dev/null and b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/Tab.png differ diff --git a/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/U.png b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/U.png new file mode 100644 index 000000000..9e8f9c62b Binary files /dev/null and b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/U.png differ diff --git a/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/V.png b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/V.png new file mode 100644 index 000000000..fcc6d8058 Binary files /dev/null and b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/V.png differ diff --git a/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/W.png b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/W.png new file mode 100644 index 000000000..f0b2d6f37 Binary files /dev/null and b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/W.png differ diff --git a/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/Wooting.png b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/Wooting.png new file mode 100644 index 000000000..62f8af738 Binary files /dev/null and b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/Wooting.png differ diff --git a/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/X.png b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/X.png new file mode 100644 index 000000000..506848850 Binary files /dev/null and b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/X.png differ diff --git a/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/Y.png b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/Y.png new file mode 100644 index 000000000..ee3e94efe Binary files /dev/null and b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/Y.png differ diff --git a/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/Z.png b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/Z.png new file mode 100644 index 000000000..9f00252ef Binary files /dev/null and b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/Regular/Z.png differ diff --git a/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/WOOTINGONE.png b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/WOOTINGONE.png index c26c8c55b..4478018d2 100644 Binary files a/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/WOOTINGONE.png and b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/WOOTINGONE.png differ diff --git a/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/WOOTINGTWO.png b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/WOOTINGTWO.png index ea29a6171..f0faee199 100644 Binary files a/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/WOOTINGTWO.png and b/src/Artemis.Plugins.Devices.Wooting/Images/Wooting/Keyboards/WOOTINGTWO.png differ diff --git a/src/Artemis.Plugins.Devices.Wooting/Layouts/Wooting/Keyboards/WOOTINGTWO/US.xml b/src/Artemis.Plugins.Devices.Wooting/Layouts/Wooting/Keyboards/WOOTINGTWO/US.xml index f812756c4..ef5b410b1 100644 --- a/src/Artemis.Plugins.Devices.Wooting/Layouts/Wooting/Keyboards/WOOTINGTWO/US.xml +++ b/src/Artemis.Plugins.Devices.Wooting/Layouts/Wooting/Keyboards/WOOTINGTWO/US.xml @@ -36,8 +36,8 @@ +8 - + +8 1 @@ -220,19 +220,19 @@ - - + - - - - + + + + + - + @@ -244,11 +244,11 @@ - + - + @@ -264,11 +264,11 @@ - - - + + + - + @@ -280,10 +280,10 @@ - + - - + + @@ -294,25 +294,27 @@ - + - - - + + + - + - - - + + + - - + + + + diff --git a/src/Artemis.UI/Artemis.UI.csproj b/src/Artemis.UI/Artemis.UI.csproj index a5f7cb957..0850fc3d0 100644 --- a/src/Artemis.UI/Artemis.UI.csproj +++ b/src/Artemis.UI/Artemis.UI.csproj @@ -159,10 +159,19 @@ LayerPropertiesView.xaml + LayerPropertiesTimelineView.xaml + + TimelineKeyframeView.xaml + + + + TimelinePropertyRailView.xaml + + ProfileLayerView.xaml @@ -301,6 +310,14 @@ Designer MSBuild:Compile + + Designer + MSBuild:Compile + + + Designer + MSBuild:Compile + Designer MSBuild:Compile diff --git a/src/Artemis.UI/Screens/Module/ProfileEditor/LayerProperties/LayerPropertiesView.xaml b/src/Artemis.UI/Screens/Module/ProfileEditor/LayerProperties/LayerPropertiesView.xaml index bd434fc98..4ef1adc6d 100644 --- a/src/Artemis.UI/Screens/Module/ProfileEditor/LayerProperties/LayerPropertiesView.xaml +++ b/src/Artemis.UI/Screens/Module/ProfileEditor/LayerProperties/LayerPropertiesView.xaml @@ -4,9 +4,10 @@ xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:local="clr-namespace:Artemis.UI.Screens.Module.ProfileEditor.LayerProperties" + xmlns:s="https://github.com/canton7/Stylet" mc:Ignorable="d" d:DesignHeight="450" d:DesignWidth="800"> - + diff --git a/src/Artemis.UI/Screens/Module/ProfileEditor/LayerProperties/LayerPropertiesViewModel.cs b/src/Artemis.UI/Screens/Module/ProfileEditor/LayerProperties/LayerPropertiesViewModel.cs index 0b460a8af..7dc57f96f 100644 --- a/src/Artemis.UI/Screens/Module/ProfileEditor/LayerProperties/LayerPropertiesViewModel.cs +++ b/src/Artemis.UI/Screens/Module/ProfileEditor/LayerProperties/LayerPropertiesViewModel.cs @@ -1,12 +1,14 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; +using Artemis.UI.Screens.Module.ProfileEditor.LayerProperties.Timeline; namespace Artemis.UI.Screens.Module.ProfileEditor.LayerProperties { public class LayerPropertiesViewModel : ProfileEditorPanelViewModel { + public LayerPropertiesViewModel() + { + Timeline = new LayerPropertiesTimelineViewModel(); + } + + public LayerPropertiesTimelineViewModel Timeline { get; set; } } -} +} \ No newline at end of file diff --git a/src/Artemis.UI/Screens/Module/ProfileEditor/LayerProperties/Timeline/Controls/TimelineTime.cs b/src/Artemis.UI/Screens/Module/ProfileEditor/LayerProperties/Timeline/Controls/TimelineTime.cs new file mode 100644 index 000000000..37b6a5838 --- /dev/null +++ b/src/Artemis.UI/Screens/Module/ProfileEditor/LayerProperties/Timeline/Controls/TimelineTime.cs @@ -0,0 +1,148 @@ +using System; +using System.Globalization; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Media; + +namespace Artemis.UI.Screens.Module.ProfileEditor.LayerProperties.Timeline.Controls +{ + public class TimelineTime : FrameworkElement + { + public static readonly DependencyProperty FillProperty = DependencyProperty.Register(nameof(Fill), typeof(Brush), typeof(TimelineTime), + new FrameworkPropertyMetadata(default(Brush), FrameworkPropertyMetadataOptions.AffectsRender)); + + public static readonly DependencyProperty FontFamilyProperty = DependencyProperty.Register(nameof(FontFamily), typeof(FontFamily), typeof(TimelineTime), + new FrameworkPropertyMetadata(TextBlock.FontFamilyProperty.DefaultMetadata.DefaultValue, FrameworkPropertyMetadataOptions.AffectsRender)); + + public static readonly DependencyProperty PixelsPerSecondProperty = DependencyProperty.Register(nameof(PixelsPerSecond), typeof(int), typeof(TimelineTime), + new FrameworkPropertyMetadata(default(int), FrameworkPropertyMetadataOptions.AffectsRender)); + + + public static readonly DependencyProperty FrameStartProperty = DependencyProperty.Register(nameof(FrameStart), typeof(int), typeof(TimelineTime), + new FrameworkPropertyMetadata(default(int), FrameworkPropertyMetadataOptions.AffectsRender)); + + private double _subd1; + private double _subd2; + private double _subd3; + + public Brush Fill + { + get => (Brush) GetValue(FillProperty); + set => SetValue(FillProperty, value); + } + + public FontFamily FontFamily + { + get => (FontFamily) GetValue(FontFamilyProperty); + set => SetValue(FontFamilyProperty, value); + } + + public int PixelsPerSecond + { + get => (int) GetValue(PixelsPerSecondProperty); + set => SetValue(PixelsPerSecondProperty, value); + } + + public int FrameStart + { + get => (int) GetValue(FrameStartProperty); + set => SetValue(FrameStartProperty, value); + } + + // TODO: Does this get called when the size changes? + protected override void OnRender(DrawingContext drawingContext) + { + base.OnRender(drawingContext); + UpdateTimeScale(); + + var linePen = new Pen(Fill, 1); + var width = RenderSize.Width; + + var units = PixelsPerSecond / _subd1; + var offsetUnits = FrameStart * PixelsPerSecond % units; + + // Labels + var count = (width + offsetUnits) / units; + for (var i = 0; i < count; i++) + { + var x = i * units - offsetUnits; + var t = TimeSpan.FromSeconds((i * units - offsetUnits) / PixelsPerSecond + FrameStart); + if (PixelsPerSecond > 200) + RenderLabel(drawingContext, $"{Math.Floor(t.TotalSeconds):00}.{t.Milliseconds:000}", x); + else if (PixelsPerSecond > 60) + RenderLabel(drawingContext, $"{Math.Floor(t.TotalSeconds):00}.{t.Milliseconds:000}", x); + else + RenderLabel(drawingContext, $"{Math.Floor(t.TotalMinutes):0}:{t.Seconds:00}", x); + } + + // Large ticks + units = PixelsPerSecond / _subd2; + count = (width + offsetUnits) / units; + for (var i = 0; i < count; i++) + { + var x = i * units - offsetUnits; + drawingContext.DrawLine(linePen, new Point(x, 15), new Point(x, 30)); + } + + // Small ticks + var mul = _subd3 / _subd2; + units = PixelsPerSecond / _subd3; + count = (width + offsetUnits) / units; + for (var i = 0; i < count; i++) + { + if (Math.Abs(i % mul) < 0.001) continue; + var x = i * units - offsetUnits; + drawingContext.DrawLine(linePen, new Point(x, 22), new Point(x, 30)); + } + } + + private void RenderLabel(DrawingContext drawingContext, string text, double x) + { + var typeFace = new Typeface(FontFamily, new FontStyle(), new FontWeight(), new FontStretch()); + var formattedText = new FormattedText(text, CultureInfo.CurrentUICulture, FlowDirection.LeftToRight, typeFace, 9, Fill, null, VisualTreeHelper.GetDpi(this).PixelsPerDip); + drawingContext.DrawText(formattedText, new Point(x, 0)); + } + + private void UpdateTimeScale() + { + object[] subds; + if (PixelsPerSecond > 350) + subds = new object[] {12d, 12d, 60d}; + else if (PixelsPerSecond > 250) + subds = new object[] {6d, 12d, 60d}; + else if (PixelsPerSecond > 200) + subds = new object[] {6d, 6d, 30d}; + else if (PixelsPerSecond > 150) + subds = new object[] {4d, 4d, 20d}; + else if (PixelsPerSecond > 100) + subds = new object[] {4d, 4d, 8d}; + else if (PixelsPerSecond > 90) + subds = new object[] {4d, 4d, 8d}; + else if (PixelsPerSecond > 60) + subds = new object[] {2d, 4d, 8d}; + else if (PixelsPerSecond > 40) + subds = new object[] {1d, 2d, 10d}; + else if (PixelsPerSecond > 30) + subds = new object[] {1d, 2d, 10d}; + else if (PixelsPerSecond > 10) + subds = new object[] {1d / 2d, 1d / 2d, 1d / 2d}; + else if (PixelsPerSecond > 4) + subds = new object[] {1d / 5d, 1d / 5d, 1d / 5d}; + else if (PixelsPerSecond > 3) + subds = new object[] {1d / 10d, 1d / 10d, 1d / 5d}; + else if (PixelsPerSecond > 1) + subds = new object[] {1d / 20d, 1d / 20d, 1d / 10d}; + else if (PixelsPerSecond >= 1) + subds = new object[] {1d / 30d, 1d / 30d, 1d / 15d}; + else + { + // 1s per pixel + subds = new object[] {1d / 60d, 1d / 60d, 1d / 15d}; + } + + _subd1 = (double) subds[0]; // big ticks / labels + _subd2 = (double) subds[1]; // medium ticks + _subd3 = (double) subds[2]; // small ticks + } + } +} \ No newline at end of file diff --git a/src/Artemis.UI/Screens/Module/ProfileEditor/LayerProperties/Timeline/LayerPropertiesTimelineView.xaml b/src/Artemis.UI/Screens/Module/ProfileEditor/LayerProperties/Timeline/LayerPropertiesTimelineView.xaml index efece35e0..9a3d4cfe7 100644 --- a/src/Artemis.UI/Screens/Module/ProfileEditor/LayerProperties/Timeline/LayerPropertiesTimelineView.xaml +++ b/src/Artemis.UI/Screens/Module/ProfileEditor/LayerProperties/Timeline/LayerPropertiesTimelineView.xaml @@ -1,12 +1,83 @@  + xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" + xmlns:d="http://schemas.microsoft.com/expression/blend/2008" + xmlns:timeline="clr-namespace:Artemis.UI.Screens.Module.ProfileEditor.LayerProperties.Timeline" + xmlns:s="https://github.com/canton7/Stylet" + xmlns:controls="clr-namespace:Artemis.UI.Screens.Module.ProfileEditor.LayerProperties.Timeline.Controls" + mc:Ignorable="d" + d:DesignHeight="450" d:DesignWidth="800" + d:DataContext="{d:DesignInstance timeline:LayerPropertiesTimelineViewModel}"> + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + - + \ No newline at end of file diff --git a/src/Artemis.UI/Screens/Module/ProfileEditor/LayerProperties/Timeline/LayerPropertiesTimelineView.xaml.cs b/src/Artemis.UI/Screens/Module/ProfileEditor/LayerProperties/Timeline/LayerPropertiesTimelineView.xaml.cs index 04537617f..0b73bf13a 100644 --- a/src/Artemis.UI/Screens/Module/ProfileEditor/LayerProperties/Timeline/LayerPropertiesTimelineView.xaml.cs +++ b/src/Artemis.UI/Screens/Module/ProfileEditor/LayerProperties/Timeline/LayerPropertiesTimelineView.xaml.cs @@ -25,4 +25,4 @@ namespace Artemis.UI.Screens.Module.ProfileEditor.LayerProperties.Timeline InitializeComponent(); } } -} +} \ No newline at end of file diff --git a/src/Artemis.UI/Screens/Module/ProfileEditor/LayerProperties/Timeline/LayerPropertiesTimelineViewModel.cs b/src/Artemis.UI/Screens/Module/ProfileEditor/LayerProperties/Timeline/LayerPropertiesTimelineViewModel.cs index 4c5ca963f..b175c1fed 100644 --- a/src/Artemis.UI/Screens/Module/ProfileEditor/LayerProperties/Timeline/LayerPropertiesTimelineViewModel.cs +++ b/src/Artemis.UI/Screens/Module/ProfileEditor/LayerProperties/Timeline/LayerPropertiesTimelineViewModel.cs @@ -1,12 +1,45 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; +using System.Collections.Generic; +using Stylet; namespace Artemis.UI.Screens.Module.ProfileEditor.LayerProperties.Timeline { - class LayerPropertiesTimelineViewModel + public class LayerPropertiesTimelineViewModel : PropertyChangedBase { + private int _pixelsPerSecond = 1; + + public LayerPropertiesTimelineViewModel() + { + TimelinePropertyRailViewModels = new BindableCollection(); + + CreateTestValues(); + Update(); + } + + public int PixelsPerSecond + { + get => _pixelsPerSecond; + set + { + _pixelsPerSecond = value; + Update(); + } + } + + public BindableCollection TimelinePropertyRailViewModels { get; set; } + + private void CreateTestValues() + { + var propertyRailViewModels = new List(); + for (var i = 0; i < 20; i++) + propertyRailViewModels.Add(new TimelinePropertyRailViewModel()); + + TimelinePropertyRailViewModels.AddRange(propertyRailViewModels); + } + + public void Update() + { + foreach (var timelinePropertyRailViewModel in TimelinePropertyRailViewModels) + timelinePropertyRailViewModel.Update(PixelsPerSecond); + } } -} +} \ No newline at end of file diff --git a/src/Artemis.UI/Screens/Module/ProfileEditor/LayerProperties/Timeline/TimelineKeyframeView.xaml b/src/Artemis.UI/Screens/Module/ProfileEditor/LayerProperties/Timeline/TimelineKeyframeView.xaml new file mode 100644 index 000000000..5b3ce28a3 --- /dev/null +++ b/src/Artemis.UI/Screens/Module/ProfileEditor/LayerProperties/Timeline/TimelineKeyframeView.xaml @@ -0,0 +1,11 @@ + + + diff --git a/src/Artemis.UI/Screens/Module/ProfileEditor/LayerProperties/Timeline/TimelineKeyframeView.xaml.cs b/src/Artemis.UI/Screens/Module/ProfileEditor/LayerProperties/Timeline/TimelineKeyframeView.xaml.cs new file mode 100644 index 000000000..8bc9392df --- /dev/null +++ b/src/Artemis.UI/Screens/Module/ProfileEditor/LayerProperties/Timeline/TimelineKeyframeView.xaml.cs @@ -0,0 +1,28 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Data; +using System.Windows.Documents; +using System.Windows.Input; +using System.Windows.Media; +using System.Windows.Media.Imaging; +using System.Windows.Navigation; +using System.Windows.Shapes; + +namespace Artemis.UI.Screens.Module.ProfileEditor.LayerProperties.Timeline +{ + /// + /// Interaction logic for TimelineKeyframeView.xaml + /// + public partial class TimelineKeyframeView : UserControl + { + public TimelineKeyframeView() + { + InitializeComponent(); + } + } +} diff --git a/src/Artemis.UI/Screens/Module/ProfileEditor/LayerProperties/Timeline/TimelineKeyframeViewModel.cs b/src/Artemis.UI/Screens/Module/ProfileEditor/LayerProperties/Timeline/TimelineKeyframeViewModel.cs new file mode 100644 index 000000000..f61eb91fc --- /dev/null +++ b/src/Artemis.UI/Screens/Module/ProfileEditor/LayerProperties/Timeline/TimelineKeyframeViewModel.cs @@ -0,0 +1,23 @@ +using System; +using Stylet; + +namespace Artemis.UI.Screens.Module.ProfileEditor.LayerProperties.Timeline +{ + public class TimelineKeyframeViewModel : PropertyChangedBase + { + private const double BaseSize = 60.0; + + public TimeSpan Position { get; set; } + + public double X { get; set; } + public string Timestamp { get; set; } + + public void Update(int pixelsPerSecond) + { +// var timelinePartWidth = pixelsPerSecond % BaseSize + BaseSize; +// var millisecondsPerPart = extraParts > 0 ? BaseSize * 1000 / extraParts : BaseSize * 1000; + X = pixelsPerSecond * Position.TotalSeconds; + Timestamp = $"{Math.Floor(Position.TotalSeconds):00}.{Position.Milliseconds:000}"; + } + } +} \ No newline at end of file diff --git a/src/Artemis.UI/Screens/Module/ProfileEditor/LayerProperties/Timeline/TimelinePropertyRailView.xaml b/src/Artemis.UI/Screens/Module/ProfileEditor/LayerProperties/Timeline/TimelinePropertyRailView.xaml new file mode 100644 index 000000000..56024a389 --- /dev/null +++ b/src/Artemis.UI/Screens/Module/ProfileEditor/LayerProperties/Timeline/TimelinePropertyRailView.xaml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + diff --git a/src/Artemis.UI/Screens/Module/ProfileEditor/LayerProperties/Timeline/TimelinePropertyRailView.xaml.cs b/src/Artemis.UI/Screens/Module/ProfileEditor/LayerProperties/Timeline/TimelinePropertyRailView.xaml.cs new file mode 100644 index 000000000..7a9c25366 --- /dev/null +++ b/src/Artemis.UI/Screens/Module/ProfileEditor/LayerProperties/Timeline/TimelinePropertyRailView.xaml.cs @@ -0,0 +1,28 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Data; +using System.Windows.Documents; +using System.Windows.Input; +using System.Windows.Media; +using System.Windows.Media.Imaging; +using System.Windows.Navigation; +using System.Windows.Shapes; + +namespace Artemis.UI.Screens.Module.ProfileEditor.LayerProperties.Timeline +{ + /// + /// Interaction logic for TimelinePropertyRailView.xaml + /// + public partial class TimelinePropertyRailView : UserControl + { + public TimelinePropertyRailView() + { + InitializeComponent(); + } + } +} diff --git a/src/Artemis.UI/Screens/Module/ProfileEditor/LayerProperties/Timeline/TimelinePropertyRailViewModel.cs b/src/Artemis.UI/Screens/Module/ProfileEditor/LayerProperties/Timeline/TimelinePropertyRailViewModel.cs new file mode 100644 index 000000000..9d9615180 --- /dev/null +++ b/src/Artemis.UI/Screens/Module/ProfileEditor/LayerProperties/Timeline/TimelinePropertyRailViewModel.cs @@ -0,0 +1,38 @@ +using System; +using System.Collections.Generic; +using Stylet; + +namespace Artemis.UI.Screens.Module.ProfileEditor.LayerProperties.Timeline +{ + public class TimelinePropertyRailViewModel : PropertyChangedBase + { + public TimelinePropertyRailViewModel() + { + TimelineKeyframeViewModels = new BindableCollection(); + CreateTestValues(); + } + + public BindableCollection TimelineKeyframeViewModels { get; set; } + + public void CreateTestValues() + { + var keyframeViewModels = new List(); + for (var i = 0; i < 20; i++) + { + keyframeViewModels.Add(new TimelineKeyframeViewModel()); + keyframeViewModels[i].Position = TimeSpan.FromSeconds(i); + } + + TimelineKeyframeViewModels.AddRange(keyframeViewModels); + } + + public void Update(int pixelsPerSecond) + { + foreach (var timelineKeyframeViewModel in TimelineKeyframeViewModels) + timelineKeyframeViewModel.Update(pixelsPerSecond); + + if (pixelsPerSecond == 10) + Console.WriteLine(); + } + } +} \ No newline at end of file diff --git a/src/Artemis.UI/Screens/Module/ProfileEditor/ProfileEditorView.xaml b/src/Artemis.UI/Screens/Module/ProfileEditor/ProfileEditorView.xaml index fe14e5d48..395192808 100644 --- a/src/Artemis.UI/Screens/Module/ProfileEditor/ProfileEditorView.xaml +++ b/src/Artemis.UI/Screens/Module/ProfileEditor/ProfileEditorView.xaml @@ -61,25 +61,8 @@ - - - - - - - - - - - - - - - - - diff --git a/src/Artemis.UI/Screens/Module/ProfileEditor/Visualization/ProfileViewModel.cs b/src/Artemis.UI/Screens/Module/ProfileEditor/Visualization/ProfileViewModel.cs index a56da3ccc..f9dfc4b2f 100644 --- a/src/Artemis.UI/Screens/Module/ProfileEditor/Visualization/ProfileViewModel.cs +++ b/src/Artemis.UI/Screens/Module/ProfileEditor/Visualization/ProfileViewModel.cs @@ -156,6 +156,13 @@ namespace Artemis.UI.Screens.Module.ProfileEditor.Visualization profileLayerViewModel.Dispose(); CanvasViewModels.Remove(profileLayerViewModel); } + + // Sort the devices by ZIndex + Execute.PostToUIThread(() => + { + foreach (var device in Devices.ToList()) + CanvasViewModels.Move(CanvasViewModels.IndexOf(device), device.Device.ZIndex - 1); + }); } }); } @@ -169,7 +176,11 @@ namespace Artemis.UI.Screens.Module.ProfileEditor.Visualization foreach (var surfaceDeviceConfiguration in devices) { // Create VMs for missing devices - var viewModel = Devices.FirstOrDefault(vm => vm.Device.RgbDevice == surfaceDeviceConfiguration.RgbDevice); + ProfileDeviceViewModel viewModel; + lock (CanvasViewModels) + { + viewModel = Devices.FirstOrDefault(vm => vm.Device.RgbDevice == surfaceDeviceConfiguration.RgbDevice); + } if (viewModel == null) { // Create outside the UI thread to avoid slowdowns as much as possible