From 2e70942b2137eccc84f5a8d876541648e37cac24 Mon Sep 17 00:00:00 2001 From: bel Date: Thu, 23 Mar 2023 20:54:27 -0600 Subject: [PATCH] gui emits keydown/keyup as c/cargo run --- src/.gui.rs.swp | Bin 0 -> 28672 bytes src/gui.rs | 95 +++++++++++++++++++++++++++++++++++------------- 2 files changed, 70 insertions(+), 25 deletions(-) create mode 100644 src/.gui.rs.swp diff --git a/src/.gui.rs.swp b/src/.gui.rs.swp new file mode 100644 index 0000000000000000000000000000000000000000..53b060a1dad5dbee72ebdfdda95288471ec7d9a6 GIT binary patch literal 28672 zcmeI43#=Sf8Gr}MO93(R(160Ukg^xI+x7wmrVnjt3&fV-4iq!y2ErYTAQueOLXMkNoI>FK^Sds$-f>aeW`3 zPP@}~hldw0-bc8rrND*fwimiiZQ*Ep)Gb-|Si5DGs?AELZP}h#syfm{Q*2HtoY@Hz);ALg+R3?A*2;CMjK@!;ThCnMZJ!S(gQ@#^3h$~h$X zePVF@LC^g;!SA;O$H#l_2S4*eu7O+wxdw6#H*eOo>klU~^Z()a|B0hCZ7XESD`5mq zhhyMxJkJyG0PKcca2I?WYOn%Mgm=OTFb7_GlcxO)ehhnHH+%!`gfGBOxCyR@kHOWj z4JP3f_{U+S3opS_@B{cNd568kW@DvW2J#Z&n0~f$N_!o|rdtoCS0AI)PQ-c%W_|OTY z>XF{}DeG24zrvg-*V=VcU$#u2@0!g9i#R&I=a#DavgN^*Mzg}=j#^{1R4rvFY_5GDuZ*R5JGAgd`uS~y_CeiQo$!nUP z?hfnA^j5{IjdcrovbXp|K)c}9uQ$eUj)B1AowN8;L@NO)J0MM!^%%C zmHjpJ^Q9e*-Ke$ghBfNTR;ph>g^S6vy#^(lY{JIY$`;d@Hxvd7Dt}=EwOS=eO}EXh zg`hr)>xQvL7<*aiWx%M8M@>q!a*cd?6PS(F<7UnGuno&}GdMMjRc52&H$BGb}t8Qmm9&^63uFLn)-@Pr)kwHp4GN>VUE^SutVfUHtyizxQ_jp zTbMU#ymv}k6^`?Ydd+u=deyVBYCJTW^qh9HX*%Vq?|E&z?6u3Tw0{KxMJ7eY%Pi3z z%OJBcB9*;XeqSoTH_7jn@>|ug5m9mF@3rCkWmWi6*r;r|u!%Cn>Mf@2t*?=N$E+8G zJt*5~fO0kDEehAP{Z^#^dW=!6$4i=tmsATMTJB}Xid>V*+1qe-CY}S@$ znDXUPgbZ0}I%cIlA>XIdjYI2gPCG`@u*ifHCS`p`G_9ze%K&k^5c1YvFvq=e z3)5nGV?tS?zoMe_-w5Mabrr;_hgZyT%PZ67>0Y>I*)gy5%`oZITVXu%Cd^vd6N$Oj zRi+Z$ceyuw18b8EDz1c~Dz;};npVY)9wvSz3>AO<(GfRvzQTK`vh90x+Jy--D=j1W zGYl43d1Z7bHDbwLVo+#U+YP~KbdM(sTSj080rFMmB(}N0)XT_bcYv_whp4B1=bBpOrDB&t2lPj9msNKT+ z7WLIl-e2M*_6jOS`r^#5x;4j=?Wd^Ta?yK}h9I6q33X!uq zQPVSwN%h*|{nT#yExV|TI!Q`m{C^T-Z5PD&pCP>be2j7a@o+yE)_@q(J8&30N!Ul= zyCBB#li-7p;XwY$HIQo{*Fdg;Tm!iVat-7f$Tg5_AlE>k0p(f`9qf!MnLzT|Vm!#X z`ji;oj@o7B2wH9-8de#`IgF`HC+0LSbt-i+s4omJie25Tg@S^k80_F}V6IBIC&Foh zp^_Mr7tUN1IXt6iYP3|4@do++0)L}nj1<)bM=%%W3=IvH@ECL$OuB_`s98v9Z8D{1 zdP-|&A*D-`DNUrObm=Ulv?-a=czQ~kW+A1O$&{+;DXpA^lvX5Ds-&m1Vir%IbodT)>N{Wyd=M^#Rqzh@FLUa<;Wn6nI;?|#GN=9+?1phz38%raFb5uF4qeQ% z?|>`eo$ycQ&%Y1bp$%eA{cLy^-R*@PAoREsu7jm83=5zL2f?42W1oZr;X1WBA~HJh zlNlQzIWv$_2ZVDzy$XmJvrzlwOhih;!snl!u!u1W2{ZGNlC0lJPjq7^N-~)FQJ%25 zmucu7FXR@BiLLGgZs5U-oZG^|NWk#5wK@K}lCHo);2R`R`bWNh0vCU&0t@?eqr1AHvP15 zvD_odFUp7uQ|FNbzvq^ic$C?QyQJe`vaS=Rn?b*`A3BTAkh~IFOUU0Zy-f{el~Adq z#g(Ma!x9Kx^ic@qEv6zebD$>r!)Y8Z*+tk1+ zQ{AGA)!e#S_dAKMUi1V5Voj^DMAb~|5vhL47ExB(PR(_1i+I(`w$-j%4a;;~LofH0 zFAp($Wq+aQmG&0BdVX1h;>|niyUMB)O)SfBy>+)ouc57s%A=fN272PD@Us5IrW=_= z5=Fd3i^N4IGN|a;6DDguKh$2>`48S5u>?vLm$|)0VW{NWTb&BkG}XFhHHEB)Q@M=P zI3jhBcyWof5MlQ8R9zq=60o*kKyyX{F6|c}6gT}GZ0Z-l>tO~0R`v^E@!$*utmqfO zs=*luklo*YA+c`rjKqnqRF*W+0h^I9(LKr%COTC!61Gt;0Gv$JH}#ZaY2ZFI7Bh(h z+ezGBsOmn$*V^mR^syAS*F=>px9p0Z*FFqm_ti+Rrp9}im5@oh)@M3p6geSZN=)6; zDZ;bS6I*1h)HH4Kv0Pu&Q#yU3Qw>`5HchohsTV2vKG~`^@a?MJTdgOj(fw|aQ|F$V z6-cb%sx zP!2kwL~z)rXcZiE}) zJ@6(t6b^xZ<2$$mu7_ptJpO~v!+9_V_TWF5fHU9){03hGv9A9{xDK|%C*X2e4`;z# zco{#!zhMvD3)esc*1<5$fnVTLxC7eoAsB{(;0b&Q_rMg4z#3QxN5UWQDf}FE!~O6r zxCzFf24Zdhd^iGL#Lw_3?1as*9FBp%P;Sq_7eV+RE(ckbK{>t_4)JRL%A99!DCkcw zBkZ&T1|Ht&?{*N9XVJ!X4M$>xBF9Llg+?mNg6_Y8ehu2*nBknZ4UURA>QBFccN2)E zq-q;QY&=O7am(?llNF|`-joo*+CX`T3Ge9`*D)jh|xs2 z#FCQi-R6<+NO&FZNC=H{c%+U+ZMQJASn zi_C~nSFpz<_i2oyJGDo|}jOjRIrHevl%Ma5i_slJpRau2 zeO6Jf6%V#5%xC>L%LT+PKex9-3yijvw{_R`h, inputs: Inputs, - keys_down: Vec, + keys_newly_down: Vec, + keys_already_down: Vec, + keys_up: Vec, flags: Flags, } @@ -77,6 +79,24 @@ fn controller_button_to_string(btn: Message, cur: iced::keyboard::KeyCode) -> St return format!("{:?} => {:?}", cur, btn); } +impl Main { + fn key_code_to_string(&self, key_code: &iced::keyboard::KeyCode) -> Option<&String> { + match key_code { + _ if key_code == &self.inputs.stick.up => Some(&self.flags.cfg.up), + _ if key_code == &self.inputs.stick.down => Some(&self.flags.cfg.down), + _ if key_code == &self.inputs.stick.left => Some(&self.flags.cfg.left), + _ if key_code == &self.inputs.stick.right => Some(&self.flags.cfg.right), + _ if key_code == &self.inputs.a => Some(&self.flags.cfg.a), + _ if key_code == &self.inputs.b => Some(&self.flags.cfg.b), + _ if key_code == &self.inputs.x => Some(&self.flags.cfg.x), + _ if key_code == &self.inputs.y => Some(&self.flags.cfg.y), + _ if key_code == &self.inputs.l => Some(&self.flags.cfg.l), + _ if key_code == &self.inputs.r => Some(&self.flags.cfg.r), + _ => None, + } + } +} + impl Application for Main { type Message = Message; type Flags = Flags; @@ -102,7 +122,9 @@ impl Application for Main { r: iced::keyboard::KeyCode::E, }, flags: flags, - keys_down: vec![], + keys_newly_down: vec![], + keys_already_down: vec![], + keys_up: vec![], }, Command::none()) } @@ -114,30 +136,38 @@ impl Application for Main { match msg.clone() { Message::Tick => { let mut s = vec![]; - for key_code in self.keys_down.iter() { - let nope = String::from(""); - let s2 = match key_code { - _ if key_code == &self.inputs.stick.up => &self.flags.cfg.up, - _ if key_code == &self.inputs.stick.down => &self.flags.cfg.down, - _ if key_code == &self.inputs.stick.left => &self.flags.cfg.left, - _ if key_code == &self.inputs.stick.right => &self.flags.cfg.right, - _ if key_code == &self.inputs.a => &self.flags.cfg.a, - _ if key_code == &self.inputs.b => &self.flags.cfg.b, - _ if key_code == &self.inputs.x => &self.flags.cfg.x, - _ if key_code == &self.inputs.y => &self.flags.cfg.y, - _ if key_code == &self.inputs.l => &self.flags.cfg.l, - _ if key_code == &self.inputs.r => &self.flags.cfg.r, - _ => &nope, + for key_code in self.keys_newly_down.iter() { + match self.key_code_to_string(key_code) { + Some(x) => { + for c in x.chars() { + s.push(c); + } + self.keys_already_down.push(*key_code); + }, + None => {}, }; - if s2.len() > 0 { - for c in s2.chars() { - s.push(c); - } - } } if s.len() > 0 { self.flags.output_stream.put(s); } + self.keys_newly_down.clear(); + + let mut s = vec![]; + for key_code in self.keys_up.iter() { + match self.key_code_to_string(key_code) { + Some(x) => { + for c in x.chars() { + s.push('!'); + s.push(c); + } + }, + None => {}, + }; + } + if s.len() > 0 { + self.flags.output_stream.put(s); + } + self.keys_up.clear(); }, Message::EventOccurred(event) if self.configuring.is_some() => { match event { @@ -172,15 +202,30 @@ impl Application for Main { modifiers: _, .. }) => { - self.keys_down.push(key_code); - self.keys_down.dedup(); + match self.keys_already_down.iter().position(|x| *x == key_code) { + Some(_) => {}, + None => { + self.keys_newly_down.push(key_code); + self.keys_newly_down.dedup(); + }, + }; }, iced::event::Event::Keyboard(keyboard::Event::KeyReleased{ key_code, .. }) => { - match self.keys_down.iter().position(|x| *x == key_code) { - Some(idx) => { self.keys_down.remove(idx); }, + match self.keys_already_down.iter().position(|x| *x == key_code) { + Some(idx) => { + self.keys_already_down.remove(idx); + self.keys_up.push(key_code); + }, + None => {}, + }; + match self.keys_newly_down.iter().position(|x| *x == key_code) { + Some(idx) => { + self.keys_newly_down.remove(idx); + self.keys_up.push(key_code); + }, None => {}, }; },