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