From 3d233fc4b44b9881df2b03f9289862a57707d3f3 Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Tue, 6 May 2025 13:06:44 +0600 Subject: [PATCH] Use icons for the indicators --- src/qt/icons/caps_lock_off.ico | Bin 0 -> 9622 bytes src/qt/icons/caps_lock_on.ico | Bin 0 -> 9622 bytes src/qt/icons/kana_lock_off.ico | Bin 0 -> 9622 bytes src/qt/icons/kana_lock_on.ico | Bin 0 -> 9622 bytes src/qt/icons/num_lock_off.ico | Bin 0 -> 9622 bytes src/qt/icons/num_lock_on.ico | Bin 0 -> 9622 bytes src/qt/icons/scroll_lock_off.ico | Bin 0 -> 9622 bytes src/qt/icons/scroll_lock_on.ico | Bin 0 -> 9622 bytes src/qt/qt_mainwindow.cpp | 37 ++++++++++++++++++++----------- src/qt/qt_mainwindow.hpp | 3 +++ src/qt_resources.qrc | 8 +++++++ 11 files changed, 35 insertions(+), 13 deletions(-) create mode 100644 src/qt/icons/caps_lock_off.ico create mode 100644 src/qt/icons/caps_lock_on.ico create mode 100644 src/qt/icons/kana_lock_off.ico create mode 100644 src/qt/icons/kana_lock_on.ico create mode 100644 src/qt/icons/num_lock_off.ico create mode 100644 src/qt/icons/num_lock_on.ico create mode 100644 src/qt/icons/scroll_lock_off.ico create mode 100644 src/qt/icons/scroll_lock_on.ico diff --git a/src/qt/icons/caps_lock_off.ico b/src/qt/icons/caps_lock_off.ico new file mode 100644 index 0000000000000000000000000000000000000000..6895c735cf1d2d0cdc497f20bd810e9d2ef22892 GIT binary patch literal 9622 zcmds*J#O4U425R_BS4TME?l_sZkaMCSZ|eM*joiTg{?AWj*%*LPL(Tc_-XMBnwXJB z(#UoqfTlDve2?UCe!MAd(nY$wOs03~+eJ!WQc71>=kMR|Qu<|W*VpIo@9$Ik`XQy= z?)?4J?Ecu;PiAAUhH!2-l@4ZCcuv+nN7BvB&FS{`c9I+phZ6!P_FdOK*{iQcdwVeM z@9%rLySsaO_ie}H@q~bl&(WSf#?vl4Y1+o@8H*o0jQ658#+3N!dwhIkX!em`L-xcj z495F+@Q323f2qAN9v&W^Vvyg;?~wmX?D1U!4zY`yZ%K(?wozk8o9wBbT>UWjHL}zm z4)I%j{TgH)ZMWMhVJw1ex1m<&3AXGrw%zpm4f_?(58I;(&$BgQW9EK8+jp4HC4wJI z_Myn_@tCXqe%}jorrJ{tc*klbEVgBSh4PeeT4@3H(5Z}g=P-u;=1CrtT+*1N}IT#bJb4-7>4 zq+j!1izm$790+TQf35IT8`9vCJLOG0Xk;v2;pDWi=;Iw>&8r6C)c(Snm?PlH#};__ z03Ol`Pnh7DOg@+5`St9aN?XJH*hD(R;@q+;boy+fbL(h#>B7_J$og9ArstUIO&Why zcbaSUwa^})xvxFvjh@!`<=@@q|PCC%8{b4z;`+_EX*s^5<#jxqm`kE7iCHt##{wf^VuX+v7!=QxJ289&AU96tHZ<(;u}@WtV4DbA^| z-vYjBBx-yk_wrqFX`Esh%fH4C>4?o(;kUjwY0XKmagP$VG&w@ZrOsdVwbH^jj>Y$^ z;d|Gnxc3s@66w;WzlZG%b^`7R>^xQjstBzD#xp8Z?d4B5G z-}B^8OC95g{A>GA!;cTzvs!80CzVV2k&8d_Yrmc9i?^G@uX_X{{3Rb$e>L1|@R$6eJ;uJ2zr6yI5nnLVBlUVLEl!JZq9xkV|=Jr=vy0L zi25tsOZlx0YxRj?xs&``^9TB!NGpOovVuO_&u8S4Ex>@(Gs1CJcf&nm+dcGsbI23u zpkSYo?MC+->{lp1WRJRG;aXbT4yH8@oVYr*e}=; z7uuX-pS2No#kS#nE}o4&Y(k-JYw)a%G1gi<+E@xt?T~ZL`iVa64-wRNa?w)Dn>I)o z=SR<9lk*|_i=Go*z$Es<7MNle#21T)HJl^lw0J-TCZx_3>IKtEH^_m`ed-(cev<$L z1?QH0Lc5P5Jhx8rEq%wrxh>TWuE^Z1J=d7WZ1*_lh|RX-xhGjXs^pO14C@HF-in;Z zV|C0(J9=;50Z-~x{C3di-nN9pj@<*_o_|a6;fd87JR9Fx+wmp`f28Z@E4enXo*Bm+ zeCq=+rV6oh?bq?)cT`nXdTuwhSSW%s9D=e1-}+#2rsgI$KGui5@M9kkpExcUqqc+$ zQd{JrrIt5skTA}V9B&aFX+Qw_-fz8_tC|MmGP(kT$_v!zAd^S zoaYTKI3#Z%zF2&m0b7K2S$wd715$4k;sn$8Zjfu8dysFgLs0=H3ckaRBCjI+4r}no z<^NllJGW|wNXXptI}YvMwelAC}>}4s&mT^gb>_fo@x!a}E=1KlG z*su$`yPQ!;esEI^|LMz#b7guL#>dZbuNb0z)qirMHFe3^XvgzDrFTpI)HlN#e)yBZ zqMxZYYfJLSG05eH z{+9Twe)!D;Zuo}ZIsDy&-$4+T*!L3raSSZSRL((%b*ultv3YP0e%KKE8b8zDxGmv- zDh6}&PCH8R1JC+=E$7Isc5hh!7DutnTDS*4Y_Kt~xft8Z=aTV{V{i|C+OULM#}=G_ z#x$ob9seBeMgDg(sukgP@D43wpmQb{EtPPBoBXh0M}ZB(3-RT~{OX(KhZV2^QtvF} W39jF}!QR<9_t41S1h*7$g8MJPaVKN| literal 0 HcmV?d00001 diff --git a/src/qt/icons/kana_lock_off.ico b/src/qt/icons/kana_lock_off.ico new file mode 100644 index 0000000000000000000000000000000000000000..27c9b88c25d39dde2f48fe5fbf5283fec9dd1541 GIT binary patch literal 9622 zcmdUzziu2i5Qizi2w^{`yNPf7iYbA71T0-$es?yEh-cmzS554V-KHiBKWB(=k=(* zt@^ujhxObd#Ixlb%G?o;wYs~zJB#b?{?kT_VV^cS0>pc#NY?;Kq7sqZvakBl~5le&FD@E^~Mhi)ZE&5BX`U@h!y@-?*YpAMd<- z22Rfx>a<3{GsZpehygrgFFY~9tFrjJl)qo!eW%Jz#r$m-IaVybTlETEey`$p>#5$Q zJMCPf>f2lI`WsfpKp=UVIALq~kpK7Z%ngh%eIjUo2ihtBwL@NPwk?{MtrIlhyl z=Y|-LCkFbkTfXRL47r%YT>RuiV;r$Y4$dlDf-rN2q5O_Dk-=wja(pe8w2-dE($7ct-IV zM_m>8Vx6_4pE=|`vj1b9PON(DQHs7^^dDwZ>hlFY>d0TlYNU+C%3&GXJGx z7~v-d&#b+4{031+<7nmIWnk3%_%T6@j0=UL1~dUL5BhTAIJ#c<(#p*oq;K z%dxKI2WJjD`i*lhe%JK*`T5(et+f`t7+ixb`4htw|5S{7@PjcD!&Ho0@*m-!8iQ{u z{}jIOL$5}A@q-ih+1x(VzlPsEm33ZY{NOt-`|%-5>Tf+g&$9MK%>CNYzlNVVvCiTx z)x`6E5XNt{L$E+ zU687`ZCU+ZtJV7KICtaj-2J_SKDcjp&V6>yJv@Z>-*24zg|^4X@c#X+b6?*%cQ}Oi zpRoIbz8_$NM<9fDDE9=r9m@&WCDOT4xsyk&7uM=ji6>yd-ZhYgl|0ecVDDjh99U~C z!c5+?_DyGBSM^DSJihXJHC~SO8Gm9=q}m4z>&N%HdtYKt4Dp%|KKNkI3;3gd=J)V< zjz1m$dEoJ3DL*lULmRzYY;yBAh@WPIcIH3gp$g=F{MY6W?OO>EywzOUEA)nw{ zEX1Jr8Bsskt<;>B_V#qDZ_0!=EZk?X-PnG^{fgxW_NXfs&E=)Ka}}{I*@u`%sKVZr%;${4J3!he#07Ut#uNQm`P37vD($f9D+0FIPy7q=WHzy zYk)@#*<1g}mF}4({+)gD-5zTk$)0-&Ub_Dh&nJ8EVm!q>YQ-zYiLXWRQ{2pO@Rjsw9rkt5YuA8*s-K|T*DSy^7R(w&b4$G3Cz9janyU)t$)wZ+Fq(TJ`A1` z3fImt$Wn|o{j&VrhoTR7+NH|pQT`_SunW73Cm_z`T>Qx`8RHLgHukk^AL%zaesNQ0 zs?JF6El8S7kI**NZw)`ur?7|LbAGPnCx`BoIs7>vw&0(O!IY0%@K53M8|#>lTk((K zi=R3-Ph0Vi;a`(q|2vK5A@27oTCe}?__d!6bZ>lvZydAAn(?Q(CcIMpFY_~}83PmK z6!VU2tE#GV7&tz*+3(V^k3B~_t&3~spEy&!C4ZV1n%|Tw_xwNcb9~B+ml%I8zH@C` z#($10_kEVXg;fL5J$MH#A8gL>$4UiGa*Lln>?rgByxspFSLU~|rTh#6eW3WAMLZVx Um;b{}ymjuj#?J)T6mpXLFKF~OvH$=8 literal 0 HcmV?d00001 diff --git a/src/qt/icons/num_lock_off.ico b/src/qt/icons/num_lock_off.ico new file mode 100644 index 0000000000000000000000000000000000000000..5b14da1d4c3490e38cbda89bc89a53fc493b890f GIT binary patch literal 9622 zcmeI0J&qGW5QW>)3JDRg!3Ga*Ae0r_Jo8SgNT?@aRpP~SkHRfn#S|f zGZuo8O4U8n_3Bl1^^cv>D&3^p+Z1|}zTBkrDW!CGck2IqlhTiPcYlBCe|?+M=XWV> zHmCmgu=^EbKZH#*1L5>ORN97J;W@_pF_Io09*$2>PlIH;-5wEqV&62)*lp-JU>4lC4AfMcCCO7=iFZ3(ZXVk+w!esFB@q%@d!ij$JjfkKK8_YI2_LY``9x^ z0%wG041f6^Yfr9*=1+4i4F)`vcj;38WS48~cqe;mr>lP8+efC_<3s*qZrU}-I$E#S zy@as{w#|z99Vghb&%}1q?llX*K0da> zoaJM^ue!*`<#=GK7F~PY>b=&pV|L+b99p($#;WgQF5$_>HN1U4a9>mL91EXg@U&+U z^He=b8Jv#7`Km#Zy>(Q+o`a zu)**)eb&6zHgl)_g_y<&c;Z+C4-ViVweW-qUdZ5cDL=nnol|KYnD47d6Ih&EafMDF zLv(KK;x1iy+8o8V+PdmFrh1cxuj)>7t#387<1_bu&h_!9F|M6gj*kzm*IaA;`I`1I z+E4K%AARs;=UCX$_it(s#dloV+DGvLX8wIDJ~=Gy(fFEzPwt(6&V4FA_H*+8oAFim zHS(jnQ%zHg2tI1y=XK$jbJdUgs9pc$#cRJdKKYUlk0Z|`{Y&dtI3*1RbAa|S^pP6) zj;prtYu}s5m&+XYD95Kwju6(2&fk2@)V}b;$K-p~pYL6(+IOBaUXxbsJ!}&(Y(sPp zYxv```#Iaj=Ox>--qUm+DQRL=9jUfTW9NA9{;Aupd!BgJ(0L5G|G7Ez@ec>>S+%sz zTjfwZy5b+=Uwf?UF3z?53n%wM9EjeR#?_7=fBXHuz4!XrjDK-)y@dagZ+O)7uQ~6E z-(&W6P5khs2{A*v;ehY`C>p%B*jrE^%&;j6Q zkgt2SYpj3GzsJ3#e_|D&MS literal 0 HcmV?d00001 diff --git a/src/qt/icons/num_lock_on.ico b/src/qt/icons/num_lock_on.ico new file mode 100644 index 0000000000000000000000000000000000000000..0dd08d7ae4594ca8f076a41145181800c344c140 GIT binary patch literal 9622 zcmeHMv2xom4293R-u1d<$dIibJN6Hnso&8lm#+{tcI;<#>f9;P7xfp^_eddv6-t#v zQL?Wg4+f2|6Gz6=-57PHStBcaVG@k>zj|u5ioo+x=W>e_4dJFO{bkRmW2Qsg7<(ptHaKsqsVk8pIf2 z99iN!`(B@eZ$td?lR8N5AEfg-$)pkYram@Jd6-9(VPl>_y7Bpj`HJlaa@2-R&+<~< znF`;|$wQ1I?UWnJOFCyRr%o703XQSx+)@KRqboKPo$IS6=%Y-pkLsh&fga0;oO>zy zV)^nS>w)p_cC*MO3_FJMYq)d%5TFaNFl#fY79c;X}P(sURkltJ0 zP)qOFbZ^(<-BPeGOYb#}W92#SIn}Lv&3g|KdDayJ&go*6aa@6TcBXd9NBXG#Dkkyz z-OwG$nb)9y=nlOW`>);qS?mwz#YcQuzWz?DQM@!hZ9Otn9i+wA=Uu*G$igFTjL zD`}&~b5hF@HP>NPqE0r}VJFZ7Nb9hYKU`jJ)7aUHcb>q$YaK_PyRZFwhMw)Ioa@8l zyIAKrXwT+U9Vzpo_{>AC4H#wVYV#m|)!L8+U0!O;C_b^3mf(l|9F-hhzhaZm>{^#H z@A$YHkblDu9$0(-_x8Wm#e41l8-D!%p#C||b^iWK|C@Zf_4@VumY%nwC^+xVt?)ep48+SMQD%0GRaq34UoXAN9|v<}X|)dxOK@Znnl wOkyiOZOBNp0l3}wkB#yD+AKbuKpRLdGbxUD{Qe)zo3+TX#Lom<5;2MW7pM8O;{X5v literal 0 HcmV?d00001 diff --git a/src/qt/icons/scroll_lock_off.ico b/src/qt/icons/scroll_lock_off.ico new file mode 100644 index 0000000000000000000000000000000000000000..85cb09ec6a5f5c4f6ad460227182397270bef609 GIT binary patch literal 9622 zcmds*F>V_%5Jf4#2oR)*3m2{=l__%qNmY(vsS0umd&`tLMyk{~Rj#1STj3icg52dU zxpI&N#LI@8Jm-g>>A^ftw$Hz(HxT;Ei)z!v5ho@xc-z)@T8w5Q-Ooj;9_HTJ$wc=0` z$CPi<_}lVa6Rxz!XYF(6965ntr}vx|Haf=>VRE{>`A_{AKFBZoWJ|J3}`mzo-ga^{WSN%Xi6{_y{G9s&uM&A9x1nSW0&an{N(M}Jx@N))o~0l|I$8`@Z*DO zVk=EeM>KEpBNhJ?e%10ZKbPXie+2&Ax#fLp6+dyqtA}^`#(b#d*L*)eKa2WRm-tZ2 z&s@fLl2-@pWo#{K`G>gW$B+-T{KU`xVE+9Yz)5>-@6_^Z{n0T$eLmMy@3s73$_Kv| z%Doh)?`y#?yqI78L;8Q`zg7Kti~Q3WLas^to>!m7rShP5{e8}fJJ$FCcWNza`N19X zVTc>sT7K<)Uwafk+COEtVhW98RU{6pM) z6Tkl-nL8-!rvE=UJC_#ye=&CdUD6Lf2e*!2aVZbpiXT7l0e+L_zca+YJH%~r4uQMl K=YcnR;QkAzOeNm{ literal 0 HcmV?d00001 diff --git a/src/qt/icons/scroll_lock_on.ico b/src/qt/icons/scroll_lock_on.ico new file mode 100644 index 0000000000000000000000000000000000000000..33476406a5a559008e9628c0772333e9fd7b08e3 GIT binary patch literal 9622 zcmeHLJ967F5M7NtnaQMa;lf>1rpyiED(6U*$tg&dDRYcesZ)tOQLeze2k=Q04T3*F zR>oP(azz^Z-U3)IV4Cgh&hGCG_F&)c%s!jh!-K#7{l@GUo;^PL`|oefzP>X%9Q^%H z`29iO5AeZHAo%An_5{C-(gJ&loz05V~#(gDT~s%ui@Y7pCW!?tc{;zAO>x}J)6I+`9uE( zT0@yfeH}jIJ=MP}Fr5&CT283?$#0`&f;9WKt#-?lJ`~m&lp9xXSg$BQP@}FWn#;BJ z94h8^NgZMysnKt&E~(E_OH2eu^}^gZcG|)&XyOLYC0;#&$Nqs9#Uo~*jlIw8yA)4Y zJ`2M&mYBiuj>I=sFW1CJpVx$!V?BiF)^LzdOY?>6;np#*AGqgT1}@1LVTNolKGyE0 z(;9Z6KFjAmp6bF}EADkH1( zFDR;2sqA?uSeLc?n(|mS$37=)*_8VpGV-E{1Cw*kRpxpPJzn+=-i_>s>Knx;N2JB- zo&46~3)>|>E^hpRSk~YZTYH`G`7Fe-247e{ zne+WpeuyJi{=57eIUk*3NPJEbu52*>d9K)SZW^Am$l>M?7bksu?g3l0hCj8xzmS9+ z)N-Q=#|57M!g}7=9%rsyQY9vZ=dc6x3955g#SfRaD_YxY+4D?b?RAc$&D~Oe&(OO) z*K&LqJk<-|ouk*e7+d-U`B{g$81O4gQ_Q3Mbr(Yxb~~Lxg8bx`F5&mvS-Q4T>SSF<67rxHT z3?eq~>Ytil{}=q{f1UIHV)>_stackedWidget->setMouseTracking(true); statusBar()->setVisible(!hide_status_bar); + num_icon = QIcon(":/settings/qt/icons/num_lock_on.ico"); + num_icon_off = QIcon(":/settings/qt/icons/num_lock_off.ico"); + scroll_icon = QIcon(":/settings/qt/icons/scroll_lock_on.ico"); + scroll_icon_off = QIcon(":/settings/qt/icons/scroll_lock_off.ico"); + caps_icon = QIcon(":/settings/qt/icons/caps_lock_on.ico"); + caps_icon_off = QIcon(":/settings/qt/icons/caps_lock_off.ico"); + /* TODO: Add Kana indicator here after the keyboard type work is done. */ + num_label = new QLabel; - num_label->setText(" NUM "); + num_label->setPixmap(num_icon_off.pixmap(QSize(16, 16))); statusBar()->addPermanentWidget(num_label); caps_label = new QLabel; - caps_label->setText(" CAPS "); + caps_label->setPixmap(caps_icon_off.pixmap(QSize(16, 16))); statusBar()->addPermanentWidget(caps_label); scroll_label = new QLabel; - scroll_label->setText(" SCRL "); + scroll_label->setPixmap(scroll_icon_off.pixmap(QSize(16, 16))); statusBar()->addPermanentWidget(scroll_label); QTimer* ledKeyboardTimer = new QTimer(this); @@ -205,10 +213,13 @@ MainWindow::MainWindow(QWidget *parent) connect(ledKeyboardTimer, &QTimer::timeout, this, [this] () { uint8_t caps, num, scroll; keyboard_get_states(&caps, &num, &scroll); - - num_label->setStyleSheet(num ? "QLabel { background: green; }" : ""); - caps_label->setStyleSheet(caps ? "QLabel { background: green; }" : ""); - scroll_label->setStyleSheet(scroll ? "QLabel { background: green; }" : ""); + + if (num_label->isVisible()) + num_label->setPixmap(num ? this->num_icon.pixmap(QSize(16, 16)) : this->num_icon_off.pixmap(QSize(16, 16))); + if (caps_label->isVisible()) + caps_label->setPixmap(caps ? this->caps_icon.pixmap(QSize(16, 16)) : this->caps_icon_off.pixmap(QSize(16, 16))); + if (scroll_label->isVisible()) + scroll_label->setPixmap(scroll ? this->scroll_icon.pixmap(QSize(16, 16)) : this->scroll_icon_off.pixmap(QSize(16, 16))); }); ledKeyboardTimer->start(); @@ -239,9 +250,9 @@ MainWindow::MainWindow(QWidget *parent) connect(this, &MainWindow::hardResetCompleted, this, [this]() { ui->actionMCA_devices->setVisible(machine_has_bus(machine, MACHINE_BUS_MCA)); - num_label->setVisible(machine_has_bus(machine, MACHINE_AT) > 0); - scroll_label->setVisible(machine_has_bus(machine, MACHINE_AT) > 0); - caps_label->setVisible(machine_has_bus(machine, MACHINE_AT) > 0); + num_label->setVisible(machine_has_bus(machine, MACHINE_BUS_PS2_PORTS | MACHINE_BUS_AT_KBD)); + scroll_label->setVisible(machine_has_bus(machine, MACHINE_BUS_PS2_PORTS | MACHINE_BUS_AT_KBD)); + caps_label->setVisible(machine_has_bus(machine, MACHINE_BUS_PS2_PORTS | MACHINE_BUS_AT_KBD)); while (QApplication::overrideCursor()) QApplication::restoreOverrideCursor(); #ifdef USE_WACOM @@ -1485,9 +1496,9 @@ MainWindow::refreshMediaMenu() ui->actionMCA_devices->setVisible(machine_has_bus(machine, MACHINE_BUS_MCA)); ui->actionACPI_Shutdown->setEnabled(!!acpi_enabled); - num_label->setVisible(machine_has_bus(machine, MACHINE_AT) > 0); - scroll_label->setVisible(machine_has_bus(machine, MACHINE_AT) > 0); - caps_label->setVisible(machine_has_bus(machine, MACHINE_AT) > 0); + num_label->setVisible(machine_has_bus(machine, MACHINE_BUS_PS2_PORTS | MACHINE_BUS_AT_KBD)); + scroll_label->setVisible(machine_has_bus(machine, MACHINE_BUS_PS2_PORTS | MACHINE_BUS_AT_KBD)); + caps_label->setVisible(machine_has_bus(machine, MACHINE_BUS_PS2_PORTS | MACHINE_BUS_AT_KBD)); } void diff --git a/src/qt/qt_mainwindow.hpp b/src/qt/qt_mainwindow.hpp index 2ba29c128..421b9ce15 100644 --- a/src/qt/qt_mainwindow.hpp +++ b/src/qt/qt_mainwindow.hpp @@ -7,6 +7,7 @@ #include #include #include +#include #include #include @@ -191,6 +192,8 @@ private: friend class WindowsRawInputFilter; // Needed to reload renderers on style sheet changes. QLabel *caps_label, *scroll_label, *num_label; + QIcon caps_icon, scroll_icon, num_icon; + QIcon caps_icon_off, scroll_icon_off, num_icon_off; bool isShowMessage = false; }; diff --git a/src/qt_resources.qrc b/src/qt_resources.qrc index bc553ac61..a5963c152 100644 --- a/src/qt_resources.qrc +++ b/src/qt_resources.qrc @@ -34,6 +34,14 @@ qt/icons/86Box-green.ico qt/icons/86Box-red.ico qt/icons/86Box-yellow.ico + qt/icons/caps_lock_off.ico + qt/icons/caps_lock_on.ico + qt/icons/kana_lock_off.ico + qt/icons/kana_lock_on.ico + qt/icons/num_lock_off.ico + qt/icons/num_lock_on.ico + qt/icons/scroll_lock_off.ico + qt/icons/scroll_lock_on.ico qt/icons/acpi_shutdown.ico