From f0fac0c7fb6f7dd9fe81747b3369767c8c9e7d01 Mon Sep 17 00:00:00 2001 From: Morph <39850852+Morph1984@users.noreply.github.com> Date: Wed, 22 Jul 2020 10:39:53 -0400 Subject: [PATCH 01/10] =?UTF-8?q?Project=20Mj=C3=B6lnir:=20Part=201?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: James Rowe Co-authored-by: Its-Rei --- dist/icons/controller/controller.qrc | 25 + dist/icons/controller/dual_joycon.png | Bin 0 -> 36466 bytes dist/icons/controller/dual_joycon_dark.png | Bin 0 -> 36261 bytes .../icons/controller/dual_joycon_midnight.png | Bin 0 -> 34667 bytes dist/icons/controller/handheld.png | Bin 0 -> 14108 bytes dist/icons/controller/handheld_dark.png | Bin 0 -> 13731 bytes dist/icons/controller/handheld_midnight.png | Bin 0 -> 13366 bytes dist/icons/controller/pro_controller.png | Bin 0 -> 36710 bytes dist/icons/controller/pro_controller_dark.png | Bin 0 -> 34897 bytes .../controller/pro_controller_midnight.png | Bin 0 -> 35893 bytes dist/icons/controller/single_joycon_left.png | Bin 0 -> 25565 bytes .../controller/single_joycon_left_dark.png | Bin 0 -> 25682 bytes .../single_joycon_left_midnight.png | Bin 0 -> 24405 bytes .../single_joycon_left_vertical.png | Bin 0 -> 24764 bytes .../single_joycon_left_vertical_dark.png | Bin 0 -> 24938 bytes .../single_joycon_left_vertical_midnight.png | Bin 0 -> 23681 bytes dist/icons/controller/single_joycon_right.png | Bin 0 -> 28320 bytes .../controller/single_joycon_right_dark.png | Bin 0 -> 28157 bytes .../single_joycon_right_midnight.png | Bin 0 -> 27006 bytes .../single_joycon_right_vertical.png | Bin 0 -> 27655 bytes .../single_joycon_right_vertical_dark.png | Bin 0 -> 27729 bytes .../single_joycon_right_vertical_midnight.png | Bin 0 -> 26354 bytes dist/license.md | 3 + .../colorful_dark/icons/16x16/refresh.png | Bin 0 -> 362 bytes .../icons/16x16/view-refresh.png | Bin 0 -> 362 bytes dist/qt_themes/colorful_dark/style.qrc | 1 + .../icons/16x16/refresh.png | Bin 0 -> 362 bytes .../icons/16x16/view-refresh.png | Bin 0 -> 362 bytes .../colorful_midnight_blue/style.qrc | 1 + dist/qt_themes/default/default.qrc | 1 + .../qt_themes/default/icons/16x16/refresh.png | Bin 0 -> 349 bytes .../default/icons/16x16/view-refresh.png | Bin 0 -> 349 bytes dist/qt_themes/default/style.qss | 62 +- .../qdarkstyle/icons/16x16/refresh.png | Bin 0 -> 362 bytes .../qdarkstyle/icons/16x16/view-refresh.png | Bin 0 -> 362 bytes dist/qt_themes/qdarkstyle/style.qrc | 1 + dist/qt_themes/qdarkstyle/style.qss | 105 +- .../icons/16x16/refresh.png | Bin 0 -> 362 bytes .../icons/16x16/view-refresh.png | Bin 0 -> 362 bytes .../qdarkstyle_midnight_blue/style.qrc | 1 + .../qdarkstyle_midnight_blue/style.qss | 140 +- src/common/param_package.h | 2 +- src/core/hle/service/hid/controllers/npad.cpp | 221 +- src/core/hle/service/hid/controllers/npad.h | 11 +- src/core/hle/service/hid/hid.cpp | 14 +- src/core/settings.cpp | 50 - src/core/settings.h | 339 +- src/input_common/CMakeLists.txt | 2 + src/input_common/gcadapter/gc_poller.cpp | 2 +- src/input_common/main.cpp | 50 +- src/input_common/main.h | 26 +- src/input_common/sdl/sdl.h | 19 +- src/input_common/sdl/sdl_impl.cpp | 403 +- src/input_common/sdl/sdl_impl.h | 8 + src/input_common/settings.cpp | 33 + src/input_common/settings.h | 335 ++ src/input_common/udp/udp.cpp | 15 +- src/input_common/udp/udp.h | 7 + src/yuzu/CMakeLists.txt | 9 +- src/yuzu/configuration/config.cpp | 58 +- src/yuzu/configuration/config.h | 5 +- src/yuzu/configuration/configure.ui | 59 +- .../configure_debug_controller.cpp | 39 + .../configure_debug_controller.h | 33 + .../configure_debug_controller.ui | 97 + src/yuzu/configuration/configure_dialog.cpp | 8 +- src/yuzu/configuration/configure_input.cpp | 275 +- src/yuzu/configuration/configure_input.h | 22 +- src/yuzu/configuration/configure_input.ui | 1039 +++-- .../configure_input_advanced.cpp | 169 + .../configuration/configure_input_advanced.h | 44 + .../configuration/configure_input_advanced.ui | 2688 +++++++++++ .../configuration/configure_input_player.cpp | 739 +-- .../configuration/configure_input_player.h | 106 +- .../configuration/configure_input_player.ui | 4127 ++++++++++++----- .../configuration/configure_input_simple.cpp | 152 - .../configuration/configure_input_simple.h | 43 - .../configuration/configure_input_simple.ui | 97 - .../configure_mouse_advanced.cpp | 8 +- .../configuration/configure_mouse_advanced.ui | 252 +- src/yuzu/uisettings.cpp | 1 + src/yuzu/uisettings.h | 5 +- src/yuzu_cmd/config.cpp | 2 + src/yuzu_tester/config.cpp | 1 + 84 files changed, 8695 insertions(+), 3260 deletions(-) create mode 100644 dist/icons/controller/controller.qrc create mode 100644 dist/icons/controller/dual_joycon.png create mode 100644 dist/icons/controller/dual_joycon_dark.png create mode 100644 dist/icons/controller/dual_joycon_midnight.png create mode 100644 dist/icons/controller/handheld.png create mode 100644 dist/icons/controller/handheld_dark.png create mode 100644 dist/icons/controller/handheld_midnight.png create mode 100644 dist/icons/controller/pro_controller.png create mode 100644 dist/icons/controller/pro_controller_dark.png create mode 100644 dist/icons/controller/pro_controller_midnight.png create mode 100644 dist/icons/controller/single_joycon_left.png create mode 100644 dist/icons/controller/single_joycon_left_dark.png create mode 100644 dist/icons/controller/single_joycon_left_midnight.png create mode 100644 dist/icons/controller/single_joycon_left_vertical.png create mode 100644 dist/icons/controller/single_joycon_left_vertical_dark.png create mode 100644 dist/icons/controller/single_joycon_left_vertical_midnight.png create mode 100644 dist/icons/controller/single_joycon_right.png create mode 100644 dist/icons/controller/single_joycon_right_dark.png create mode 100644 dist/icons/controller/single_joycon_right_midnight.png create mode 100644 dist/icons/controller/single_joycon_right_vertical.png create mode 100644 dist/icons/controller/single_joycon_right_vertical_dark.png create mode 100644 dist/icons/controller/single_joycon_right_vertical_midnight.png create mode 100644 dist/qt_themes/colorful_dark/icons/16x16/refresh.png create mode 100644 dist/qt_themes/colorful_dark/icons/16x16/view-refresh.png create mode 100644 dist/qt_themes/colorful_midnight_blue/icons/16x16/refresh.png create mode 100644 dist/qt_themes/colorful_midnight_blue/icons/16x16/view-refresh.png create mode 100644 dist/qt_themes/default/icons/16x16/refresh.png create mode 100644 dist/qt_themes/default/icons/16x16/view-refresh.png create mode 100644 dist/qt_themes/qdarkstyle/icons/16x16/refresh.png create mode 100644 dist/qt_themes/qdarkstyle/icons/16x16/view-refresh.png create mode 100644 dist/qt_themes/qdarkstyle_midnight_blue/icons/16x16/refresh.png create mode 100644 dist/qt_themes/qdarkstyle_midnight_blue/icons/16x16/view-refresh.png create mode 100644 src/input_common/settings.cpp create mode 100644 src/input_common/settings.h create mode 100644 src/yuzu/configuration/configure_debug_controller.cpp create mode 100644 src/yuzu/configuration/configure_debug_controller.h create mode 100644 src/yuzu/configuration/configure_debug_controller.ui create mode 100644 src/yuzu/configuration/configure_input_advanced.cpp create mode 100644 src/yuzu/configuration/configure_input_advanced.h create mode 100644 src/yuzu/configuration/configure_input_advanced.ui delete mode 100644 src/yuzu/configuration/configure_input_simple.cpp delete mode 100644 src/yuzu/configuration/configure_input_simple.h delete mode 100644 src/yuzu/configuration/configure_input_simple.ui diff --git a/dist/icons/controller/controller.qrc b/dist/icons/controller/controller.qrc new file mode 100644 index 000000000..f44725d8f --- /dev/null +++ b/dist/icons/controller/controller.qrc @@ -0,0 +1,25 @@ + + + dual_joycon.png + dual_joycon_dark.png + dual_joycon_midnight.png + handheld.png + handheld_dark.png + handheld_midnight.png + pro_controller.png + pro_controller_dark.png + pro_controller_midnight.png + single_joycon_left.png + single_joycon_left_dark.png + single_joycon_left_midnight.png + single_joycon_right.png + single_joycon_right_dark.png + single_joycon_right_midnight.png + single_joycon_left_vertical.png + single_joycon_left_vertical_dark.png + single_joycon_left_vertical_midnight.png + single_joycon_right_vertical.png + single_joycon_right_vertical_dark.png + single_joycon_right_vertical_midnight.png + + diff --git a/dist/icons/controller/dual_joycon.png b/dist/icons/controller/dual_joycon.png new file mode 100644 index 0000000000000000000000000000000000000000..4230f5f7b9835e941084fac316f62000ac105c4d GIT binary patch literal 36466 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 literal 0 HcmV?d00001 diff --git a/dist/icons/controller/dual_joycon_dark.png b/dist/icons/controller/dual_joycon_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..4445db489551a5e498cd71d2004a4ac57c31083f GIT binary patch literal 36261 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 z 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 literal 0 HcmV?d00001 diff --git a/dist/icons/controller/single_joycon_left_vertical.png b/dist/icons/controller/single_joycon_left_vertical.png new file mode 100644 index 0000000000000000000000000000000000000000..1e6282ad8d167bbfb5dba865992cf4558981f2d0 GIT binary patch literal 24764 zcmYIw1yqz>wDu6v(%mKS(Vatsw4{`@fP{2QcXxxdgrt zBPcNhLJ5(R64!A5da&f?u3=bF zOnF}}746sD<(IYW4^~n~DByf^!-_MIlnaIIwvCvYk9x~uC&1Dxud6WT#;p>6t#|J zy{<2^*pC@+IU?p6K zZ%08f-`A(Lxx4vBwQMR*zA$cR6Z~pK_@8ObNUK}juqmhUzFTHgeLWA`IrKSr$ySj+ zfUld~0|v&Qdw9$wv_6>Ovw%2|wNpft=%_^dxGQxx~HQ=nM%7 z9te<>z!Mkm9JAnNMP{U@N0mV*TQ;dqBX^X8NXZ1pX0e~%i^C;S3wf?x2Ecmx8Xe0e z4kT@bbsPjcxIp07%mW~Q5(iC{BLd0z-;t^kRNqz;zM*GmGdl=`8<3$IEaMJj(Li#aF9ap?rPD$uvB3m z+7S~s9dGxcqs1~((x|5nr=?>*d~z+Dry}`dBt1Nc7zc-p*}3!bevwa2y^oWnJvlk? zdt2Zis)>pbjlgZwK57-v5xBw6q%@J`<5Z(t(f{X9Qh5GNY)DAR%ppFm1KTUVTR6lw zk5hv+%Wn%{O!|bXI~+)(-UbHemq3FT~$>z zEG8x-H8nM{J!-_#%Bm}lO7ahWq%=nEz|`plr&_Z7CI0AnRnfO^VHnU8KRQ}k_%Chb zxKs5FA7VDf#>V^t0$>kT+S^YTo1E0XYcx+8v9}_wCU|!rlO~9T{p!y&PBVnl#wRED zPwJF>599C8tNhOcJ($mKeJgsOfq_9xLj$)rmLha=QsdjVZ(`q_?+p+#Log_owN+I) zNQI4xlrgYN$1Q#-zk7%N<@xb?N?cqV-9z^Mdpus7d0MZt0eXB@+~<$n#D<6}`*ET5 zfwY+UY^O$qTV{~q;Z0N!Vr(w9hs`*9L`qrvW1#uEyuJeX7QPc(O(ak`%TrLmy_yg!k)ZdUS3}* zssrQUO|+uk7Bn?}o~xPN&hcH|#Yr5=7LM$RBsd=)9+oNB+<%7QN61|!8l^)H+Bu|? zGpiYWgoACRi^}U?erocqsK~Wxw3(g~`L~Y-;}k_= zLV|%#i)+RFdr_{!!a{ejM5^!K5A*Wy1Q@4bXK(Y_lQv*=cr5CEwQy^@<_p@{4>0At z?W;>l=d?X=kKIX|y?@8f&9l}O?9}*$hXOUn9X67HEu_7@9aX|bBth(;S0PUYmqO54 z7H@WtKcki~`t6?_Q3~BGdI`z+>c?-p1--J?*4FVksV%fz`-6$3L&Wac&jA~aJU_Za5y4IR z1xGYp@#ov`8imTf_C@nEGsl&I(9yN7+w(@pTWWI80}kl*qEnlrR{@PI>TeNeLH&{T zr^~8FESk5Cf=T$n!NF;QE{t!#6&ZJQd~1n$uc<*vPaiovJg_CDTK>=DNg-zA368Rz zX_Ojl6N@pEI zH8nN=Dk{hvli!zV8uvut5%QRm=I7_zWUK4w_?Q1-N@-mr6^AbsD7#b;$Ncq{J^@*d zQc77yq44i>qI{u3(P&yBO6#YiwsDJ&U3GfZ59)!UkGuL&6r#)0#?1s^gG?+;P5=2* z_}r{L{pZa}hXlJdk`=kw3jLGKMR5JI_n0<4Gm?J4-NhNB>{a%ysQc_WM z1{-6yrKuIF)jwArP)mlOiHnJKRNQ^iV*R+9`^~i~j{(KsUmOVyEkE?N^3*9bbbfx` z$ECjh(aNf{SW`=jL?I&b8)Ugox5D=g*tYN@u%xdO>6BHa`+hG^MO2nB^mQIz(|G@r zWj6fP+LuC1h2)tg;6%r2&>BV~6GNHjOD!m*DLH}m@NjW*J^=@LEoN!nh z6kcHNYPVw2-Q8$CNY1KB?};32bu3k~ykWe2;q%w$lY&7Z#37IDJ`6;R+{&K_p4SJR zN&l(q5xx;`jGdj;)@yNnJu3Q4%2}lsFq@unW`l(MI(W(|nnqt+Dz=0DPYYx6-t%x) zyV&<}_qtZw>a=R#V{)mtZ�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

-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 literal 0 HcmV?d00001 diff --git a/dist/icons/controller/single_joycon_left_vertical_midnight.png b/dist/icons/controller/single_joycon_left_vertical_midnight.png new file mode 100644 index 0000000000000000000000000000000000000000..4cc578216da9e2790961e267cdb1ccbeaf7841cf GIT binary patch literal 23681 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

  • *RJsr*qn;5%=vM)5OIA34Uo+Fbd;|n1hvu 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 TnH(#iTsY{NqJ}~V!Yt%Jma!dM literal 0 HcmV?d00001 diff --git a/dist/icons/controller/single_joycon_right.png b/dist/icons/controller/single_joycon_right.png new file mode 100644 index 0000000000000000000000000000000000000000..8d29173f663d7f8217cda6f6b25b6ab9ff05d9df GIT binary patch literal 28320 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 TTn{gILqSnf)>f)kunhYjd+b09 literal 0 HcmV?d00001 diff --git a/dist/icons/controller/single_joycon_right_midnight.png b/dist/icons/controller/single_joycon_right_midnight.png new file mode 100644 index 0000000000000000000000000000000000000000..89afe022d9652aa256e045d18a6a5aaa48e3ff54 GIT binary patch literal 27006 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
      P@0_exQBEhkNRG4vEbF(e=wge3`J!mrnDK5~jx# zUU8hS;5{7IoY@i1eaCa!ii`_xR|*?vr#zBue!3=;y?e(G)x3h?UwC-!Cn58K{>@QcV*C}8#I7dD9^Y}8_gWU)lKmGvA3u?Q86s88 o#x1&7v25w|org}xo1bUDudAldyso>n5$H<>Pgg&ebxsLQ00=gQyZ`_I literal 0 HcmV?d00001 diff --git a/dist/qt_themes/default/icons/16x16/view-refresh.png b/dist/qt_themes/default/icons/16x16/view-refresh.png new file mode 100644 index 0000000000000000000000000000000000000000..69f9474acabad4c5bbb4b8dd3f73b34b5d49d3f1 GIT binary patch literal 349 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#Vf2?p z3xP1>)&}zuprB-lYeY$Kep*R+Vo@qXd3m{BW?pu2a$-TMUVc&f>~}U&Kt;DaT^vI! zdXHXO?dResz;fZRvg2D(hZAudG7gC+giq$}KOcG4zro@DnrG}2G&q=8CN#Jv2-qAk zIjJ+#`oXqIX2G$hS8WgP*%
        P@0_exQBEhkNRG4vEbF(e=wge3`J!mrnDK5~jx# zUU8hS;5{7IoY@i1eaCa!ii`_xR|*?vr#zBue!3=;y?e(G)x3h?UwC-!Cn58K{>@QcV*C}8#I7dD9^Y}8_gWU)lKmGvA3u?Q86s88 o#x1&7v25w|org}xo1bUDudAldyso>n5$H<>Pgg&ebxsLQ00=gQyZ`_I literal 0 HcmV?d00001 diff --git a/dist/qt_themes/default/style.qss b/dist/qt_themes/default/style.qss index 6b5953e38..5da56520b 100644 --- a/dist/qt_themes/default/style.qss +++ b/dist/qt_themes/default/style.qss @@ -30,6 +30,66 @@ QPushButton#RendererStatusBarButton:checked { color: #e85c00; } -QPushButton#RendererStatusBarButton:!checked{ +QPushButton#RendererStatusBarButton:!checked { color: #0066ff; } + +QPushButton#buttonRefreshDevices { + min-width: 20px; + min-height: 20px; + max-width: 20px; + max-height: 20px; +} + +QCheckBox#checkboxPlayer1Connected, +QCheckBox#checkboxPlayer2Connected, +QCheckBox#checkboxPlayer3Connected, +QCheckBox#checkboxPlayer4Connected, +QCheckBox#checkboxPlayer5Connected, +QCheckBox#checkboxPlayer6Connected, +QCheckBox#checkboxPlayer7Connected, +QCheckBox#checkboxPlayer8Connected { + spacing: 0px; +} + +QCheckBox#checkboxPlayer1Connected::indicator, +QCheckBox#checkboxPlayer2Connected::indicator, +QCheckBox#checkboxPlayer3Connected::indicator, +QCheckBox#checkboxPlayer4Connected::indicator, +QCheckBox#checkboxPlayer5Connected::indicator, +QCheckBox#checkboxPlayer6Connected::indicator, +QCheckBox#checkboxPlayer7Connected::indicator, +QCheckBox#checkboxPlayer8Connected::indicator { + width: 14px; + height: 14px; +} + +QCheckBox#checkboxPlayer1Connected::indicator:checked, +QCheckBox#checkboxPlayer2Connected::indicator:checked, +QCheckBox#checkboxPlayer3Connected::indicator:checked, +QCheckBox#checkboxPlayer4Connected::indicator:checked, +QCheckBox#checkboxPlayer5Connected::indicator:checked, +QCheckBox#checkboxPlayer6Connected::indicator:checked, +QCheckBox#checkboxPlayer7Connected::indicator:checked, +QCheckBox#checkboxPlayer8Connected::indicator:checked, +QGroupBox#groupConnectedController::indicator:checked { + border-radius: 2px; + border: 1px solid black; + background: #39ff14; + image: none; +} + +QCheckBox#checkboxPlayer1Connected::indicator:unchecked, +QCheckBox#checkboxPlayer2Connected::indicator:unchecked, +QCheckBox#checkboxPlayer3Connected::indicator:unchecked, +QCheckBox#checkboxPlayer4Connected::indicator:unchecked, +QCheckBox#checkboxPlayer5Connected::indicator:unchecked, +QCheckBox#checkboxPlayer6Connected::indicator:unchecked, +QCheckBox#checkboxPlayer7Connected::indicator:unchecked, +QCheckBox#checkboxPlayer8Connected::indicator:unchecked, +QGroupBox#groupConnectedController::indicator:unchecked { + border-radius: 2px; + border: 1px solid black; + background: transparent; + image: none; +} diff --git a/dist/qt_themes/qdarkstyle/icons/16x16/refresh.png b/dist/qt_themes/qdarkstyle/icons/16x16/refresh.png new file mode 100644 index 0000000000000000000000000000000000000000..d4afd76f949ff5c65e039b69ff999325bff5d7b8 GIT binary patch literal 362 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#Vf2?p zD}XSgpwrRCKtah8*NBqf{Irtt#G+J&^73-M%)IR4TP^t%4d#k2I8Aju2?p zD}XSgpwrRCKtah8*NBqf{Irtt#G+J&^73-M%)IR4TP^t%4d#k2I8Aju icons/index.theme icons/16x16/lock.png + icons/16x16/view-refresh.png icons/48x48/bad_folder.png icons/48x48/chip.png icons/48x48/folder.png diff --git a/dist/qt_themes/qdarkstyle/style.qss b/dist/qt_themes/qdarkstyle/style.qss index 2926a05fa..7755426f8 100644 --- a/dist/qt_themes/qdarkstyle/style.qss +++ b/dist/qt_themes/qdarkstyle/style.qss @@ -40,8 +40,8 @@ QCheckBox:disabled { QCheckBox::indicator, QGroupBox::indicator { - width: 18px; - height: 18px; + width: 16px; + height: 16px; } QGroupBox::indicator { @@ -1237,6 +1237,7 @@ QPlainTextEdit:disabled { background-color: #2b2e31; } + QPushButton#TogglableStatusBarButton { min-width: 0px; color: #656565; @@ -1271,6 +1272,102 @@ QPushButton#RendererStatusBarButton:checked { color: #e85c00; } -QPushButton#RendererStatusBarButton:!checked{ - color: #00ccdd; +QPushButton#RendererStatusBarButton:!checked { + color: #00ccdd; +} + +QPushButton#buttonRefreshDevices { + min-width: 24px; + min-height: 24px; + max-width: 24px; + max-height: 24px; + padding: 0px 0px; +} + +QCheckBox#checkboxPlayer1Connected, +QCheckBox#checkboxPlayer2Connected, +QCheckBox#checkboxPlayer3Connected, +QCheckBox#checkboxPlayer4Connected, +QCheckBox#checkboxPlayer5Connected, +QCheckBox#checkboxPlayer6Connected, +QCheckBox#checkboxPlayer7Connected, +QCheckBox#checkboxPlayer8Connected { + spacing: 0px; +} + +QCheckBox#checkboxPlayer1Connected::indicator, +QCheckBox#checkboxPlayer2Connected::indicator, +QCheckBox#checkboxPlayer3Connected::indicator, +QCheckBox#checkboxPlayer4Connected::indicator, +QCheckBox#checkboxPlayer5Connected::indicator, +QCheckBox#checkboxPlayer6Connected::indicator, +QCheckBox#checkboxPlayer7Connected::indicator, +QCheckBox#checkboxPlayer8Connected::indicator { + width: 14px; + height: 14px; +} + +QCheckBox#checkboxPlayer1Connected::indicator:checked, +QCheckBox#checkboxPlayer2Connected::indicator:checked, +QCheckBox#checkboxPlayer3Connected::indicator:checked, +QCheckBox#checkboxPlayer4Connected::indicator:checked, +QCheckBox#checkboxPlayer5Connected::indicator:checked, +QCheckBox#checkboxPlayer6Connected::indicator:checked, +QCheckBox#checkboxPlayer7Connected::indicator:checked, +QCheckBox#checkboxPlayer8Connected::indicator:checked, +QGroupBox#groupConnectedController::indicator:checked { + border-radius: 2px; + border: 1px solid #929192; + background: #39ff14; + image: none; +} + +QCheckBox#checkboxPlayer1Connected::indicator:unchecked, +QCheckBox#checkboxPlayer2Connected::indicator:unchecked, +QCheckBox#checkboxPlayer3Connected::indicator:unchecked, +QCheckBox#checkboxPlayer4Connected::indicator:unchecked, +QCheckBox#checkboxPlayer5Connected::indicator:unchecked, +QCheckBox#checkboxPlayer6Connected::indicator:unchecked, +QCheckBox#checkboxPlayer7Connected::indicator:unchecked, +QCheckBox#checkboxPlayer8Connected::indicator:unchecked, +QGroupBox#groupConnectedController::indicator:unchecked { + border-radius: 2px; + border: 1px solid #929192; + background: transparent; + image: none; +} + +QSpinBox#spinboxLStickRange, +QSpinBox#spinboxRStickRange { + padding: 4px 0px 5px 0px; + min-width: 63px; +} + +QSpinBox#vibrationSpin { + padding: 4px 0px 5px 0px; + min-width: 63px; +} + +QSpinBox#spinboxLStickRange:up-button, +QSpinBox#spinboxRStickRange:up-button, +QSpinBox#vibrationSpin:up-button { + left: -2px; +} + +QSpinBox#spinboxLStickRange:down-button, +QSpinBox#spinboxRStickRange:down-button, +QSpinBox#vibrationSpin:down-button { + right: -1px; +} + +QGroupBox#motionGroup::indicator, +QGroupBox#vibrationGroup::indicator { + margin-left: 0px; +} + +QGroupBox#motionGroup::title, +QGroupBox#vibrationGroup::title { + spacing: 2px; + padding-left: 1px; + padding-right: 1px; } diff --git a/dist/qt_themes/qdarkstyle_midnight_blue/icons/16x16/refresh.png b/dist/qt_themes/qdarkstyle_midnight_blue/icons/16x16/refresh.png new file mode 100644 index 0000000000000000000000000000000000000000..d4afd76f949ff5c65e039b69ff999325bff5d7b8 GIT binary patch literal 362 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#Vf2?p zD}XSgpwrRCKtah8*NBqf{Irtt#G+J&^73-M%)IR4TP^t%4d#k2I8Aju2?p zD}XSgpwrRCKtah8*NBqf{Irtt#G+J&^73-M%)IR4TP^t%4d#k2I8Aju icons/index.theme icons/16x16/lock.png + icons/16x16/view-refresh.png icons/48x48/bad_folder.png icons/48x48/chip.png icons/48x48/folder.png diff --git a/dist/qt_themes/qdarkstyle_midnight_blue/style.qss b/dist/qt_themes/qdarkstyle_midnight_blue/style.qss index 9c24b0d07..0ecdf271e 100644 --- a/dist/qt_themes/qdarkstyle_midnight_blue/style.qss +++ b/dist/qt_themes/qdarkstyle_midnight_blue/style.qss @@ -236,21 +236,19 @@ https://doc.qt.io/qt-5/stylesheet-examples.html#customizing-qgroupbox --------------------------------------------------------------------------- */ QGroupBox { - font-weight: bold; - border: 1px solid #32414B; - border-radius: 4px; - padding: 4px; - margin-top: 16px; + font-weight: bold; + border: 1px solid #32414B; + border-radius: 4px; + margin-top: 12px; + padding: 4px; } QGroupBox::title { - subcontrol-origin: margin; - subcontrol-position: top left; - left: 3px; - padding-left: 3px; - padding-right: 5px; - padding-top: 8px; - padding-bottom: 16px; + subcontrol-origin: margin; + subcontrol-position: top left; + padding-left: 3px; + padding-right: 5px; + padding-top: 4px; } QGroupBox::indicator { @@ -2172,3 +2170,121 @@ PlotWidget { /* Fix cut labels in plots #134 */ padding: 0px; } + + +QPushButton#TogglableStatusBarButton { + min-width: 0px; + color: #656565; + border: 1px solid transparent; + background-color: transparent; + padding: 0px 3px 0px 3px; + text-align: center; +} + +QPushButton#TogglableStatusBarButton:checked { + color: #ffffff; +} + +QPushButton#TogglableStatusBarButton:hover { + border: 1px solid #76797C; +} + +QPushButton#RendererStatusBarButton { + min-width: 0px; + color: #656565; + border: 1px solid transparent; + background-color: transparent; + padding: 0px 3px 0px 3px; + text-align: center; +} + +QPushButton#RendererStatusBarButton:hover { + border: 1px solid #76797C; +} + +QPushButton#RendererStatusBarButton:checked { + color: #e85c00; +} + +QPushButton#RendererStatusBarButton:!checked { + color: #00ccdd; +} + +QPushButton#buttonRefreshDevices { + min-width: 20px; + min-height: 20px; + max-width: 20px; + max-height: 20px; + padding: 0px 0px; +} + + +QCheckBox#checkboxPlayer1Connected, +QCheckBox#checkboxPlayer2Connected, +QCheckBox#checkboxPlayer3Connected, +QCheckBox#checkboxPlayer4Connected, +QCheckBox#checkboxPlayer5Connected, +QCheckBox#checkboxPlayer6Connected, +QCheckBox#checkboxPlayer7Connected, +QCheckBox#checkboxPlayer8Connected { + spacing: 0px; +} + +QCheckBox#checkboxPlayer1Connected::indicator, +QCheckBox#checkboxPlayer2Connected::indicator, +QCheckBox#checkboxPlayer3Connected::indicator, +QCheckBox#checkboxPlayer4Connected::indicator, +QCheckBox#checkboxPlayer5Connected::indicator, +QCheckBox#checkboxPlayer6Connected::indicator, +QCheckBox#checkboxPlayer7Connected::indicator, +QCheckBox#checkboxPlayer8Connected::indicator { + width: 14px; + height: 14px; +} + +QCheckBox#checkboxPlayer1Connected::indicator:checked, +QCheckBox#checkboxPlayer2Connected::indicator:checked, +QCheckBox#checkboxPlayer3Connected::indicator:checked, +QCheckBox#checkboxPlayer4Connected::indicator:checked, +QCheckBox#checkboxPlayer5Connected::indicator:checked, +QCheckBox#checkboxPlayer6Connected::indicator:checked, +QCheckBox#checkboxPlayer7Connected::indicator:checked, +QCheckBox#checkboxPlayer8Connected::indicator:checked, +QGroupBox#groupConnectedController::indicator:checked { + border-radius: 2px; + border: 1px solid #929192; + background: #39ff14; + image: none; +} + +QCheckBox#checkboxPlayer1Connected::indicator:unchecked, +QCheckBox#checkboxPlayer2Connected::indicator:unchecked, +QCheckBox#checkboxPlayer3Connected::indicator:unchecked, +QCheckBox#checkboxPlayer4Connected::indicator:unchecked, +QCheckBox#checkboxPlayer5Connected::indicator:unchecked, +QCheckBox#checkboxPlayer6Connected::indicator:unchecked, +QCheckBox#checkboxPlayer7Connected::indicator:unchecked, +QCheckBox#checkboxPlayer8Connected::indicator:unchecked, +QGroupBox#groupConnectedController::indicator:unchecked { + border-radius: 2px; + border: 1px solid #929192; + background: transparent; + image: none; +} + +QSpinBox#spinboxLStickRange, +QSpinBox#spinboxRStickRange { + min-width: 53px; +} + +QGroupBox#motionGroup::indicator, +QGroupBox#vibrationGroup::indicator { + margin-left: 0px; +} + +QGroupBox#motionGroup::title, +QGroupBox#vibrationGroup::title { +spacing: 2px; + padding-left: 1px; + padding-right: 1px; +} diff --git a/src/common/param_package.h b/src/common/param_package.h index c8a70bfa9..c13e45479 100644 --- a/src/common/param_package.h +++ b/src/common/param_package.h @@ -19,7 +19,7 @@ public: explicit ParamPackage(const std::string& serialized); ParamPackage(std::initializer_list list); ParamPackage(const ParamPackage& other) = default; - ParamPackage(ParamPackage&& other) = default; + ParamPackage(ParamPackage&& other) noexcept = default; ParamPackage& operator=(const ParamPackage& other) = default; ParamPackage& operator=(ParamPackage&& other) = default; diff --git a/src/core/hle/service/hid/controllers/npad.cpp b/src/core/hle/service/hid/controllers/npad.cpp index 0e7794dc7..82e11b169 100644 --- a/src/core/hle/service/hid/controllers/npad.cpp +++ b/src/core/hle/service/hid/controllers/npad.cpp @@ -24,6 +24,7 @@ constexpr s32 HID_JOYSTICK_MAX = 0x7fff; constexpr std::size_t NPAD_OFFSET = 0x9A00; constexpr u32 BATTERY_FULL = 2; constexpr u32 MAX_NPAD_ID = 7; +constexpr std::size_t HANDHELD_INDEX = 8; constexpr std::array npad_id_list{ 0, 1, 2, 3, 4, 5, 6, 7, NPAD_HANDHELD, NPAD_UNKNOWN, }; @@ -33,19 +34,41 @@ enum class JoystickId : std::size_t { Joystick_Right, }; -static Controller_NPad::NPadControllerType MapSettingsTypeToNPad(Settings::ControllerType type) { +Controller_NPad::NPadControllerType Controller_NPad::MapSettingsTypeToNPad( + Settings::ControllerType type) { switch (type) { case Settings::ControllerType::ProController: - return Controller_NPad::NPadControllerType::ProController; - case Settings::ControllerType::DualJoycon: - return Controller_NPad::NPadControllerType::JoyDual; + return NPadControllerType::ProController; + case Settings::ControllerType::DualJoyconDetached: + return NPadControllerType::JoyDual; case Settings::ControllerType::LeftJoycon: - return Controller_NPad::NPadControllerType::JoyLeft; + return NPadControllerType::JoyLeft; case Settings::ControllerType::RightJoycon: - return Controller_NPad::NPadControllerType::JoyRight; + return NPadControllerType::JoyRight; + case Settings::ControllerType::Handheld: + return NPadControllerType::Handheld; default: UNREACHABLE(); - return Controller_NPad::NPadControllerType::JoyDual; + return NPadControllerType::ProController; + } +} + +Settings::ControllerType Controller_NPad::MapNPadToSettingsType( + Controller_NPad::NPadControllerType type) { + switch (type) { + case NPadControllerType::ProController: + return Settings::ControllerType::ProController; + case NPadControllerType::JoyDual: + return Settings::ControllerType::DualJoyconDetached; + case NPadControllerType::JoyLeft: + return Settings::ControllerType::LeftJoycon; + case NPadControllerType::JoyRight: + return Settings::ControllerType::RightJoycon; + case NPadControllerType::Handheld: + return Settings::ControllerType::Handheld; + default: + UNREACHABLE(); + return Settings::ControllerType::ProController; } } @@ -60,9 +83,9 @@ std::size_t Controller_NPad::NPadIdToIndex(u32 npad_id) { case 6: case 7: return npad_id; - case 8: + case HANDHELD_INDEX: case NPAD_HANDHELD: - return 8; + return HANDHELD_INDEX; case 9: case NPAD_UNKNOWN: return 9; @@ -83,7 +106,7 @@ u32 Controller_NPad::IndexToNPad(std::size_t index) { case 6: case 7: return static_cast(index); - case 8: + case HANDHELD_INDEX: return NPAD_HANDHELD; case 9: return NPAD_UNKNOWN; @@ -96,25 +119,35 @@ u32 Controller_NPad::IndexToNPad(std::size_t index) { Controller_NPad::Controller_NPad(Core::System& system) : ControllerBase(system), system(system) {} Controller_NPad::~Controller_NPad() = default; -void Controller_NPad::InitNewlyAddedControler(std::size_t controller_idx) { +void Controller_NPad::InitNewlyAddedController(std::size_t controller_idx) { const auto controller_type = connected_controllers[controller_idx].type; auto& controller = shared_memory_entries[controller_idx]; if (controller_type == NPadControllerType::None) { + styleset_changed_events[controller_idx].writable->Signal(); return; } controller.joy_styles.raw = 0; // Zero out controller.device_type.raw = 0; + controller.properties.raw = 0; switch (controller_type) { case NPadControllerType::None: UNREACHABLE(); break; - case NPadControllerType::Handheld: - controller.joy_styles.handheld.Assign(1); - controller.device_type.handheld.Assign(1); - controller.pad_assignment = NPadAssignments::Dual; + case NPadControllerType::ProController: + controller.joy_styles.pro_controller.Assign(1); + controller.device_type.pro_controller.Assign(1); controller.properties.is_vertical.Assign(1); controller.properties.use_plus.Assign(1); controller.properties.use_minus.Assign(1); + controller.pad_assignment = NPadAssignments::Single; + break; + case NPadControllerType::Handheld: + controller.joy_styles.handheld.Assign(1); + controller.device_type.handheld.Assign(1); + controller.properties.is_vertical.Assign(1); + controller.properties.use_plus.Assign(1); + controller.properties.use_minus.Assign(1); + controller.pad_assignment = NPadAssignments::Dual; break; case NPadControllerType::JoyDual: controller.joy_styles.joycon_dual.Assign(1); @@ -144,14 +177,6 @@ void Controller_NPad::InitNewlyAddedControler(std::size_t controller_idx) { controller.device_type.pokeball.Assign(1); controller.pad_assignment = NPadAssignments::Single; break; - case NPadControllerType::ProController: - controller.joy_styles.pro_controller.Assign(1); - controller.device_type.pro_controller.Assign(1); - controller.properties.is_vertical.Assign(1); - controller.properties.use_plus.Assign(1); - controller.properties.use_minus.Assign(1); - controller.pad_assignment = NPadAssignments::Single; - break; } controller.single_color_error = ColorReadError::ReadOk; @@ -192,36 +217,25 @@ void Controller_NPad::OnInit() { style.pokeball.Assign(1); } - std::transform( - Settings::values.players.begin(), Settings::values.players.end(), - connected_controllers.begin(), [](const Settings::PlayerInput& player) { - return ControllerHolder{MapSettingsTypeToNPad(player.type), player.connected}; - }); - - std::stable_partition(connected_controllers.begin(), connected_controllers.begin() + 8, - [](const ControllerHolder& holder) { return holder.is_connected; }); + std::transform(Settings::values.players.begin(), Settings::values.players.end(), + connected_controllers.begin(), [](const Settings::PlayerInput& player) { + return ControllerHolder{MapSettingsTypeToNPad(player.controller_type), + player.connected}; + }); // Account for handheld - if (connected_controllers[8].is_connected) - connected_controllers[8].type = NPadControllerType::Handheld; + if (connected_controllers[HANDHELD_INDEX].is_connected) { + connected_controllers[HANDHELD_INDEX].type = NPadControllerType::Handheld; + } supported_npad_id_types.resize(npad_id_list.size()); std::memcpy(supported_npad_id_types.data(), npad_id_list.data(), npad_id_list.size() * sizeof(u32)); - // Add a default dual joycon controller if none are present. - if (std::none_of(connected_controllers.begin(), connected_controllers.end(), - [](const ControllerHolder& controller) { return controller.is_connected; })) { - supported_npad_id_types.resize(npad_id_list.size()); - std::memcpy(supported_npad_id_types.data(), npad_id_list.data(), - npad_id_list.size() * sizeof(u32)); - AddNewController(NPadControllerType::JoyDual); - } - for (std::size_t i = 0; i < connected_controllers.size(); ++i) { const auto& controller = connected_controllers[i]; if (controller.is_connected) { - AddNewControllerAt(controller.type, IndexToNPad(i)); + AddNewControllerAt(controller.type, i); } } } @@ -309,8 +323,9 @@ void Controller_NPad::RequestPadStateUpdate(u32 npad_id) { void Controller_NPad::OnUpdate(const Core::Timing::CoreTiming& core_timing, u8* data, std::size_t data_len) { - if (!IsControllerActivated()) + if (!IsControllerActivated()) { return; + } for (std::size_t i = 0; i < shared_memory_entries.size(); i++) { auto& npad = shared_memory_entries[i]; const std::array controller_npads{&npad.main_controller_states, @@ -365,6 +380,14 @@ void Controller_NPad::OnUpdate(const Core::Timing::CoreTiming& core_timing, u8* case NPadControllerType::None: UNREACHABLE(); break; + case NPadControllerType::ProController: + main_controller.connection_status.raw = 0; + main_controller.connection_status.IsConnected.Assign(1); + main_controller.connection_status.IsWired.Assign(1); + main_controller.pad.pad_states.raw = pad_state.pad_states.raw; + main_controller.pad.l_stick = pad_state.l_stick; + main_controller.pad.r_stick = pad_state.r_stick; + break; case NPadControllerType::Handheld: handheld_entry.connection_status.raw = 0; handheld_entry.connection_status.IsWired.Assign(1); @@ -378,22 +401,19 @@ void Controller_NPad::OnUpdate(const Core::Timing::CoreTiming& core_timing, u8* break; case NPadControllerType::JoyDual: dual_entry.connection_status.raw = 0; - + dual_entry.connection_status.IsConnected.Assign(1); dual_entry.connection_status.IsLeftJoyConnected.Assign(1); dual_entry.connection_status.IsRightJoyConnected.Assign(1); - dual_entry.connection_status.IsConnected.Assign(1); - - libnx_entry.connection_status.IsLeftJoyConnected.Assign(1); - libnx_entry.connection_status.IsRightJoyConnected.Assign(1); - libnx_entry.connection_status.IsConnected.Assign(1); - dual_entry.pad.pad_states.raw = pad_state.pad_states.raw; dual_entry.pad.l_stick = pad_state.l_stick; dual_entry.pad.r_stick = pad_state.r_stick; + + libnx_entry.connection_status.IsConnected.Assign(1); + libnx_entry.connection_status.IsLeftJoyConnected.Assign(1); + libnx_entry.connection_status.IsRightJoyConnected.Assign(1); break; case NPadControllerType::JoyLeft: left_entry.connection_status.raw = 0; - left_entry.connection_status.IsConnected.Assign(1); left_entry.pad.pad_states.raw = pad_state.pad_states.raw; left_entry.pad.l_stick = pad_state.l_stick; @@ -401,7 +421,6 @@ void Controller_NPad::OnUpdate(const Core::Timing::CoreTiming& core_timing, u8* break; case NPadControllerType::JoyRight: right_entry.connection_status.raw = 0; - right_entry.connection_status.IsConnected.Assign(1); right_entry.pad.pad_states.raw = pad_state.pad_states.raw; right_entry.pad.l_stick = pad_state.l_stick; @@ -409,23 +428,12 @@ void Controller_NPad::OnUpdate(const Core::Timing::CoreTiming& core_timing, u8* break; case NPadControllerType::Pokeball: pokeball_entry.connection_status.raw = 0; - pokeball_entry.connection_status.IsConnected.Assign(1); pokeball_entry.connection_status.IsWired.Assign(1); - pokeball_entry.pad.pad_states.raw = pad_state.pad_states.raw; pokeball_entry.pad.l_stick = pad_state.l_stick; pokeball_entry.pad.r_stick = pad_state.r_stick; break; - case NPadControllerType::ProController: - main_controller.connection_status.raw = 0; - - main_controller.connection_status.IsConnected.Assign(1); - main_controller.connection_status.IsWired.Assign(1); - main_controller.pad.pad_states.raw = pad_state.pad_states.raw; - main_controller.pad.l_stick = pad_state.l_stick; - main_controller.pad.r_stick = pad_state.r_stick; - break; } // LibNX exclusively uses this section, so we always update it since LibNX doesn't activate @@ -453,26 +461,6 @@ void Controller_NPad::SetSupportedNPadIdTypes(u8* data, std::size_t length) { supported_npad_id_types.clear(); supported_npad_id_types.resize(length / sizeof(u32)); std::memcpy(supported_npad_id_types.data(), data, length); - for (std::size_t i = 0; i < connected_controllers.size(); i++) { - auto& controller = connected_controllers[i]; - if (!controller.is_connected) { - continue; - } - const auto requested_controller = - i <= MAX_NPAD_ID ? MapSettingsTypeToNPad(Settings::values.players[i].type) - : NPadControllerType::Handheld; - if (!IsControllerSupported(requested_controller)) { - const auto is_handheld = requested_controller == NPadControllerType::Handheld; - if (is_handheld) { - controller.type = NPadControllerType::None; - controller.is_connected = false; - AddNewController(requested_controller); - } else { - controller.type = requested_controller; - InitNewlyAddedControler(i); - } - } - } } void Controller_NPad::GetSupportedNpadIdTypes(u32* data, std::size_t max_length) { @@ -504,7 +492,7 @@ void Controller_NPad::VibrateController(const std::vector& controller_ids, const std::vector& vibrations) { LOG_DEBUG(Service_HID, "(STUBBED) called"); - if (!can_controllers_vibrate) { + if (!Settings::values.vibration_enabled || !can_controllers_vibrate) { return; } for (std::size_t i = 0; i < controller_ids.size(); i++) { @@ -517,8 +505,6 @@ void Controller_NPad::VibrateController(const std::vector& controller_ids, } std::shared_ptr Controller_NPad::GetStyleSetChangedEvent(u32 npad_id) const { - // TODO(ogniK): Figure out the best time to signal this event. This event seems that it should - // be signalled at least once, and signaled after a new controller is connected? const auto& styleset_event = styleset_changed_events[NPadIdToIndex(npad_id)]; return styleset_event.readable; } @@ -527,43 +513,43 @@ Controller_NPad::Vibration Controller_NPad::GetLastVibration() const { return last_processed_vibration; } -void Controller_NPad::AddNewController(NPadControllerType controller) { - controller = DecideBestController(controller); - if (controller == NPadControllerType::Handheld) { - connected_controllers[8] = {controller, true}; - InitNewlyAddedControler(8); - return; - } - const auto pos = - std::find_if(connected_controllers.begin(), connected_controllers.end() - 2, - [](const ControllerHolder& holder) { return !holder.is_connected; }); - if (pos == connected_controllers.end() - 2) { - LOG_ERROR(Service_HID, "Cannot connect any more controllers!"); - return; - } - const auto controller_id = std::distance(connected_controllers.begin(), pos); - connected_controllers[controller_id] = {controller, true}; - InitNewlyAddedControler(controller_id); +void Controller_NPad::AddNewControllerAt(NPadControllerType controller, std::size_t npad_index) { + UpdateControllerAt(controller, npad_index, true); } -void Controller_NPad::AddNewControllerAt(NPadControllerType controller, u32 npad_id) { - controller = DecideBestController(controller); - if (controller == NPadControllerType::Handheld) { - connected_controllers[NPadIdToIndex(NPAD_HANDHELD)] = {controller, true}; - InitNewlyAddedControler(NPadIdToIndex(NPAD_HANDHELD)); +void Controller_NPad::UpdateControllerAt(NPadControllerType controller, std::size_t npad_index, + bool connected) { + if (!connected) { + DisconnectNPad(IndexToNPad(npad_index)); return; } - connected_controllers[NPadIdToIndex(npad_id)] = {controller, true}; - InitNewlyAddedControler(NPadIdToIndex(npad_id)); -} + if (controller == NPadControllerType::Handheld) { + Settings::values.players[HANDHELD_INDEX].controller_type = + MapNPadToSettingsType(controller); + Settings::values.players[HANDHELD_INDEX].connected = true; + connected_controllers[HANDHELD_INDEX] = {controller, true}; + InitNewlyAddedController(HANDHELD_INDEX); + return; + } -void Controller_NPad::ConnectNPad(u32 npad_id) { - connected_controllers[NPadIdToIndex(npad_id)].is_connected = true; + Settings::values.players[npad_index].controller_type = MapNPadToSettingsType(controller); + Settings::values.players[npad_index].connected = true; + connected_controllers[npad_index] = {controller, true}; + InitNewlyAddedController(npad_index); } void Controller_NPad::DisconnectNPad(u32 npad_id) { - connected_controllers[NPadIdToIndex(npad_id)].is_connected = false; + const auto npad_index = NPadIdToIndex(npad_id); + connected_controllers[npad_index].is_connected = false; + Settings::values.players[npad_index].connected = false; + + auto& controller = shared_memory_entries[npad_index]; + controller.joy_styles.raw = 0; // Zero out + controller.device_type.raw = 0; + controller.properties.raw = 0; + + styleset_changed_events[npad_index].writable->Signal(); } void Controller_NPad::SetGyroscopeZeroDriftMode(GyroscopeZeroDriftMode drift_mode) { @@ -599,8 +585,8 @@ bool Controller_NPad::SwapNpadAssignment(u32 npad_id_1, u32 npad_id_2) { std::swap(connected_controllers[npad_index_1].type, connected_controllers[npad_index_2].type); - InitNewlyAddedControler(npad_index_1); - InitNewlyAddedControler(npad_index_2); + AddNewControllerAt(connected_controllers[npad_index_1].type, npad_index_1); + AddNewControllerAt(connected_controllers[npad_index_2].type, npad_index_2); return true; } @@ -628,7 +614,6 @@ Controller_NPad::LedPattern Controller_NPad::GetLedPattern(u32 npad_id) { case 7: return LedPattern{0, 1, 1, 0}; default: - UNIMPLEMENTED_MSG("Unhandled npad_id {}", npad_id); return LedPattern{0, 0, 0, 0}; } } diff --git a/src/core/hle/service/hid/controllers/npad.h b/src/core/hle/service/hid/controllers/npad.h index 5d4c58a43..75ce5b731 100644 --- a/src/core/hle/service/hid/controllers/npad.h +++ b/src/core/hle/service/hid/controllers/npad.h @@ -118,10 +118,11 @@ public: std::shared_ptr GetStyleSetChangedEvent(u32 npad_id) const; Vibration GetLastVibration() const; - void AddNewController(NPadControllerType controller); - void AddNewControllerAt(NPadControllerType controller, u32 npad_id); + // Adds a new controller at an index. + void AddNewControllerAt(NPadControllerType controller, std::size_t npad_index); + // Adds a new controller at an index with connection status. + void UpdateControllerAt(NPadControllerType controller, std::size_t npad_index, bool connected); - void ConnectNPad(u32 npad_id); void DisconnectNPad(u32 npad_id); void SetGyroscopeZeroDriftMode(GyroscopeZeroDriftMode drift_mode); GyroscopeZeroDriftMode GetGyroscopeZeroDriftMode() const; @@ -141,6 +142,8 @@ public: // Specifically for cheat engine and other features. u32 GetAndResetPressState(); + static Controller_NPad::NPadControllerType MapSettingsTypeToNPad(Settings::ControllerType type); + static Settings::ControllerType MapNPadToSettingsType(Controller_NPad::NPadControllerType type); static std::size_t NPadIdToIndex(u32 npad_id); static u32 IndexToNPad(std::size_t index); @@ -309,7 +312,7 @@ private: bool is_connected; }; - void InitNewlyAddedControler(std::size_t controller_idx); + void InitNewlyAddedController(std::size_t controller_idx); bool IsControllerSupported(NPadControllerType controller) const; NPadControllerType DecideBestController(NPadControllerType priority) const; void RequestPadStateUpdate(u32 npad_id); diff --git a/src/core/hle/service/hid/hid.cpp b/src/core/hle/service/hid/hid.cpp index 1e95b7580..33416b5dd 100644 --- a/src/core/hle/service/hid/hid.cpp +++ b/src/core/hle/service/hid/hid.cpp @@ -38,11 +38,9 @@ namespace Service::HID { // Updating period for each HID device. -// TODO(ogniK): Find actual polling rate of hid -constexpr auto pad_update_ns = std::chrono::nanoseconds{1000000000 / 66}; -[[maybe_unused]] constexpr auto accelerometer_update_ns = - std::chrono::nanoseconds{1000000000 / 100}; -[[maybe_unused]] constexpr auto gyroscope_update_ticks = std::chrono::nanoseconds{1000000000 / 100}; +// HID is polled every 15ms, this value was derived from +// https://github.com/dekuNukem/Nintendo_Switch_Reverse_Engineering#joy-con-status-data-packet +constexpr auto pad_update_ns = std::chrono::nanoseconds{15 * 1000 * 1000}; // (15ms, 66.6Hz) constexpr std::size_t SHARED_MEMORY_SIZE = 0x40000; IAppletResource::IAppletResource(Core::System& system) @@ -845,8 +843,7 @@ void Hid::CreateActiveVibrationDeviceList(Kernel::HLERequestContext& ctx) { void Hid::PermitVibration(Kernel::HLERequestContext& ctx) { IPC::RequestParser rp{ctx}; const auto can_vibrate{rp.Pop()}; - applet_resource->GetController(HidController::NPad) - .SetVibrationEnabled(can_vibrate); + Settings::values.vibration_enabled = can_vibrate; LOG_DEBUG(Service_HID, "called, can_vibrate={}", can_vibrate); @@ -859,8 +856,7 @@ void Hid::IsVibrationPermitted(Kernel::HLERequestContext& ctx) { IPC::ResponseBuilder rb{ctx, 3}; rb.Push(RESULT_SUCCESS); - rb.Push( - applet_resource->GetController(HidController::NPad).IsVibrationEnabled()); + rb.Push(Settings::values.vibration_enabled); } void Hid::ActivateConsoleSixAxisSensor(Kernel::HLERequestContext& ctx) { diff --git a/src/core/settings.cpp b/src/core/settings.cpp index d328fb8b7..28d3f9099 100644 --- a/src/core/settings.cpp +++ b/src/core/settings.cpp @@ -13,56 +13,6 @@ namespace Settings { -namespace NativeButton { -const std::array mapping = {{ - "button_a", - "button_b", - "button_x", - "button_y", - "button_lstick", - "button_rstick", - "button_l", - "button_r", - "button_zl", - "button_zr", - "button_plus", - "button_minus", - "button_dleft", - "button_dup", - "button_dright", - "button_ddown", - "button_lstick_left", - "button_lstick_up", - "button_lstick_right", - "button_lstick_down", - "button_rstick_left", - "button_rstick_up", - "button_rstick_right", - "button_rstick_down", - "button_sl", - "button_sr", - "button_home", - "button_screenshot", -}}; -} - -namespace NativeAnalog { -const std::array mapping = {{ - "lstick", - "rstick", -}}; -} - -namespace NativeMouseButton { -const std::array mapping = {{ - "left", - "right", - "middle", - "forward", - "back", -}}; -} - Values values = {}; bool configuring_global = true; diff --git a/src/core/settings.h b/src/core/settings.h index 3681b5e9d..732c6a894 100644 --- a/src/core/settings.h +++ b/src/core/settings.h @@ -12,340 +12,10 @@ #include #include #include "common/common_types.h" +#include "input_common/settings.h" namespace Settings { -namespace NativeButton { -enum Values { - A, - B, - X, - Y, - LStick, - RStick, - L, - R, - ZL, - ZR, - Plus, - Minus, - - DLeft, - DUp, - DRight, - DDown, - - LStick_Left, - LStick_Up, - LStick_Right, - LStick_Down, - - RStick_Left, - RStick_Up, - RStick_Right, - RStick_Down, - - SL, - SR, - - Home, - Screenshot, - - NumButtons, -}; - -constexpr int BUTTON_HID_BEGIN = A; -constexpr int BUTTON_NS_BEGIN = Home; - -constexpr int BUTTON_HID_END = BUTTON_NS_BEGIN; -constexpr int BUTTON_NS_END = NumButtons; - -constexpr int NUM_BUTTONS_HID = BUTTON_HID_END - BUTTON_HID_BEGIN; -constexpr int NUM_BUTTONS_NS = BUTTON_NS_END - BUTTON_NS_BEGIN; - -extern const std::array mapping; - -} // namespace NativeButton - -namespace NativeAnalog { -enum Values { - LStick, - RStick, - - NumAnalogs, -}; - -constexpr int STICK_HID_BEGIN = LStick; -constexpr int STICK_HID_END = NumAnalogs; -constexpr int NUM_STICKS_HID = NumAnalogs; - -extern const std::array mapping; -} // namespace NativeAnalog - -namespace NativeMouseButton { -enum Values { - Left, - Right, - Middle, - Forward, - Back, - - NumMouseButtons, -}; - -constexpr int MOUSE_HID_BEGIN = Left; -constexpr int MOUSE_HID_END = NumMouseButtons; -constexpr int NUM_MOUSE_HID = NumMouseButtons; - -extern const std::array mapping; -} // namespace NativeMouseButton - -namespace NativeKeyboard { -enum Keys { - None, - Error, - - A = 4, - B, - C, - D, - E, - F, - G, - H, - I, - J, - K, - L, - M, - N, - O, - P, - Q, - R, - S, - T, - U, - V, - W, - X, - Y, - Z, - N1, - N2, - N3, - N4, - N5, - N6, - N7, - N8, - N9, - N0, - Enter, - Escape, - Backspace, - Tab, - Space, - Minus, - Equal, - LeftBrace, - RightBrace, - Backslash, - Tilde, - Semicolon, - Apostrophe, - Grave, - Comma, - Dot, - Slash, - CapsLockKey, - - F1, - F2, - F3, - F4, - F5, - F6, - F7, - F8, - F9, - F10, - F11, - F12, - - SystemRequest, - ScrollLockKey, - Pause, - Insert, - Home, - PageUp, - Delete, - End, - PageDown, - Right, - Left, - Down, - Up, - - NumLockKey, - KPSlash, - KPAsterisk, - KPMinus, - KPPlus, - KPEnter, - KP1, - KP2, - KP3, - KP4, - KP5, - KP6, - KP7, - KP8, - KP9, - KP0, - KPDot, - - Key102, - Compose, - Power, - KPEqual, - - F13, - F14, - F15, - F16, - F17, - F18, - F19, - F20, - F21, - F22, - F23, - F24, - - Open, - Help, - Properties, - Front, - Stop, - Repeat, - Undo, - Cut, - Copy, - Paste, - Find, - Mute, - VolumeUp, - VolumeDown, - CapsLockActive, - NumLockActive, - ScrollLockActive, - KPComma, - - KPLeftParenthesis, - KPRightParenthesis, - - LeftControlKey = 0xE0, - LeftShiftKey, - LeftAltKey, - LeftMetaKey, - RightControlKey, - RightShiftKey, - RightAltKey, - RightMetaKey, - - MediaPlayPause, - MediaStopCD, - MediaPrevious, - MediaNext, - MediaEject, - MediaVolumeUp, - MediaVolumeDown, - MediaMute, - MediaWebsite, - MediaBack, - MediaForward, - MediaStop, - MediaFind, - MediaScrollUp, - MediaScrollDown, - MediaEdit, - MediaSleep, - MediaCoffee, - MediaRefresh, - MediaCalculator, - - NumKeyboardKeys, -}; - -static_assert(NumKeyboardKeys == 0xFC, "Incorrect number of keyboard keys."); - -enum Modifiers { - LeftControl, - LeftShift, - LeftAlt, - LeftMeta, - RightControl, - RightShift, - RightAlt, - RightMeta, - CapsLock, - ScrollLock, - NumLock, - - NumKeyboardMods, -}; - -constexpr int KEYBOARD_KEYS_HID_BEGIN = None; -constexpr int KEYBOARD_KEYS_HID_END = NumKeyboardKeys; -constexpr int NUM_KEYBOARD_KEYS_HID = NumKeyboardKeys; - -constexpr int KEYBOARD_MODS_HID_BEGIN = LeftControl; -constexpr int KEYBOARD_MODS_HID_END = NumKeyboardMods; -constexpr int NUM_KEYBOARD_MODS_HID = NumKeyboardMods; - -} // namespace NativeKeyboard - -using ButtonsRaw = std::array; -using AnalogsRaw = std::array; -using MouseButtonsRaw = std::array; -using KeyboardKeysRaw = std::array; -using KeyboardModsRaw = std::array; - -constexpr u32 JOYCON_BODY_NEON_RED = 0xFF3C28; -constexpr u32 JOYCON_BUTTONS_NEON_RED = 0x1E0A0A; -constexpr u32 JOYCON_BODY_NEON_BLUE = 0x0AB9E6; -constexpr u32 JOYCON_BUTTONS_NEON_BLUE = 0x001E1E; - -enum class ControllerType { - ProController, - DualJoycon, - RightJoycon, - LeftJoycon, -}; - -struct PlayerInput { - bool connected; - ControllerType type; - ButtonsRaw buttons; - AnalogsRaw analogs; - - u32 body_color_right; - u32 button_color_right; - u32 body_color_left; - u32 button_color_left; -}; - -struct TouchscreenInput { - bool enabled; - std::string device; - - u32 finger; - u32 diameter_x; - u32 diameter_y; - u32 rotation_angle; -}; - enum class RendererBackend { OpenGL = 0, Vulkan = 1, @@ -461,6 +131,8 @@ struct Values { // Controls std::array players; + bool use_docked_mode; + bool mouse_enabled; std::string mouse_device; MouseButtonsRaw mouse_buttons; @@ -474,14 +146,15 @@ struct Values { AnalogsRaw debug_pad_analogs; std::string motion_device; + + bool vibration_enabled; + TouchscreenInput touchscreen; std::atomic_bool is_device_reload_pending{true}; std::string udp_input_address; u16 udp_input_port; u8 udp_pad_index; - bool use_docked_mode; - // Data Storage bool use_virtual_sd; bool gamecard_inserted; diff --git a/src/input_common/CMakeLists.txt b/src/input_common/CMakeLists.txt index 317c25bad..56267c8a8 100644 --- a/src/input_common/CMakeLists.txt +++ b/src/input_common/CMakeLists.txt @@ -7,6 +7,8 @@ add_library(input_common STATIC main.h motion_emu.cpp motion_emu.h + settings.cpp + settings.h gcadapter/gc_adapter.cpp gcadapter/gc_adapter.h gcadapter/gc_poller.cpp diff --git a/src/input_common/gcadapter/gc_poller.cpp b/src/input_common/gcadapter/gc_poller.cpp index b346fdf8e..85342bbe7 100644 --- a/src/input_common/gcadapter/gc_poller.cpp +++ b/src/input_common/gcadapter/gc_poller.cpp @@ -232,7 +232,7 @@ std::unique_ptr GCAnalogFactory::Create(const Common::Param const int port = params.Get("port", 0); const int axis_x = params.Get("axis_x", 0); const int axis_y = params.Get("axis_y", 1); - const float deadzone = std::clamp(params.Get("deadzone", 0.0f), 0.0f, .99f); + const float deadzone = std::clamp(params.Get("deadzone", 0.0f), 0.0f, 1.0f); const float range = std::clamp(params.Get("range", 1.0f), 0.50f, 1.50f); return std::make_unique(port, axis_x, axis_y, deadzone, adapter.get(), range); diff --git a/src/input_common/main.cpp b/src/input_common/main.cpp index b9d5d0ec3..b8725e9af 100644 --- a/src/input_common/main.cpp +++ b/src/input_common/main.cpp @@ -44,7 +44,6 @@ void Init() { #ifdef HAVE_SDL2 sdl = SDL::Init(); #endif - udp = CemuhookUDP::Init(); } @@ -103,6 +102,55 @@ std::string GenerateAnalogParamFromKeys(int key_up, int key_down, int key_left, return circle_pad_param.Serialize(); } +std::vector GetInputDevices() { + std::vector devices = { + Common::ParamPackage{{"display", "Any"}, {"class", "any"}}, + Common::ParamPackage{{"display", "Keyboard"}, {"class", "key"}}, + }; +#ifdef HAVE_SDL2 + auto sdl_devices = sdl->GetInputDevices(); + devices.insert(devices.end(), sdl_devices.begin(), sdl_devices.end()); +#endif + auto udp_devices = udp->GetInputDevices(); + devices.insert(devices.end(), udp_devices.begin(), udp_devices.end()); + return devices; +} + +std::unordered_map GetButtonMappingForDevice( + const Common::ParamPackage& params) { + std::unordered_map mappings{}; + if (!params.Has("class") || params.Get("class", "") == "any") { + return mappings; + } + if (params.Get("class", "") == "key") { + // TODO consider returning the SDL key codes for the default keybindings + } +#ifdef HAVE_SDL2 + if (params.Get("class", "") == "sdl") { + return sdl->GetButtonMappingForDevice(params); + } +#endif + return mappings; +} + +std::unordered_map GetAnalogMappingForDevice( + const Common::ParamPackage& params) { + std::unordered_map mappings{}; + if (!params.Has("class") || params.Get("class", "") == "any") { + return mappings; + } + if (params.Get("class", "") == "key") { + // TODO consider returning the SDL key codes for the default keybindings + return mappings; + } +#ifdef HAVE_SDL2 + if (params.Get("class", "") == "sdl") { + return sdl->GetAnalogMappingForDevice(params); + } +#endif + return mappings; +} + namespace Polling { std::vector> GetPollers(DeviceType type) { diff --git a/src/input_common/main.h b/src/input_common/main.h index 0e32856f6..ebc7f9533 100644 --- a/src/input_common/main.h +++ b/src/input_common/main.h @@ -6,8 +6,10 @@ #include #include +#include #include #include "input_common/gcadapter/gc_poller.h" +#include "input_common/settings.h" namespace Common { class ParamPackage; @@ -42,9 +44,27 @@ std::string GenerateKeyboardParam(int key_code); std::string GenerateAnalogParamFromKeys(int key_up, int key_down, int key_left, int key_right, int key_modifier, float modifier_scale); +/** + * Return a list of available input devices that this Factory can create a new device with. + * Each returned Parampackage should have a `display` field used for display, a class field for + * backends to determine if this backend is meant to service the request and any other information + * needed to identify this in the backend later. + */ +std::vector GetInputDevices(); + +/** + * Given a ParamPackage for a Device returned from `GetInputDevices`, attempt to get the default + * mapping for the device. This is currently only implemented for the sdl backend devices. + */ +using ButtonMapping = std::unordered_map; +using AnalogMapping = std::unordered_map; + +ButtonMapping GetButtonMappingForDevice(const Common::ParamPackage&); +AnalogMapping GetAnalogMappingForDevice(const Common::ParamPackage&); + namespace Polling { -enum class DeviceType { Button, Analog }; +enum class DeviceType { Button, AnalogPreferred }; /** * A class that can be used to get inputs from an input device like controllers without having to @@ -54,7 +74,9 @@ class DevicePoller { public: virtual ~DevicePoller() = default; /// Setup and start polling for inputs, should be called before GetNextInput - virtual void Start() = 0; + /// If a device_id is provided, events should be filtered to only include events from this + /// device id + virtual void Start(std::string device_id = "") = 0; /// Stop polling virtual void Stop() = 0; /** diff --git a/src/input_common/sdl/sdl.h b/src/input_common/sdl/sdl.h index 5306daa70..f3554be9a 100644 --- a/src/input_common/sdl/sdl.h +++ b/src/input_common/sdl/sdl.h @@ -6,6 +6,7 @@ #include #include +#include "common/param_package.h" #include "input_common/main.h" namespace InputCommon::Polling { @@ -22,14 +23,24 @@ public: /// Unregisters SDL device factories and shut them down. virtual ~State() = default; - virtual Pollers GetPollers(Polling::DeviceType type) = 0; + virtual Pollers GetPollers(Polling::DeviceType type) { + return {}; + } + + virtual std::vector GetInputDevices() { + return {}; + } + + virtual ButtonMapping GetButtonMappingForDevice(const Common::ParamPackage&) { + return {}; + } + virtual AnalogMapping GetAnalogMappingForDevice(const Common::ParamPackage&) { + return {}; + } }; class NullState : public State { public: - Pollers GetPollers(Polling::DeviceType type) override { - return {}; - } }; std::unique_ptr Init(); diff --git a/src/input_common/sdl/sdl_impl.cpp b/src/input_common/sdl/sdl_impl.cpp index d76c279d3..35a9d45ec 100644 --- a/src/input_common/sdl/sdl_impl.cpp +++ b/src/input_common/sdl/sdl_impl.cpp @@ -7,6 +7,8 @@ #include #include #include +#include +#include #include #include #include @@ -23,7 +25,8 @@ namespace InputCommon::SDL { -static std::string GetGUID(SDL_Joystick* joystick) { +namespace { +std::string GetGUID(SDL_Joystick* joystick) { const SDL_JoystickGUID guid = SDL_JoystickGetGUID(joystick); char guid_str[33]; SDL_JoystickGetGUIDString(guid, guid_str, sizeof(guid_str)); @@ -31,7 +34,8 @@ static std::string GetGUID(SDL_Joystick* joystick) { } /// Creates a ParamPackage from an SDL_Event that can directly be used to create a ButtonDevice -static Common::ParamPackage SDLEventToButtonParamPackage(SDLState& state, const SDL_Event& event); +Common::ParamPackage SDLEventToButtonParamPackage(SDLState& state, const SDL_Event& event); +} // Anonymous namespace static int SDLEventWatcher(void* user_data, SDL_Event* event) { auto* const sdl_state = static_cast(user_data); @@ -48,8 +52,10 @@ static int SDLEventWatcher(void* user_data, SDL_Event* event) { class SDLJoystick { public: - SDLJoystick(std::string guid_, int port_, SDL_Joystick* joystick) - : guid{std::move(guid_)}, port{port_}, sdl_joystick{joystick, &SDL_JoystickClose} {} + SDLJoystick(std::string guid_, int port_, SDL_Joystick* joystick, + SDL_GameController* gamecontroller) + : guid{std::move(guid_)}, port{port_}, sdl_joystick{joystick, &SDL_JoystickClose}, + sdl_controller{gamecontroller, &SDL_GameControllerClose} {} void SetButton(int button, bool value) { std::lock_guard lock{mutex}; @@ -115,10 +121,15 @@ public: return sdl_joystick.get(); } - void SetSDLJoystick(SDL_Joystick* joystick) { + void SetSDLJoystick(SDL_Joystick* joystick, SDL_GameController* controller) { + sdl_controller.reset(controller); sdl_joystick.reset(joystick); } + SDL_GameController* GetSDLGameController() const { + return sdl_controller.get(); + } + private: struct State { std::unordered_map buttons; @@ -128,6 +139,7 @@ private: std::string guid; int port; std::unique_ptr sdl_joystick; + std::unique_ptr sdl_controller; mutable std::mutex mutex; }; @@ -136,18 +148,19 @@ std::shared_ptr SDLState::GetSDLJoystickByGUID(const std::string& g const auto it = joystick_map.find(guid); if (it != joystick_map.end()) { while (it->second.size() <= static_cast(port)) { - auto joystick = - std::make_shared(guid, static_cast(it->second.size()), nullptr); + auto joystick = std::make_shared(guid, static_cast(it->second.size()), + nullptr, nullptr); it->second.emplace_back(std::move(joystick)); } return it->second[port]; } - auto joystick = std::make_shared(guid, 0, nullptr); + auto joystick = std::make_shared(guid, 0, nullptr, nullptr); return joystick_map[guid].emplace_back(std::move(joystick)); } std::shared_ptr SDLState::GetSDLJoystickBySDLID(SDL_JoystickID sdl_id) { auto sdl_joystick = SDL_JoystickFromInstanceID(sdl_id); + auto sdl_controller = SDL_GameControllerFromInstanceID(sdl_id); const std::string guid = GetGUID(sdl_joystick); std::lock_guard lock{joystick_map_mutex}; @@ -171,23 +184,27 @@ std::shared_ptr SDLState::GetSDLJoystickBySDLID(SDL_JoystickID sdl_ }); if (nullptr_it != map_it->second.end()) { // ... and map it - (*nullptr_it)->SetSDLJoystick(sdl_joystick); + (*nullptr_it)->SetSDLJoystick(sdl_joystick, sdl_controller); return *nullptr_it; } // There is no SDLJoystick without a mapped SDL_Joystick // Create a new SDLJoystick const int port = static_cast(map_it->second.size()); - auto joystick = std::make_shared(guid, port, sdl_joystick); + auto joystick = std::make_shared(guid, port, sdl_joystick, sdl_controller); return map_it->second.emplace_back(std::move(joystick)); } - auto joystick = std::make_shared(guid, 0, sdl_joystick); + auto joystick = std::make_shared(guid, 0, sdl_joystick, sdl_controller); return joystick_map[guid].emplace_back(std::move(joystick)); } void SDLState::InitJoystick(int joystick_index) { SDL_Joystick* sdl_joystick = SDL_JoystickOpen(joystick_index); + SDL_GameController* sdl_gamecontroller = nullptr; + if (SDL_IsGameController(joystick_index)) { + sdl_gamecontroller = SDL_GameControllerOpen(joystick_index); + } if (!sdl_joystick) { LOG_ERROR(Input, "failed to open joystick {}", joystick_index); return; @@ -196,7 +213,7 @@ void SDLState::InitJoystick(int joystick_index) { std::lock_guard lock{joystick_map_mutex}; if (joystick_map.find(guid) == joystick_map.end()) { - auto joystick = std::make_shared(guid, 0, sdl_joystick); + auto joystick = std::make_shared(guid, 0, sdl_joystick, sdl_gamecontroller); joystick_map[guid].emplace_back(std::move(joystick)); return; } @@ -205,11 +222,11 @@ void SDLState::InitJoystick(int joystick_index) { joystick_guid_list.begin(), joystick_guid_list.end(), [](const std::shared_ptr& joystick) { return !joystick->GetSDLJoystick(); }); if (it != joystick_guid_list.end()) { - (*it)->SetSDLJoystick(sdl_joystick); + (*it)->SetSDLJoystick(sdl_joystick, sdl_gamecontroller); return; } const int port = static_cast(joystick_guid_list.size()); - auto joystick = std::make_shared(guid, port, sdl_joystick); + auto joystick = std::make_shared(guid, port, sdl_joystick, sdl_gamecontroller); joystick_guid_list.emplace_back(std::move(joystick)); } @@ -231,7 +248,7 @@ void SDLState::CloseJoystick(SDL_Joystick* sdl_joystick) { // Destruct SDL_Joystick outside the lock guard because SDL can internally call the // event callback which locks the mutex again. - joystick->SetSDLJoystick(nullptr); + joystick->SetSDLJoystick(nullptr, nullptr); } void SDLState::HandleGameControllerEvent(const SDL_Event& event) { @@ -460,7 +477,7 @@ public: const int port = params.Get("port", 0); const int axis_x = params.Get("axis_x", 0); const int axis_y = params.Get("axis_y", 1); - const float deadzone = std::clamp(params.Get("deadzone", 0.0f), 0.0f, .99f); + const float deadzone = std::clamp(params.Get("deadzone", 0.0f), 0.0f, 1.0f); const float range = std::clamp(params.Get("range", 1.0f), 0.50f, 1.50f); auto joystick = state.GetSDLJoystickByGUID(guid, port); @@ -476,8 +493,10 @@ private: SDLState::SDLState() { using namespace Input; - RegisterFactory("sdl", std::make_shared(*this)); - RegisterFactory("sdl", std::make_shared(*this)); + analog_factory = std::make_shared(*this); + button_factory = std::make_shared(*this); + RegisterFactory("sdl", analog_factory); + RegisterFactory("sdl", button_factory); // If the frontend is going to manage the event loop, then we dont start one here start_thread = !SDL_WasInit(SDL_INIT_JOYSTICK); @@ -485,6 +504,7 @@ SDLState::SDLState() { LOG_CRITICAL(Input, "SDL_Init(SDL_INIT_JOYSTICK) failed with: {}", SDL_GetError()); return; } + has_gamecontroller = SDL_InitSubSystem(SDL_INIT_GAMECONTROLLER); if (SDL_SetHint(SDL_HINT_JOYSTICK_ALLOW_BACKGROUND_EVENTS, "1") == SDL_FALSE) { LOG_ERROR(Input, "Failed to set hint for background events with: {}", SDL_GetError()); } @@ -497,7 +517,7 @@ SDLState::SDLState() { using namespace std::chrono_literals; while (initialized) { SDL_PumpEvents(); - std::this_thread::sleep_for(10ms); + std::this_thread::sleep_for(5ms); } }); } @@ -523,65 +543,233 @@ SDLState::~SDLState() { } } -static Common::ParamPackage SDLEventToButtonParamPackage(SDLState& state, const SDL_Event& event) { +std::vector SDLState::GetInputDevices() { + std::scoped_lock lock(joystick_map_mutex); + std::vector devices = {}; + for (const auto& [key, value] : joystick_map) { + for (const auto& joystick : value) { + auto controller = joystick->GetSDLGameController(); + auto joy = joystick->GetSDLJoystick(); + if (controller) { + std::string name = + fmt::format("{} {}", SDL_GameControllerName(controller), joystick->GetPort()); + devices.emplace_back(Common::ParamPackage{ + {"class", "sdl"}, + {"display", name}, + {"guid", joystick->GetGUID()}, + {"port", std::to_string(joystick->GetPort())}, + }); + } else if (joy) { + std::string name = fmt::format("{} {}", SDL_JoystickName(joy), joystick->GetPort()); + devices.emplace_back(Common::ParamPackage{ + {"class", "sdl"}, + {"display", name}, + {"guid", joystick->GetGUID()}, + {"port", std::to_string(joystick->GetPort())}, + }); + } + } + } + return devices; +} + +namespace { +Common::ParamPackage BuildAnalogParamPackageForButton(int port, std::string guid, u8 axis, + float value = 0.1) { Common::ParamPackage params({{"engine", "sdl"}}); + params.Set("port", port); + params.Set("guid", guid); + params.Set("axis", axis); + if (value > 0) { + params.Set("direction", "+"); + params.Set("threshold", "0.5"); + } else { + params.Set("direction", "-"); + params.Set("threshold", "-0.5"); + } + return params; +} + +Common::ParamPackage BuildButtonParamPackageForButton(int port, std::string guid, u8 button) { + Common::ParamPackage params({{"engine", "sdl"}}); + params.Set("port", port); + params.Set("guid", guid); + params.Set("button", button); + return params; +} + +Common::ParamPackage BuildHatParamPackageForButton(int port, std::string guid, u8 hat, u8 value) { + Common::ParamPackage params({{"engine", "sdl"}}); + + params.Set("port", port); + params.Set("guid", guid); + params.Set("hat", hat); + switch (value) { + case SDL_HAT_UP: + params.Set("direction", "up"); + break; + case SDL_HAT_DOWN: + params.Set("direction", "down"); + break; + case SDL_HAT_LEFT: + params.Set("direction", "left"); + break; + case SDL_HAT_RIGHT: + params.Set("direction", "right"); + break; + default: + return {}; + } + return params; +} + +Common::ParamPackage SDLEventToButtonParamPackage(SDLState& state, const SDL_Event& event) { + Common::ParamPackage params{}; switch (event.type) { case SDL_JOYAXISMOTION: { const auto joystick = state.GetSDLJoystickBySDLID(event.jaxis.which); - params.Set("port", joystick->GetPort()); - params.Set("guid", joystick->GetGUID()); - params.Set("axis", event.jaxis.axis); - if (event.jaxis.value > 0) { - params.Set("direction", "+"); - params.Set("threshold", "0.5"); - } else { - params.Set("direction", "-"); - params.Set("threshold", "-0.5"); - } + params = BuildAnalogParamPackageForButton(joystick->GetPort(), joystick->GetGUID(), + event.jaxis.axis, event.jaxis.value); break; } case SDL_JOYBUTTONUP: { const auto joystick = state.GetSDLJoystickBySDLID(event.jbutton.which); - params.Set("port", joystick->GetPort()); - params.Set("guid", joystick->GetGUID()); - params.Set("button", event.jbutton.button); + params = BuildButtonParamPackageForButton(joystick->GetPort(), joystick->GetGUID(), + event.jbutton.button); break; } case SDL_JOYHATMOTION: { const auto joystick = state.GetSDLJoystickBySDLID(event.jhat.which); - params.Set("port", joystick->GetPort()); - params.Set("guid", joystick->GetGUID()); - params.Set("hat", event.jhat.hat); - switch (event.jhat.value) { - case SDL_HAT_UP: - params.Set("direction", "up"); - break; - case SDL_HAT_DOWN: - params.Set("direction", "down"); - break; - case SDL_HAT_LEFT: - params.Set("direction", "left"); - break; - case SDL_HAT_RIGHT: - params.Set("direction", "right"); - break; - default: - return {}; - } + params = BuildHatParamPackageForButton(joystick->GetPort(), joystick->GetGUID(), + event.jhat.hat, event.jhat.value); break; } } return params; } -namespace Polling { +Common::ParamPackage BuildParamPackageForBinding(int port, const std::string& guid, + const SDL_GameControllerButtonBind& binding) { + Common::ParamPackage out{}; + switch (binding.bindType) { + case SDL_CONTROLLER_BINDTYPE_AXIS: + out = BuildAnalogParamPackageForButton(port, guid, binding.value.axis); + break; + case SDL_CONTROLLER_BINDTYPE_BUTTON: + out = BuildButtonParamPackageForButton(port, guid, binding.value.button); + break; + case SDL_CONTROLLER_BINDTYPE_HAT: + out = BuildHatParamPackageForButton(port, guid, binding.value.hat.hat, + binding.value.hat.hat_mask); + break; + default: + break; + } + return out; +}; +Common::ParamPackage BuildParamPackageForAnalog(int port, const std::string& guid, int axis_x, + int axis_y) { + Common::ParamPackage params{}; + params.Set("engine", "sdl"); + params.Set("port", port); + params.Set("guid", guid); + params.Set("axis_x", axis_x); + params.Set("axis_y", axis_y); + return params; +} +} // Anonymous namespace + +ButtonMapping SDLState::GetButtonMappingForDevice(const Common::ParamPackage& params) { + // This list is missing ZL/ZR since those are not considered buttons in SDL GameController. + // We will add those afterwards + // This list also excludes Screenshot since theres not really a mapping for that + std::unordered_map + switch_to_sdl_button = { + {Settings::NativeButton::A, SDL_CONTROLLER_BUTTON_B}, + {Settings::NativeButton::B, SDL_CONTROLLER_BUTTON_A}, + {Settings::NativeButton::X, SDL_CONTROLLER_BUTTON_Y}, + {Settings::NativeButton::Y, SDL_CONTROLLER_BUTTON_X}, + {Settings::NativeButton::LStick, SDL_CONTROLLER_BUTTON_LEFTSTICK}, + {Settings::NativeButton::RStick, SDL_CONTROLLER_BUTTON_RIGHTSTICK}, + {Settings::NativeButton::L, SDL_CONTROLLER_BUTTON_LEFTSHOULDER}, + {Settings::NativeButton::R, SDL_CONTROLLER_BUTTON_RIGHTSHOULDER}, + {Settings::NativeButton::Plus, SDL_CONTROLLER_BUTTON_START}, + {Settings::NativeButton::Minus, SDL_CONTROLLER_BUTTON_BACK}, + {Settings::NativeButton::DLeft, SDL_CONTROLLER_BUTTON_DPAD_LEFT}, + {Settings::NativeButton::DUp, SDL_CONTROLLER_BUTTON_DPAD_UP}, + {Settings::NativeButton::DRight, SDL_CONTROLLER_BUTTON_DPAD_RIGHT}, + {Settings::NativeButton::DDown, SDL_CONTROLLER_BUTTON_DPAD_DOWN}, + {Settings::NativeButton::SL, SDL_CONTROLLER_BUTTON_LEFTSHOULDER}, + {Settings::NativeButton::SR, SDL_CONTROLLER_BUTTON_RIGHTSHOULDER}, + {Settings::NativeButton::Home, SDL_CONTROLLER_BUTTON_GUIDE}, + }; + if (!params.Has("guid") || !params.Has("port")) { + return {}; + } + const auto joystick = GetSDLJoystickByGUID(params.Get("guid", ""), params.Get("port", 0)); + auto controller = joystick->GetSDLGameController(); + if (!controller) { + return {}; + } + + ButtonMapping mapping{}; + for (const auto& [switch_button, sdl_button] : switch_to_sdl_button) { + const auto& binding = SDL_GameControllerGetBindForButton(controller, sdl_button); + mapping[switch_button] = + BuildParamPackageForBinding(joystick->GetPort(), joystick->GetGUID(), binding); + } + + // Add the missing bindings for ZL/ZR + std::unordered_map switch_to_sdl_axis = + { + {Settings::NativeButton::ZL, SDL_CONTROLLER_AXIS_TRIGGERLEFT}, + {Settings::NativeButton::ZR, SDL_CONTROLLER_AXIS_TRIGGERRIGHT}, + }; + for (const auto& [switch_button, sdl_axis] : switch_to_sdl_axis) { + const auto& binding = SDL_GameControllerGetBindForAxis(controller, sdl_axis); + mapping[switch_button] = + BuildParamPackageForBinding(joystick->GetPort(), joystick->GetGUID(), binding); + } + + return mapping; +} + +AnalogMapping SDLState::GetAnalogMappingForDevice(const Common::ParamPackage& params) { + if (!params.Has("guid") || !params.Has("port")) { + return {}; + } + const auto joystick = GetSDLJoystickByGUID(params.Get("guid", ""), params.Get("port", 0)); + auto controller = joystick->GetSDLGameController(); + if (!controller) { + return {}; + } + + AnalogMapping mapping = {}; + const auto& binding_left_x = + SDL_GameControllerGetBindForAxis(controller, SDL_CONTROLLER_AXIS_LEFTX); + const auto& binding_left_y = + SDL_GameControllerGetBindForAxis(controller, SDL_CONTROLLER_AXIS_LEFTY); + mapping[Settings::NativeAnalog::LStick] = + BuildParamPackageForAnalog(joystick->GetPort(), joystick->GetGUID(), + binding_left_x.value.axis, binding_left_y.value.axis); + const auto& binding_right_x = + SDL_GameControllerGetBindForAxis(controller, SDL_CONTROLLER_AXIS_RIGHTX); + const auto& binding_right_y = + SDL_GameControllerGetBindForAxis(controller, SDL_CONTROLLER_AXIS_RIGHTY); + mapping[Settings::NativeAnalog::RStick] = + BuildParamPackageForAnalog(joystick->GetPort(), joystick->GetGUID(), + binding_right_x.value.axis, binding_right_y.value.axis); + return mapping; +} + +namespace Polling { class SDLPoller : public InputCommon::Polling::DevicePoller { public: explicit SDLPoller(SDLState& state_) : state(state_) {} - void Start() override { + void Start(std::string device_id) override { state.event_queue.Clear(); state.polling = true; } @@ -601,71 +789,106 @@ public: Common::ParamPackage GetNextInput() override { SDL_Event event; while (state.event_queue.Pop(event)) { - switch (event.type) { - case SDL_JOYAXISMOTION: - if (std::abs(event.jaxis.value / 32767.0) < 0.5) { - break; - } - [[fallthrough]]; - case SDL_JOYBUTTONUP: - case SDL_JOYHATMOTION: - return SDLEventToButtonParamPackage(state, event); + const auto package = FromEvent(event); + if (package) { + return *package; } } return {}; } + std::optional FromEvent(const SDL_Event& event) { + switch (event.type) { + case SDL_JOYAXISMOTION: + if (std::abs(event.jaxis.value / 32767.0) < 0.5) { + break; + } + [[fallthrough]]; + case SDL_JOYBUTTONUP: + case SDL_JOYHATMOTION: + return {SDLEventToButtonParamPackage(state, event)}; + } + return {}; + } }; -class SDLAnalogPoller final : public SDLPoller { +/** + * Attempts to match the press to a controller joy axis (left/right stick) and if a match + * isn't found, checks if the event matches anything from SDLButtonPoller and uses that + * instead + */ +class SDLAnalogPreferredPoller final : public SDLPoller { public: - explicit SDLAnalogPoller(SDLState& state_) : SDLPoller(state_) {} - - void Start() override { - SDLPoller::Start(); + explicit SDLAnalogPreferredPoller(SDLState& state_) + : SDLPoller(state_), button_poller(state_) {} + void Start(std::string device_id) override { + SDLPoller::Start(device_id); + // Load the game controller // Reset stored axes analog_x_axis = -1; analog_y_axis = -1; - analog_axes_joystick = -1; } Common::ParamPackage GetNextInput() override { SDL_Event event; while (state.event_queue.Pop(event)) { - if (event.type != SDL_JOYAXISMOTION || std::abs(event.jaxis.value / 32767.0) < 0.5) { + // Filter out axis events that are below a threshold + if (event.type == SDL_JOYAXISMOTION && std::abs(event.jaxis.value / 32767.0) < 0.5) { continue; } - // An analog device needs two axes, so we need to store the axis for later and wait for - // a second SDL event. The axes also must be from the same joystick. - const int axis = event.jaxis.axis; - if (analog_x_axis == -1) { - analog_x_axis = axis; - analog_axes_joystick = event.jaxis.which; - } else if (analog_y_axis == -1 && analog_x_axis != axis && - analog_axes_joystick == event.jaxis.which) { - analog_y_axis = axis; + // Simplify controller config by testing if game controller support is enabled. + if (event.type == SDL_JOYAXISMOTION) { + const auto axis = event.jaxis.axis; + const auto joystick = state.GetSDLJoystickBySDLID(event.jaxis.which); + const auto controller = joystick->GetSDLGameController(); + if (controller) { + const auto axis_left_x = + SDL_GameControllerGetBindForAxis(controller, SDL_CONTROLLER_AXIS_LEFTX) + .value.axis; + const auto axis_left_y = + SDL_GameControllerGetBindForAxis(controller, SDL_CONTROLLER_AXIS_LEFTY) + .value.axis; + const auto axis_right_x = + SDL_GameControllerGetBindForAxis(controller, SDL_CONTROLLER_AXIS_RIGHTX) + .value.axis; + const auto axis_right_y = + SDL_GameControllerGetBindForAxis(controller, SDL_CONTROLLER_AXIS_RIGHTY) + .value.axis; + + if (axis == axis_left_x || axis == axis_left_y) { + analog_x_axis = axis_left_x; + analog_y_axis = axis_left_y; + break; + } else if (axis == axis_right_x || axis == axis_right_y) { + analog_x_axis = axis_right_x; + analog_y_axis = axis_right_y; + break; + } + } + } + + // If the press wasn't accepted as a joy axis, check for a button press + auto button_press = button_poller.FromEvent(event); + if (button_press) { + return *button_press; } } - Common::ParamPackage params; + if (analog_x_axis != -1 && analog_y_axis != -1) { const auto joystick = state.GetSDLJoystickBySDLID(event.jaxis.which); - params.Set("engine", "sdl"); - params.Set("port", joystick->GetPort()); - params.Set("guid", joystick->GetGUID()); - params.Set("axis_x", analog_x_axis); - params.Set("axis_y", analog_y_axis); + auto params = BuildParamPackageForAnalog(joystick->GetPort(), joystick->GetGUID(), + analog_x_axis, analog_y_axis); analog_x_axis = -1; analog_y_axis = -1; - analog_axes_joystick = -1; return params; } - return params; + return {}; } private: int analog_x_axis = -1; int analog_y_axis = -1; - SDL_JoystickID analog_axes_joystick = -1; + SDLButtonPoller button_poller; }; } // namespace Polling @@ -673,8 +896,8 @@ SDLState::Pollers SDLState::GetPollers(InputCommon::Polling::DeviceType type) { Pollers pollers; switch (type) { - case InputCommon::Polling::DeviceType::Analog: - pollers.emplace_back(std::make_unique(*this)); + case InputCommon::Polling::DeviceType::AnalogPreferred: + pollers.emplace_back(std::make_unique(*this)); break; case InputCommon::Polling::DeviceType::Button: pollers.emplace_back(std::make_unique(*this)); diff --git a/src/input_common/sdl/sdl_impl.h b/src/input_common/sdl/sdl_impl.h index 606a32c5b..bd19ba61d 100644 --- a/src/input_common/sdl/sdl_impl.h +++ b/src/input_common/sdl/sdl_impl.h @@ -50,6 +50,11 @@ public: std::atomic polling = false; Common::SPSCQueue event_queue; + std::vector GetInputDevices() override; + + ButtonMapping GetButtonMappingForDevice(const Common::ParamPackage& params) override; + AnalogMapping GetAnalogMappingForDevice(const Common::ParamPackage& params) override; + private: void InitJoystick(int joystick_index); void CloseJoystick(SDL_Joystick* sdl_joystick); @@ -57,6 +62,9 @@ private: /// Needs to be called before SDL_QuitSubSystem. void CloseJoysticks(); + // Set to true if SDL supports game controller subsystem + bool has_gamecontroller = false; + /// Map of GUID of a list of corresponding virtual Joysticks std::unordered_map>> joystick_map; std::mutex joystick_map_mutex; diff --git a/src/input_common/settings.cpp b/src/input_common/settings.cpp new file mode 100644 index 000000000..80c719cf4 --- /dev/null +++ b/src/input_common/settings.cpp @@ -0,0 +1,33 @@ +// Copyright 2020 yuzu Emulator Project +// Licensed under GPLv2 or any later version +// Refer to the license.txt file included. + +#include "input_common/settings.h" + +namespace Settings { +namespace NativeButton { +const std::array mapping = {{ + "button_a", "button_b", "button_x", "button_y", "button_lstick", + "button_rstick", "button_l", "button_r", "button_zl", "button_zr", + "button_plus", "button_minus", "button_dleft", "button_dup", "button_dright", + "button_ddown", "button_sl", "button_sr", "button_home", "button_screenshot", +}}; +} + +namespace NativeAnalog { +const std::array mapping = {{ + "lstick", + "rstick", +}}; +} + +namespace NativeMouseButton { +const std::array mapping = {{ + "left", + "right", + "middle", + "forward", + "back", +}}; +} +} // namespace Settings diff --git a/src/input_common/settings.h b/src/input_common/settings.h new file mode 100644 index 000000000..8e481a7fe --- /dev/null +++ b/src/input_common/settings.h @@ -0,0 +1,335 @@ +// Copyright 2020 yuzu Emulator Project +// Licensed under GPLv2 or any later version +// Refer to the license.txt file included. + +#pragma once + +#include +#include +#include "common/common_types.h" + +namespace Settings { +namespace NativeButton { +enum Values { + A, + B, + X, + Y, + LStick, + RStick, + L, + R, + ZL, + ZR, + Plus, + Minus, + + DLeft, + DUp, + DRight, + DDown, + + SL, + SR, + + Home, + Screenshot, + + NumButtons, +}; + +constexpr int BUTTON_HID_BEGIN = A; +constexpr int BUTTON_NS_BEGIN = Home; + +constexpr int BUTTON_HID_END = BUTTON_NS_BEGIN; +constexpr int BUTTON_NS_END = NumButtons; + +constexpr int NUM_BUTTONS_HID = BUTTON_HID_END - BUTTON_HID_BEGIN; +constexpr int NUM_BUTTONS_NS = BUTTON_NS_END - BUTTON_NS_BEGIN; + +extern const std::array mapping; + +} // namespace NativeButton + +namespace NativeAnalog { +enum Values { + LStick, + RStick, + + NumAnalogs, +}; + +constexpr int STICK_HID_BEGIN = LStick; +constexpr int STICK_HID_END = NumAnalogs; +constexpr int NUM_STICKS_HID = NumAnalogs; + +extern const std::array mapping; +} // namespace NativeAnalog + +namespace NativeMouseButton { +enum Values { + Left, + Right, + Middle, + Forward, + Back, + + NumMouseButtons, +}; + +constexpr int MOUSE_HID_BEGIN = Left; +constexpr int MOUSE_HID_END = NumMouseButtons; +constexpr int NUM_MOUSE_HID = NumMouseButtons; + +extern const std::array mapping; +} // namespace NativeMouseButton + +namespace NativeKeyboard { +enum Keys { + None, + Error, + + A = 4, + B, + C, + D, + E, + F, + G, + H, + I, + J, + K, + L, + M, + N, + O, + P, + Q, + R, + S, + T, + U, + V, + W, + X, + Y, + Z, + N1, + N2, + N3, + N4, + N5, + N6, + N7, + N8, + N9, + N0, + Enter, + Escape, + Backspace, + Tab, + Space, + Minus, + Equal, + LeftBrace, + RightBrace, + Backslash, + Tilde, + Semicolon, + Apostrophe, + Grave, + Comma, + Dot, + Slash, + CapsLockKey, + + F1, + F2, + F3, + F4, + F5, + F6, + F7, + F8, + F9, + F10, + F11, + F12, + + SystemRequest, + ScrollLockKey, + Pause, + Insert, + Home, + PageUp, + Delete, + End, + PageDown, + Right, + Left, + Down, + Up, + + NumLockKey, + KPSlash, + KPAsterisk, + KPMinus, + KPPlus, + KPEnter, + KP1, + KP2, + KP3, + KP4, + KP5, + KP6, + KP7, + KP8, + KP9, + KP0, + KPDot, + + Key102, + Compose, + Power, + KPEqual, + + F13, + F14, + F15, + F16, + F17, + F18, + F19, + F20, + F21, + F22, + F23, + F24, + + Open, + Help, + Properties, + Front, + Stop, + Repeat, + Undo, + Cut, + Copy, + Paste, + Find, + Mute, + VolumeUp, + VolumeDown, + CapsLockActive, + NumLockActive, + ScrollLockActive, + KPComma, + + KPLeftParenthesis, + KPRightParenthesis, + + LeftControlKey = 0xE0, + LeftShiftKey, + LeftAltKey, + LeftMetaKey, + RightControlKey, + RightShiftKey, + RightAltKey, + RightMetaKey, + + MediaPlayPause, + MediaStopCD, + MediaPrevious, + MediaNext, + MediaEject, + MediaVolumeUp, + MediaVolumeDown, + MediaMute, + MediaWebsite, + MediaBack, + MediaForward, + MediaStop, + MediaFind, + MediaScrollUp, + MediaScrollDown, + MediaEdit, + MediaSleep, + MediaCoffee, + MediaRefresh, + MediaCalculator, + + NumKeyboardKeys, +}; + +static_assert(NumKeyboardKeys == 0xFC, "Incorrect number of keyboard keys."); + +enum Modifiers { + LeftControl, + LeftShift, + LeftAlt, + LeftMeta, + RightControl, + RightShift, + RightAlt, + RightMeta, + CapsLock, + ScrollLock, + NumLock, + + NumKeyboardMods, +}; + +constexpr int KEYBOARD_KEYS_HID_BEGIN = None; +constexpr int KEYBOARD_KEYS_HID_END = NumKeyboardKeys; +constexpr int NUM_KEYBOARD_KEYS_HID = NumKeyboardKeys; + +constexpr int KEYBOARD_MODS_HID_BEGIN = LeftControl; +constexpr int KEYBOARD_MODS_HID_END = NumKeyboardMods; +constexpr int NUM_KEYBOARD_MODS_HID = NumKeyboardMods; + +} // namespace NativeKeyboard + +using ButtonsRaw = std::array; +using AnalogsRaw = std::array; +using MouseButtonsRaw = std::array; +using KeyboardKeysRaw = std::array; +using KeyboardModsRaw = std::array; + +constexpr u32 JOYCON_BODY_NEON_RED = 0xFF3C28; +constexpr u32 JOYCON_BUTTONS_NEON_RED = 0x1E0A0A; +constexpr u32 JOYCON_BODY_NEON_BLUE = 0x0AB9E6; +constexpr u32 JOYCON_BUTTONS_NEON_BLUE = 0x001E1E; + +enum class ControllerType { + ProController, + DualJoyconDetached, + LeftJoycon, + RightJoycon, + Handheld, +}; + +struct PlayerInput { + bool connected; + ControllerType controller_type; + ButtonsRaw buttons; + AnalogsRaw analogs; + std::string lstick_mod; + std::string rstick_mod; + + u32 body_color_left; + u32 body_color_right; + u32 button_color_left; + u32 button_color_right; +}; + +struct TouchscreenInput { + bool enabled; + std::string device; + + u32 finger; + u32 diameter_x; + u32 diameter_y; + u32 rotation_angle; +}; +} // namespace Settings diff --git a/src/input_common/udp/udp.cpp b/src/input_common/udp/udp.cpp index 8c6ef1394..60cf47123 100644 --- a/src/input_common/udp/udp.cpp +++ b/src/input_common/udp/udp.cpp @@ -77,10 +77,11 @@ State::State() { std::make_unique(status, Settings::values.udp_input_address, Settings::values.udp_input_port, Settings::values.udp_pad_index); - Input::RegisterFactory("cemuhookudp", - std::make_shared(status)); - Input::RegisterFactory("cemuhookudp", - std::make_shared(status)); + motion_factory = std::make_shared(status); + touch_factory = std::make_shared(status); + + Input::RegisterFactory("cemuhookudp", motion_factory); + Input::RegisterFactory("cemuhookudp", touch_factory); } State::~State() { @@ -88,6 +89,12 @@ State::~State() { Input::UnregisterFactory("cemuhookudp"); } +std::vector State::GetInputDevices() { + std::vector devices = {}; + // TODO support binding udp devices + return devices; +} + void State::ReloadUDPClient() { client->ReloadSocket(Settings::values.udp_input_address, Settings::values.udp_input_port, Settings::values.udp_pad_index); diff --git a/src/input_common/udp/udp.h b/src/input_common/udp/udp.h index 4f83f0441..24f6e0857 100644 --- a/src/input_common/udp/udp.h +++ b/src/input_common/udp/udp.h @@ -5,19 +5,26 @@ #pragma once #include +#include +#include "common/param_package.h" namespace InputCommon::CemuhookUDP { class Client; +class UDPMotionFactory; +class UDPTouchFactory; class State { public: State(); ~State(); void ReloadUDPClient(); + std::vector GetInputDevices(); private: std::unique_ptr client; + std::shared_ptr motion_factory; + std::shared_ptr touch_factory; }; std::unique_ptr Init(); diff --git a/src/yuzu/CMakeLists.txt b/src/yuzu/CMakeLists.txt index 656096c9f..6987e85e1 100644 --- a/src/yuzu/CMakeLists.txt +++ b/src/yuzu/CMakeLists.txt @@ -39,6 +39,9 @@ add_executable(yuzu configuration/configure_debug.cpp configuration/configure_debug.h configuration/configure_debug.ui + configuration/configure_debug_controller.cpp + configuration/configure_debug_controller.h + configuration/configure_debug_controller.ui configuration/configure_dialog.cpp configuration/configure_dialog.h configuration/configure_filesystem.cpp @@ -62,9 +65,9 @@ add_executable(yuzu configuration/configure_input_player.cpp configuration/configure_input_player.h configuration/configure_input_player.ui - configuration/configure_input_simple.cpp - configuration/configure_input_simple.h - configuration/configure_input_simple.ui + configuration/configure_input_advanced.cpp + configuration/configure_input_advanced.h + configuration/configure_input_advanced.ui configuration/configure_mouse_advanced.cpp configuration/configure_mouse_advanced.h configuration/configure_mouse_advanced.ui diff --git a/src/yuzu/configuration/config.cpp b/src/yuzu/configuration/config.cpp index 7af974d8d..489877be9 100644 --- a/src/yuzu/configuration/config.cpp +++ b/src/yuzu/configuration/config.cpp @@ -6,7 +6,6 @@ #include #include #include "common/file_util.h" -#include "configure_input_simple.h" #include "core/hle/service/acc/profile_manager.h" #include "core/hle/service/hid/controllers/npad.h" #include "input_common/main.h" @@ -32,29 +31,29 @@ Config::~Config() { } const std::array Config::default_buttons = { - Qt::Key_A, Qt::Key_S, Qt::Key_Z, Qt::Key_X, Qt::Key_3, Qt::Key_4, Qt::Key_Q, - Qt::Key_W, Qt::Key_1, Qt::Key_2, Qt::Key_N, Qt::Key_M, Qt::Key_F, Qt::Key_T, - Qt::Key_H, Qt::Key_G, Qt::Key_Left, Qt::Key_Up, Qt::Key_Right, Qt::Key_Down, Qt::Key_J, - Qt::Key_I, Qt::Key_L, Qt::Key_K, Qt::Key_D, Qt::Key_C, Qt::Key_B, Qt::Key_V, + Qt::Key_A, Qt::Key_S, Qt::Key_Z, Qt::Key_X, Qt::Key_3, Qt::Key_4, Qt::Key_Q, + Qt::Key_W, Qt::Key_1, Qt::Key_2, Qt::Key_N, Qt::Key_M, Qt::Key_F, Qt::Key_T, + Qt::Key_H, Qt::Key_G, Qt::Key_D, Qt::Key_C, Qt::Key_B, Qt::Key_V, }; -const std::array, Settings::NativeAnalog::NumAnalogs> Config::default_analogs{{ +const std::array, Settings::NativeAnalog::NumAnalogs> Config::default_analogs{{ { Qt::Key_Up, Qt::Key_Down, Qt::Key_Left, Qt::Key_Right, - Qt::Key_E, }, { Qt::Key_I, Qt::Key_K, Qt::Key_J, Qt::Key_L, - Qt::Key_R, }, }}; +const int Config::default_lstick_mod = Qt::Key_E; +const int Config::default_rstick_mod = Qt::Key_R; + const std::array Config::default_mouse_buttons = { Qt::Key_BracketLeft, Qt::Key_BracketRight, Qt::Key_Apostrophe, Qt::Key_Minus, Qt::Key_Equal, @@ -243,10 +242,10 @@ void Config::ReadPlayerValues() { player.connected = ReadSetting(QStringLiteral("player_%1_connected").arg(p), false).toBool(); - player.type = static_cast( + player.controller_type = static_cast( qt_config ->value(QStringLiteral("player_%1_type").arg(p), - static_cast(Settings::ControllerType::DualJoycon)) + static_cast(Settings::ControllerType::ProController)) .toUInt()); player.body_color_left = qt_config @@ -300,12 +299,6 @@ void Config::ReadPlayerValues() { } } } - - std::stable_partition( - Settings::values.players.begin(), - Settings::values.players.begin() + - Service::HID::Controller_NPad::NPadIdToIndex(Service::HID::NPAD_HANDHELD), - [](const auto& player) { return player.connected; }); } void Config::ReadDebugValues() { @@ -397,13 +390,6 @@ void Config::ReadTouchscreenValues() { ReadSetting(QStringLiteral("touchscreen_diameter_y"), 15).toUInt(); } -void Config::ApplyDefaultProfileIfInputInvalid() { - if (!std::any_of(Settings::values.players.begin(), Settings::values.players.end(), - [](const Settings::PlayerInput& in) { return in.connected; })) { - ApplyInputProfileConfiguration(UISettings::values.profile_index); - } -} - void Config::ReadAudioValues() { qt_config->beginGroup(QStringLiteral("Audio")); @@ -433,6 +419,8 @@ void Config::ReadControlValues() { ReadMouseValues(); ReadTouchscreenValues(); + Settings::values.vibration_enabled = + ReadSetting(QStringLiteral("vibration_enabled"), true).toBool(); Settings::values.motion_device = ReadSetting(QStringLiteral("motion_device"), QStringLiteral("engine:motion_emu,update_period:100,sensitivity:0.01")) @@ -501,7 +489,7 @@ void Config::ReadDataStorageValues() { Settings::values.gamecard_current_game = ReadSetting(QStringLiteral("gamecard_current_game"), false).toBool(); Settings::values.gamecard_path = - ReadSetting(QStringLiteral("gamecard_path"), QStringLiteral("")).toString().toStdString(); + ReadSetting(QStringLiteral("gamecard_path"), QString{}).toString().toStdString(); qt_config->endGroup(); } @@ -515,7 +503,7 @@ void Config::ReadDebuggingValues() { Settings::values.use_gdbstub = ReadSetting(QStringLiteral("use_gdbstub"), false).toBool(); Settings::values.gdbstub_port = ReadSetting(QStringLiteral("gdbstub_port"), 24689).toInt(); Settings::values.program_args = - ReadSetting(QStringLiteral("program_args"), QStringLiteral("")).toString().toStdString(); + ReadSetting(QStringLiteral("program_args"), QString{}).toString().toStdString(); Settings::values.dump_exefs = ReadSetting(QStringLiteral("dump_exefs"), false).toBool(); Settings::values.dump_nso = ReadSetting(QStringLiteral("dump_nso"), false).toBool(); Settings::values.reporting_services = @@ -548,8 +536,7 @@ void Config::ReadDisabledAddOnValues() { const auto d_size = qt_config->beginReadArray(QStringLiteral("disabled")); for (int j = 0; j < d_size; ++j) { qt_config->setArrayIndex(j); - out.push_back( - ReadSetting(QStringLiteral("d"), QStringLiteral("")).toString().toStdString()); + out.push_back(ReadSetting(QStringLiteral("d"), QString{}).toString().toStdString()); } qt_config->endArray(); Settings::values.disabled_addons.insert_or_assign(title_id, out); @@ -788,14 +775,11 @@ void Config::ReadUIValues() { UISettings::values.first_start = ReadSetting(QStringLiteral("firstStart"), true).toBool(); UISettings::values.callout_flags = ReadSetting(QStringLiteral("calloutFlags"), 0).toUInt(); UISettings::values.show_console = ReadSetting(QStringLiteral("showConsole"), false).toBool(); - UISettings::values.profile_index = ReadSetting(QStringLiteral("profileIndex"), 0).toUInt(); UISettings::values.pause_when_in_background = ReadSetting(QStringLiteral("pauseWhenInBackground"), false).toBool(); UISettings::values.hide_mouse = ReadSetting(QStringLiteral("hideInactiveMouse"), false).toBool(); - ApplyDefaultProfileIfInputInvalid(); - qt_config->endGroup(); } @@ -869,8 +853,9 @@ void Config::SavePlayerValues() { const auto& player = Settings::values.players[p]; WriteSetting(QStringLiteral("player_%1_connected").arg(p), player.connected, false); - WriteSetting(QStringLiteral("player_%1_type").arg(p), static_cast(player.type), - static_cast(Settings::ControllerType::DualJoycon)); + WriteSetting(QStringLiteral("player_%1_type").arg(p), + static_cast(player.controller_type), + static_cast(Settings::ControllerType::ProController)); WriteSetting(QStringLiteral("player_%1_body_color_left").arg(p), player.body_color_left, Settings::JOYCON_BODY_NEON_BLUE); @@ -990,6 +975,7 @@ void Config::SaveControlValues() { SaveMouseValues(); SaveTouchscreenValues(); + WriteSetting(QStringLiteral("vibration_enabled"), Settings::values.vibration_enabled, true); WriteSetting(QStringLiteral("motion_device"), QString::fromStdString(Settings::values.motion_device), QStringLiteral("engine:motion_emu,update_period:100,sensitivity:0.01")); @@ -1036,7 +1022,7 @@ void Config::SaveDataStorageValues() { WriteSetting(QStringLiteral("gamecard_current_game"), Settings::values.gamecard_current_game, false); WriteSetting(QStringLiteral("gamecard_path"), - QString::fromStdString(Settings::values.gamecard_path), QStringLiteral("")); + QString::fromStdString(Settings::values.gamecard_path), QString{}); qt_config->endGroup(); } @@ -1049,7 +1035,7 @@ void Config::SaveDebuggingValues() { WriteSetting(QStringLiteral("use_gdbstub"), Settings::values.use_gdbstub, false); WriteSetting(QStringLiteral("gdbstub_port"), Settings::values.gdbstub_port, 24689); WriteSetting(QStringLiteral("program_args"), - QString::fromStdString(Settings::values.program_args), QStringLiteral("")); + QString::fromStdString(Settings::values.program_args), QString{}); WriteSetting(QStringLiteral("dump_exefs"), Settings::values.dump_exefs, false); WriteSetting(QStringLiteral("dump_nso"), Settings::values.dump_nso, false); WriteSetting(QStringLiteral("quest_flag"), Settings::values.quest_flag, false); @@ -1076,8 +1062,7 @@ void Config::SaveDisabledAddOnValues() { qt_config->beginWriteArray(QStringLiteral("disabled")); for (std::size_t j = 0; j < elem.second.size(); ++j) { qt_config->setArrayIndex(static_cast(j)); - WriteSetting(QStringLiteral("d"), QString::fromStdString(elem.second[j]), - QStringLiteral("")); + WriteSetting(QStringLiteral("d"), QString::fromStdString(elem.second[j]), QString{}); } qt_config->endArray(); ++i; @@ -1266,7 +1251,6 @@ void Config::SaveUIValues() { WriteSetting(QStringLiteral("firstStart"), UISettings::values.first_start, true); WriteSetting(QStringLiteral("calloutFlags"), UISettings::values.callout_flags, 0); WriteSetting(QStringLiteral("showConsole"), UISettings::values.show_console, false); - WriteSetting(QStringLiteral("profileIndex"), UISettings::values.profile_index, 0); WriteSetting(QStringLiteral("pauseWhenInBackground"), UISettings::values.pause_when_in_background, false); WriteSetting(QStringLiteral("hideInactiveMouse"), UISettings::values.hide_mouse, false); diff --git a/src/yuzu/configuration/config.h b/src/yuzu/configuration/config.h index e5f39b040..9eeaf9d1e 100644 --- a/src/yuzu/configuration/config.h +++ b/src/yuzu/configuration/config.h @@ -23,7 +23,9 @@ public: void Save(); static const std::array default_buttons; - static const std::array, Settings::NativeAnalog::NumAnalogs> default_analogs; + static const std::array, Settings::NativeAnalog::NumAnalogs> default_analogs; + static const int default_lstick_mod; + static const int default_rstick_mod; static const std::array default_mouse_buttons; static const std::array default_keyboard_keys; @@ -37,7 +39,6 @@ private: void ReadKeyboardValues(); void ReadMouseValues(); void ReadTouchscreenValues(); - void ApplyDefaultProfileIfInputInvalid(); // Read functions bases off the respective config section names. void ReadAudioValues(); diff --git a/src/yuzu/configuration/configure.ui b/src/yuzu/configuration/configure.ui index 5f5d8e571..fcf42cdcb 100644 --- a/src/yuzu/configuration/configure.ui +++ b/src/yuzu/configuration/configure.ui @@ -6,7 +6,7 @@ 0 0 - 382 + 650 650 @@ -26,13 +26,13 @@ - 150 + 120 0 - 150 + 120 16777215 @@ -44,76 +44,121 @@ 0 + + General + General + + UI + Game List + + System + System + + Profiles + Profiles + + Filesystem + Filesystem - + + + Controls + - Input + Controls + + Hotkeys + Hotkeys + + CPU + CPU + + Debug + Debug + + Graphics + Graphics + + Advanced + GraphicsAdvanced + + Audio + Audio + + Debug + Debug + + Web + Web + + Services + Services @@ -205,9 +250,9 @@ 1 - ConfigureInputSimple + ConfigureInput QWidget -
        configuration/configure_input_simple.h
        +
        configuration/configure_input.h
        1
        diff --git a/src/yuzu/configuration/configure_debug_controller.cpp b/src/yuzu/configuration/configure_debug_controller.cpp new file mode 100644 index 000000000..45996b73f --- /dev/null +++ b/src/yuzu/configuration/configure_debug_controller.cpp @@ -0,0 +1,39 @@ +// Copyright 2020 yuzu Emulator Project +// Licensed under GPLv2 or any later version +// Refer to the license.txt file included. + +#include "ui_configure_debug_controller.h" +#include "yuzu/configuration/configure_debug_controller.h" + +ConfigureDebugController::ConfigureDebugController(QWidget* parent) + : QDialog(parent), ui(std::make_unique()) { + ui->setupUi(this); + + debug_controller = new ConfigureInputPlayer(this, 9, nullptr, true); + ui->controllerLayout->addWidget(debug_controller); + + connect(ui->clear_all_button, &QPushButton::clicked, this, + [this] { debug_controller->ClearAll(); }); + connect(ui->restore_defaults_button, &QPushButton::clicked, this, + [this] { debug_controller->RestoreDefaults(); }); + + RetranslateUI(); +} + +ConfigureDebugController::~ConfigureDebugController() = default; + +void ConfigureDebugController::ApplyConfiguration() { + debug_controller->ApplyConfiguration(); +} + +void ConfigureDebugController::changeEvent(QEvent* event) { + if (event->type() == QEvent::LanguageChange) { + RetranslateUI(); + } + + QDialog::changeEvent(event); +} + +void ConfigureDebugController::RetranslateUI() { + ui->retranslateUi(this); +} diff --git a/src/yuzu/configuration/configure_debug_controller.h b/src/yuzu/configuration/configure_debug_controller.h new file mode 100644 index 000000000..df359a4f3 --- /dev/null +++ b/src/yuzu/configuration/configure_debug_controller.h @@ -0,0 +1,33 @@ +// Copyright 2020 yuzu Emulator Project +// Licensed under GPLv2 or any later version +// Refer to the license.txt file included. + +#pragma once + +#include +#include +#include "yuzu/configuration/configure_input_player.h" + +class QPushButton; + +namespace Ui { +class ConfigureDebugController; +} + +class ConfigureDebugController : public QDialog { + Q_OBJECT + +public: + explicit ConfigureDebugController(QWidget* parent); + ~ConfigureDebugController() override; + + void ApplyConfiguration(); + +private: + void changeEvent(QEvent* event) override; + void RetranslateUI(); + + ConfigureInputPlayer* debug_controller; + + std::unique_ptr ui; +}; diff --git a/src/yuzu/configuration/configure_debug_controller.ui b/src/yuzu/configuration/configure_debug_controller.ui new file mode 100644 index 000000000..a95ed50ff --- /dev/null +++ b/src/yuzu/configuration/configure_debug_controller.ui @@ -0,0 +1,97 @@ + + + ConfigureDebugController + + + + 0 + 0 + 780 + 500 + + + + Configure Debug Controller + + + + 2 + + + 9 + + + 9 + + + 9 + + + 9 + + + + + + + + + + Clear + + + + + + + Defaults + + + + + + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + + + + + + + + + + buttonBox + accepted() + ConfigureDebugController + accept() + + + 140 + 318 + + + 140 + 169 + + + + + buttonBox + rejected() + ConfigureDebugController + reject() + + + 140 + 318 + + + 140 + 169 + + + + + diff --git a/src/yuzu/configuration/configure_dialog.cpp b/src/yuzu/configuration/configure_dialog.cpp index 4e30dc51e..857577591 100644 --- a/src/yuzu/configuration/configure_dialog.cpp +++ b/src/yuzu/configuration/configure_dialog.cpp @@ -80,12 +80,12 @@ Q_DECLARE_METATYPE(QList); void ConfigureDialog::PopulateSelectionList() { const std::array>, 6> items{ - {{tr("General"), {ui->generalTab, ui->webTab, ui->debugTab, ui->uiTab}}, + {{tr("General"), {ui->generalTab, ui->hotkeysTab, ui->uiTab, ui->webTab, ui->debugTab}}, {tr("System"), {ui->systemTab, ui->profileManagerTab, ui->serviceTab, ui->filesystemTab}}, {tr("CPU"), {ui->cpuTab, ui->cpuDebugTab}}, {tr("Graphics"), {ui->graphicsTab, ui->graphicsAdvancedTab}}, {tr("Audio"), {ui->audioTab}}, - {tr("Controls"), {ui->inputTab, ui->hotkeysTab}}}, + {tr("Controls"), ui->inputTab->GetSubTabs()}}, }; [[maybe_unused]] const QSignalBlocker blocker(ui->selectorList); @@ -117,7 +117,7 @@ void ConfigureDialog::UpdateVisibleTabs() { {ui->generalTab, tr("General")}, {ui->systemTab, tr("System")}, {ui->profileManagerTab, tr("Profiles")}, - {ui->inputTab, tr("Input")}, + {ui->inputTab, tr("Controls")}, {ui->hotkeysTab, tr("Hotkeys")}, {ui->cpuTab, tr("CPU")}, {ui->cpuDebugTab, tr("Debug")}, @@ -138,6 +138,6 @@ void ConfigureDialog::UpdateVisibleTabs() { const QList tabs = qvariant_cast>(items[0]->data(Qt::UserRole)); for (const auto tab : tabs) { - ui->tabWidget->addTab(tab, widgets.at(tab)); + ui->tabWidget->addTab(tab, tab->accessibleName()); } } diff --git a/src/yuzu/configuration/configure_input.cpp b/src/yuzu/configuration/configure_input.cpp index f2977719c..5200d2d0e 100644 --- a/src/yuzu/configuration/configure_input.cpp +++ b/src/yuzu/configuration/configure_input.cpp @@ -8,18 +8,32 @@ #include #include -#include "configuration/configure_touchscreen_advanced.h" #include "core/core.h" #include "core/hle/service/am/am.h" #include "core/hle/service/am/applet_ae.h" #include "core/hle/service/am/applet_oe.h" -#include "core/hle/service/hid/controllers/npad.h" #include "core/hle/service/sm/sm.h" #include "ui_configure_input.h" +#include "ui_configure_input_advanced.h" #include "ui_configure_input_player.h" +#include "yuzu/configuration/configure_debug_controller.h" #include "yuzu/configuration/configure_input.h" +#include "yuzu/configuration/configure_input_advanced.h" #include "yuzu/configuration/configure_input_player.h" #include "yuzu/configuration/configure_mouse_advanced.h" +#include "yuzu/configuration/configure_touchscreen_advanced.h" + +namespace { +template +void CallConfigureDialog(ConfigureInput& parent, Args&&... args) { + Dialog dialog(&parent, std::forward(args)...); + + const auto res = dialog.exec(); + if (res == QDialog::Accepted) { + dialog.ApplyConfiguration(); + } +} +} // Anonymous namespace void OnDockedModeChanged(bool last_state, bool new_state) { if (last_state == new_state) { @@ -48,97 +62,93 @@ void OnDockedModeChanged(bool last_state, bool new_state) { } } -namespace { -template -void CallConfigureDialog(ConfigureInput& parent, Args&&... args) { - parent.ApplyConfiguration(); - Dialog dialog(&parent, std::forward(args)...); - - const auto res = dialog.exec(); - if (res == QDialog::Accepted) { - dialog.ApplyConfiguration(); - } -} -} // Anonymous namespace - ConfigureInput::ConfigureInput(QWidget* parent) - : QDialog(parent), ui(std::make_unique()) { + : QWidget(parent), ui(std::make_unique()) { ui->setupUi(this); - players_controller = { - ui->player1_combobox, ui->player2_combobox, ui->player3_combobox, ui->player4_combobox, - ui->player5_combobox, ui->player6_combobox, ui->player7_combobox, ui->player8_combobox, + player_controllers = { + new ConfigureInputPlayer(this, 0, ui->consoleInputSettings), + new ConfigureInputPlayer(this, 1, ui->consoleInputSettings), + new ConfigureInputPlayer(this, 2, ui->consoleInputSettings), + new ConfigureInputPlayer(this, 3, ui->consoleInputSettings), + new ConfigureInputPlayer(this, 4, ui->consoleInputSettings), + new ConfigureInputPlayer(this, 5, ui->consoleInputSettings), + new ConfigureInputPlayer(this, 6, ui->consoleInputSettings), + new ConfigureInputPlayer(this, 7, ui->consoleInputSettings), }; - players_configure = { - ui->player1_configure, ui->player2_configure, ui->player3_configure, ui->player4_configure, - ui->player5_configure, ui->player6_configure, ui->player7_configure, ui->player8_configure, + player_tabs = { + ui->tabPlayer1, ui->tabPlayer2, ui->tabPlayer3, ui->tabPlayer4, + ui->tabPlayer5, ui->tabPlayer6, ui->tabPlayer7, ui->tabPlayer8, }; + player_connected = { + ui->checkboxPlayer1Connected, ui->checkboxPlayer2Connected, ui->checkboxPlayer3Connected, + ui->checkboxPlayer4Connected, ui->checkboxPlayer5Connected, ui->checkboxPlayer6Connected, + ui->checkboxPlayer7Connected, ui->checkboxPlayer8Connected, + }; + + for (std::size_t i = 0; i < player_tabs.size(); ++i) { + player_tabs[i]->setLayout(new QHBoxLayout(player_tabs[i])); + player_tabs[i]->layout()->addWidget(player_controllers[i]); + connect(player_controllers[i], &ConfigureInputPlayer::Connected, [&, i](bool is_connected) { + if (is_connected) { + for (std::size_t index = 0; index <= i; ++index) { + player_connected[index]->setChecked(is_connected); + } + } else { + for (std::size_t index = i; index < player_tabs.size(); ++index) { + player_connected[index]->setChecked(is_connected); + } + } + }); + connect(player_controllers[i], &ConfigureInputPlayer::RefreshInputDevices, + [&] { UpdateAllInputDevices(); }); + connect(player_connected[i], &QCheckBox::stateChanged, + [&, i](int state) { player_controllers[i]->ConnectPlayer(state == Qt::Checked); }); + } + // Only the first player can choose handheld mode so connect the signal just to player 1 + connect(player_controllers[0], &ConfigureInputPlayer::HandheldStateChanged, + [&](bool is_handheld) { UpdateDockedState(is_handheld); }); + + advanced = new ConfigureInputAdvanced(this); + ui->tabAdvanced->setLayout(new QHBoxLayout(ui->tabAdvanced)); + ui->tabAdvanced->layout()->addWidget(advanced); + connect(advanced, &ConfigureInputAdvanced::CallDebugControllerDialog, + [this] { CallConfigureDialog(*this); }); + connect(advanced, &ConfigureInputAdvanced::CallMouseConfigDialog, + [this] { CallConfigureDialog(*this); }); + connect(advanced, &ConfigureInputAdvanced::CallTouchscreenConfigDialog, + [this] { CallConfigureDialog(*this); }); + + connect(ui->buttonClearAll, &QPushButton::clicked, [this] { ClearAll(); }); + connect(ui->buttonRestoreDefaults, &QPushButton::clicked, [this] { RestoreDefaults(); }); + RetranslateUI(); LoadConfiguration(); - UpdateUIEnabled(); - - connect(ui->restore_defaults_button, &QPushButton::clicked, this, - &ConfigureInput::RestoreDefaults); - - for (auto* enabled : players_controller) { - connect(enabled, QOverload::of(&QComboBox::currentIndexChanged), this, - &ConfigureInput::UpdateUIEnabled); - } - connect(ui->use_docked_mode, &QCheckBox::stateChanged, this, &ConfigureInput::UpdateUIEnabled); - connect(ui->handheld_connected, &QCheckBox::stateChanged, this, - &ConfigureInput::UpdateUIEnabled); - connect(ui->mouse_enabled, &QCheckBox::stateChanged, this, &ConfigureInput::UpdateUIEnabled); - connect(ui->keyboard_enabled, &QCheckBox::stateChanged, this, &ConfigureInput::UpdateUIEnabled); - connect(ui->debug_enabled, &QCheckBox::stateChanged, this, &ConfigureInput::UpdateUIEnabled); - connect(ui->touchscreen_enabled, &QCheckBox::stateChanged, this, - &ConfigureInput::UpdateUIEnabled); - - for (std::size_t i = 0; i < players_configure.size(); ++i) { - connect(players_configure[i], &QPushButton::clicked, this, - [this, i] { CallConfigureDialog(*this, i, false); }); - } - - connect(ui->handheld_configure, &QPushButton::clicked, this, - [this] { CallConfigureDialog(*this, 8, false); }); - - connect(ui->debug_configure, &QPushButton::clicked, this, - [this] { CallConfigureDialog(*this, 9, true); }); - - connect(ui->mouse_advanced, &QPushButton::clicked, this, - [this] { CallConfigureDialog(*this); }); - - connect(ui->touchscreen_advanced, &QPushButton::clicked, this, - [this] { CallConfigureDialog(*this); }); } ConfigureInput::~ConfigureInput() = default; +QList ConfigureInput::GetSubTabs() const { + return { + ui->tabPlayer1, ui->tabPlayer2, ui->tabPlayer3, ui->tabPlayer4, ui->tabPlayer5, + ui->tabPlayer6, ui->tabPlayer7, ui->tabPlayer8, ui->tabAdvanced, + }; +} + void ConfigureInput::ApplyConfiguration() { - for (std::size_t i = 0; i < players_controller.size(); ++i) { - const auto controller_type_index = players_controller[i]->currentIndex(); - - Settings::values.players[i].connected = controller_type_index != 0; - - if (controller_type_index > 0) { - Settings::values.players[i].type = - static_cast(controller_type_index - 1); - } else { - Settings::values.players[i].type = Settings::ControllerType::DualJoycon; - } + for (auto controller : player_controllers) { + controller->ApplyConfiguration(); } + advanced->ApplyConfiguration(); + const bool pre_docked_mode = Settings::values.use_docked_mode; - Settings::values.use_docked_mode = ui->use_docked_mode->isChecked(); + Settings::values.use_docked_mode = ui->radioDocked->isChecked(); OnDockedModeChanged(pre_docked_mode, Settings::values.use_docked_mode); - Settings::values - .players[Service::HID::Controller_NPad::NPadIdToIndex(Service::HID::NPAD_HANDHELD)] - .connected = ui->handheld_connected->isChecked(); - Settings::values.debug_pad_enabled = ui->debug_enabled->isChecked(); - Settings::values.mouse_enabled = ui->mouse_enabled->isChecked(); - Settings::values.keyboard_enabled = ui->keyboard_enabled->isChecked(); - Settings::values.touchscreen.enabled = ui->touchscreen_enabled->isChecked(); + + Settings::values.vibration_enabled = ui->vibrationGroup->isChecked(); } void ConfigureInput::changeEvent(QEvent* event) { @@ -146,94 +156,63 @@ void ConfigureInput::changeEvent(QEvent* event) { RetranslateUI(); } - QDialog::changeEvent(event); + QWidget::changeEvent(event); } void ConfigureInput::RetranslateUI() { ui->retranslateUi(this); - RetranslateControllerComboBoxes(); -} - -void ConfigureInput::RetranslateControllerComboBoxes() { - for (auto* controller_box : players_controller) { - [[maybe_unused]] const QSignalBlocker blocker(controller_box); - - controller_box->clear(); - controller_box->addItems({tr("None"), tr("Pro Controller"), tr("Dual Joycons"), - tr("Single Right Joycon"), tr("Single Left Joycon")}); - } - - LoadPlayerControllerIndices(); -} - -void ConfigureInput::UpdateUIEnabled() { - bool hit_disabled = false; - for (auto* player : players_controller) { - player->setDisabled(hit_disabled); - if (hit_disabled) { - player->setCurrentIndex(0); - } - if (!hit_disabled && player->currentIndex() == 0) { - hit_disabled = true; - } - } - - for (std::size_t i = 0; i < players_controller.size(); ++i) { - players_configure[i]->setEnabled(players_controller[i]->currentIndex() != 0); - } - - ui->handheld_connected->setChecked(ui->handheld_connected->isChecked() && - !ui->use_docked_mode->isChecked()); - ui->handheld_connected->setEnabled(!ui->use_docked_mode->isChecked()); - ui->handheld_configure->setEnabled(ui->handheld_connected->isChecked() && - !ui->use_docked_mode->isChecked()); - ui->mouse_advanced->setEnabled(ui->mouse_enabled->isChecked()); - ui->debug_configure->setEnabled(ui->debug_enabled->isChecked()); - ui->touchscreen_advanced->setEnabled(ui->touchscreen_enabled->isChecked()); } void ConfigureInput::LoadConfiguration() { - std::stable_partition( - Settings::values.players.begin(), - Settings::values.players.begin() + - Service::HID::Controller_NPad::NPadIdToIndex(Service::HID::NPAD_HANDHELD), - [](const auto& player) { return player.connected; }); - LoadPlayerControllerIndices(); + UpdateDockedState(Settings::values.players[0].controller_type == + Settings::ControllerType::Handheld); - ui->use_docked_mode->setChecked(Settings::values.use_docked_mode); - ui->handheld_connected->setChecked( - Settings::values - .players[Service::HID::Controller_NPad::NPadIdToIndex(Service::HID::NPAD_HANDHELD)] - .connected); - ui->debug_enabled->setChecked(Settings::values.debug_pad_enabled); - ui->mouse_enabled->setChecked(Settings::values.mouse_enabled); - ui->keyboard_enabled->setChecked(Settings::values.keyboard_enabled); - ui->touchscreen_enabled->setChecked(Settings::values.touchscreen.enabled); - - UpdateUIEnabled(); + ui->vibrationGroup->setChecked(Settings::values.vibration_enabled); } void ConfigureInput::LoadPlayerControllerIndices() { - for (std::size_t i = 0; i < players_controller.size(); ++i) { - const auto connected = Settings::values.players[i].connected; - players_controller[i]->setCurrentIndex( - connected ? static_cast(Settings::values.players[i].type) + 1 : 0); + for (std::size_t i = 0; i < player_connected.size(); ++i) { + const auto connected = Settings::values.players[i].connected || + (i == 0 && Settings::values.players[8].connected); + player_connected[i]->setChecked(connected); } } +void ConfigureInput::ClearAll() { + // We don't have a good way to know what tab is active, but we can find out by getting the + // parent of the consoleInputSettings + auto player_tab = static_cast(ui->consoleInputSettings->parent()); + player_tab->ClearAll(); +} + void ConfigureInput::RestoreDefaults() { - players_controller[0]->setCurrentIndex(2); + // We don't have a good way to know what tab is active, but we can find out by getting the + // parent of the consoleInputSettings + auto player_tab = static_cast(ui->consoleInputSettings->parent()); + player_tab->RestoreDefaults(); - for (std::size_t i = 1; i < players_controller.size(); ++i) { - players_controller[i]->setCurrentIndex(0); - } - - ui->use_docked_mode->setCheckState(Qt::Unchecked); - ui->handheld_connected->setCheckState(Qt::Unchecked); - ui->mouse_enabled->setCheckState(Qt::Unchecked); - ui->keyboard_enabled->setCheckState(Qt::Unchecked); - ui->debug_enabled->setCheckState(Qt::Unchecked); - ui->touchscreen_enabled->setCheckState(Qt::Checked); - UpdateUIEnabled(); + ui->radioDocked->setChecked(true); + ui->radioUndocked->setChecked(false); + ui->vibrationGroup->setChecked(true); +} + +void ConfigureInput::UpdateDockedState(bool is_handheld) { + // If the controller type is handheld only, disallow changing docked mode + ui->radioDocked->setEnabled(!is_handheld); + ui->radioUndocked->setEnabled(!is_handheld); + + ui->radioDocked->setChecked(Settings::values.use_docked_mode); + ui->radioUndocked->setChecked(!Settings::values.use_docked_mode); + + // If its handheld only, force docked mode off (since you can't play handheld in a dock) + if (is_handheld) { + ui->radioUndocked->setChecked(true); + } +} + +void ConfigureInput::UpdateAllInputDevices() { + for (const auto& player : player_controllers) { + player->UpdateInputDevices(); + } } diff --git a/src/yuzu/configuration/configure_input.h b/src/yuzu/configuration/configure_input.h index 2f70cb3ca..8241d23ef 100644 --- a/src/yuzu/configuration/configure_input.h +++ b/src/yuzu/configuration/configure_input.h @@ -10,11 +10,14 @@ #include #include +#include "yuzu/configuration/configure_input_advanced.h" +#include "yuzu/configuration/configure_input_player.h" + #include "ui_configure_input.h" -class QPushButton; class QString; class QTimer; +class QCheckBox; namespace Ui { class ConfigureInput; @@ -22,22 +25,25 @@ class ConfigureInput; void OnDockedModeChanged(bool last_state, bool new_state); -class ConfigureInput : public QDialog { +class ConfigureInput : public QWidget { Q_OBJECT public: explicit ConfigureInput(QWidget* parent = nullptr); ~ConfigureInput() override; - /// Save all button configurations to settings file + /// Save all button configurations to settings file. void ApplyConfiguration(); + QList GetSubTabs() const; + private: void changeEvent(QEvent* event) override; void RetranslateUI(); - void RetranslateControllerComboBoxes(); + void ClearAll(); - void UpdateUIEnabled(); + void UpdateDockedState(bool is_handheld); + void UpdateAllInputDevices(); /// Load configuration settings. void LoadConfiguration(); @@ -48,6 +54,8 @@ private: std::unique_ptr ui; - std::array players_controller; - std::array players_configure; + std::array player_controllers; + std::array player_tabs; + std::array player_connected; + ConfigureInputAdvanced* advanced; }; diff --git a/src/yuzu/configuration/configure_input.ui b/src/yuzu/configuration/configure_input.ui index efffd8487..136955224 100644 --- a/src/yuzu/configuration/configure_input.ui +++ b/src/yuzu/configuration/configure_input.ui @@ -1,529 +1,554 @@ ConfigureInput - + 0 0 - 384 - 576 + 700 + 540 - Custom Input Settings + ConfigureInput + + 2 + + + 3 + + + 3 + + + 3 + + + 3 + - - - - - Players - - - - - - - 110 - 0 - - - - - - - - Configure - - - - - - - Controller Type - - - Qt::AlignCenter - - - - - - - - 110 - 0 - - - - - - - - - 110 - 0 - - - - - - - - - 110 - 0 - - - - - - - - - 110 - 0 - - - - - - - - - 110 - 0 - - - - - - - - - 110 - 0 - - - - - - - - - 110 - 0 - - - - - - - - Configure - - - - - - - Configure - - - - - - - Configure - - - - - - - Configure - - - - - - - Configure - - - - - - - Configure - - - - - - - Configure - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - - 55 - 0 - - - - Player 1 - - - - - - - Player 2 - - - - - - - Player 3 - - - - - - - Player 4 - - - - - - - Player 5 - - - - - - - Player 6 - - - - - - - Player 7 - - - - - - - Player 8 - - - - - - - - - - Handheld - - - - - - Qt::Horizontal - - - QSizePolicy::Fixed - - - - 72 - 20 - - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - Configure - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - Joycons Docked - - - - - - - Use Docked Mode - - - - - - - - - - Other - - - - - - - 0 - 23 - - - - Keyboard - - - - - - - Debug Controller - - - - - - - Touchscreen - - - - - - - - 0 - 23 - - - - Mouse - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - Qt::Horizontal - - - QSizePolicy::Fixed - - - - 76 - 20 - - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - Advanced - - - - - - - Configure - - - - - - - Advanced - - - - - - - - - - Qt::Vertical - - - - 20 - 40 - - - - - - - - - - Restore Defaults + + + 0 + + + + Player 1 + + + Player 1 + + + + + Player 2 + + + Player 2 + + + + + Player 3 + + + Player 3 + + + + + Player 4 + + + Player 4 + + + + + Player 5 + + + Player 5 + + + + + Player 6 + + + Player 6 + + + + + Player 7 + + + Player 7 + + + + + Player 8 + + + Player 8 + + + + + Advanced + + + Advanced + + + + + + + + + 3 + + + 0 + + + 3 + + + 0 + + + 0 + + + + + + 16777215 + 16777215 + + + + Console Mode + + + + 6 - - - - - - Qt::Horizontal + + 3 - - - 40 - 20 - + + 6 - - - - - - QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + 3 - - - - - + + 6 + + + + + Docked + + + true + + + + + + + Undocked + + + + + + + + + + Vibration + + + true + + + + 3 + + + 3 + + + 3 + + + 3 + + + + + + 65 + 21 + + + + + 65 + 16777215 + + + + % + + + 1 + + + 200 + + + 100 + + + + + + + + + + Motion + + + true + + + + 3 + + + 3 + + + 3 + + + 3 + + + + + + 57 + 0 + + + + + 55 + 16777215 + + + + min-width: 55px; + + + Configure + + + + + + + + + + + 5 + + + 0 + + + 0 + + + 0 + + + 3 + + + + + + + + + + + + Controllers + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1 + + + Qt::AlignCenter + + + + + + + + + + + + + + + + + + + + + Qt::LeftToRight + + + true + + + + + + + + + + + + + + 2 + + + Qt::AlignCenter + + + + + + + 3 + + + Qt::AlignCenter + + + + + + + 4 + + + Qt::AlignCenter + + + + + + + 5 + + + Qt::AlignCenter + + + + + + + 6 + + + Qt::AlignCenter + + + + + + + 7 + + + Qt::AlignCenter + + + + + + + 8 + + + Qt::AlignCenter + + + + + + + Connected + + + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + 0 + 0 + + + + + 57 + 0 + + + + + 55 + 16777215 + + + + + 0 + 0 + + + + + 0 + 0 + + + + Qt::LeftToRight + + + min-width: 55px; + + + Defaults + + + + + + + + 0 + 0 + + + + + 57 + 0 + + + + + 55 + 16777215 + + + + + 0 + 0 + + + + + 0 + 0 + + + + Qt::LeftToRight + + + min-width: 55px; + + + Clear + + + + +
        - - - buttonBox - accepted() - ConfigureInput - accept() - - - 294 - 553 - - - 191 - 287 - - - - - buttonBox - rejected() - ConfigureInput - reject() - - - 294 - 553 - - - 191 - 287 - - - - + diff --git a/src/yuzu/configuration/configure_input_advanced.cpp b/src/yuzu/configuration/configure_input_advanced.cpp new file mode 100644 index 000000000..18db04e7e --- /dev/null +++ b/src/yuzu/configuration/configure_input_advanced.cpp @@ -0,0 +1,169 @@ +// Copyright 2020 yuzu Emulator Project +// Licensed under GPLv2 or any later version +// Refer to the license.txt file included. + +#include +#include "core/core.h" +#include "core/settings.h" +#include "ui_configure_input_advanced.h" +#include "yuzu/configuration/configure_input_advanced.h" + +ConfigureInputAdvanced::ConfigureInputAdvanced(QWidget* parent) + : QWidget(parent), ui(new Ui::ConfigureInputAdvanced) { + ui->setupUi(this); + + controllers_color_buttons = {{ + { + ui->player1_left_body_button, + ui->player1_left_buttons_button, + ui->player1_right_body_button, + ui->player1_right_buttons_button, + }, + { + ui->player2_left_body_button, + ui->player2_left_buttons_button, + ui->player2_right_body_button, + ui->player2_right_buttons_button, + }, + { + ui->player3_left_body_button, + ui->player3_left_buttons_button, + ui->player3_right_body_button, + ui->player3_right_buttons_button, + }, + { + ui->player4_left_body_button, + ui->player4_left_buttons_button, + ui->player4_right_body_button, + ui->player4_right_buttons_button, + }, + { + ui->player5_left_body_button, + ui->player5_left_buttons_button, + ui->player5_right_body_button, + ui->player5_right_buttons_button, + }, + { + ui->player6_left_body_button, + ui->player6_left_buttons_button, + ui->player6_right_body_button, + ui->player6_right_buttons_button, + }, + { + ui->player7_left_body_button, + ui->player7_left_buttons_button, + ui->player7_right_body_button, + ui->player7_right_buttons_button, + }, + { + ui->player8_left_body_button, + ui->player8_left_buttons_button, + ui->player8_right_body_button, + ui->player8_right_buttons_button, + }, + }}; + + for (std::size_t player_idx = 0; player_idx < controllers_color_buttons.size(); ++player_idx) { + auto& color_buttons = controllers_color_buttons[player_idx]; + for (std::size_t button_idx = 0; button_idx < color_buttons.size(); ++button_idx) { + connect(color_buttons[button_idx], &QPushButton::clicked, this, + [this, player_idx, button_idx] { + OnControllerButtonClick(static_cast(player_idx), + static_cast(button_idx)); + }); + } + } + + connect(ui->mouse_enabled, &QCheckBox::stateChanged, this, + &ConfigureInputAdvanced::UpdateUIEnabled); + connect(ui->debug_enabled, &QCheckBox::stateChanged, this, + &ConfigureInputAdvanced::UpdateUIEnabled); + connect(ui->touchscreen_enabled, &QCheckBox::stateChanged, this, + &ConfigureInputAdvanced::UpdateUIEnabled); + + connect(ui->debug_configure, &QPushButton::clicked, this, + [this] { CallDebugControllerDialog(); }); + connect(ui->mouse_advanced, &QPushButton::clicked, this, [this] { CallMouseConfigDialog(); }); + connect(ui->touchscreen_advanced, &QPushButton::clicked, this, + [this] { CallTouchscreenConfigDialog(); }); + + LoadConfiguration(); +} + +ConfigureInputAdvanced::~ConfigureInputAdvanced() = default; + +void ConfigureInputAdvanced::OnControllerButtonClick(int player_idx, int button_idx) { + const QColor new_bg_color = QColorDialog::getColor(controllers_colors[player_idx][button_idx]); + if (!new_bg_color.isValid()) { + return; + } + controllers_colors[player_idx][button_idx] = new_bg_color; + controllers_color_buttons[player_idx][button_idx]->setStyleSheet( + QStringLiteral("background-color: %1; min-width: 55px;") + .arg(controllers_colors[player_idx][button_idx].name())); +} + +void ConfigureInputAdvanced::ApplyConfiguration() { + for (std::size_t player_idx = 0; player_idx < controllers_color_buttons.size(); ++player_idx) { + auto& player = Settings::values.players[player_idx]; + std::array colors{}; + std::transform(controllers_colors[player_idx].begin(), controllers_colors[player_idx].end(), + colors.begin(), [](QColor color) { return color.rgb(); }); + + player.body_color_left = colors[0]; + player.button_color_left = colors[1]; + player.body_color_right = colors[2]; + player.button_color_right = colors[3]; + } + + Settings::values.debug_pad_enabled = ui->debug_enabled->isChecked(); + Settings::values.mouse_enabled = ui->mouse_enabled->isChecked(); + Settings::values.keyboard_enabled = ui->keyboard_enabled->isChecked(); + Settings::values.touchscreen.enabled = ui->touchscreen_enabled->isChecked(); +} + +void ConfigureInputAdvanced::LoadConfiguration() { + for (std::size_t player_idx = 0; player_idx < controllers_color_buttons.size(); ++player_idx) { + auto& player = Settings::values.players[player_idx]; + std::array colors = { + player.body_color_left, + player.button_color_left, + player.body_color_right, + player.button_color_right, + }; + + std::transform(colors.begin(), colors.end(), controllers_colors[player_idx].begin(), + [](u32 rgb) { return QColor::fromRgb(rgb); }); + + for (std::size_t button_idx = 0; button_idx < colors.size(); ++button_idx) { + controllers_color_buttons[player_idx][button_idx]->setStyleSheet( + QStringLiteral("background-color: %1; min-width: 55px;") + .arg(controllers_colors[player_idx][button_idx].name())); + } + } + + ui->debug_enabled->setChecked(Settings::values.debug_pad_enabled); + ui->mouse_enabled->setChecked(Settings::values.mouse_enabled); + ui->keyboard_enabled->setChecked(Settings::values.keyboard_enabled); + ui->touchscreen_enabled->setChecked(Settings::values.touchscreen.enabled); + + UpdateUIEnabled(); +} + +void ConfigureInputAdvanced::changeEvent(QEvent* event) { + if (event->type() == QEvent::LanguageChange) { + RetranslateUI(); + } + + QWidget::changeEvent(event); +} + +void ConfigureInputAdvanced::RetranslateUI() { + ui->retranslateUi(this); +} + +void ConfigureInputAdvanced::UpdateUIEnabled() { + ui->mouse_advanced->setEnabled(ui->mouse_enabled->isChecked()); + ui->debug_configure->setEnabled(ui->debug_enabled->isChecked()); + ui->touchscreen_advanced->setEnabled(ui->touchscreen_enabled->isChecked()); +} diff --git a/src/yuzu/configuration/configure_input_advanced.h b/src/yuzu/configuration/configure_input_advanced.h new file mode 100644 index 000000000..d6e913675 --- /dev/null +++ b/src/yuzu/configuration/configure_input_advanced.h @@ -0,0 +1,44 @@ +// Copyright 2020 yuzu Emulator Project +// Licensed under GPLv2 or any later version +// Refer to the license.txt file included. + +#pragma once + +#include +#include + +class QColor; +class QPushButton; + +namespace Ui { +class ConfigureInputAdvanced; +} + +class ConfigureInputAdvanced : public QWidget { + Q_OBJECT + +public: + explicit ConfigureInputAdvanced(QWidget* parent = nullptr); + ~ConfigureInputAdvanced() override; + + void ApplyConfiguration(); + +signals: + void CallDebugControllerDialog(); + void CallMouseConfigDialog(); + void CallTouchscreenConfigDialog(); + +private: + void changeEvent(QEvent* event) override; + void RetranslateUI(); + void UpdateUIEnabled(); + + void OnControllerButtonClick(int player_idx, int button_idx); + + void LoadConfiguration(); + + std::unique_ptr ui; + + std::array, 8> controllers_colors; + std::array, 8> controllers_color_buttons; +}; diff --git a/src/yuzu/configuration/configure_input_advanced.ui b/src/yuzu/configuration/configure_input_advanced.ui new file mode 100644 index 000000000..5958435fc --- /dev/null +++ b/src/yuzu/configuration/configure_input_advanced.ui @@ -0,0 +1,2688 @@ + + + ConfigureInputAdvanced + + + + 0 + 0 + 710 + 580 + + + + Configure Input + + + + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + 9 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + 3 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + Joycon Colors + + + + 9 + + + 9 + + + 9 + + + 9 + + + + + + 6 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + Player 1 + + + + 6 + + + 6 + + + 0 + + + 6 + + + 6 + + + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + L Body + + + Qt::AlignCenter + + + + 3 + + + 3 + + + 3 + + + 3 + + + 3 + + + + + + 0 + 0 + + + + + 57 + 0 + + + + + 55 + 16777215 + + + + min-width: 55px; + + + + + + + + + + + + + L Button + + + Qt::AlignCenter + + + + 3 + + + 3 + + + 3 + + + 3 + + + 3 + + + + + + 0 + 0 + + + + + 57 + 0 + + + + + 55 + 16777215 + + + + min-width: 55px; + + + + + + + + + + + + + + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + R Body + + + Qt::AlignCenter + + + + 3 + + + 3 + + + 3 + + + 3 + + + 3 + + + + + + 0 + 0 + + + + + 57 + 0 + + + + + 55 + 16777215 + + + + min-width: 55px; + + + + + + + + + + + + + R Button + + + Qt::AlignCenter + + + + 3 + + + 3 + + + 3 + + + 3 + + + 3 + + + + + + 0 + 0 + + + + + 57 + 0 + + + + + 55 + 16777215 + + + + min-width: 55px; + + + + + + + + + + + + + + + + + + + Player 2 + + + + 6 + + + 6 + + + 0 + + + 6 + + + 6 + + + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + L Body + + + Qt::AlignCenter + + + + 3 + + + 3 + + + 3 + + + 3 + + + 3 + + + + + + 0 + 0 + + + + + 57 + 0 + + + + + 55 + 16777215 + + + + min-width: 55px; + + + + + + + + + + + + + L Button + + + Qt::AlignCenter + + + + 3 + + + 3 + + + 3 + + + 3 + + + 3 + + + + + + 0 + 0 + + + + + 57 + 0 + + + + + 55 + 16777215 + + + + min-width: 55px; + + + + + + + + + + + + + + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + R Body + + + Qt::AlignCenter + + + + 3 + + + 3 + + + 3 + + + 3 + + + 3 + + + + + + 0 + 0 + + + + + 57 + 0 + + + + + 55 + 16777215 + + + + min-width: 55px; + + + + + + + + + + + + + R Button + + + Qt::AlignCenter + + + + 3 + + + 3 + + + 3 + + + 3 + + + 3 + + + + + + 0 + 0 + + + + + 57 + 0 + + + + + 55 + 16777215 + + + + min-width: 55px; + + + + + + + + + + + + + + + + + + + + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + Player 3 + + + + 6 + + + 6 + + + 0 + + + 6 + + + 6 + + + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + L Body + + + Qt::AlignCenter + + + + 3 + + + 3 + + + 3 + + + 3 + + + 3 + + + + + + 0 + 0 + + + + + 57 + 0 + + + + + 55 + 16777215 + + + + min-width: 55px; + + + + + + + + + + + + + L Button + + + Qt::AlignCenter + + + + 3 + + + 3 + + + 3 + + + 3 + + + 3 + + + + + + 0 + 0 + + + + + 57 + 0 + + + + + 55 + 16777215 + + + + min-width: 55px; + + + + + + + + + + + + + + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + R Body + + + Qt::AlignCenter + + + + 3 + + + 3 + + + 3 + + + 3 + + + 3 + + + + + + 0 + 0 + + + + + 57 + 0 + + + + + 55 + 16777215 + + + + min-width: 55px; + + + + + + + + + + + + + R Button + + + Qt::AlignCenter + + + + 3 + + + 3 + + + 3 + + + 3 + + + 3 + + + + + + 0 + 0 + + + + + 57 + 0 + + + + + 55 + 16777215 + + + + min-width: 55px; + + + + + + + + + + + + + + + + + + + Player 4 + + + + 6 + + + 6 + + + 0 + + + 6 + + + 6 + + + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + L Body + + + Qt::AlignCenter + + + + 3 + + + 3 + + + 3 + + + 3 + + + 3 + + + + + + 0 + 0 + + + + + 57 + 0 + + + + + 55 + 16777215 + + + + min-width: 55px; + + + + + + + + + + + + + L Button + + + Qt::AlignCenter + + + + 3 + + + 3 + + + 3 + + + 3 + + + 3 + + + + + + 0 + 0 + + + + + 57 + 0 + + + + + 55 + 16777215 + + + + min-width: 55px; + + + + + + + + + + + + + + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + R Body + + + Qt::AlignCenter + + + + 3 + + + 3 + + + 3 + + + 3 + + + 3 + + + + + + 0 + 0 + + + + + 57 + 0 + + + + + 55 + 16777215 + + + + min-width: 55px; + + + + + + + + + + + + + R Button + + + Qt::AlignCenter + + + + 3 + + + 3 + + + 3 + + + 3 + + + 3 + + + + + + 0 + 0 + + + + + 57 + 0 + + + + + 55 + 16777215 + + + + min-width: 55px; + + + + + + + + + + + + + + + + + + + + + + + + + + 6 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + Player 5 + + + + 6 + + + 6 + + + 0 + + + 6 + + + 6 + + + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + L Body + + + Qt::AlignCenter + + + + 3 + + + 3 + + + 3 + + + 3 + + + 3 + + + + + + 0 + 0 + + + + + 57 + 0 + + + + + 55 + 16777215 + + + + min-width: 55px; + + + + + + + + + + + + + L Button + + + Qt::AlignCenter + + + + 3 + + + 3 + + + 3 + + + 3 + + + 3 + + + + + + 0 + 0 + + + + + 57 + 0 + + + + + 55 + 16777215 + + + + min-width: 55px; + + + + + + + + + + + + + + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + R Body + + + Qt::AlignCenter + + + + 3 + + + 3 + + + 3 + + + 3 + + + 3 + + + + + + 0 + 0 + + + + + 57 + 0 + + + + + 55 + 16777215 + + + + min-width: 55px; + + + + + + + + + + + + + R Button + + + Qt::AlignCenter + + + + 3 + + + 3 + + + 3 + + + 3 + + + 3 + + + + + + 0 + 0 + + + + + 57 + 0 + + + + + 55 + 16777215 + + + + min-width: 55px; + + + + + + + + + + + + + + + + + + + Player 6 + + + + 6 + + + 6 + + + 0 + + + 6 + + + 6 + + + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + L Body + + + Qt::AlignCenter + + + + 3 + + + 3 + + + 3 + + + 3 + + + 3 + + + + + + 0 + 0 + + + + + 57 + 0 + + + + + 55 + 16777215 + + + + min-width: 55px; + + + + + + + + + + + + + L Button + + + Qt::AlignCenter + + + + 3 + + + 3 + + + 3 + + + 3 + + + 3 + + + + + + 0 + 0 + + + + + 57 + 0 + + + + + 55 + 16777215 + + + + min-width: 55px; + + + + + + + + + + + + + + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + R Body + + + Qt::AlignCenter + + + + 3 + + + 3 + + + 3 + + + 3 + + + 3 + + + + + + 0 + 0 + + + + + 57 + 0 + + + + + 55 + 16777215 + + + + min-width: 55px; + + + + + + + + + + + + + R Button + + + Qt::AlignCenter + + + + 3 + + + 3 + + + 3 + + + 3 + + + 3 + + + + + + 0 + 0 + + + + + 57 + 0 + + + + + 55 + 16777215 + + + + min-width: 55px; + + + + + + + + + + + + + + + + + + + + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + Player 7 + + + + 6 + + + 6 + + + 0 + + + 6 + + + 6 + + + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + L Body + + + Qt::AlignCenter + + + + 3 + + + 3 + + + 3 + + + 3 + + + 3 + + + + + + 0 + 0 + + + + + 57 + 0 + + + + + 55 + 16777215 + + + + min-width: 55px; + + + + + + + + + + + + + L Button + + + Qt::AlignCenter + + + + 3 + + + 3 + + + 3 + + + 3 + + + 3 + + + + + + 0 + 0 + + + + + 57 + 0 + + + + + 55 + 16777215 + + + + min-width: 55px; + + + + + + + + + + + + + + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + R Body + + + Qt::AlignCenter + + + + 3 + + + 3 + + + 3 + + + 3 + + + 3 + + + + + + 0 + 0 + + + + + 57 + 0 + + + + + 55 + 16777215 + + + + min-width: 55px; + + + + + + + + + + + + + R Button + + + Qt::AlignCenter + + + + 3 + + + 3 + + + 3 + + + 3 + + + 3 + + + + + + 0 + 0 + + + + + 57 + 0 + + + + + 55 + 16777215 + + + + min-width: 55px; + + + + + + + + + + + + + + + + + + + Player 8 + + + + 6 + + + 6 + + + 0 + + + 6 + + + 6 + + + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + L Body + + + Qt::AlignCenter + + + + 3 + + + 3 + + + 3 + + + 3 + + + 3 + + + + + + 0 + 0 + + + + + 57 + 0 + + + + + 55 + 16777215 + + + + min-width: 55px; + + + + + + + + + + + + + L Button + + + Qt::AlignCenter + + + + 3 + + + 3 + + + 3 + + + 3 + + + 3 + + + + + + 0 + 0 + + + + + 57 + 0 + + + + + 55 + 16777215 + + + + min-width: 55px; + + + + + + + + + + + + + + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + R Body + + + Qt::AlignCenter + + + + 3 + + + 3 + + + 3 + + + 3 + + + 3 + + + + + + 0 + 0 + + + + + 57 + 0 + + + + + 55 + 16777215 + + + + min-width: 55px; + + + + + + + + + + + + + R Button + + + Qt::AlignCenter + + + + 3 + + + 3 + + + 3 + + + 3 + + + 3 + + + + + + 0 + 0 + + + + + 57 + 0 + + + + + 55 + 16777215 + + + + min-width: 55px; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + Other + + + + + + + 0 + 23 + + + + Keyboard + + + + + + + Advanced + + + + + + + Qt::Horizontal + + + QSizePolicy::Fixed + + + + 76 + 20 + + + + + + + + Advanced + + + + + + + Touchscreen + + + + + + + + 0 + 23 + + + + Mouse + + + + + + + Motion / Touch + + + + + + + Configure + + + + + + + Debug Controller + + + + + + + Configure + + + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + + + + + + + + + + + diff --git a/src/yuzu/configuration/configure_input_player.cpp b/src/yuzu/configuration/configure_input_player.cpp index 597defe8c..4d79a51f3 100644 --- a/src/yuzu/configuration/configure_input_player.cpp +++ b/src/yuzu/configuration/configure_input_player.cpp @@ -5,38 +5,86 @@ #include #include #include -#include #include +#include #include #include #include #include #include "common/assert.h" #include "common/param_package.h" +#include "core/core.h" +#include "core/hle/service/hid/controllers/npad.h" +#include "core/hle/service/hid/hid.h" +#include "core/hle/service/sm/sm.h" #include "input_common/main.h" #include "ui_configure_input_player.h" #include "yuzu/configuration/config.h" #include "yuzu/configuration/configure_input_player.h" +constexpr std::size_t HANDHELD_INDEX = 8; + const std::array ConfigureInputPlayer::analog_sub_buttons{{ "up", "down", "left", "right", - "modifier", }}; -static void LayerGridElements(QGridLayout* grid, QWidget* item, QWidget* onTopOf) { - const int index1 = grid->indexOf(item); - const int index2 = grid->indexOf(onTopOf); - int row, column, rowSpan, columnSpan; - grid->getItemPosition(index2, &row, &column, &rowSpan, &columnSpan); - grid->takeAt(index1); - grid->addWidget(item, row, column, rowSpan, columnSpan); +namespace { + +void UpdateController(Settings::ControllerType controller_type, std::size_t npad_index, + bool connected) { + Core::System& system{Core::System::GetInstance()}; + if (!system.IsPoweredOn()) { + return; + } + Service::SM::ServiceManager& sm = system.ServiceManager(); + + auto& npad = + sm.GetService("hid") + ->GetAppletResource() + ->GetController(Service::HID::HidController::NPad); + + npad.UpdateControllerAt(npad.MapSettingsTypeToNPad(controller_type), npad_index, connected); } -static QString GetKeyName(int key_code) { +/// Maps the controller type combobox index to Controller Type enum +constexpr Settings::ControllerType GetControllerTypeFromIndex(int index) { + switch (index) { + case 0: + default: + return Settings::ControllerType::ProController; + case 1: + return Settings::ControllerType::DualJoyconDetached; + case 2: + return Settings::ControllerType::LeftJoycon; + case 3: + return Settings::ControllerType::RightJoycon; + case 4: + return Settings::ControllerType::Handheld; + } +} + +/// Maps the Controller Type enum to controller type combobox index +constexpr int GetIndexFromControllerType(Settings::ControllerType type) { + switch (type) { + case Settings::ControllerType::ProController: + default: + return 0; + case Settings::ControllerType::DualJoyconDetached: + return 1; + case Settings::ControllerType::LeftJoycon: + return 2; + case Settings::ControllerType::RightJoycon: + return 3; + case Settings::ControllerType::Handheld: + return 4; + } +} + +QString GetKeyName(int key_code) { switch (key_code) { case Qt::Key_Shift: return QObject::tr("Shift"); @@ -51,9 +99,16 @@ static QString GetKeyName(int key_code) { } } -static void SetAnalogButton(const Common::ParamPackage& input_param, - Common::ParamPackage& analog_param, const std::string& button_name) { - if (analog_param.Get("engine", "") != "analog_from_button") { +void SetAnalogParam(const Common::ParamPackage& input_param, Common::ParamPackage& analog_param, + const std::string& button_name) { + // The poller returned a complete axis, so set all the buttons + if (input_param.Has("axis_x") && input_param.Has("axis_y")) { + analog_param = input_param; + return; + } + // Check if the current configuration has either no engine or an axis binding. + // Clears out the old binding and adds one with analog_from_button. + if (!analog_param.Has("engine") || analog_param.Has("axis_x") || analog_param.Has("axis_y")) { analog_param = { {"engine", "analog_from_button"}, }; @@ -61,7 +116,7 @@ static void SetAnalogButton(const Common::ParamPackage& input_param, analog_param.Set(button_name, input_param.Serialize()); } -static QString ButtonToText(const Common::ParamPackage& param) { +QString ButtonToText(const Common::ParamPackage& param) { if (!param.Has("engine")) { return QObject::tr("[not set]"); } @@ -111,7 +166,7 @@ static QString ButtonToText(const Common::ParamPackage& param) { return QObject::tr("[unknown]"); } -static QString AnalogToText(const Common::ParamPackage& param, const std::string& dir) { +QString AnalogToText(const Common::ParamPackage& param, const std::string& dir) { if (!param.Has("engine")) { return QObject::tr("[not set]"); } @@ -161,22 +216,24 @@ static QString AnalogToText(const Common::ParamPackage& param, const std::string } return QObject::tr("[unknown]"); } +} // namespace -ConfigureInputPlayer::ConfigureInputPlayer(QWidget* parent, std::size_t player_index, bool debug) - : QDialog(parent), ui(std::make_unique()), player_index(player_index), +ConfigureInputPlayer::ConfigureInputPlayer(QWidget* parent, std::size_t player_index, + QWidget* bottom_row, bool debug) + : QWidget(parent), ui(std::make_unique()), player_index(player_index), debug(debug), timeout_timer(std::make_unique()), - poll_timer(std::make_unique()) { + poll_timer(std::make_unique()), bottom_row(bottom_row) { ui->setupUi(this); + setFocusPolicy(Qt::ClickFocus); button_map = { - ui->buttonA, ui->buttonB, ui->buttonX, ui->buttonY, - ui->buttonLStick, ui->buttonRStick, ui->buttonL, ui->buttonR, - ui->buttonZL, ui->buttonZR, ui->buttonPlus, ui->buttonMinus, - ui->buttonDpadLeft, ui->buttonDpadUp, ui->buttonDpadRight, ui->buttonDpadDown, - ui->buttonLStickLeft, ui->buttonLStickUp, ui->buttonLStickRight, ui->buttonLStickDown, - ui->buttonRStickLeft, ui->buttonRStickUp, ui->buttonRStickRight, ui->buttonRStickDown, - ui->buttonSL, ui->buttonSR, ui->buttonHome, ui->buttonScreenshot, + ui->buttonA, ui->buttonB, ui->buttonX, ui->buttonY, + ui->buttonLStick, ui->buttonRStick, ui->buttonL, ui->buttonR, + ui->buttonZL, ui->buttonZR, ui->buttonPlus, ui->buttonMinus, + ui->buttonDpadLeft, ui->buttonDpadUp, ui->buttonDpadRight, ui->buttonDpadDown, + ui->buttonSL, ui->buttonSR, ui->buttonHome, ui->buttonScreenshot, + ui->buttonLStickMod, ui->buttonRStickMod, }; analog_map_buttons = {{ @@ -185,208 +242,159 @@ ConfigureInputPlayer::ConfigureInputPlayer(QWidget* parent, std::size_t player_i ui->buttonLStickDown, ui->buttonLStickLeft, ui->buttonLStickRight, - ui->buttonLStickMod, }, { ui->buttonRStickUp, ui->buttonRStickDown, ui->buttonRStickLeft, ui->buttonRStickRight, - ui->buttonRStickMod, }, }}; - debug_hidden = { - ui->buttonSL, ui->labelSL, - ui->buttonSR, ui->labelSR, - ui->buttonLStick, ui->labelLStickPressed, - ui->buttonRStick, ui->labelRStickPressed, - ui->buttonHome, ui->labelHome, - ui->buttonScreenshot, ui->labelScreenshot, + analog_map_deadzone_label = {ui->labelLStickDeadzone, ui->labelRStickDeadzone}; + analog_map_deadzone_slider = {ui->sliderLStickDeadzone, ui->sliderRStickDeadzone}; + analog_map_modifier_groupbox = {ui->buttonLStickModGroup, ui->buttonRStickModGroup}; + analog_map_modifier_button = {ui->buttonLStickMod, ui->buttonRStickMod}; + analog_map_modifier_label = {ui->labelLStickModifierRange, ui->labelRStickModifierRange}; + analog_map_modifier_slider = {ui->sliderLStickModifierRange, ui->sliderRStickModifierRange}; + analog_map_range_groupbox = {ui->buttonLStickRangeGroup, ui->buttonRStickRangeGroup}; + analog_map_range_spinbox = {ui->spinboxLStickRange, ui->spinboxRStickRange}; + + const auto ConfigureButtonClick = [&](QPushButton* button, Common::ParamPackage* param, + int default_val) { + connect(button, &QPushButton::clicked, [=, this] { + HandleClick( + button, + [=, this](Common::ParamPackage params) { + // Workaround for ZL & ZR for analog triggers like on XBOX + // controllers. Analog triggers (from controllers like the XBOX + // controller) would not work due to a different range of their + // signals (from 0 to 255 on analog triggers instead of -32768 to + // 32768 on analog joysticks). The SDL driver misinterprets analog + // triggers as analog joysticks. + // TODO: reinterpret the signal range for analog triggers to map the + // values correctly. This is required for the correct emulation of + // the analog triggers of the GameCube controller. + if (button == ui->buttonZL || button == ui->buttonZR) { + params.Set("direction", "+"); + params.Set("threshold", "0.5"); + } + (*param) = std::move(params); + }, + InputCommon::Polling::DeviceType::Button); + }); }; - auto layout = Settings::values.players[player_index].type; - if (debug) - layout = Settings::ControllerType::DualJoycon; - - switch (layout) { - case Settings::ControllerType::ProController: - case Settings::ControllerType::DualJoycon: - layout_hidden = { - ui->buttonSL, - ui->labelSL, - ui->buttonSR, - ui->labelSR, - }; - break; - case Settings::ControllerType::LeftJoycon: - layout_hidden = { - ui->right_body_button, - ui->right_buttons_button, - ui->right_body_label, - ui->right_buttons_label, - ui->buttonR, - ui->labelR, - ui->buttonZR, - ui->labelZR, - ui->labelHome, - ui->buttonHome, - ui->buttonPlus, - ui->labelPlus, - ui->RStick, - ui->faceButtons, - }; - break; - case Settings::ControllerType::RightJoycon: - layout_hidden = { - ui->left_body_button, ui->left_buttons_button, - ui->left_body_label, ui->left_buttons_label, - ui->buttonL, ui->labelL, - ui->buttonZL, ui->labelZL, - ui->labelScreenshot, ui->buttonScreenshot, - ui->buttonMinus, ui->labelMinus, - ui->LStick, ui->Dpad, - }; - break; - } - - if (debug || layout == Settings::ControllerType::ProController) { - ui->controller_color->hide(); - } else { - if (layout == Settings::ControllerType::LeftJoycon || - layout == Settings::ControllerType::RightJoycon) { - ui->horizontalSpacer_4->setGeometry({0, 0, 0, 0}); - - LayerGridElements(ui->buttons, ui->shoulderButtons, ui->Dpad); - LayerGridElements(ui->buttons, ui->misc, ui->RStick); - LayerGridElements(ui->buttons, ui->Dpad, ui->faceButtons); - LayerGridElements(ui->buttons, ui->RStick, ui->LStick); - } - } - - for (auto* widget : layout_hidden) - widget->setVisible(false); - - analog_map_stick = {ui->buttonLStickAnalog, ui->buttonRStickAnalog}; - analog_map_deadzone_and_modifier_slider = {ui->sliderLStickDeadzoneAndModifier, - ui->sliderRStickDeadzoneAndModifier}; - analog_map_deadzone_and_modifier_slider_label = {ui->labelLStickDeadzoneAndModifier, - ui->labelRStickDeadzoneAndModifier}; - - for (int button_id = 0; button_id < Settings::NativeButton::NumButtons; button_id++) { + for (int button_id = 0; button_id < Settings::NativeButton::NumButtons; ++button_id) { auto* const button = button_map[button_id]; if (button == nullptr) { continue; } - - button->setContextMenuPolicy(Qt::CustomContextMenu); - connect(button, &QPushButton::clicked, [=, this] { - HandleClick( - button_map[button_id], - [=, this](Common::ParamPackage params) { - // Workaround for ZL & ZR for analog triggers like on XBOX controllors. - // Analog triggers (from controllers like the XBOX controller) would not - // work due to a different range of their signals (from 0 to 255 on - // analog triggers instead of -32768 to 32768 on analog joysticks). The - // SDL driver misinterprets analog triggers as analog joysticks. - // TODO: reinterpret the signal range for analog triggers to map the - // values correctly. This is required for the correct emulation of the - // analog triggers of the GameCube controller. - if (button_id == Settings::NativeButton::ZL || - button_id == Settings::NativeButton::ZR) { - params.Set("direction", "+"); - params.Set("threshold", "0.5"); - } - buttons_param[button_id] = std::move(params); - }, - InputCommon::Polling::DeviceType::Button); - }); - connect(button, &QPushButton::customContextMenuRequested, - [=, this](const QPoint& menu_location) { - QMenu context_menu; - context_menu.addAction(tr("Clear"), [&] { - buttons_param[button_id].Clear(); - button_map[button_id]->setText(tr("[not set]")); - }); - context_menu.addAction(tr("Restore Default"), [&] { - buttons_param[button_id] = Common::ParamPackage{ - InputCommon::GenerateKeyboardParam(Config::default_buttons[button_id])}; - button_map[button_id]->setText(ButtonToText(buttons_param[button_id])); - }); - context_menu.exec(button_map[button_id]->mapToGlobal(menu_location)); - }); + ConfigureButtonClick(button_map[button_id], &buttons_param[button_id], + Config::default_buttons[button_id]); } - for (int analog_id = 0; analog_id < Settings::NativeAnalog::NumAnalogs; analog_id++) { - for (int sub_button_id = 0; sub_button_id < ANALOG_SUB_BUTTONS_NUM; sub_button_id++) { + // Handle clicks for the modifier buttons as well. + ConfigureButtonClick(ui->buttonLStickMod, &lstick_mod, Config::default_lstick_mod); + ConfigureButtonClick(ui->buttonRStickMod, &rstick_mod, Config::default_rstick_mod); + + for (int analog_id = 0; analog_id < Settings::NativeAnalog::NumAnalogs; ++analog_id) { + for (int sub_button_id = 0; sub_button_id < ANALOG_SUB_BUTTONS_NUM; ++sub_button_id) { auto* const analog_button = analog_map_buttons[analog_id][sub_button_id]; + if (analog_button == nullptr) { continue; } - analog_button->setContextMenuPolicy(Qt::CustomContextMenu); connect(analog_button, &QPushButton::clicked, [=, this] { HandleClick( analog_map_buttons[analog_id][sub_button_id], [=, this](const Common::ParamPackage& params) { - SetAnalogButton(params, analogs_param[analog_id], - analog_sub_buttons[sub_button_id]); + SetAnalogParam(params, analogs_param[analog_id], + analog_sub_buttons[sub_button_id]); }, - InputCommon::Polling::DeviceType::Button); + InputCommon::Polling::DeviceType::AnalogPreferred); }); - connect(analog_button, &QPushButton::customContextMenuRequested, - [=, this](const QPoint& menu_location) { - QMenu context_menu; - context_menu.addAction(tr("Clear"), [&] { - analogs_param[analog_id].Erase(analog_sub_buttons[sub_button_id]); - analog_map_buttons[analog_id][sub_button_id]->setText(tr("[not set]")); - }); - context_menu.addAction(tr("Restore Default"), [&] { - Common::ParamPackage params{InputCommon::GenerateKeyboardParam( - Config::default_analogs[analog_id][sub_button_id])}; - SetAnalogButton(params, analogs_param[analog_id], - analog_sub_buttons[sub_button_id]); - analog_map_buttons[analog_id][sub_button_id]->setText(AnalogToText( - analogs_param[analog_id], analog_sub_buttons[sub_button_id])); - }); - context_menu.exec(analog_map_buttons[analog_id][sub_button_id]->mapToGlobal( - menu_location)); - }); } - connect(analog_map_stick[analog_id], &QPushButton::clicked, [=, this] { - if (QMessageBox::information( - this, tr("Information"), - tr("After pressing OK, first move your joystick horizontally, " - "and then vertically."), - QMessageBox::Ok | QMessageBox::Cancel) == QMessageBox::Ok) { - HandleClick( - analog_map_stick[analog_id], - [=, this](const Common::ParamPackage& params) { - analogs_param[analog_id] = params; - }, - InputCommon::Polling::DeviceType::Analog); - } + + connect(analog_map_modifier_button[analog_id], &QPushButton::clicked, [=, this] { + HandleClick( + analog_map_modifier_button[analog_id], + [=, this](const Common::ParamPackage& params) { + SetAnalogParam(params, analogs_param[analog_id], "modifier"); + }, + InputCommon::Polling::DeviceType::AnalogPreferred); }); - connect(analog_map_deadzone_and_modifier_slider[analog_id], &QSlider::valueChanged, + connect(analog_map_range_spinbox[analog_id], qOverload(&QSpinBox::valueChanged), [=, this] { - const float slider_value = - analog_map_deadzone_and_modifier_slider[analog_id]->value(); - if (analogs_param[analog_id].Get("engine", "") == "sdl" || - analogs_param[analog_id].Get("engine", "") == "gcpad") { - analog_map_deadzone_and_modifier_slider_label[analog_id]->setText( - tr("Deadzone: %1%").arg(slider_value)); - analogs_param[analog_id].Set("deadzone", slider_value / 100.0f); - } else { - analog_map_deadzone_and_modifier_slider_label[analog_id]->setText( - tr("Modifier Scale: %1%").arg(slider_value)); - analogs_param[analog_id].Set("modifier_scale", slider_value / 100.0f); - } + const auto spinbox_value = analog_map_range_spinbox[analog_id]->value(); + analogs_param[analog_id].Set("range", spinbox_value / 100.0f); + }); + + connect(analog_map_deadzone_slider[analog_id], &QSlider::valueChanged, [=, this] { + const auto slider_value = analog_map_deadzone_slider[analog_id]->value(); + analog_map_deadzone_label[analog_id]->setText(tr("Deadzone: %1%").arg(slider_value)); + analogs_param[analog_id].Set("deadzone", slider_value / 100.0f); + }); + + connect(analog_map_modifier_slider[analog_id], &QSlider::valueChanged, [=, this] { + const auto slider_value = analog_map_modifier_slider[analog_id]->value(); + analog_map_modifier_label[analog_id]->setText( + tr("Modifier Range: %1%").arg(slider_value)); + analogs_param[analog_id].Set("modifier_scale", slider_value / 100.0f); + }); + } + + // Player Connected checkbox + connect(ui->groupConnectedController, &QGroupBox::toggled, + [&](bool checked) { emit Connected(checked); }); + + // Set up controller type. Only Player 1 can choose Handheld. + ui->comboControllerType->clear(); + + QStringList controller_types = { + QStringLiteral("Pro Controller"), + QStringLiteral("Dual Joycons"), + QStringLiteral("Left Joycon"), + QStringLiteral("Right Joycon"), + }; + + if (player_index == 0) { + controller_types.append(QStringLiteral("Handheld")); + connect(ui->comboControllerType, qOverload(&QComboBox::currentIndexChanged), + [&](int index) { + emit HandheldStateChanged(GetControllerTypeFromIndex(index) == + Settings::ControllerType::Handheld); }); } - connect(ui->buttonClearAll, &QPushButton::clicked, [this] { ClearAll(); }); - connect(ui->buttonRestoreDefaults, &QPushButton::clicked, [this] { RestoreDefaults(); }); + // The Debug Controller can only choose the Pro Controller. + if (debug) { + ui->buttonScreenshot->setEnabled(false); + ui->buttonHome->setEnabled(false); + ui->groupConnectedController->setCheckable(false); + QStringList debug_controller_types = { + QStringLiteral("Pro Controller"), + }; + ui->comboControllerType->addItems(debug_controller_types); + } else { + ui->comboControllerType->addItems(controller_types); + } + + UpdateControllerIcon(); + UpdateControllerAvailableButtons(); + connect(ui->comboControllerType, qOverload(&QComboBox::currentIndexChanged), [&](int) { + UpdateControllerIcon(); + UpdateControllerAvailableButtons(); + }); + + connect(ui->comboDevices, qOverload(&QComboBox::currentIndexChanged), + [&] { UpdateMappingWithDefaults(); }); + + ui->buttonRefreshDevices->setIcon(QIcon::fromTheme(QStringLiteral("view-refresh"))); + UpdateInputDevices(); + connect(ui->buttonRefreshDevices, &QPushButton::clicked, [&] { emit RefreshInputDevices(); }); timeout_timer->setSingleShot(true); connect(timeout_timer.get(), &QTimer::timeout, [this] { SetPollingResult({}, true); }); @@ -416,20 +424,7 @@ ConfigureInputPlayer::ConfigureInputPlayer(QWidget* parent, std::size_t player_i } }); - controller_color_buttons = { - ui->left_body_button, - ui->left_buttons_button, - ui->right_body_button, - ui->right_buttons_button, - }; - - for (std::size_t i = 0; i < controller_color_buttons.size(); ++i) { - connect(controller_color_buttons[i], &QPushButton::clicked, this, - [this, i] { OnControllerButtonClick(static_cast(i)); }); - } - LoadConfiguration(); - resize(0, 0); // TODO(wwylele): enable this when we actually emulate it ui->buttonHome->setEnabled(false); @@ -438,27 +433,43 @@ ConfigureInputPlayer::ConfigureInputPlayer(QWidget* parent, std::size_t player_i ConfigureInputPlayer::~ConfigureInputPlayer() = default; void ConfigureInputPlayer::ApplyConfiguration() { - auto& buttons = - debug ? Settings::values.debug_pad_buttons : Settings::values.players[player_index].buttons; - auto& analogs = - debug ? Settings::values.debug_pad_analogs : Settings::values.players[player_index].analogs; + auto& player = Settings::values.players[player_index]; + auto& buttons = debug ? Settings::values.debug_pad_buttons : player.buttons; + auto& analogs = debug ? Settings::values.debug_pad_analogs : player.analogs; std::transform(buttons_param.begin(), buttons_param.end(), buttons.begin(), [](const Common::ParamPackage& param) { return param.Serialize(); }); std::transform(analogs_param.begin(), analogs_param.end(), analogs.begin(), [](const Common::ParamPackage& param) { return param.Serialize(); }); - if (debug) + if (debug) { return; + } - std::array colors{}; - std::transform(controller_colors.begin(), controller_colors.end(), colors.begin(), - [](QColor color) { return color.rgb(); }); + player.controller_type = + static_cast(ui->comboControllerType->currentIndex()); + player.connected = ui->groupConnectedController->isChecked(); - Settings::values.players[player_index].body_color_left = colors[0]; - Settings::values.players[player_index].button_color_left = colors[1]; - Settings::values.players[player_index].body_color_right = colors[2]; - Settings::values.players[player_index].button_color_right = colors[3]; + // Player 2-8 + if (player_index != 0) { + UpdateController(player.controller_type, player_index, player.connected); + return; + } + + // Player 1 and Handheld + auto& handheld = Settings::values.players[HANDHELD_INDEX]; + // If Handheld is selected, copy all the settings from Player 1 to Handheld. + if (player.controller_type == Settings::ControllerType::Handheld) { + handheld = player; + handheld.connected = ui->groupConnectedController->isChecked(); + player.connected = false; // Disconnect Player 1 + } else { + player.connected = ui->groupConnectedController->isChecked(); + handheld.connected = false; // Disconnect Handheld + } + + UpdateController(player.controller_type, player_index, player.connected); + UpdateController(Settings::ControllerType::Handheld, HANDHELD_INDEX, handheld.connected); } void ConfigureInputPlayer::changeEvent(QEvent* event) { @@ -466,24 +477,16 @@ void ConfigureInputPlayer::changeEvent(QEvent* event) { RetranslateUI(); } - QDialog::changeEvent(event); + QWidget::changeEvent(event); } void ConfigureInputPlayer::RetranslateUI() { ui->retranslateUi(this); - UpdateButtonLabels(); -} - -void ConfigureInputPlayer::OnControllerButtonClick(int i) { - const QColor new_bg_color = QColorDialog::getColor(controller_colors[i]); - if (!new_bg_color.isValid()) - return; - controller_colors[i] = new_bg_color; - controller_color_buttons[i]->setStyleSheet( - QStringLiteral("QPushButton { background-color: %1 }").arg(controller_colors[i].name())); + UpdateUI(); } void ConfigureInputPlayer::LoadConfiguration() { + auto& player = Settings::values.players[player_index]; if (debug) { std::transform(Settings::values.debug_pad_buttons.begin(), Settings::values.debug_pad_buttons.end(), buttons_param.begin(), @@ -492,56 +495,53 @@ void ConfigureInputPlayer::LoadConfiguration() { Settings::values.debug_pad_analogs.end(), analogs_param.begin(), [](const std::string& str) { return Common::ParamPackage(str); }); } else { - std::transform(Settings::values.players[player_index].buttons.begin(), - Settings::values.players[player_index].buttons.end(), buttons_param.begin(), + std::transform(player.buttons.begin(), player.buttons.end(), buttons_param.begin(), [](const std::string& str) { return Common::ParamPackage(str); }); - std::transform(Settings::values.players[player_index].analogs.begin(), - Settings::values.players[player_index].analogs.end(), analogs_param.begin(), + std::transform(player.analogs.begin(), player.analogs.end(), analogs_param.begin(), [](const std::string& str) { return Common::ParamPackage(str); }); } - UpdateButtonLabels(); + UpdateUI(); - if (debug) + if (debug) { return; + } - std::array colors = { - Settings::values.players[player_index].body_color_left, - Settings::values.players[player_index].button_color_left, - Settings::values.players[player_index].body_color_right, - Settings::values.players[player_index].button_color_right, - }; + ui->comboControllerType->setCurrentIndex(static_cast(player.controller_type)); + ui->groupConnectedController->setChecked( + player.connected || + (player_index == 0 && Settings::values.players[HANDHELD_INDEX].connected)); +} - std::transform(colors.begin(), colors.end(), controller_colors.begin(), - [](u32 rgb) { return QColor::fromRgb(rgb); }); - - for (std::size_t i = 0; i < colors.size(); ++i) { - controller_color_buttons[i]->setStyleSheet( - QStringLiteral("QPushButton { background-color: %1 }") - .arg(controller_colors[i].name())); +void ConfigureInputPlayer::UpdateInputDevices() { + input_devices = InputCommon::GetInputDevices(); + ui->comboDevices->clear(); + for (auto device : input_devices) { + ui->comboDevices->addItem(QString::fromStdString(device.Get("display", "Unknown")), {}); } } void ConfigureInputPlayer::RestoreDefaults() { - for (int button_id = 0; button_id < Settings::NativeButton::NumButtons; button_id++) { + // Reset Buttons + for (int button_id = 0; button_id < Settings::NativeButton::NumButtons; ++button_id) { buttons_param[button_id] = Common::ParamPackage{ InputCommon::GenerateKeyboardParam(Config::default_buttons[button_id])}; } - - for (int analog_id = 0; analog_id < Settings::NativeAnalog::NumAnalogs; analog_id++) { - for (int sub_button_id = 0; sub_button_id < ANALOG_SUB_BUTTONS_NUM; sub_button_id++) { + // Reset Analogs + for (int analog_id = 0; analog_id < Settings::NativeAnalog::NumAnalogs; ++analog_id) { + for (int sub_button_id = 0; sub_button_id < ANALOG_SUB_BUTTONS_NUM; ++sub_button_id) { Common::ParamPackage params{InputCommon::GenerateKeyboardParam( Config::default_analogs[analog_id][sub_button_id])}; - SetAnalogButton(params, analogs_param[analog_id], analog_sub_buttons[sub_button_id]); + SetAnalogParam(params, analogs_param[analog_id], analog_sub_buttons[sub_button_id]); } } - - UpdateButtonLabels(); - ApplyConfiguration(); + UpdateUI(); + UpdateInputDevices(); + ui->comboControllerType->setCurrentIndex(0); } void ConfigureInputPlayer::ClearAll() { - for (int button_id = 0; button_id < Settings::NativeButton::NumButtons; button_id++) { + for (int button_id = 0; button_id < Settings::NativeButton::NumButtons; ++button_id) { const auto* const button = button_map[button_id]; if (button == nullptr || !button->isEnabled()) { continue; @@ -550,8 +550,8 @@ void ConfigureInputPlayer::ClearAll() { buttons_param[button_id].Clear(); } - for (int analog_id = 0; analog_id < Settings::NativeAnalog::NumAnalogs; analog_id++) { - for (int sub_button_id = 0; sub_button_id < ANALOG_SUB_BUTTONS_NUM; sub_button_id++) { + for (int analog_id = 0; analog_id < Settings::NativeAnalog::NumAnalogs; ++analog_id) { + for (int sub_button_id = 0; sub_button_id < ANALOG_SUB_BUTTONS_NUM; ++sub_button_id) { const auto* const analog_button = analog_map_buttons[analog_id][sub_button_id]; if (analog_button == nullptr || !analog_button->isEnabled()) { continue; @@ -561,17 +561,17 @@ void ConfigureInputPlayer::ClearAll() { } } - UpdateButtonLabels(); - ApplyConfiguration(); + UpdateUI(); + UpdateInputDevices(); } -void ConfigureInputPlayer::UpdateButtonLabels() { - for (int button = 0; button < Settings::NativeButton::NumButtons; button++) { +void ConfigureInputPlayer::UpdateUI() { + for (int button = 0; button < Settings::NativeButton::NumButtons; ++button) { button_map[button]->setText(ButtonToText(buttons_param[button])); } - for (int analog_id = 0; analog_id < Settings::NativeAnalog::NumAnalogs; analog_id++) { - for (int sub_button_id = 0; sub_button_id < ANALOG_SUB_BUTTONS_NUM; sub_button_id++) { + for (int analog_id = 0; analog_id < Settings::NativeAnalog::NumAnalogs; ++analog_id) { + for (int sub_button_id = 0; sub_button_id < ANALOG_SUB_BUTTONS_NUM; ++sub_button_id) { auto* const analog_button = analog_map_buttons[analog_id][sub_button_id]; if (analog_button == nullptr) { @@ -581,52 +581,75 @@ void ConfigureInputPlayer::UpdateButtonLabels() { analog_button->setText( AnalogToText(analogs_param[analog_id], analog_sub_buttons[sub_button_id])); } - analog_map_stick[analog_id]->setText(tr("Set Analog Stick")); + const auto deadzone_label = analog_map_deadzone_label[analog_id]; + const auto deadzone_slider = analog_map_deadzone_slider[analog_id]; + const auto modifier_groupbox = analog_map_modifier_groupbox[analog_id]; + const auto modifier_label = analog_map_modifier_label[analog_id]; + const auto modifier_slider = analog_map_modifier_slider[analog_id]; + const auto range_groupbox = analog_map_range_groupbox[analog_id]; + const auto range_spinbox = analog_map_range_spinbox[analog_id]; + + int slider_value; auto& param = analogs_param[analog_id]; - auto* const analog_stick_slider = analog_map_deadzone_and_modifier_slider[analog_id]; - auto* const analog_stick_slider_label = - analog_map_deadzone_and_modifier_slider_label[analog_id]; + const bool is_controller = + param.Get("engine", "") == "sdl" || param.Get("engine", "") == "gcpad"; - if (param.Has("engine")) { - if (param.Get("engine", "") == "sdl" || param.Get("engine", "") == "gcpad") { - if (!param.Has("deadzone")) { - param.Set("deadzone", 0.1f); - } - - analog_stick_slider->setValue(static_cast(param.Get("deadzone", 0.1f) * 100)); - if (analog_stick_slider->value() == 0) { - analog_stick_slider_label->setText(tr("Deadzone: 0%")); - } - } else { - if (!param.Has("modifier_scale")) { - param.Set("modifier_scale", 0.5f); - } - - analog_stick_slider->setValue( - static_cast(param.Get("modifier_scale", 0.5f) * 100)); - if (analog_stick_slider->value() == 0) { - analog_stick_slider_label->setText(tr("Modifier Scale: 0%")); - } + if (is_controller) { + if (!param.Has("deadzone")) { + param.Set("deadzone", 0.1f); } + slider_value = static_cast(param.Get("deadzone", 0.1f) * 100); + deadzone_label->setText(tr("Deadzone: %1%").arg(slider_value)); + deadzone_slider->setValue(slider_value); + if (!param.Has("range")) { + param.Set("range", 1.0f); + } + range_spinbox->setValue(static_cast(param.Get("range", 1.0f) * 100)); + } else { + if (!param.Has("modifier_scale")) { + param.Set("modifier_scale", 0.5f); + } + slider_value = static_cast(param.Get("modifier_scale", 0.5f) * 100); + modifier_label->setText(tr("Modifier Range: %1%").arg(slider_value)); + modifier_slider->setValue(slider_value); } + + deadzone_label->setVisible(is_controller); + deadzone_slider->setVisible(is_controller); + modifier_groupbox->setVisible(!is_controller); + modifier_label->setVisible(!is_controller); + modifier_slider->setVisible(!is_controller); + range_groupbox->setVisible(is_controller); } } +void ConfigureInputPlayer::UpdateMappingWithDefaults() { + if (ui->comboDevices->currentIndex() < 2) { + return; + } + const auto& device = input_devices[ui->comboDevices->currentIndex()]; + auto button_mapping = InputCommon::GetButtonMappingForDevice(device); + auto analog_mapping = InputCommon::GetAnalogMappingForDevice(device); + for (int i = 0; i < buttons_param.size(); ++i) { + buttons_param[i] = button_mapping[static_cast(i)]; + } + for (int i = 0; i < analogs_param.size(); ++i) { + analogs_param[i] = analog_mapping[static_cast(i)]; + } + + UpdateUI(); +} + void ConfigureInputPlayer::HandleClick( QPushButton* button, std::function new_input_setter, InputCommon::Polling::DeviceType type) { - button->setText(tr("[press key]")); + button->setText(tr("[waiting]")); button->setFocus(); - // Keyboard keys can only be used as button devices - want_keyboard_keys = type == InputCommon::Polling::DeviceType::Button; - if (want_keyboard_keys) { - const auto iter = std::find(button_map.begin(), button_map.end(), button); - ASSERT(iter != button_map.end()); - const auto index = std::distance(button_map.begin(), iter); - ASSERT(index < Settings::NativeButton::NumButtons && index >= 0); - } + // The first two input devices are always Any and Keyboard. If the user filtered to a + // controller, then they don't want keyboard input + want_keyboard_keys = ui->comboDevices->currentIndex() < 2; input_setter = new_input_setter; @@ -636,20 +659,17 @@ void ConfigureInputPlayer::HandleClick( poller->Start(); } - grabKeyboard(); - grabMouse(); if (type == InputCommon::Polling::DeviceType::Button) { InputCommon::GetGCButtons()->BeginConfiguration(); } else { InputCommon::GetGCAnalogs()->BeginConfiguration(); } - timeout_timer->start(5000); // Cancel after 5 seconds - poll_timer->start(200); // Check for new inputs every 200ms + + timeout_timer->start(2500); // Cancel after 2.5 seconds + poll_timer->start(50); // Check for new inputs every 50ms } void ConfigureInputPlayer::SetPollingResult(const Common::ParamPackage& params, bool abort) { - releaseKeyboard(); - releaseMouse(); timeout_timer->stop(); poll_timer->stop(); for (auto& poller : device_pollers) { @@ -663,7 +683,7 @@ void ConfigureInputPlayer::SetPollingResult(const Common::ParamPackage& params, (*input_setter)(params); } - UpdateButtonLabels(); + UpdateUI(); input_setter = std::nullopt; } @@ -683,3 +703,114 @@ void ConfigureInputPlayer::keyPressEvent(QKeyEvent* event) { } SetPollingResult({}, true); } + +void ConfigureInputPlayer::UpdateControllerIcon() { + // We aren't using Qt's built in theme support here since we aren't drawing an icon (and its + // "nonstandard" to use an image through the icon support) + QString stylesheet{}; + switch (GetControllerTypeFromIndex(ui->comboControllerType->currentIndex())) { + case Settings::ControllerType::ProController: + stylesheet = QStringLiteral("image: url(:/controller/pro_controller%0)"); + break; + case Settings::ControllerType::DualJoyconDetached: + stylesheet = QStringLiteral("image: url(:/controller/dual_joycon%0)"); + break; + case Settings::ControllerType::LeftJoycon: + stylesheet = QStringLiteral("image: url(:/controller/single_joycon_left_vertical%0)"); + break; + case Settings::ControllerType::RightJoycon: + stylesheet = QStringLiteral("image: url(:/controller/single_joycon_right_vertical%0)"); + break; + case Settings::ControllerType::Handheld: + stylesheet = QStringLiteral("image: url(:/controller/handheld%0)"); + break; + default: + break; + } + + const QString theme = [this] { + if (QIcon::themeName().contains(QStringLiteral("dark"))) { + return QStringLiteral("_dark"); + } else if (QIcon::themeName().contains(QStringLiteral("midnight"))) { + return QStringLiteral("_midnight"); + } else { + return QString{}; + } + }(); + + ui->controllerFrame->setStyleSheet(stylesheet.arg(theme)); +} + +void ConfigureInputPlayer::UpdateControllerAvailableButtons() { + auto layout = GetControllerTypeFromIndex(ui->comboControllerType->currentIndex()); + if (debug) { + layout = Settings::ControllerType::DualJoyconDetached; + } + + // List of all the widgets that will be hidden by any of the following layouts that need + // "unhidden" after the controller type changes + const std::vector layout_show = { + ui->buttonShoulderButtonsSLSR, + ui->horizontalSpacerShoulderButtonsWidget, + ui->horizontalSpacerShoulderButtonsWidget2, + ui->buttonShoulderButtonsLeft, + ui->buttonMiscButtonsMinusScreenshot, + ui->bottomLeft, + ui->buttonShoulderButtonsRight, + ui->buttonMiscButtonsPlusHome, + ui->bottomRight, + }; + + for (auto* widget : layout_show) { + widget->show(); + } + + std::vector layout_hidden; + switch (layout) { + case Settings::ControllerType::ProController: + layout_hidden = { + ui->buttonShoulderButtonsSLSR, + ui->horizontalSpacerShoulderButtonsWidget2, + }; + break; + case Settings::ControllerType::DualJoyconDetached: + case Settings::ControllerType::Handheld: + layout_hidden = { + ui->buttonShoulderButtonsSLSR, + ui->horizontalSpacerShoulderButtonsWidget2, + }; + break; + case Settings::ControllerType::LeftJoycon: + layout_hidden = { + ui->horizontalSpacerShoulderButtonsWidget2, + ui->buttonShoulderButtonsRight, + ui->buttonMiscButtonsPlusHome, + ui->bottomRight, + }; + break; + case Settings::ControllerType::RightJoycon: + layout_hidden = { + ui->horizontalSpacerShoulderButtonsWidget, + ui->buttonShoulderButtonsLeft, + ui->buttonMiscButtonsMinusScreenshot, + ui->bottomLeft, + }; + break; + } + + for (auto* widget : layout_hidden) { + widget->hide(); + } +} + +void ConfigureInputPlayer::showEvent(QShowEvent* event) { + if (bottom_row == nullptr) { + return; + } + QWidget::showEvent(event); + ui->main->addWidget(bottom_row); +} + +void ConfigureInputPlayer::ConnectPlayer(bool connected) { + ui->groupConnectedController->setChecked(connected); +} diff --git a/src/yuzu/configuration/configure_input_player.h b/src/yuzu/configuration/configure_input_player.h index 95afa5375..a86db8200 100644 --- a/src/yuzu/configuration/configure_input_player.h +++ b/src/yuzu/configuration/configure_input_player.h @@ -15,11 +15,17 @@ #include "common/param_package.h" #include "core/settings.h" #include "ui_configure_input.h" +#include "yuzu/uisettings.h" +class QCheckBox; class QKeyEvent; +class QLabel; class QPushButton; +class QSlider; +class QSpinBox; class QString; class QTimer; +class QWidget; namespace InputCommon::Polling { class DevicePoller; @@ -30,43 +36,73 @@ namespace Ui { class ConfigureInputPlayer; } -class ConfigureInputPlayer : public QDialog { +class ConfigureInputPlayer : public QWidget { Q_OBJECT public: - explicit ConfigureInputPlayer(QWidget* parent, std::size_t player_index, bool debug = false); + explicit ConfigureInputPlayer(QWidget* parent, std::size_t player_index, QWidget* bottom_row, + bool debug = false); ~ConfigureInputPlayer() override; - /// Save all button configurations to settings file + /// Save all button configurations to settings file. void ApplyConfiguration(); + /// Update the input devices combobox. + void UpdateInputDevices(); + + /// Restore all buttons to their default values. + void RestoreDefaults(); + + /// Clear all input configuration. + void ClearAll(); + + /// Set the connection state checkbox (used to sync state). + void ConnectPlayer(bool connected); + +signals: + /// Emitted when this controller is connected by the user. + void Connected(bool connected); + /// Emitted when the Handheld mode is selected (undocked with dual joycons attached). + void HandheldStateChanged(bool is_handheld); + /// Emitted when the input devices combobox is being refreshed. + void RefreshInputDevices(); + +protected: + void showEvent(QShowEvent* event) override; + private: void changeEvent(QEvent* event) override; void RetranslateUI(); - void OnControllerButtonClick(int i); - /// Load configuration settings. void LoadConfiguration(); - /// Restore all buttons to their default values. - void RestoreDefaults(); - /// Clear all input configuration - void ClearAll(); - - /// Update UI to reflect current configuration. - void UpdateButtonLabels(); /// Called when the button was pressed. void HandleClick(QPushButton* button, std::function new_input_setter, InputCommon::Polling::DeviceType type); - /// Finish polling and configure input using the input_setter + /// Finish polling and configure input using the input_setter. void SetPollingResult(const Common::ParamPackage& params, bool abort); /// Handle key press events. void keyPressEvent(QKeyEvent* event) override; + /// Update UI to reflect current configuration. + void UpdateUI(); + + /// Update the controller selection combobox + void UpdateControllerCombobox(); + + /// Update the current controller icon. + void UpdateControllerIcon(); + + /// Hides and disables controller settings based on the current controller type. + void UpdateControllerAvailableButtons(); + + /// Gets the default controller mapping for this device and auto configures the input to match. + void UpdateMappingWithDefaults(); + std::unique_ptr ui; std::size_t player_index; @@ -75,32 +111,38 @@ private: std::unique_ptr timeout_timer; std::unique_ptr poll_timer; + static constexpr int PLAYER_COUNT = 8; + std::array player_connected_checkbox; + /// This will be the the setting function when an input is awaiting configuration. std::optional> input_setter; std::array buttons_param; std::array analogs_param; - static constexpr int ANALOG_SUB_BUTTONS_NUM = 5; + static constexpr int ANALOG_SUB_BUTTONS_NUM = 4; + // Adds room for two extra push buttons LStick Modifier and RStick Modifier. + static constexpr int BUTTON_MAP_COUNT = Settings::NativeButton::NumButtons + 2; /// Each button input is represented by a QPushButton. - std::array button_map; + std::array button_map; + /// Extra buttons for the modifiers. + Common::ParamPackage lstick_mod; + Common::ParamPackage rstick_mod; - std::vector debug_hidden; - std::vector layout_hidden; - - /// A group of five QPushButtons represent one analog input. The buttons each represent up, - /// down, left, right, and modifier, respectively. + /// A group of four QPushButtons represent one analog input. The buttons each represent up, + /// down, left, right, respectively. std::array, Settings::NativeAnalog::NumAnalogs> analog_map_buttons; - /// Analog inputs are also represented each with a single button, used to configure with an - /// actual analog stick - std::array analog_map_stick; - std::array - analog_map_deadzone_and_modifier_slider; - std::array - analog_map_deadzone_and_modifier_slider_label; + std::array analog_map_deadzone_label; + std::array analog_map_deadzone_slider; + std::array analog_map_modifier_groupbox; + std::array analog_map_modifier_button; + std::array analog_map_modifier_label; + std::array analog_map_modifier_slider; + std::array analog_map_range_groupbox; + std::array analog_map_range_spinbox; static const std::array analog_sub_buttons; @@ -110,6 +152,12 @@ private: /// keyboard events are ignored. bool want_keyboard_keys = false; - std::array controller_color_buttons; - std::array controller_colors; + /// List of physical devices users can map with. If a SDL backed device is selected, then you + /// can usue this device to get a default mapping. + std::vector input_devices; + + /// Bottom row is where console wide settings are held, and its "owned" by the parent + /// ConfigureInput widget. On show, add this widget to the main layout. This will change the + /// parent of the widget to this widget (but thats fine). + QWidget* bottom_row; }; diff --git a/src/yuzu/configuration/configure_input_player.ui b/src/yuzu/configuration/configure_input_player.ui index f27a77180..eb826a935 100644 --- a/src/yuzu/configuration/configure_input_player.ui +++ b/src/yuzu/configuration/configure_input_player.ui @@ -1,1243 +1,2974 @@ ConfigureInputPlayer - + 0 0 - 408 - 731 + 780 + 487 Configure Input - + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + - - - - - Right Stick + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + 3 - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + 0 - - false - - - false - - - - + + + + Qt::LeftToRight + + + Connect Controller + + + false + + + true + + + + 5 + + + 5 + + + 5 + + + 5 + - + - - - Down: - - + + Pro Controller + + + + + Dual Joycons + + + + + Left Joycon + + + + + Right Joycon + + + + + Handheld + - - - - - - - - - - + + + + + + Input Device + + + + 3 + + + 5 + + + 5 + + + 5 + + + 5 + - + - - - Right: - - + + Any + + + + + Keyboard + - - - - - - - - - - - - - Set Analog Stick - - - - - - - - - - Left: - - - - - - - - - - - - - - - - - - - - - - Up: - - - - - - - - - - - - - - - - - - - - - - Pressed: - - - - - - - - - - - - - - - - - - - - - - Modifier: - - - - - - - - - - - - - - - - - - - - - - Deadzone: 0 - - - Qt::AlignHCenter - - - - - - - - - Qt::Horizontal - - - - - - - - - Qt::Vertical - - - - 0 - 0 - - - - - - - - - - - Directional Pad - - - false - - - false - - - - - - - - - - Up: - - - - - - - - - - - - - - - - - - - - - - Down: - - - - - - - - - - - - - - - - - - - - - - - 80 - 0 - - - - Left: - - - - - - - - - - - - - - - - - - - - - - - 80 - 0 - - - - Right: - - - - - - - - - - - - - - - - - - - - - Face Buttons - - - false - - - false - - - - - - - - - - - 80 - 0 - - - - A: - - - - - - - - - - - - - - - - - - - - - - - 80 - 0 - - - - B: - - - - - - - - - - - - - - - - - - - - - - X: - - - - - - - - - - - - - - - - - - - - - - Y: - - - - - - - - - - - - - - - - - - - - - Controller Color - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - Left Body - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - - 90 - 0 - - - - Left Buttons - - - - - - - - 0 - 0 - - - - - 32 - 0 - - - - - 40 - 16777215 - - - - - - - - - - - Right Body - - - - - - - - 90 - 0 - - - - Right Buttons - - - - - - - - 0 - 0 - - - - - 32 - 0 - - - - - 40 - 16777215 - - - - - - - - - - - - 0 - 0 - - - - - 32 - 0 - - - - - 40 - 16777215 - - - - - - - - - - - - 0 - 0 - - - - - 32 - 0 - - - - - 40 - 16777215 - - - - - - - - - - - Qt::Horizontal - - - QSizePolicy::Fixed - - - - 20 - 20 - - - - - - - - - - - Left Stick - - - false - - - false - - - - - - - - - - Up: - - - - - - - - - - - - - - - - - - - - - - Right: - - - - - - - - - - - - - - - - - - Set Analog Stick - - - - - - - - - - - Left: - - - - - - - - - - - - - - - - - - - - - - Down: - - - - - - - - - - - - - - - - - - - - - - Modifier: - - - - - - - - - - - - - - - - - - - - - - Pressed: - - - - - - - - - - - - - - - - - - QLayout::SetDefaultConstraint - - - - - - - Deadzone: 0 - - - Qt::AlignHCenter - - - - - - - - - Qt::Horizontal - - - - - - - - - Qt::Vertical - - - - 0 - 0 - - - - - - - - - - - Shoulder Buttons - - - false - - - false - - - - - - - - - - L: - - - - - - - - - - - - - - - - - - - - - - R: - - - - - - - - - - - - - - - - - - - - - - ZL: - - - - - - - - - - - - - - - - - - - - - - ZR: - - - - - - - - - - - - - - - - - - - - - - SL: - - - - - - - - - - - - - - - - - - - - - - SR: - - - - - - - - - - - - - - - - - - - - - Misc. - - - false - - - false - - - - - - - - - - Minus: - - - - - - - - - - - - - - - - - - Qt::Vertical - - - - 20 - 40 - - - - - - - - - - - - Plus: - - - - - - - - - - - - - - - - - - - - - - Home: - - - - - - - - - - - - - - - - - - - - - - Screen Capture: - - - false - - - - - - - - - - 0 - 0 - + + + + 24 + 22 + - 80 - 16777215 + 24 + 22 - - + + + + + + + + + 0 + 0 + + + + Profile + + + + 3 + + + 5 + + + 5 + + + 5 + + + 5 + + + + + + + + + 55 + 16777215 + + + + min-width: 55px; + + + Save + + + + + + + + 55 + 16777215 + + + + min-width: 55px; + + + New + + + + + + + + 55 + 16777215 + + + + min-width: 55px; + + + Delete + + + + + + + + + + + + + 0 + 0 + + + + + QLayout::SetMinimumSize + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + 0 + + + QLayout::SetDefaultConstraint + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + 0 + 0 + + + + Left Stick + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop + + + + 0 + + + QLayout::SetDefaultConstraint + + + 3 + + + 0 + + + 3 + + + 0 + + + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + Qt::Horizontal + + + + 20 + 20 + + + + + + + + Up + + + Qt::AlignCenter + + + false + + + + 3 + + + 3 + + + 3 + + + 3 + + + 3 + + + + + + 57 + 0 + + + + + 55 + 16777215 + + + + min-width: 55px; + + + Up + + + + + + + + + + Qt::Horizontal + + + + 20 + 20 + + + + + + + + + + + 3 + + + + + Left + + + Qt::AlignCenter + + + + 3 + + + 3 + + + 3 + + + 3 + + + 3 + + + + + + 57 + 0 + + + + + 55 + 16777215 + + + + min-width: 55px; + + + Left + + + + + + + + + + Right + + + Qt::AlignCenter + + + + 3 + + + 3 + + + 3 + + + 3 + + + 3 + + + + + + 57 + 0 + + + + + 55 + 16777215 + + + + min-width: 55px; + + + Right + + + + + + + + + + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + Qt::Horizontal + + + + 20 + 20 + + + + + + + + Down + + + Qt::AlignCenter + + + + 3 + + + 3 + + + 3 + + + 3 + + + 3 + + + + + + 57 + 0 + + + + + 55 + 16777215 + + + + min-width: 55px; + + + Down + + + + + + + + + + Qt::Horizontal + + + + 20 + 20 + + + + + + + + + + + 3 + + + + + Pressed + + + Qt::AlignCenter + + + + 3 + + + 3 + + + 3 + + + 3 + + + 3 + + + + + + 57 + 0 + + + + + 55 + 16777215 + + + + min-width: 55px; + + + Pressed + + + + + + + + + + Modifier + + + Qt::AlignCenter + + + + 3 + + + 3 + + + 3 + + + 3 + + + 3 + + + + + + 57 + 0 + + + + + 55 + 16777215 + + + + min-width: 55px; + + + Modifier + + + + + + + + + + Range + + + + 3 + + + 3 + + + 3 + + + 3 + + + 3 + + + + + + 55 + 21 + + + + + 55 + 16777215 + + + + % + + + 50 + + + 150 + + + 100 + + + + + + + + + + + + 3 + + + QLayout::SetDefaultConstraint + + + 0 + + + 2 + + + 0 + + + 3 + + + + + + + Deadzone: 0% + + + Qt::AlignHCenter + + + + + + + + + 100 + + + Qt::Horizontal + + + + + + + + + Modifier Range: 0% + + + Qt::AlignHCenter + + + + + + + + + 100 + + + Qt::Horizontal + + + + + + + + + + + + Qt::Vertical + + + + 20 + 0 + + + + + + + + + 0 + 0 + + + + D-Pad + + + false + + + false + + + + 0 + + + 3 + + + 0 + + + 3 + + + 3 + + + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + Qt::Horizontal + + + + 20 + 20 + + + + + + + + Up + + + Qt::AlignCenter + + + + 3 + + + 3 + + + 3 + + + 3 + + + 3 + + + + + + 57 + 0 + + + + + 55 + 16777215 + + + + min-width: 55px; + + + Up + + + + + + + + + + Qt::Horizontal + + + + 20 + 20 + + + + + + + + + + + 3 + + + + + Left + + + Qt::AlignCenter + + + + 3 + + + 3 + + + 3 + + + 3 + + + 3 + + + + + + 57 + 0 + + + + + 55 + 16777215 + + + + min-width: 55px; + + + Left + + + + + + + + + + Right + + + Qt::AlignCenter + + + + 3 + + + 3 + + + 3 + + + 3 + + + 3 + + + + + + 57 + 0 + + + + + 55 + 16777215 + + + + min-width: 55px; + + + Right + + + + + + + + + + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + Qt::Horizontal + + + + 20 + 20 + + + + + + + + Down + + + Qt::AlignCenter + + + + 3 + + + 3 + + + 3 + + + 3 + + + 3 + + + + + + 57 + 0 + + + + + 55 + 16777215 + + + + min-width: 55px; + + + Down + + + + + + + + + + Qt::Horizontal + + + + 20 + 20 + + + + + + + + + + + + + + Qt::Vertical + + + + 20 + 0 + + + + + + + + + + + + 6 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + 3 + + + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + L + + + Qt::AlignCenter + + + + 3 + + + 3 + + + 3 + + + 3 + + + 3 + + + + + + 57 + 0 + + + + + 55 + 16777215 + + + + min-width: 55px; + + + L + + + + + + + + + + ZL + + + Qt::AlignCenter + + + + 3 + + + 3 + + + 3 + + + 3 + + + 3 + + + + + + 57 + 0 + + + + + 55 + 16777215 + + + + min-width: 55px; + + + ZL + + + + + + + + + + + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + Qt::Horizontal + + + + 0 + 20 + + + + + + + + + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + Minus + + + Qt::AlignCenter + + + + 3 + + + 3 + + + 3 + + + 3 + + + 3 + + + + + + 57 + 0 + + + + + 55 + 16777215 + + + + min-width: 55px; + + + Minus + + + + + + + + + + Capture + + + Qt::AlignCenter + + + + 3 + + + 3 + + + 3 + + + 3 + + + 3 + + + + + + 57 + 0 + + + + + 55 + 16777215 + + + + min-width: 55px; + + + Capture + + + + + + + + + + + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + Plus + + + Qt::AlignCenter + + + + 3 + + + 3 + + + 3 + + + 3 + + + 3 + + + + + + 57 + 0 + + + + + 55 + 16777215 + + + + min-width: 55px; + + + Plus + + + + + + + + + + Home + + + Qt::AlignCenter + + + + 3 + + + 3 + + + 3 + + + 3 + + + 3 + + + + + + 57 + 0 + + + + + 55 + 16777215 + + + + min-width: 55px; + + + Home + + + + + + + + + + + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + Qt::Horizontal + + + + 0 + 20 + + + + + + + + + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + R + + + Qt::AlignCenter + + + + 3 + + + 3 + + + 3 + + + 3 + + + 3 + + + + + + 57 + 0 + + + + + 55 + 16777215 + + + + min-width: 55px; + + + R + + + + + + + + + + ZR + + + Qt::AlignCenter + + + + 3 + + + 3 + + + 3 + + + 3 + + + 3 + + + + + + 57 + 0 + + + + + 55 + 16777215 + + + + min-width: 55px; + + + ZR + + + + + + + + + + + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + Qt::Horizontal + + + + 0 + 20 + + + + + + + + + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + SL + + + Qt::AlignCenter + + + + 3 + + + 3 + + + 3 + + + 3 + + + 3 + + + + + + 57 + 0 + + + + + 55 + 16777215 + + + + min-width: 55px; + + + SL + + + + + + + + + + SR + + + Qt::AlignCenter + + + + 3 + + + 3 + + + 3 + + + 3 + + + 3 + + + + + + 57 + 0 + + + + + 55 + 16777215 + + + + min-width: 55px; + + + SR + + + + + + + + + + + + + + + + 0 + 0 + + + + + 75 + true + + + + image: url(:/controller/pro); + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + + + 3 + + + + + Qt::Horizontal + + + + 40 + 0 + + + + + + + + Qt::Horizontal + + + + 40 + 0 + + + + + + + + + + + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + 0 + 0 + + + + Face Buttons + + + false + + + false + + + + 0 + + + 3 + + + 0 + + + 3 + + + 3 + + + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + Qt::Horizontal + + + + 20 + 20 + + + + + + + + X + + + Qt::AlignCenter + + + + 3 + + + 3 + + + 3 + + + 3 + + + 3 + + + + + + 57 + 0 + + + + + 55 + 16777215 + + + + min-width: 55px; + + + X + + + + + + + + + + Qt::Horizontal + + + + 20 + 20 + + + + + + + + + + + 3 + + + + + Y + + + Qt::AlignCenter + + + + 3 + + + 3 + + + 3 + + + 3 + + + 3 + + + + + + 57 + 0 + + + + + 55 + 16777215 + + + + min-width: 55px; + + + Y + + + + + + + + + + A + + + Qt::AlignCenter + + + + 3 + + + 3 + + + 3 + + + 3 + + + 3 + + + + + + 57 + 0 + + + + + 55 + 16777215 + + + + min-width: 55px; + + + A + + + + + + + + + + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + Qt::Horizontal + + + + 20 + 20 + + + + + + + + B + + + Qt::AlignCenter + + + + 3 + + + 3 + + + 3 + + + 3 + + + 3 + + + + + + 57 + 0 + + + + + 55 + 16777215 + + + + min-width: 55px; + + + B + + + + + + + + + + Qt::Horizontal + + + + 20 + 20 + + + + + + + + + + + + + + Qt::Vertical + + + + 20 + 0 + + + + + + + + + 0 + 0 + + + + Right Stick + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + + false + + + false + + + + 0 + + + 3 + + + 0 + + + 3 + + + 0 + + + + + + 0 + 0 + + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + Qt::Horizontal + + + + 20 + 20 + + + + + + + + Up + + + Qt::AlignCenter + + + + 3 + + + 3 + + + 3 + + + 3 + + + 3 + + + + + + 57 + 0 + + + + + 55 + 16777215 + + + + min-width: 55px; + + + Up + + + + + + + + + + Qt::Horizontal + + + + 20 + 20 + + + + + + + + + + + 3 + + + + + Left + + + Qt::AlignCenter + + + + 3 + + + 3 + + + 3 + + + 3 + + + 3 + + + + + + 57 + 0 + + + + + 55 + 16777215 + + + + min-width: 55px; + + + Left + + + + + + + + + + Right + + + Qt::AlignCenter + + + + 3 + + + 3 + + + 3 + + + 3 + + + 3 + + + + + + 57 + 0 + + + + + 55 + 16777215 + + + + min-width: 55px; + + + Right + + + + + + + + + + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + Qt::Horizontal + + + + 20 + 20 + + + + + + + + Down + + + Qt::AlignCenter + + + + 3 + + + 3 + + + 3 + + + 3 + + + 3 + + + + + + 57 + 0 + + + + + 55 + 16777215 + + + + min-width: 55px; + + + Down + + + + + + + + + + Qt::Horizontal + + + + 20 + 20 + + + + + + + + + + + 3 + + + + + Pressed + + + Qt::AlignCenter + + + + 3 + + + 3 + + + 3 + + + 3 + + + 3 + + + + + + 57 + 0 + + + + + 55 + 16777215 + + + + min-width: 55px; + + + Pressed + + + + + + + + + + Modifier + + + Qt::AlignCenter + + + + 3 + + + 3 + + + 3 + + + 3 + + + 3 + + + + + + 57 + 0 + + + + + 55 + 16777215 + + + + min-width: 55px; + + + Modifier + + + + + + + + + + Range + + + + 3 + + + 3 + + + 3 + + + 3 + + + 3 + + + + + + 55 + 21 + + + + + 55 + 16777215 + + + + % + + + 50 + + + 150 + + + 100 + + + + + + + + + + + + 3 + + + 0 + + + 2 + + + 0 + + + 3 + + + + + + + Deadzone: 0% + + + Qt::AlignHCenter + + + + + + + + + 100 + + + Qt::Horizontal + + + + + + + + + Modifier Range: 0% + + + Qt::AlignHCenter + + + + + + + + + 100 + + + Qt::Horizontal + + + + + + + + + + + + Qt::Vertical + + + + 20 + 0 + + + + + + - - - - Qt::Vertical - - - - 20 - 40 - - - - - - - - - - - - - - 0 - 0 - - - - - 0 - 0 - - - - - 0 - 0 - - - - Qt::LeftToRight - - - Clear All - - - - - - - - 0 - 0 - - - - - 0 - 0 - - - - - 0 - 0 - - - - Qt::LeftToRight - - - Restore Defaults - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - QDialogButtonBox::Cancel|QDialogButtonBox::Ok - - - - - - - - - buttonBox - accepted() - ConfigureInputPlayer - accept() - - - 371 - 730 - - - 229 - 375 - - - - - buttonBox - rejected() - ConfigureInputPlayer - reject() - - - 371 - 730 - - - 229 - 375 - - - - + + + + diff --git a/src/yuzu/configuration/configure_input_simple.cpp b/src/yuzu/configuration/configure_input_simple.cpp deleted file mode 100644 index 0e0e8f113..000000000 --- a/src/yuzu/configuration/configure_input_simple.cpp +++ /dev/null @@ -1,152 +0,0 @@ -// Copyright 2016 Citra Emulator Project -// Licensed under GPLv2 or any later version -// Refer to the license.txt file included. - -#include -#include - -#include "ui_configure_input_simple.h" -#include "yuzu/configuration/configure_input.h" -#include "yuzu/configuration/configure_input_player.h" -#include "yuzu/configuration/configure_input_simple.h" -#include "yuzu/uisettings.h" - -namespace { - -template -void CallConfigureDialog(ConfigureInputSimple* caller, Args&&... args) { - caller->ApplyConfiguration(); - Dialog dialog(caller, std::forward(args)...); - - const auto res = dialog.exec(); - if (res == QDialog::Accepted) { - dialog.ApplyConfiguration(); - } -} - -// OnProfileSelect functions should (when applicable): -// - Set controller types -// - Set controller enabled -// - Set docked mode -// - Set advanced controller config/enabled (i.e. debug, kbd, mouse, touch) -// -// OnProfileSelect function should NOT however: -// - Reset any button mappings -// - Open any dialogs -// - Block in any way - -constexpr std::size_t PLAYER_0_INDEX = 0; -constexpr std::size_t HANDHELD_INDEX = 8; - -void HandheldOnProfileSelect() { - Settings::values.players[HANDHELD_INDEX].connected = true; - Settings::values.players[HANDHELD_INDEX].type = Settings::ControllerType::DualJoycon; - - for (std::size_t player = 0; player < HANDHELD_INDEX; ++player) { - Settings::values.players[player].connected = false; - } - - Settings::values.use_docked_mode = false; - Settings::values.keyboard_enabled = false; - Settings::values.mouse_enabled = false; - Settings::values.debug_pad_enabled = false; - Settings::values.touchscreen.enabled = true; -} - -void DualJoyconsDockedOnProfileSelect() { - Settings::values.players[PLAYER_0_INDEX].connected = true; - Settings::values.players[PLAYER_0_INDEX].type = Settings::ControllerType::DualJoycon; - - for (std::size_t player = 1; player <= HANDHELD_INDEX; ++player) { - Settings::values.players[player].connected = false; - } - - Settings::values.use_docked_mode = true; - Settings::values.keyboard_enabled = false; - Settings::values.mouse_enabled = false; - Settings::values.debug_pad_enabled = false; - Settings::values.touchscreen.enabled = true; -} - -// Name, OnProfileSelect (called when selected in drop down), OnConfigure (called when configure -// is clicked) -using InputProfile = std::tuple; - -constexpr std::array INPUT_PROFILES{{ - {QT_TR_NOOP("Single Player - Handheld - Undocked"), HandheldOnProfileSelect, - [](ConfigureInputSimple* caller) { - CallConfigureDialog(caller, HANDHELD_INDEX, false); - }}, - {QT_TR_NOOP("Single Player - Dual Joycons - Docked"), DualJoyconsDockedOnProfileSelect, - [](ConfigureInputSimple* caller) { - CallConfigureDialog(caller, PLAYER_0_INDEX, false); - }}, - {QT_TR_NOOP("Custom"), [] {}, CallConfigureDialog}, -}}; - -} // namespace - -void ApplyInputProfileConfiguration(int profile_index) { - std::get<1>( - INPUT_PROFILES.at(std::min(profile_index, static_cast(INPUT_PROFILES.size() - 1))))(); -} - -ConfigureInputSimple::ConfigureInputSimple(QWidget* parent) - : QWidget(parent), ui(std::make_unique()) { - ui->setupUi(this); - - for (const auto& profile : INPUT_PROFILES) { - const QString label = tr(std::get<0>(profile)); - ui->profile_combobox->addItem(label, label); - } - - connect(ui->profile_combobox, QOverload::of(&QComboBox::currentIndexChanged), this, - &ConfigureInputSimple::OnSelectProfile); - connect(ui->profile_configure, &QPushButton::clicked, this, &ConfigureInputSimple::OnConfigure); - - LoadConfiguration(); -} - -ConfigureInputSimple::~ConfigureInputSimple() = default; - -void ConfigureInputSimple::ApplyConfiguration() { - auto index = ui->profile_combobox->currentIndex(); - // Make the stored index for "Custom" very large so that if new profiles are added it - // doesn't change. - if (index >= static_cast(INPUT_PROFILES.size() - 1)) { - index = std::numeric_limits::max(); - } - - UISettings::values.profile_index = index; -} - -void ConfigureInputSimple::changeEvent(QEvent* event) { - if (event->type() == QEvent::LanguageChange) { - RetranslateUI(); - } - - QWidget::changeEvent(event); -} - -void ConfigureInputSimple::RetranslateUI() { - ui->retranslateUi(this); -} - -void ConfigureInputSimple::LoadConfiguration() { - const auto index = UISettings::values.profile_index; - if (index >= static_cast(INPUT_PROFILES.size()) || index < 0) { - ui->profile_combobox->setCurrentIndex(static_cast(INPUT_PROFILES.size() - 1)); - } else { - ui->profile_combobox->setCurrentIndex(index); - } -} - -void ConfigureInputSimple::OnSelectProfile(int index) { - const auto old_docked = Settings::values.use_docked_mode; - ApplyInputProfileConfiguration(index); - OnDockedModeChanged(old_docked, Settings::values.use_docked_mode); -} - -void ConfigureInputSimple::OnConfigure() { - std::get<2>(INPUT_PROFILES.at(ui->profile_combobox->currentIndex()))(this); -} diff --git a/src/yuzu/configuration/configure_input_simple.h b/src/yuzu/configuration/configure_input_simple.h deleted file mode 100644 index bb5050224..000000000 --- a/src/yuzu/configuration/configure_input_simple.h +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright 2016 Citra Emulator Project -// Licensed under GPLv2 or any later version -// Refer to the license.txt file included. - -#pragma once - -#include - -#include - -class QPushButton; -class QString; -class QTimer; - -namespace Ui { -class ConfigureInputSimple; -} - -// Used by configuration loader to apply a profile if the input is invalid. -void ApplyInputProfileConfiguration(int profile_index); - -class ConfigureInputSimple : public QWidget { - Q_OBJECT - -public: - explicit ConfigureInputSimple(QWidget* parent = nullptr); - ~ConfigureInputSimple() override; - - /// Save all button configurations to settings file - void ApplyConfiguration(); - -private: - void changeEvent(QEvent* event) override; - void RetranslateUI(); - - /// Load configuration settings. - void LoadConfiguration(); - - void OnSelectProfile(int index); - void OnConfigure(); - - std::unique_ptr ui; -}; diff --git a/src/yuzu/configuration/configure_input_simple.ui b/src/yuzu/configuration/configure_input_simple.ui deleted file mode 100644 index c4889caa9..000000000 --- a/src/yuzu/configuration/configure_input_simple.ui +++ /dev/null @@ -1,97 +0,0 @@ - - - ConfigureInputSimple - - - - 0 - 0 - 473 - 685 - - - - ConfigureInputSimple - - - - - - - - Profile - - - - - - Configure - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - - 250 - 0 - - - - - - - - Choose a controller configuration: - - - - - - - - - - - - Qt::Vertical - - - - 20 - 40 - - - - - - - - - diff --git a/src/yuzu/configuration/configure_mouse_advanced.cpp b/src/yuzu/configuration/configure_mouse_advanced.cpp index 5bcf5ffa8..95e1ae873 100644 --- a/src/yuzu/configuration/configure_mouse_advanced.cpp +++ b/src/yuzu/configuration/configure_mouse_advanced.cpp @@ -205,15 +205,11 @@ void ConfigureMouseAdvanced::HandleClick( poller->Start(); } - grabKeyboard(); - grabMouse(); - timeout_timer->start(5000); // Cancel after 5 seconds - poll_timer->start(200); // Check for new inputs every 200ms + timeout_timer->start(2500); // Cancel after 2.5 seconds + poll_timer->start(50); // Check for new inputs every 50ms } void ConfigureMouseAdvanced::SetPollingResult(const Common::ParamPackage& params, bool abort) { - releaseKeyboard(); - releaseMouse(); timeout_timer->stop(); poll_timer->stop(); for (auto& poller : device_pollers) { diff --git a/src/yuzu/configuration/configure_mouse_advanced.ui b/src/yuzu/configuration/configure_mouse_advanced.ui index 08245ecf0..74552fdbd 100644 --- a/src/yuzu/configuration/configure_mouse_advanced.ui +++ b/src/yuzu/configuration/configure_mouse_advanced.ui @@ -6,13 +6,18 @@ 0 0 - 250 - 261 + 310 + 193 Configure Mouse + + QPushButton { + min-width: 55px; +} + @@ -20,81 +25,33 @@ Mouse Buttons - - - - Qt::Horizontal - - - QSizePolicy::Fixed - - - - 20 - 20 - - - - - - + + - + - + - Right: + Forward: - + - 75 + 57 0 - - + + + 16777215 + 16777215 + - - - - - - - - Qt::Horizontal - - - QSizePolicy::Fixed - - - - 20 - 20 - - - - - - - - - - - - Middle: - - - - - - - @@ -123,6 +80,12 @@ + + + 57 + 0 + + @@ -147,7 +110,7 @@ - 75 + 57 0 @@ -158,21 +121,33 @@ - - + + - + - + - Forward: + Middle: - + + + + 57 + 0 + + + + + 16777215 + 16777215 + + @@ -180,6 +155,98 @@ + + + + Qt::Horizontal + + + QSizePolicy::Fixed + + + + 0 + 20 + + + + + + + + Qt::Horizontal + + + QSizePolicy::Fixed + + + + 0 + 20 + + + + + + + + + + + + Right: + + + + + + + + + + 57 + 0 + + + + + 16777215 + 16777215 + + + + + + + + + + + + + Qt::Horizontal + + + + 0 + 20 + + + + + + + + Qt::Horizontal + + + + 0 + 20 + + + + @@ -187,15 +254,39 @@ + + + 57 + 0 + + + + + 16777215 + 16777215 + + - Clear All + Clear + + + 57 + 0 + + + + + 16777215 + 16777215 + + - Restore Defaults + Defaults @@ -206,21 +297,24 @@ - 40 + 0 20 + + + + + + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + + - - - - QDialogButtonBox::Cancel|QDialogButtonBox::Ok - - -
        diff --git a/src/yuzu/uisettings.cpp b/src/yuzu/uisettings.cpp index a51175f36..37499fc85 100644 --- a/src/yuzu/uisettings.cpp +++ b/src/yuzu/uisettings.cpp @@ -16,4 +16,5 @@ const Themes themes{{ }}; Values values = {}; + } // namespace UISettings diff --git a/src/yuzu/uisettings.h b/src/yuzu/uisettings.h index 2d2e82f15..533815098 100644 --- a/src/yuzu/uisettings.h +++ b/src/yuzu/uisettings.h @@ -13,6 +13,7 @@ #include #include #include "common/common_types.h" +#include "core/settings.h" namespace UISettings { @@ -87,9 +88,6 @@ struct Values { // logging bool show_console; - // Controllers - int profile_index; - // Game List bool show_add_ons; uint32_t icon_size; @@ -100,6 +98,7 @@ struct Values { }; extern Values values; + } // namespace UISettings Q_DECLARE_METATYPE(UISettings::GameDir*); diff --git a/src/yuzu_cmd/config.cpp b/src/yuzu_cmd/config.cpp index 8a63fd191..e9f1c6500 100644 --- a/src/yuzu_cmd/config.cpp +++ b/src/yuzu_cmd/config.cpp @@ -288,6 +288,8 @@ void Config::ReadValues() { Settings::values.debug_pad_analogs[i] = default_param; } + Settings::values.vibration_enabled = + sdl2_config->GetBoolean("ControlsGeneral", "vibration_enabled", true); Settings::values.touchscreen.enabled = sdl2_config->GetBoolean("ControlsGeneral", "touch_enabled", true); Settings::values.touchscreen.device = diff --git a/src/yuzu_tester/config.cpp b/src/yuzu_tester/config.cpp index 74022af23..aaf59129a 100644 --- a/src/yuzu_tester/config.cpp +++ b/src/yuzu_tester/config.cpp @@ -75,6 +75,7 @@ void Config::ReadValues() { Settings::values.debug_pad_analogs[i] = ""; } + Settings::values.vibration_enabled = true; Settings::values.touchscreen.enabled = ""; Settings::values.touchscreen.device = ""; Settings::values.touchscreen.finger = 0; From fc505110f1860afcd774e7f9b3ac2e136eb22571 Mon Sep 17 00:00:00 2001 From: Morph <39850852+Morph1984@users.noreply.github.com> Date: Sat, 15 Aug 2020 15:16:55 -0400 Subject: [PATCH 02/10] qt_themes: Fix Midnight Blue theme Co-authored-by: Its-Rei --- .../qdarkstyle_midnight_blue/style.qss | 116 +++++++++--------- 1 file changed, 57 insertions(+), 59 deletions(-) diff --git a/dist/qt_themes/qdarkstyle_midnight_blue/style.qss b/dist/qt_themes/qdarkstyle_midnight_blue/style.qss index 0ecdf271e..a714e1475 100644 --- a/dist/qt_themes/qdarkstyle_midnight_blue/style.qss +++ b/dist/qt_themes/qdarkstyle_midnight_blue/style.qss @@ -138,8 +138,6 @@ https://doc.qt.io/qt-5/stylesheet-examples.html#customizing-qstatusbar --------------------------------------------------------------------------- */ QStatusBar { - border: 1px solid #32414B; - /* Fixes Spyder #9120, #9121 */ background: #32414B; /* Fixes #205, white vertical borders separating items */ } @@ -161,6 +159,7 @@ QStatusBar QToolTip { QStatusBar QLabel { /* Fixes Spyder #9120, #9121 */ background: transparent; + padding: 0px; } /* QCheckBox -------------------------------------------------------------- @@ -365,28 +364,19 @@ https://doc.qt.io/qt-5/stylesheet-examples.html#customizing-qmenubar --------------------------------------------------------------------------- */ QMenuBar { background-color: #32414B; - padding: 2px; - border: 1px solid #19232D; color: #F0F0F0; } -QMenuBar:focus { - border: 1px solid #148CD2; -} - QMenuBar::item { background: transparent; - padding: 4px; } QMenuBar::item:selected { - padding: 4px; background: transparent; border: 0px solid #32414B; } QMenuBar::item:pressed { - padding: 4px; border: 0px solid #32414B; background-color: #148CD2; color: #F0F0F0; @@ -394,6 +384,7 @@ QMenuBar::item:pressed { padding-bottom: 0px; } + /* QMenu ------------------------------------------------------------------ https://doc.qt.io/qt-5/stylesheet-examples.html#customizing-qmenu @@ -480,7 +471,7 @@ https://doc.qt.io/qt-5/stylesheet-examples.html#customizing-qcombobox --------------------------------------------------------------------------- */ QAbstractItemView { - alternate-background-color: #19232D; + alternate-background-color: #1f2933; color: #F0F0F0; border: 1px solid #32414B; border-radius: 4px; @@ -499,13 +490,13 @@ QAbstractScrollArea { background-color: #19232D; border: 1px solid #32414B; border-radius: 4px; - padding: 2px; /* fix #159 */ min-height: 1.25em; /* fix #159 */ color: #F0F0F0; } + QAbstractScrollArea:disabled { color: #787878; } @@ -805,20 +796,22 @@ QAbstractSpinBox { } QAbstractSpinBox:up-button { - background-color: transparent #19232D; + background-color: #505F69; subcontrol-origin: border; subcontrol-position: top right; border-left: 1px solid #32414B; - border-bottom: 1px solid #32414B; + border-top: 1px solid #32414B; + border-right: 1px solid #32414B; + border-top-right-radius: 4px; border-top-left-radius: 0; border-bottom-left-radius: 0; - margin: 1px; + margin: 0px; width: 12px; - margin-bottom: -1px; + margin-bottom: 0px; } QAbstractSpinBox::up-arrow, QAbstractSpinBox::up-arrow:disabled, QAbstractSpinBox::up-arrow:off { - image: url(":/qss_icons/rc/arrow_up_disabled.png"); + image: url(":/qss_icons/rc/up_arrow.png"); height: 8px; width: 8px; } @@ -828,20 +821,23 @@ QAbstractSpinBox::up-arrow:hover { } QAbstractSpinBox:down-button { - background-color: transparent #19232D; + background-color: #505F69; subcontrol-origin: border; subcontrol-position: bottom right; border-left: 1px solid #32414B; + border-right: 1px solid #32414B; + border-bottom: 1px solid #32414B; border-top: 1px solid #32414B; border-top-left-radius: 0; border-bottom-left-radius: 0; - margin: 1px; + border-bottom-right-radius: 4px; + margin: 0px; width: 12px; - margin-top: -1px; + margin-top: 0px; } QAbstractSpinBox::down-arrow, QAbstractSpinBox::down-arrow:disabled, QAbstractSpinBox::down-arrow:off { - image: url(":/qss_icons/rc/arrow_down_disabled.png"); + image: url(":/qss_icons/rc/down_arrow.png"); height: 8px; width: 8px; } @@ -1197,6 +1193,7 @@ https://doc.qt.io/qt-5/stylesheet-examples.html#customizing-qcombobox --------------------------------------------------------------------------- */ QComboBox { + background-color: #0f1922; border: 1px solid #32414B; border-radius: 4px; selection-background-color: #1464A0; @@ -1214,7 +1211,7 @@ QComboBox { QComboBox QAbstractItemView { border: 1px solid #32414B; border-radius: 0; - background-color: #19232D; + background-color: #0f1922; selection-background-color: #1464A0; } @@ -1283,7 +1280,12 @@ QComboBox::drop-down { } QComboBox::down-arrow { - image: url(":/qss_icons/rc/arrow_down_disabled.png"); + image: url(":/qss_icons/rc/down_arrow.png"); + background-color: #505F69; + padding: 6px 2px; + border: 1px solid #32414B; + border-top-right-radius: 4px; + border-bottom-right-radius: 4px; height: 8px; width: 8px; } @@ -1557,12 +1559,12 @@ QTabBar::tab:right:!selected { QTabBar::tab:top { background-color: #32414B; color: #F0F0F0; + min-width: 36px; margin-left: 2px; - padding-left: 4px; - padding-right: 4px; + padding-left: 8px; + padding-right: 8px; padding-top: 2px; padding-bottom: 2px; - min-width: 5px; border-bottom: 3px solid #32414B; border-top-left-radius: 3px; border-top-right-radius: 3px; @@ -1586,16 +1588,16 @@ QTabBar::tab:top:!selected:hover { QTabBar::tab:bottom { color: #F0F0F0; + min-width: 36px; border-top: 3px solid #32414B; background-color: #32414B; margin-left: 2px; - padding-left: 4px; - padding-right: 4px; + padding-left: 8px; + padding-right: 8px; padding-top: 2px; padding-bottom: 2px; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; - min-width: 5px; } QTabBar::tab:bottom:selected { @@ -1750,21 +1752,6 @@ https://doc.qt.io/qt-5/stylesheet-examples.html#customizing-qlistview https://doc.qt.io/qt-5/stylesheet-examples.html#customizing-qtableview --------------------------------------------------------------------------- */ -QTreeView:branch:selected, QTreeView:branch:hover { - background: url(":/qss_icons/rc/transparent.png"); -} - -QTreeView:branch:has-siblings:!adjoins-item { - border-image: url(":/qss_icons/rc/branch_line.png") 0; -} - -QTreeView:branch:has-siblings:adjoins-item { - border-image: url(":/qss_icons/rc/branch_more.png") 0; -} - -QTreeView:branch:!has-children:!has-siblings:adjoins-item { - border-image: url(":/qss_icons/rc/branch_end.png") 0; -} QTreeView:branch:has-children:!has-siblings:closed, QTreeView:branch:closed:has-children:has-siblings { border-image: none; @@ -1898,21 +1885,21 @@ https://doc.qt.io/qt-5/stylesheet-examples.html#customizing-qheaderview --------------------------------------------------------------------------- */ QHeaderView { - background-color: #32414B; - border: 0px transparent #32414B; + background-color: #19232D; + border: 0px transparent #19232D; padding: 0px; margin: 0px; border-radius: 0px; } QHeaderView:disabled { - background-color: #32414B; - border: 1px transparent #32414B; + background-color: #19232D; + border: 1px transparent #19232D; padding: 2px; } QHeaderView::section { - background-color: #32414B; + background-color: #19232D; color: #F0F0F0; padding: 2px; border-radius: 0px; @@ -1932,11 +1919,11 @@ QHeaderView::section:checked:disabled { QHeaderView::section::horizontal { padding-left: 4px; padding-right: 4px; - border-left: 1px solid #19232D; + border-left: 1px solid #32414B; } QHeaderView::section::horizontal::first, QHeaderView::section::horizontal::only-one { - border-left: 1px solid #32414B; + border-left: 1px solid #19232D; } QHeaderView::section::horizontal:disabled { @@ -1946,7 +1933,7 @@ QHeaderView::section::horizontal:disabled { QHeaderView::section::vertical { padding-left: 4px; padding-right: 4px; - border-top: 1px solid #19232D; + border-top: 1px solid #32414B; } QHeaderView::section::vertical::first, QHeaderView::section::vertical::only-one { @@ -1960,7 +1947,7 @@ QHeaderView::section::vertical:disabled { QHeaderView::down-arrow { /* Those settings (border/width/height/background-color) solve bug */ /* transparent arrow background and size */ - background-color: #32414B; + background-color: #19232D; border: none; height: 12px; width: 12px; @@ -1970,7 +1957,7 @@ QHeaderView::down-arrow { } QHeaderView::up-arrow { - background-color: #32414B; + background-color: #19232D; border: none; height: 12px; width: 12px; @@ -2274,17 +2261,28 @@ QGroupBox#groupConnectedController::indicator:unchecked { QSpinBox#spinboxLStickRange, QSpinBox#spinboxRStickRange { - min-width: 53px; + min-width: 38px; } QGroupBox#motionGroup::indicator, QGroupBox#vibrationGroup::indicator { - margin-left: 0px; + margin-left: 0px; } QGroupBox#motionGroup::title, QGroupBox#vibrationGroup::title { spacing: 2px; - padding-left: 1px; - padding-right: 1px; + padding-left: 1px; + padding-right: 1px; } + +QListWidget#selectorList { + background-color: #0f1922; +} + +QSpinBox, +QLineEdit, +QTreeView#hotkey_list, +QScrollArea#scrollArea QTreeView { + background-color: #0f1922; +} \ No newline at end of file From efa0b7a056b73dffb8789c95ebf8a9c09e55f539 Mon Sep 17 00:00:00 2001 From: Morph <39850852+Morph1984@users.noreply.github.com> Date: Sat, 15 Aug 2020 15:26:29 -0400 Subject: [PATCH 03/10] Address feedback --- src/input_common/main.cpp | 15 ++-- src/input_common/main.h | 2 +- src/input_common/sdl/sdl_impl.cpp | 52 ++++++-------- src/input_common/udp/udp.cpp | 5 +- src/input_common/udp/udp.h | 2 +- .../configure_debug_controller.cpp | 4 +- .../configure_debug_controller.h | 4 +- src/yuzu/configuration/configure_input.cpp | 13 ++-- src/yuzu/configuration/configure_input.h | 2 +- .../configure_input_advanced.cpp | 2 +- .../configuration/configure_input_advanced.h | 1 + .../configuration/configure_input_player.cpp | 70 ++++++++----------- src/yuzu/uisettings.h | 1 - 13 files changed, 77 insertions(+), 96 deletions(-) diff --git a/src/input_common/main.cpp b/src/input_common/main.cpp index b8725e9af..7bad2c45b 100644 --- a/src/input_common/main.cpp +++ b/src/input_common/main.cpp @@ -118,37 +118,38 @@ std::vector GetInputDevices() { std::unordered_map GetButtonMappingForDevice( const Common::ParamPackage& params) { - std::unordered_map mappings{}; + std::unordered_map mappings; if (!params.Has("class") || params.Get("class", "") == "any") { - return mappings; + return {}; } if (params.Get("class", "") == "key") { // TODO consider returning the SDL key codes for the default keybindings + return {}; } #ifdef HAVE_SDL2 if (params.Get("class", "") == "sdl") { return sdl->GetButtonMappingForDevice(params); } #endif - return mappings; + return {}; } std::unordered_map GetAnalogMappingForDevice( const Common::ParamPackage& params) { - std::unordered_map mappings{}; + std::unordered_map mappings; if (!params.Has("class") || params.Get("class", "") == "any") { - return mappings; + return {}; } if (params.Get("class", "") == "key") { // TODO consider returning the SDL key codes for the default keybindings - return mappings; + return {}; } #ifdef HAVE_SDL2 if (params.Get("class", "") == "sdl") { return sdl->GetAnalogMappingForDevice(params); } #endif - return mappings; + return {}; } namespace Polling { diff --git a/src/input_common/main.h b/src/input_common/main.h index ebc7f9533..e706c3750 100644 --- a/src/input_common/main.h +++ b/src/input_common/main.h @@ -76,7 +76,7 @@ public: /// Setup and start polling for inputs, should be called before GetNextInput /// If a device_id is provided, events should be filtered to only include events from this /// device id - virtual void Start(std::string device_id = "") = 0; + virtual void Start(const std::string& device_id = "") = 0; /// Stop polling virtual void Stop() = 0; /** diff --git a/src/input_common/sdl/sdl_impl.cpp b/src/input_common/sdl/sdl_impl.cpp index 35a9d45ec..dec7540e2 100644 --- a/src/input_common/sdl/sdl_impl.cpp +++ b/src/input_common/sdl/sdl_impl.cpp @@ -545,17 +545,16 @@ SDLState::~SDLState() { std::vector SDLState::GetInputDevices() { std::scoped_lock lock(joystick_map_mutex); - std::vector devices = {}; + std::vector devices; for (const auto& [key, value] : joystick_map) { for (const auto& joystick : value) { - auto controller = joystick->GetSDLGameController(); auto joy = joystick->GetSDLJoystick(); - if (controller) { + if (auto controller = joystick->GetSDLGameController()) { std::string name = fmt::format("{} {}", SDL_GameControllerName(controller), joystick->GetPort()); devices.emplace_back(Common::ParamPackage{ {"class", "sdl"}, - {"display", name}, + {"display", std::move(name)}, {"guid", joystick->GetGUID()}, {"port", std::to_string(joystick->GetPort())}, }); @@ -563,7 +562,7 @@ std::vector SDLState::GetInputDevices() { std::string name = fmt::format("{} {}", SDL_JoystickName(joy), joystick->GetPort()); devices.emplace_back(Common::ParamPackage{ {"class", "sdl"}, - {"display", name}, + {"display", std::move(name)}, {"guid", joystick->GetGUID()}, {"port", std::to_string(joystick->GetPort())}, }); @@ -624,54 +623,43 @@ Common::ParamPackage BuildHatParamPackageForButton(int port, std::string guid, u } Common::ParamPackage SDLEventToButtonParamPackage(SDLState& state, const SDL_Event& event) { - Common::ParamPackage params{}; - switch (event.type) { case SDL_JOYAXISMOTION: { const auto joystick = state.GetSDLJoystickBySDLID(event.jaxis.which); - params = BuildAnalogParamPackageForButton(joystick->GetPort(), joystick->GetGUID(), - event.jaxis.axis, event.jaxis.value); - break; + return BuildAnalogParamPackageForButton(joystick->GetPort(), joystick->GetGUID(), + event.jaxis.axis, event.jaxis.value); } case SDL_JOYBUTTONUP: { const auto joystick = state.GetSDLJoystickBySDLID(event.jbutton.which); - params = BuildButtonParamPackageForButton(joystick->GetPort(), joystick->GetGUID(), - event.jbutton.button); - break; + return BuildButtonParamPackageForButton(joystick->GetPort(), joystick->GetGUID(), + event.jbutton.button); } case SDL_JOYHATMOTION: { const auto joystick = state.GetSDLJoystickBySDLID(event.jhat.which); - params = BuildHatParamPackageForButton(joystick->GetPort(), joystick->GetGUID(), - event.jhat.hat, event.jhat.value); - break; + return BuildHatParamPackageForButton(joystick->GetPort(), joystick->GetGUID(), + event.jhat.hat, event.jhat.value); } } - return params; + return {}; } Common::ParamPackage BuildParamPackageForBinding(int port, const std::string& guid, const SDL_GameControllerButtonBind& binding) { - Common::ParamPackage out{}; switch (binding.bindType) { case SDL_CONTROLLER_BINDTYPE_AXIS: - out = BuildAnalogParamPackageForButton(port, guid, binding.value.axis); - break; + return BuildAnalogParamPackageForButton(port, guid, binding.value.axis); case SDL_CONTROLLER_BINDTYPE_BUTTON: - out = BuildButtonParamPackageForButton(port, guid, binding.value.button); - break; + return BuildButtonParamPackageForButton(port, guid, binding.value.button); case SDL_CONTROLLER_BINDTYPE_HAT: - out = BuildHatParamPackageForButton(port, guid, binding.value.hat.hat, - binding.value.hat.hat_mask); - break; - default: - break; + return BuildHatParamPackageForButton(port, guid, binding.value.hat.hat, + binding.value.hat.hat_mask); } - return out; -}; + return {}; +} Common::ParamPackage BuildParamPackageForAnalog(int port, const std::string& guid, int axis_x, int axis_y) { - Common::ParamPackage params{}; + Common::ParamPackage params; params.Set("engine", "sdl"); params.Set("port", port); params.Set("guid", guid); @@ -769,7 +757,7 @@ class SDLPoller : public InputCommon::Polling::DevicePoller { public: explicit SDLPoller(SDLState& state_) : state(state_) {} - void Start(std::string device_id) override { + void Start(const std::string& device_id) override { state.event_queue.Clear(); state.polling = true; } @@ -821,7 +809,7 @@ public: explicit SDLAnalogPreferredPoller(SDLState& state_) : SDLPoller(state_), button_poller(state_) {} - void Start(std::string device_id) override { + void Start(const std::string& device_id) override { SDLPoller::Start(device_id); // Load the game controller // Reset stored axes diff --git a/src/input_common/udp/udp.cpp b/src/input_common/udp/udp.cpp index 60cf47123..4b347e47e 100644 --- a/src/input_common/udp/udp.cpp +++ b/src/input_common/udp/udp.cpp @@ -89,10 +89,9 @@ State::~State() { Input::UnregisterFactory("cemuhookudp"); } -std::vector State::GetInputDevices() { - std::vector devices = {}; +std::vector State::GetInputDevices() const { // TODO support binding udp devices - return devices; + return {}; } void State::ReloadUDPClient() { diff --git a/src/input_common/udp/udp.h b/src/input_common/udp/udp.h index 24f6e0857..672a5c812 100644 --- a/src/input_common/udp/udp.h +++ b/src/input_common/udp/udp.h @@ -19,7 +19,7 @@ public: State(); ~State(); void ReloadUDPClient(); - std::vector GetInputDevices(); + std::vector GetInputDevices() const; private: std::unique_ptr client; diff --git a/src/yuzu/configuration/configure_debug_controller.cpp b/src/yuzu/configuration/configure_debug_controller.cpp index 45996b73f..72885b4b8 100644 --- a/src/yuzu/configuration/configure_debug_controller.cpp +++ b/src/yuzu/configuration/configure_debug_controller.cpp @@ -6,10 +6,10 @@ #include "yuzu/configuration/configure_debug_controller.h" ConfigureDebugController::ConfigureDebugController(QWidget* parent) - : QDialog(parent), ui(std::make_unique()) { + : QDialog(parent), ui(std::make_unique()), + debug_controller(new ConfigureInputPlayer(this, 9, nullptr, true)) { ui->setupUi(this); - debug_controller = new ConfigureInputPlayer(this, 9, nullptr, true); ui->controllerLayout->addWidget(debug_controller); connect(ui->clear_all_button, &QPushButton::clicked, this, diff --git a/src/yuzu/configuration/configure_debug_controller.h b/src/yuzu/configuration/configure_debug_controller.h index df359a4f3..36475bbea 100644 --- a/src/yuzu/configuration/configure_debug_controller.h +++ b/src/yuzu/configuration/configure_debug_controller.h @@ -27,7 +27,7 @@ private: void changeEvent(QEvent* event) override; void RetranslateUI(); - ConfigureInputPlayer* debug_controller; - std::unique_ptr ui; + + ConfigureInputPlayer* debug_controller; }; diff --git a/src/yuzu/configuration/configure_input.cpp b/src/yuzu/configuration/configure_input.cpp index 5200d2d0e..0d004c2f7 100644 --- a/src/yuzu/configuration/configure_input.cpp +++ b/src/yuzu/configuration/configure_input.cpp @@ -103,13 +103,14 @@ ConfigureInput::ConfigureInput(QWidget* parent) } }); connect(player_controllers[i], &ConfigureInputPlayer::RefreshInputDevices, - [&] { UpdateAllInputDevices(); }); - connect(player_connected[i], &QCheckBox::stateChanged, - [&, i](int state) { player_controllers[i]->ConnectPlayer(state == Qt::Checked); }); + [this] { UpdateAllInputDevices(); }); + connect(player_connected[i], &QCheckBox::stateChanged, [this, i](int state) { + player_controllers[i]->ConnectPlayer(state == Qt::Checked); + }); } // Only the first player can choose handheld mode so connect the signal just to player 1 connect(player_controllers[0], &ConfigureInputPlayer::HandheldStateChanged, - [&](bool is_handheld) { UpdateDockedState(is_handheld); }); + [this](bool is_handheld) { UpdateDockedState(is_handheld); }); advanced = new ConfigureInputAdvanced(this); ui->tabAdvanced->setLayout(new QHBoxLayout(ui->tabAdvanced)); @@ -182,14 +183,14 @@ void ConfigureInput::LoadPlayerControllerIndices() { void ConfigureInput::ClearAll() { // We don't have a good way to know what tab is active, but we can find out by getting the // parent of the consoleInputSettings - auto player_tab = static_cast(ui->consoleInputSettings->parent()); + auto* player_tab = static_cast(ui->consoleInputSettings->parent()); player_tab->ClearAll(); } void ConfigureInput::RestoreDefaults() { // We don't have a good way to know what tab is active, but we can find out by getting the // parent of the consoleInputSettings - auto player_tab = static_cast(ui->consoleInputSettings->parent()); + auto* player_tab = static_cast(ui->consoleInputSettings->parent()); player_tab->RestoreDefaults(); ui->radioDocked->setChecked(true); diff --git a/src/yuzu/configuration/configure_input.h b/src/yuzu/configuration/configure_input.h index 8241d23ef..78ca659da 100644 --- a/src/yuzu/configuration/configure_input.h +++ b/src/yuzu/configuration/configure_input.h @@ -15,9 +15,9 @@ #include "ui_configure_input.h" +class QCheckBox; class QString; class QTimer; -class QCheckBox; namespace Ui { class ConfigureInput; diff --git a/src/yuzu/configuration/configure_input_advanced.cpp b/src/yuzu/configuration/configure_input_advanced.cpp index 18db04e7e..db42b826b 100644 --- a/src/yuzu/configuration/configure_input_advanced.cpp +++ b/src/yuzu/configuration/configure_input_advanced.cpp @@ -9,7 +9,7 @@ #include "yuzu/configuration/configure_input_advanced.h" ConfigureInputAdvanced::ConfigureInputAdvanced(QWidget* parent) - : QWidget(parent), ui(new Ui::ConfigureInputAdvanced) { + : QWidget(parent), ui(std::make_unique()) { ui->setupUi(this); controllers_color_buttons = {{ diff --git a/src/yuzu/configuration/configure_input_advanced.h b/src/yuzu/configuration/configure_input_advanced.h index d6e913675..d8fcec52d 100644 --- a/src/yuzu/configuration/configure_input_advanced.h +++ b/src/yuzu/configuration/configure_input_advanced.h @@ -4,6 +4,7 @@ #pragma once +#include #include #include diff --git a/src/yuzu/configuration/configure_input_player.cpp b/src/yuzu/configuration/configure_input_player.cpp index 4d79a51f3..68d0d5db7 100644 --- a/src/yuzu/configuration/configure_input_player.cpp +++ b/src/yuzu/configuration/configure_input_player.cpp @@ -348,22 +348,22 @@ ConfigureInputPlayer::ConfigureInputPlayer(QWidget* parent, std::size_t player_i // Player Connected checkbox connect(ui->groupConnectedController, &QGroupBox::toggled, - [&](bool checked) { emit Connected(checked); }); + [this](bool checked) { emit Connected(checked); }); // Set up controller type. Only Player 1 can choose Handheld. ui->comboControllerType->clear(); QStringList controller_types = { - QStringLiteral("Pro Controller"), - QStringLiteral("Dual Joycons"), - QStringLiteral("Left Joycon"), - QStringLiteral("Right Joycon"), + tr("Pro Controller"), + tr("Dual Joycons"), + tr("Left Joycon"), + tr("Right Joycon"), }; if (player_index == 0) { - controller_types.append(QStringLiteral("Handheld")); + controller_types.append(tr("Handheld")); connect(ui->comboControllerType, qOverload(&QComboBox::currentIndexChanged), - [&](int index) { + [this](int index) { emit HandheldStateChanged(GetControllerTypeFromIndex(index) == Settings::ControllerType::Handheld); }); @@ -375,7 +375,7 @@ ConfigureInputPlayer::ConfigureInputPlayer(QWidget* parent, std::size_t player_i ui->buttonHome->setEnabled(false); ui->groupConnectedController->setCheckable(false); QStringList debug_controller_types = { - QStringLiteral("Pro Controller"), + tr("Pro Controller"), }; ui->comboControllerType->addItems(debug_controller_types); } else { @@ -384,17 +384,18 @@ ConfigureInputPlayer::ConfigureInputPlayer(QWidget* parent, std::size_t player_i UpdateControllerIcon(); UpdateControllerAvailableButtons(); - connect(ui->comboControllerType, qOverload(&QComboBox::currentIndexChanged), [&](int) { + connect(ui->comboControllerType, qOverload(&QComboBox::currentIndexChanged), [this](int) { UpdateControllerIcon(); UpdateControllerAvailableButtons(); }); - connect(ui->comboDevices, qOverload(&QComboBox::currentIndexChanged), - [&] { UpdateMappingWithDefaults(); }); + connect(ui->comboDevices, qOverload(&QComboBox::currentIndexChanged), this, + &ConfigureInputPlayer::UpdateMappingWithDefaults); ui->buttonRefreshDevices->setIcon(QIcon::fromTheme(QStringLiteral("view-refresh"))); UpdateInputDevices(); - connect(ui->buttonRefreshDevices, &QPushButton::clicked, [&] { emit RefreshInputDevices(); }); + connect(ui->buttonRefreshDevices, &QPushButton::clicked, + [this] { emit RefreshInputDevices(); }); timeout_timer->setSingleShot(true); connect(timeout_timer.get(), &QTimer::timeout, [this] { SetPollingResult({}, true); }); @@ -707,26 +708,22 @@ void ConfigureInputPlayer::keyPressEvent(QKeyEvent* event) { void ConfigureInputPlayer::UpdateControllerIcon() { // We aren't using Qt's built in theme support here since we aren't drawing an icon (and its // "nonstandard" to use an image through the icon support) - QString stylesheet{}; - switch (GetControllerTypeFromIndex(ui->comboControllerType->currentIndex())) { - case Settings::ControllerType::ProController: - stylesheet = QStringLiteral("image: url(:/controller/pro_controller%0)"); - break; - case Settings::ControllerType::DualJoyconDetached: - stylesheet = QStringLiteral("image: url(:/controller/dual_joycon%0)"); - break; - case Settings::ControllerType::LeftJoycon: - stylesheet = QStringLiteral("image: url(:/controller/single_joycon_left_vertical%0)"); - break; - case Settings::ControllerType::RightJoycon: - stylesheet = QStringLiteral("image: url(:/controller/single_joycon_right_vertical%0)"); - break; - case Settings::ControllerType::Handheld: - stylesheet = QStringLiteral("image: url(:/controller/handheld%0)"); - break; - default: - break; - } + const QString stylesheet = [this] { + switch (GetControllerTypeFromIndex(ui->comboControllerType->currentIndex())) { + case Settings::ControllerType::ProController: + return QStringLiteral("image: url(:/controller/pro_controller%0)"); + case Settings::ControllerType::DualJoyconDetached: + return QStringLiteral("image: url(:/controller/dual_joycon%0)"); + case Settings::ControllerType::LeftJoycon: + return QStringLiteral("image: url(:/controller/single_joycon_left_vertical%0)"); + case Settings::ControllerType::RightJoycon: + return QStringLiteral("image: url(:/controller/single_joycon_right_vertical%0)"); + case Settings::ControllerType::Handheld: + return QStringLiteral("image: url(:/controller/handheld%0)"); + default: + return QString{}; + } + }(); const QString theme = [this] { if (QIcon::themeName().contains(QStringLiteral("dark"))) { @@ -744,12 +741,12 @@ void ConfigureInputPlayer::UpdateControllerIcon() { void ConfigureInputPlayer::UpdateControllerAvailableButtons() { auto layout = GetControllerTypeFromIndex(ui->comboControllerType->currentIndex()); if (debug) { - layout = Settings::ControllerType::DualJoyconDetached; + layout = Settings::ControllerType::ProController; } // List of all the widgets that will be hidden by any of the following layouts that need // "unhidden" after the controller type changes - const std::vector layout_show = { + const std::array layout_show = { ui->buttonShoulderButtonsSLSR, ui->horizontalSpacerShoulderButtonsWidget, ui->horizontalSpacerShoulderButtonsWidget2, @@ -768,11 +765,6 @@ void ConfigureInputPlayer::UpdateControllerAvailableButtons() { std::vector layout_hidden; switch (layout) { case Settings::ControllerType::ProController: - layout_hidden = { - ui->buttonShoulderButtonsSLSR, - ui->horizontalSpacerShoulderButtonsWidget2, - }; - break; case Settings::ControllerType::DualJoyconDetached: case Settings::ControllerType::Handheld: layout_hidden = { diff --git a/src/yuzu/uisettings.h b/src/yuzu/uisettings.h index 533815098..ce3945485 100644 --- a/src/yuzu/uisettings.h +++ b/src/yuzu/uisettings.h @@ -13,7 +13,6 @@ #include #include #include "common/common_types.h" -#include "core/settings.h" namespace UISettings { From de79897f042aa7d3cacf8579078195cca559f62f Mon Sep 17 00:00:00 2001 From: Morph <39850852+Morph1984@users.noreply.github.com> Date: Wed, 19 Aug 2020 04:17:38 -0400 Subject: [PATCH 04/10] input_common: Fix directional deadzone values The hardware tested value is 0.5 which translates to SHRT_MAX / 2 --- src/input_common/gcadapter/gc_poller.cpp | 2 +- src/input_common/sdl/sdl_impl.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/input_common/gcadapter/gc_poller.cpp b/src/input_common/gcadapter/gc_poller.cpp index 85342bbe7..71cd85eeb 100644 --- a/src/input_common/gcadapter/gc_poller.cpp +++ b/src/input_common/gcadapter/gc_poller.cpp @@ -191,7 +191,7 @@ public: bool GetAnalogDirectionStatus(Input::AnalogDirection direction) const override { const auto [x, y] = GetStatus(); - const float directional_deadzone = 0.4f; + const float directional_deadzone = 0.5f; switch (direction) { case Input::AnalogDirection::RIGHT: return x > directional_deadzone; diff --git a/src/input_common/sdl/sdl_impl.cpp b/src/input_common/sdl/sdl_impl.cpp index dec7540e2..7605c884d 100644 --- a/src/input_common/sdl/sdl_impl.cpp +++ b/src/input_common/sdl/sdl_impl.cpp @@ -363,7 +363,7 @@ public: bool GetAnalogDirectionStatus(Input::AnalogDirection direction) const override { const auto [x, y] = GetStatus(); - const float directional_deadzone = 0.4f; + const float directional_deadzone = 0.5f; switch (direction) { case Input::AnalogDirection::RIGHT: return x > directional_deadzone; From e7c174b426910a99e1b386c976493a45aa825951 Mon Sep 17 00:00:00 2001 From: Morph <39850852+Morph1984@users.noreply.github.com> Date: Thu, 20 Aug 2020 03:42:46 -0400 Subject: [PATCH 05/10] controllers/npad: Fix LedPattern for P1-4 --- src/core/hle/service/hid/controllers/npad.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/core/hle/service/hid/controllers/npad.cpp b/src/core/hle/service/hid/controllers/npad.cpp index 82e11b169..365db4134 100644 --- a/src/core/hle/service/hid/controllers/npad.cpp +++ b/src/core/hle/service/hid/controllers/npad.cpp @@ -600,11 +600,11 @@ Controller_NPad::LedPattern Controller_NPad::GetLedPattern(u32 npad_id) { case 0: return LedPattern{1, 0, 0, 0}; case 1: - return LedPattern{0, 1, 0, 0}; + return LedPattern{1, 1, 0, 0}; case 2: - return LedPattern{0, 0, 1, 0}; + return LedPattern{1, 1, 1, 0}; case 3: - return LedPattern{0, 0, 0, 1}; + return LedPattern{1, 1, 1, 1}; case 4: return LedPattern{1, 0, 0, 1}; case 5: From 334ef2efdd54731c81f16b883413cb5cf33e481c Mon Sep 17 00:00:00 2001 From: Morph <39850852+Morph1984@users.noreply.github.com> Date: Fri, 21 Aug 2020 07:49:22 -0400 Subject: [PATCH 06/10] controllers/npad: Fix LibNX controller connection statuses This allows homebrew applications to be able to properly detect connected controllers. --- src/core/hle/service/hid/controllers/npad.cpp | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/core/hle/service/hid/controllers/npad.cpp b/src/core/hle/service/hid/controllers/npad.cpp index 365db4134..d7ca07b7c 100644 --- a/src/core/hle/service/hid/controllers/npad.cpp +++ b/src/core/hle/service/hid/controllers/npad.cpp @@ -375,6 +375,7 @@ void Controller_NPad::OnUpdate(const Core::Timing::CoreTiming& core_timing, u8* auto& libnx_entry = npad.libnx.npad[npad.libnx.common.last_entry_index]; libnx_entry.connection_status.raw = 0; + libnx_entry.connection_status.IsConnected.Assign(1); switch (controller_type) { case NPadControllerType::None: @@ -387,6 +388,8 @@ void Controller_NPad::OnUpdate(const Core::Timing::CoreTiming& core_timing, u8* main_controller.pad.pad_states.raw = pad_state.pad_states.raw; main_controller.pad.l_stick = pad_state.l_stick; main_controller.pad.r_stick = pad_state.r_stick; + + libnx_entry.connection_status.IsWired.Assign(1); break; case NPadControllerType::Handheld: handheld_entry.connection_status.raw = 0; @@ -398,6 +401,12 @@ void Controller_NPad::OnUpdate(const Core::Timing::CoreTiming& core_timing, u8* handheld_entry.pad.pad_states.raw = pad_state.pad_states.raw; handheld_entry.pad.l_stick = pad_state.l_stick; handheld_entry.pad.r_stick = pad_state.r_stick; + + libnx_entry.connection_status.IsWired.Assign(1); + libnx_entry.connection_status.IsLeftJoyConnected.Assign(1); + libnx_entry.connection_status.IsRightJoyConnected.Assign(1); + libnx_entry.connection_status.IsLeftJoyWired.Assign(1); + libnx_entry.connection_status.IsRightJoyWired.Assign(1); break; case NPadControllerType::JoyDual: dual_entry.connection_status.raw = 0; @@ -408,7 +417,6 @@ void Controller_NPad::OnUpdate(const Core::Timing::CoreTiming& core_timing, u8* dual_entry.pad.l_stick = pad_state.l_stick; dual_entry.pad.r_stick = pad_state.r_stick; - libnx_entry.connection_status.IsConnected.Assign(1); libnx_entry.connection_status.IsLeftJoyConnected.Assign(1); libnx_entry.connection_status.IsRightJoyConnected.Assign(1); break; From eb149ec696b4d06d1e42071c9ae05b88541e60d9 Mon Sep 17 00:00:00 2001 From: Morph <39850852+Morph1984@users.noreply.github.com> Date: Fri, 21 Aug 2020 07:51:13 -0400 Subject: [PATCH 07/10] controllers/npad: Fix inconsistencies with controller connection statuses --- src/core/hle/service/hid/controllers/npad.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/core/hle/service/hid/controllers/npad.cpp b/src/core/hle/service/hid/controllers/npad.cpp index d7ca07b7c..45fde8df2 100644 --- a/src/core/hle/service/hid/controllers/npad.cpp +++ b/src/core/hle/service/hid/controllers/npad.cpp @@ -393,6 +393,7 @@ void Controller_NPad::OnUpdate(const Core::Timing::CoreTiming& core_timing, u8* break; case NPadControllerType::Handheld: handheld_entry.connection_status.raw = 0; + handheld_entry.connection_status.IsConnected.Assign(1); handheld_entry.connection_status.IsWired.Assign(1); handheld_entry.connection_status.IsLeftJoyConnected.Assign(1); handheld_entry.connection_status.IsRightJoyConnected.Assign(1); @@ -423,21 +424,26 @@ void Controller_NPad::OnUpdate(const Core::Timing::CoreTiming& core_timing, u8* case NPadControllerType::JoyLeft: left_entry.connection_status.raw = 0; left_entry.connection_status.IsConnected.Assign(1); + left_entry.connection_status.IsLeftJoyConnected.Assign(1); left_entry.pad.pad_states.raw = pad_state.pad_states.raw; left_entry.pad.l_stick = pad_state.l_stick; left_entry.pad.r_stick = pad_state.r_stick; + + libnx_entry.connection_status.IsLeftJoyConnected.Assign(1); break; case NPadControllerType::JoyRight: right_entry.connection_status.raw = 0; right_entry.connection_status.IsConnected.Assign(1); + right_entry.connection_status.IsRightJoyConnected.Assign(1); right_entry.pad.pad_states.raw = pad_state.pad_states.raw; right_entry.pad.l_stick = pad_state.l_stick; right_entry.pad.r_stick = pad_state.r_stick; + + libnx_entry.connection_status.IsRightJoyConnected.Assign(1); break; case NPadControllerType::Pokeball: pokeball_entry.connection_status.raw = 0; pokeball_entry.connection_status.IsConnected.Assign(1); - pokeball_entry.connection_status.IsWired.Assign(1); pokeball_entry.pad.pad_states.raw = pad_state.pad_states.raw; pokeball_entry.pad.l_stick = pad_state.l_stick; pokeball_entry.pad.r_stick = pad_state.r_stick; From 1bd70d73c00697f0705ba9b51da5938146224a18 Mon Sep 17 00:00:00 2001 From: Morph <39850852+Morph1984@users.noreply.github.com> Date: Sun, 23 Aug 2020 08:04:26 -0400 Subject: [PATCH 08/10] configuration/input: Add support for mouse button clicks Supports the Left, Right, Middle, Backward and Forward mouse buttons. --- .../configuration/configure_input_player.cpp | 41 +++++++++++++++++-- .../configuration/configure_input_player.h | 5 ++- .../configuration/configure_input_player.ui | 2 +- .../configure_mouse_advanced.cpp | 40 ++++++++++++++++-- .../configuration/configure_mouse_advanced.h | 5 ++- 5 files changed, 82 insertions(+), 11 deletions(-) diff --git a/src/yuzu/configuration/configure_input_player.cpp b/src/yuzu/configuration/configure_input_player.cpp index 68d0d5db7..bff90a82e 100644 --- a/src/yuzu/configuration/configure_input_player.cpp +++ b/src/yuzu/configuration/configure_input_player.cpp @@ -86,6 +86,16 @@ constexpr int GetIndexFromControllerType(Settings::ControllerType type) { QString GetKeyName(int key_code) { switch (key_code) { + case Qt::LeftButton: + return QObject::tr("Click 0"); + case Qt::RightButton: + return QObject::tr("Click 1"); + case Qt::MiddleButton: + return QObject::tr("Click 2"); + case Qt::BackButton: + return QObject::tr("Click 3"); + case Qt::ForwardButton: + return QObject::tr("Click 4"); case Qt::Key_Shift: return QObject::tr("Shift"); case Qt::Key_Control: @@ -648,9 +658,9 @@ void ConfigureInputPlayer::HandleClick( button->setText(tr("[waiting]")); button->setFocus(); - // The first two input devices are always Any and Keyboard. If the user filtered to a - // controller, then they don't want keyboard input - want_keyboard_keys = ui->comboDevices->currentIndex() < 2; + // The first two input devices are always Any and Keyboard/Mouse. If the user filtered to a + // controller, then they don't want keyboard/mouse input + want_keyboard_mouse = ui->comboDevices->currentIndex() < 2; input_setter = new_input_setter; @@ -660,6 +670,9 @@ void ConfigureInputPlayer::HandleClick( poller->Start(); } + QWidget::grabMouse(); + QWidget::grabKeyboard(); + if (type == InputCommon::Polling::DeviceType::Button) { InputCommon::GetGCButtons()->BeginConfiguration(); } else { @@ -677,6 +690,9 @@ void ConfigureInputPlayer::SetPollingResult(const Common::ParamPackage& params, poller->Stop(); } + QWidget::releaseMouse(); + QWidget::releaseKeyboard(); + InputCommon::GetGCButtons()->EndConfiguration(); InputCommon::GetGCAnalogs()->EndConfiguration(); @@ -688,13 +704,29 @@ void ConfigureInputPlayer::SetPollingResult(const Common::ParamPackage& params, input_setter = std::nullopt; } +void ConfigureInputPlayer::mousePressEvent(QMouseEvent* event) { + if (!input_setter || !event) { + return; + } + + if (want_keyboard_mouse) { + SetPollingResult(Common::ParamPackage{InputCommon::GenerateKeyboardParam(event->button())}, + false); + } else { + // We don't want any mouse buttons, so don't stop polling + return; + } + + SetPollingResult({}, true); +} + void ConfigureInputPlayer::keyPressEvent(QKeyEvent* event) { if (!input_setter || !event) { return; } if (event->key() != Qt::Key_Escape) { - if (want_keyboard_keys) { + if (want_keyboard_mouse) { SetPollingResult(Common::ParamPackage{InputCommon::GenerateKeyboardParam(event->key())}, false); } else { @@ -702,6 +734,7 @@ void ConfigureInputPlayer::keyPressEvent(QKeyEvent* event) { return; } } + SetPollingResult({}, true); } diff --git a/src/yuzu/configuration/configure_input_player.h b/src/yuzu/configuration/configure_input_player.h index a86db8200..ca189019d 100644 --- a/src/yuzu/configuration/configure_input_player.h +++ b/src/yuzu/configuration/configure_input_player.h @@ -85,6 +85,9 @@ private: /// Finish polling and configure input using the input_setter. void SetPollingResult(const Common::ParamPackage& params, bool abort); + /// Handle mouse button press events. + void mousePressEvent(QMouseEvent* event) override; + /// Handle key press events. void keyPressEvent(QKeyEvent* event) override; @@ -150,7 +153,7 @@ private: /// A flag to indicate if keyboard keys are okay when configuring an input. If this is false, /// keyboard events are ignored. - bool want_keyboard_keys = false; + bool want_keyboard_mouse = false; /// List of physical devices users can map with. If a SDL backed device is selected, then you /// can usue this device to get a default mapping. diff --git a/src/yuzu/configuration/configure_input_player.ui b/src/yuzu/configuration/configure_input_player.ui index eb826a935..9bc681894 100644 --- a/src/yuzu/configuration/configure_input_player.ui +++ b/src/yuzu/configuration/configure_input_player.ui @@ -143,7 +143,7 @@ - Keyboard + Keyboard/Mouse
        diff --git a/src/yuzu/configuration/configure_mouse_advanced.cpp b/src/yuzu/configuration/configure_mouse_advanced.cpp index 95e1ae873..dcda8ab14 100644 --- a/src/yuzu/configuration/configure_mouse_advanced.cpp +++ b/src/yuzu/configuration/configure_mouse_advanced.cpp @@ -18,6 +18,16 @@ static QString GetKeyName(int key_code) { switch (key_code) { + case Qt::LeftButton: + return QObject::tr("Click 0"); + case Qt::RightButton: + return QObject::tr("Click 1"); + case Qt::MiddleButton: + return QObject::tr("Click 2"); + case Qt::BackButton: + return QObject::tr("Click 3"); + case Qt::ForwardButton: + return QObject::tr("Click 4"); case Qt::Key_Shift: return QObject::tr("Shift"); case Qt::Key_Control: @@ -188,9 +198,9 @@ void ConfigureMouseAdvanced::HandleClick( button->setText(tr("[press key]")); button->setFocus(); - // Keyboard keys can only be used as button devices - want_keyboard_keys = type == InputCommon::Polling::DeviceType::Button; - if (want_keyboard_keys) { + // Keyboard keys or mouse buttons can only be used as button devices + want_keyboard_mouse = type == InputCommon::Polling::DeviceType::Button; + if (want_keyboard_mouse) { const auto iter = std::find(button_map.begin(), button_map.end(), button); ASSERT(iter != button_map.end()); const auto index = std::distance(button_map.begin(), iter); @@ -205,6 +215,9 @@ void ConfigureMouseAdvanced::HandleClick( poller->Start(); } + QWidget::grabMouse(); + QWidget::grabKeyboard(); + timeout_timer->start(2500); // Cancel after 2.5 seconds poll_timer->start(50); // Check for new inputs every 50ms } @@ -216,6 +229,9 @@ void ConfigureMouseAdvanced::SetPollingResult(const Common::ParamPackage& params poller->Stop(); } + QWidget::releaseMouse(); + QWidget::releaseKeyboard(); + if (!abort) { (*input_setter)(params); } @@ -224,13 +240,29 @@ void ConfigureMouseAdvanced::SetPollingResult(const Common::ParamPackage& params input_setter = std::nullopt; } +void ConfigureMouseAdvanced::mousePressEvent(QMouseEvent* event) { + if (!input_setter || !event) { + return; + } + + if (want_keyboard_mouse) { + SetPollingResult(Common::ParamPackage{InputCommon::GenerateKeyboardParam(event->button())}, + false); + } else { + // We don't want any mouse buttons, so don't stop polling + return; + } + + SetPollingResult({}, true); +} + void ConfigureMouseAdvanced::keyPressEvent(QKeyEvent* event) { if (!input_setter || !event) { return; } if (event->key() != Qt::Key_Escape) { - if (want_keyboard_keys) { + if (want_keyboard_mouse) { SetPollingResult(Common::ParamPackage{InputCommon::GenerateKeyboardParam(event->key())}, false); } else { diff --git a/src/yuzu/configuration/configure_mouse_advanced.h b/src/yuzu/configuration/configure_mouse_advanced.h index 342b82412..e7d27dab7 100644 --- a/src/yuzu/configuration/configure_mouse_advanced.h +++ b/src/yuzu/configuration/configure_mouse_advanced.h @@ -49,6 +49,9 @@ private: /// Finish polling and configure input using the input_setter void SetPollingResult(const Common::ParamPackage& params, bool abort); + /// Handle mouse button press events. + void mousePressEvent(QMouseEvent* event) override; + /// Handle key press events. void keyPressEvent(QKeyEvent* event) override; @@ -67,5 +70,5 @@ private: /// A flag to indicate if keyboard keys are okay when configuring an input. If this is false, /// keyboard events are ignored. - bool want_keyboard_keys = false; + bool want_keyboard_mouse = false; }; From f5f30781ae5a7ecefe51bf0d2c63cdd68ba12162 Mon Sep 17 00:00:00 2001 From: Morph <39850852+Morph1984@users.noreply.github.com> Date: Sun, 23 Aug 2020 10:56:19 -0400 Subject: [PATCH 09/10] configure_input_player: Fix modifier scale button mapping --- .../configuration/configure_input_player.cpp | 34 ++++++++++--------- .../configuration/configure_input_player.h | 5 +-- 2 files changed, 19 insertions(+), 20 deletions(-) diff --git a/src/yuzu/configuration/configure_input_player.cpp b/src/yuzu/configuration/configure_input_player.cpp index bff90a82e..d3980eb49 100644 --- a/src/yuzu/configuration/configure_input_player.cpp +++ b/src/yuzu/configuration/configure_input_player.cpp @@ -238,12 +238,11 @@ ConfigureInputPlayer::ConfigureInputPlayer(QWidget* parent, std::size_t player_i setFocusPolicy(Qt::ClickFocus); button_map = { - ui->buttonA, ui->buttonB, ui->buttonX, ui->buttonY, - ui->buttonLStick, ui->buttonRStick, ui->buttonL, ui->buttonR, - ui->buttonZL, ui->buttonZR, ui->buttonPlus, ui->buttonMinus, - ui->buttonDpadLeft, ui->buttonDpadUp, ui->buttonDpadRight, ui->buttonDpadDown, - ui->buttonSL, ui->buttonSR, ui->buttonHome, ui->buttonScreenshot, - ui->buttonLStickMod, ui->buttonRStickMod, + ui->buttonA, ui->buttonB, ui->buttonX, ui->buttonY, + ui->buttonLStick, ui->buttonRStick, ui->buttonL, ui->buttonR, + ui->buttonZL, ui->buttonZR, ui->buttonPlus, ui->buttonMinus, + ui->buttonDpadLeft, ui->buttonDpadUp, ui->buttonDpadRight, ui->buttonDpadDown, + ui->buttonSL, ui->buttonSR, ui->buttonHome, ui->buttonScreenshot, }; analog_map_buttons = {{ @@ -264,7 +263,6 @@ ConfigureInputPlayer::ConfigureInputPlayer(QWidget* parent, std::size_t player_i analog_map_deadzone_label = {ui->labelLStickDeadzone, ui->labelRStickDeadzone}; analog_map_deadzone_slider = {ui->sliderLStickDeadzone, ui->sliderRStickDeadzone}; analog_map_modifier_groupbox = {ui->buttonLStickModGroup, ui->buttonRStickModGroup}; - analog_map_modifier_button = {ui->buttonLStickMod, ui->buttonRStickMod}; analog_map_modifier_label = {ui->labelLStickModifierRange, ui->labelRStickModifierRange}; analog_map_modifier_slider = {ui->sliderLStickModifierRange, ui->sliderRStickModifierRange}; analog_map_range_groupbox = {ui->buttonLStickRangeGroup, ui->buttonRStickRangeGroup}; @@ -327,15 +325,6 @@ ConfigureInputPlayer::ConfigureInputPlayer(QWidget* parent, std::size_t player_i }); } - connect(analog_map_modifier_button[analog_id], &QPushButton::clicked, [=, this] { - HandleClick( - analog_map_modifier_button[analog_id], - [=, this](const Common::ParamPackage& params) { - SetAnalogParam(params, analogs_param[analog_id], "modifier"); - }, - InputCommon::Polling::DeviceType::AnalogPreferred); - }); - connect(analog_map_range_spinbox[analog_id], qOverload(&QSpinBox::valueChanged), [=, this] { const auto spinbox_value = analog_map_range_spinbox[analog_id]->value(); @@ -538,6 +527,13 @@ void ConfigureInputPlayer::RestoreDefaults() { buttons_param[button_id] = Common::ParamPackage{ InputCommon::GenerateKeyboardParam(Config::default_buttons[button_id])}; } + + // Reset Modifier Buttons + lstick_mod = + Common::ParamPackage(InputCommon::GenerateKeyboardParam(Config::default_lstick_mod)); + rstick_mod = + Common::ParamPackage(InputCommon::GenerateKeyboardParam(Config::default_rstick_mod)); + // Reset Analogs for (int analog_id = 0; analog_id < Settings::NativeAnalog::NumAnalogs; ++analog_id) { for (int sub_button_id = 0; sub_button_id < ANALOG_SUB_BUTTONS_NUM; ++sub_button_id) { @@ -561,6 +557,9 @@ void ConfigureInputPlayer::ClearAll() { buttons_param[button_id].Clear(); } + lstick_mod.Clear(); + rstick_mod.Clear(); + for (int analog_id = 0; analog_id < Settings::NativeAnalog::NumAnalogs; ++analog_id) { for (int sub_button_id = 0; sub_button_id < ANALOG_SUB_BUTTONS_NUM; ++sub_button_id) { const auto* const analog_button = analog_map_buttons[analog_id][sub_button_id]; @@ -581,6 +580,9 @@ void ConfigureInputPlayer::UpdateUI() { button_map[button]->setText(ButtonToText(buttons_param[button])); } + ui->buttonLStickMod->setText(ButtonToText(lstick_mod)); + ui->buttonRStickMod->setText(ButtonToText(rstick_mod)); + for (int analog_id = 0; analog_id < Settings::NativeAnalog::NumAnalogs; ++analog_id) { for (int sub_button_id = 0; sub_button_id < ANALOG_SUB_BUTTONS_NUM; ++sub_button_id) { auto* const analog_button = analog_map_buttons[analog_id][sub_button_id]; diff --git a/src/yuzu/configuration/configure_input_player.h b/src/yuzu/configuration/configure_input_player.h index ca189019d..25d4cde5e 100644 --- a/src/yuzu/configuration/configure_input_player.h +++ b/src/yuzu/configuration/configure_input_player.h @@ -124,11 +124,9 @@ private: std::array analogs_param; static constexpr int ANALOG_SUB_BUTTONS_NUM = 4; - // Adds room for two extra push buttons LStick Modifier and RStick Modifier. - static constexpr int BUTTON_MAP_COUNT = Settings::NativeButton::NumButtons + 2; /// Each button input is represented by a QPushButton. - std::array button_map; + std::array button_map; /// Extra buttons for the modifiers. Common::ParamPackage lstick_mod; Common::ParamPackage rstick_mod; @@ -141,7 +139,6 @@ private: std::array analog_map_deadzone_label; std::array analog_map_deadzone_slider; std::array analog_map_modifier_groupbox; - std::array analog_map_modifier_button; std::array analog_map_modifier_label; std::array analog_map_modifier_slider; std::array analog_map_range_groupbox; From 8ffc491546c8fa449e23463585e4b55498dcb307 Mon Sep 17 00:00:00 2001 From: Morph <39850852+Morph1984@users.noreply.github.com> Date: Wed, 26 Aug 2020 22:41:51 -0400 Subject: [PATCH 10/10] input_common/main: Add "/Mouse" to the display name --- src/input_common/main.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/input_common/main.cpp b/src/input_common/main.cpp index 7bad2c45b..8e67a7437 100644 --- a/src/input_common/main.cpp +++ b/src/input_common/main.cpp @@ -105,7 +105,7 @@ std::string GenerateAnalogParamFromKeys(int key_up, int key_down, int key_left, std::vector GetInputDevices() { std::vector devices = { Common::ParamPackage{{"display", "Any"}, {"class", "any"}}, - Common::ParamPackage{{"display", "Keyboard"}, {"class", "key"}}, + Common::ParamPackage{{"display", "Keyboard/Mouse"}, {"class", "key"}}, }; #ifdef HAVE_SDL2 auto sdl_devices = sdl->GetInputDevices();

    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 H+l2og*)Nzu literal 0 HcmV?d00001 diff --git a/dist/icons/controller/single_joycon_right_vertical_dark.png b/dist/icons/controller/single_joycon_right_vertical_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..9a6eb3013f300055659a06ec911aca5695b79a23 GIT binary patch literal 27729 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�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 icons/index.theme icons/16x16/lock.png + icons/16x16/view-refresh.png ../colorful/icons/48x48/bad_folder.png ../colorful/icons/48x48/chip.png ../colorful/icons/48x48/folder.png diff --git a/dist/qt_themes/colorful_midnight_blue/icons/16x16/refresh.png b/dist/qt_themes/colorful_midnight_blue/icons/16x16/refresh.png new file mode 100644 index 0000000000000000000000000000000000000000..d4afd76f949ff5c65e039b69ff999325bff5d7b8 GIT binary patch literal 362 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#Vf2?p zD}XSgpwrRCKtah8*NBqf{Irtt#G+J&^73-M%)IR4TP^t%4d#k2I8Aju2?p zD}XSgpwrRCKtah8*NBqf{Irtt#G+J&^73-M%)IR4TP^t%4d#k2I8Aju icons/index.theme icons/16x16/lock.png + icons/16x16/view-refresh.png ../colorful/icons/48x48/bad_folder.png ../colorful/icons/48x48/chip.png ../colorful/icons/48x48/folder.png diff --git a/dist/qt_themes/default/default.qrc b/dist/qt_themes/default/default.qrc index c51fdb26c..2182f33f3 100644 --- a/dist/qt_themes/default/default.qrc +++ b/dist/qt_themes/default/default.qrc @@ -4,6 +4,7 @@ icons/16x16/checked.png icons/16x16/failed.png icons/16x16/lock.png + icons/16x16/view-refresh.png icons/48x48/bad_folder.png icons/48x48/chip.png icons/48x48/folder.png diff --git a/dist/qt_themes/default/icons/16x16/refresh.png b/dist/qt_themes/default/icons/16x16/refresh.png new file mode 100644 index 0000000000000000000000000000000000000000..69f9474acabad4c5bbb4b8dd3f73b34b5d49d3f1 GIT binary patch literal 349 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#Vf2?p z3xP1>)&}zuprB-lYeY$Kep*R+Vo@qXd3m{BW?pu2a$-TMUVc&f>~}U&Kt;DaT^vI! zdXHXO?dResz;fZRvg2D(hZAudG7gC+giq$}KOcG4zro@DnrG}2G&q=8CN#Jv2-qAk zIjJ+#`oXqIX2G$hS8WgP*%

  • wby4H+Zo{{;L3 z1O08=*F2BkzIpR!-rwIJ>J8XzHsQ{l->~2Bog4Jpz8pa2^ZCc5w6^BvW}~T8%Ga(5 zGsE8AzS`a0?GfqMZQH)$r{1_yEEa>F=be?(dY_1%iNzjP$z(Ddi^ae&#vh=PzSVYJ_ea<5zqh=+{OiC){)4Qpu1*u-YnElctF?YM6bkj?@pyP@Dr!a| z5eNhVqqg|BIC+5#7p*n4S}ka`+FYyE+KooTLc{~D=}Q2*Y}@wcs6CDYrBW%S6n!NG zKAlddA(fg&AqM-MO+-+sRJdH;0Ra9ulgVTUD)1M+jzE@5rH7QFRYW+KOeQdqNK8yl zPJ)yYj=EvY44&sfr_+IY{k}RlIB=9w_q0|ECy~|h$>nkr!C>$OAM@a*Kg1e5!|@(L*F!w>G}Ej`y(~;4=5H(zs$|e z%|xS-k@{d}Q0mXr+4DT`JQrNogKoFm>vYC30bpp^E+TqF`cfv7`EXd8ez3N-_Nox#Q)Y;c&;|p5 z76Q9OtPsULX1+^AzccGH5tb3D>^RO&E|(i<5$yzkLZR>q04$iM`8+dB5s^4fW85$d pMua{y|D?74B%95CF?hER@(0;$!}0ahVd4M)002ovPDHLkV1gi!0>A(O literal 0 HcmV?d00001 diff --git a/dist/icons/controller/dual_joycon_midnight.png b/dist/icons/controller/dual_joycon_midnight.png new file mode 100644 index 0000000000000000000000000000000000000000..aac8e53211d9b8b4806f263a01a8b037de3f78cb GIT binary patch literal 34667 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 literal 0 HcmV?d00001 diff --git a/dist/icons/controller/handheld.png b/dist/icons/controller/handheld.png new file mode 100644 index 0000000000000000000000000000000000000000..d009b4a47a2b5695704bf2076c56c6cfe123a2f7 GIT binary patch literal 14108 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 literal 0 HcmV?d00001 diff --git a/dist/icons/controller/handheld_dark.png b/dist/icons/controller/handheld_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..c80ca9259b1daa21c01fa430d16503bb2d3483ea GIT binary patch literal 13731 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 Qzfc8{l~j}{g6sSK4+#hqv;Y7A literal 0 HcmV?d00001 diff --git a/dist/icons/controller/handheld_midnight.png b/dist/icons/controller/handheld_midnight.png new file mode 100644 index 0000000000000000000000000000000000000000..19de4629bc6b26401cb712e5cc252a248108628a GIT binary patch literal 13366 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 literal 0 HcmV?d00001 diff --git a/dist/icons/controller/pro_controller.png b/dist/icons/controller/pro_controller.png new file mode 100644 index 0000000000000000000000000000000000000000..07d65e94aabc668dd6d55c8dc737bfdf402c0b0e GIT binary patch literal 36710 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 Id@lI^04f(M9RL6T literal 0 HcmV?d00001 diff --git a/dist/icons/controller/pro_controller_dark.png b/dist/icons/controller/pro_controller_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..73efe18f412bef5a5431c04f6d5823843802d659 GIT binary patch literal 34897 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
    f)Sdum0rFI;a=QjJ+ozODTxQ-{&i9H~<;ezN8aV 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 y?*@E_R%RZRLdC>q05i^)B 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 literal 0 HcmV?d00001 diff --git a/dist/icons/controller/single_joycon_left.png b/dist/icons/controller/single_joycon_left.png new file mode 100644 index 0000000000000000000000000000000000000000..5471530340bf963323909422043f3876c6a7ffe0 GIT binary patch literal 25565 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