From 7be2c9864ea05e2d4729af23fadaf32cf29562ae Mon Sep 17 00:00:00 2001 From: TheMorc Date: Sat, 2 Jan 2021 23:34:34 +0100 Subject: [PATCH] Demos: add CatDog (Neko clone) --- Base/res/apps/CatDog.af | 4 + Base/res/icons/16x16/app-catdog.png | Bin 0 -> 385 bytes Base/res/icons/32x32/app-catdog.png | Bin 0 -> 623 bytes Base/res/icons/catdog/alert.png | Bin 0 -> 649 bytes Base/res/icons/catdog/erun1.png | Bin 0 -> 744 bytes Base/res/icons/catdog/erun2.png | Bin 0 -> 761 bytes Base/res/icons/catdog/nerun1.png | Bin 0 -> 731 bytes Base/res/icons/catdog/nerun2.png | Bin 0 -> 762 bytes Base/res/icons/catdog/nrun1.png | Bin 0 -> 636 bytes Base/res/icons/catdog/nrun2.png | Bin 0 -> 713 bytes Base/res/icons/catdog/nwrun1.png | Bin 0 -> 775 bytes Base/res/icons/catdog/nwrun2.png | Bin 0 -> 807 bytes Base/res/icons/catdog/serun1.png | Bin 0 -> 764 bytes Base/res/icons/catdog/serun2.png | Bin 0 -> 804 bytes Base/res/icons/catdog/sleep1.png | Bin 0 -> 602 bytes Base/res/icons/catdog/sleep2.png | Bin 0 -> 605 bytes Base/res/icons/catdog/srun1.png | Bin 0 -> 626 bytes Base/res/icons/catdog/srun2.png | Bin 0 -> 709 bytes Base/res/icons/catdog/still.png | Bin 0 -> 623 bytes Base/res/icons/catdog/swrun1.png | Bin 0 -> 745 bytes Base/res/icons/catdog/swrun2.png | Bin 0 -> 757 bytes Base/res/icons/catdog/wrun1.png | Bin 0 -> 756 bytes Base/res/icons/catdog/wrun2.png | Bin 0 -> 795 bytes Demos/CMakeLists.txt | 1 + Demos/CatDog/CMakeLists.txt | 6 + Demos/CatDog/main.cpp | 238 ++++++++++++++++++++++++++++ 26 files changed, 249 insertions(+) create mode 100644 Base/res/apps/CatDog.af create mode 100644 Base/res/icons/16x16/app-catdog.png create mode 100644 Base/res/icons/32x32/app-catdog.png create mode 100644 Base/res/icons/catdog/alert.png create mode 100644 Base/res/icons/catdog/erun1.png create mode 100644 Base/res/icons/catdog/erun2.png create mode 100644 Base/res/icons/catdog/nerun1.png create mode 100644 Base/res/icons/catdog/nerun2.png create mode 100644 Base/res/icons/catdog/nrun1.png create mode 100644 Base/res/icons/catdog/nrun2.png create mode 100644 Base/res/icons/catdog/nwrun1.png create mode 100644 Base/res/icons/catdog/nwrun2.png create mode 100644 Base/res/icons/catdog/serun1.png create mode 100644 Base/res/icons/catdog/serun2.png create mode 100644 Base/res/icons/catdog/sleep1.png create mode 100644 Base/res/icons/catdog/sleep2.png create mode 100644 Base/res/icons/catdog/srun1.png create mode 100644 Base/res/icons/catdog/srun2.png create mode 100644 Base/res/icons/catdog/still.png create mode 100644 Base/res/icons/catdog/swrun1.png create mode 100644 Base/res/icons/catdog/swrun2.png create mode 100644 Base/res/icons/catdog/wrun1.png create mode 100644 Base/res/icons/catdog/wrun2.png create mode 100644 Demos/CatDog/CMakeLists.txt create mode 100644 Demos/CatDog/main.cpp diff --git a/Base/res/apps/CatDog.af b/Base/res/apps/CatDog.af new file mode 100644 index 0000000000..af94002db2 --- /dev/null +++ b/Base/res/apps/CatDog.af @@ -0,0 +1,4 @@ +[App] +Name=CatDog +Executable=/bin/CatDog +Category=Demos diff --git a/Base/res/icons/16x16/app-catdog.png b/Base/res/icons/16x16/app-catdog.png new file mode 100644 index 0000000000000000000000000000000000000000..838df17aa64c3b701c5836d4063a4dd4d67c602b GIT binary patch literal 385 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7*pj^6T^N=ylrwlLMX{b> zU|`@Z@Q5sCV9-+rVaAH3_GJtV4D2PIzOL*~8JYMMIUj3lUtnNhkSuYHC~?lu%}vcK zVQ?-=O)N=GQ7F$W$xv|j^bH7aLa1$_vL^{Lc$6et^}8Dv0V=h1OLVBs?&G&d0xiG#>VC*B3_d!l$5YVBk{*6 zl@`&%PYPNYnfoJ!4o?sMEKzZ0l0nW<)%K(VAl{6B|I>by6{#^_{(oOXLhakzCq5#~ z5dl8G|IdCXudIE?t>kcGR>7`@(>Ais%vREoylvbU{&HOI(A$>yHcN)B=I@~oN&i*Y z*F_6Kg{+p>~g$ez%xU4Z_mUD5)u*;|Mm+AC}=5q*8E_&e%d3+ g?a;I?O=gC6(Z=sd^PZ(KFfcH9y85}Sb4q9e0L`b1$N&HU literal 0 HcmV?d00001 diff --git a/Base/res/icons/32x32/app-catdog.png b/Base/res/icons/32x32/app-catdog.png new file mode 100644 index 0000000000000000000000000000000000000000..3b4df05ea4bf695dfa8d5173724b3ee60a83db42 GIT binary patch literal 623 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4mJh`hT^KKFANL}Y)RhkE)2&RmNGOEZzkx!g~f$_Shi(^Q{;kVQFduuxi9Ji0$@=;dn;vsp* zjR7tju7<1^x7Oy)&H2Oba?swPBO)?0`SX?l!(Xdzblh;==oO%%*>ud|kLaR1oI-`U z_gp8>NfR%&YvJK3-)()S=DYQ7WA4zEr}%{;6RjCqR$YFc5^;3r9NCvwnG{PdEIagi zzUB1Q#?H64aJ{u@5zi4|{godVZL_K{_+jZSk7=ecx9=tE2n2o8HTl%9x~Jk#aKxeL zMc-^1&RJgYYBV%xtlZLMXt2;EzL4SBMJ}gj6*e($Ct~8>eti6JlUak5?iQot-OJ7P zzy5yUO=-B~3h6mIoLTkV*JBeGSe*BJJa?_HIAes`%fGHY@ot*J(>gO}uDil0`S~Zq zivPy3*M20{$TiG6?XCL%RIA3_8!Ps#o|dz1QR|7TeXDBNW-Z3<#DDuy~ahPBcR z7hb(C*~MujBJtOb?a#l1OacoJXuLi9H9p^Mm%^+)ye@6^lXulB2zeJt`5TDaIBylm zygc7e?Zua^3$P2aNcmul|_lrxm71unK bcrPk`;D_NC!?wi?3=9mOu6{1-oD!M`ig;pNzBv5F(l&f+iB;$ zr2_?y+vjhbUe=jZ{J}k-YD33`?6WJ&KR(lB-}}Q|;|DuSP}QrI%VTaiZJluIa@7i! ze8q|&9z{!*-o_)_GN+tfxaCJx2j|_h*J|@OU-V{|+im^c@bldFZ_e0!5bK=9Q*+KC z_7I!si3wN!$Vp6??`Y}syxeK~2SbgRYA3-d0b5qey?meLr{$uvJ?z<1KI1mNqg(HM z%iVIie75&3O(T;PZ#0V6@2c)AUHsi^Q`?GZEeqXl|+1o!&uCMEOTO(yXzm0*R zq)qVpqsGH8@B4rM7a&pa{N}mkzf0uyD%dc5ee;@cf_s|1aISQNe)Tnn%?CE~cyE+o zn7CbfU;FxNaZDe+{E0ca?^VKtuNw`Yu2758O}*WC%3#Sw-7O3*{ogaL_(_`Hl9_(K z!pxlcL500$=#M!+IcA2#=p!)M9r=3m@->~m)=jG&h8n))q9TQ)%XY*PvbsZMl zxaH@=IL15H%>Nl#_6xrXVK|VIb8WTIlBr&IVwJm&i|6OLO*kX6bgGwuY_EZA@0W9L z6)TRj$n&IT=nZP11jq$Ic>i z?k`*0oyy5euI_oEDc3c>wtb(OzU+PWo3;MQv8V3Z{b%@F$F?|herq2C0|SGntDnm{ Hr-UW|4o)bT literal 0 HcmV?d00001 diff --git a/Base/res/icons/catdog/erun1.png b/Base/res/icons/catdog/erun1.png new file mode 100644 index 0000000000000000000000000000000000000000..f70027a7fca43eea73cae52f32709f4fd174e6dc GIT binary patch literal 744 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4mJh`hT^KKFANL}Y)RhkE(~87PBF|oU-7`4 zfq{Xuz$3Dlfq`2Xgc%uT&5>YWU|=ut^mS!_%E%A_Z^P^} zqylCB-COAVsBvWgj|Zod_QH3|vybN}s-_ecot&nrutRLgG@rYhEL5EZd!v_K_*ztw z&AX`8`G|?4fXPJIz~$d}zyIBLUtWI00VZx6`xhT3IaTI; zs&f}_{S(Z%<^ILOySdB^pQ2v}2{Ou?bt&wd@`7FAW$nxS#>fs zMK4_4uOJnj+_z)b#yPi+-ue2@!uy1|bP`e#`9_;@TM*j-8kHPeAJa~I#g7#myQQShkl^Ix-1 zy27nl%~}i@b=k68y(G7K&73H_KF2lOMKEu(-I|?W>QeYqx|YwIn|o7?|C{n5Bd>t1 zI{W*Iq$jKH$e6j#G{q%*Qz~Xx5di_3VXQ%k)Itg7Rm@v_y2JDD_P!=GHhcKVE!8kI?xz-j$o; z6!!h+P7!{{>K60khi8nPi%&!)kLBigGts(-stp~}42!Ncd_HuB?}}Ec|EClszUWS# zUk)=GUR?S+nMEM<^rA4$&xWB}bzb=vuX@^ZCrqj0x7xcZxfv%LH_AE&&E(Ih{eLVr zaI4O(>E;>n_YQ<9F*LlmWZUO|PHo$RWImN80l7YJItv3&o|Rd9y=xE4arN{+lIvC7 x=UuSB^z^75kFNW|TQkJ(*Z3di{$u`w``9n@RH2FX;tUK744$rjF6*2UngE&-J=_2Q literal 0 HcmV?d00001 diff --git a/Base/res/icons/catdog/erun2.png b/Base/res/icons/catdog/erun2.png new file mode 100644 index 0000000000000000000000000000000000000000..f8b24e45db9373aa7ce744b03e098f2c9e0752ba GIT binary patch literal 761 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4mJh`hT^KKFANL}Y)RhkE(~87PBF|oU-7`4 zfq{Xuz$3Dlfq`2Xgc%uT&5>YWU|=ut^mS!_%E%zzF;+P0nI`Ujo)x+JQz z`JML8WINcb*5cL?#QpN%q7B)Os*e?|FW zGqa_StZ}LP&iLXRdmdX=Cu6}Dk%;W*Go6u%3>`Dtm+B_xow~ow>%UUpgAC0JPLlii z<|Vm2V`SJ8Aog#o0Y4{KAPYM~?_Wj+lQoMzyk~XzqAL8-Crope=h?jLhDx843IqZ} zL4vQPzo!V~MEy&BY*KK4p~w>B$Te%$aS8|tm}#=E+PUu6$5XFnxr;x4y)~`h*QwF` zMZtf=dvD$I$Q`e*n@Nz8sv^=s|$saI#&%50BIc=tx7==|5OzmretR|(~tJzA6a zbb_I|VN68FUGGP?UTi-P-luHpdRrFDRrl)tW434N;WO7|Exz+axIHyt z&f3qn_IngaHuP5~g(Yl%{X&LsLyfk0WtF^bp4py|CF}pp(_mKm%CO<{D^-RC|3B{4 zu;pvwe)IeM<^aJ@5BjDRNzZyA@4}hz|LbOlx#ho^=XYc*l*w?JJ6Bg;AS*y1{44Kj z3C^bNN!K=XRs4I>XfCnqucN|_BS-ADTcctLww$PNTLGwJDi8J2+|N8&Yr#JGx{6@jYlpka< QFfcH9y85}Sb4q9e01SFi&Hw-a literal 0 HcmV?d00001 diff --git a/Base/res/icons/catdog/nerun1.png b/Base/res/icons/catdog/nerun1.png new file mode 100644 index 0000000000000000000000000000000000000000..5b63c4e848b1b86bda17ab68fb94da8a292660a8 GIT binary patch literal 731 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4mJh`hT^KKFANL}Y)RhkE(~87PBF|oU-7`4 zfq{Xuz$3Dlfq`2Xgc%uT&5>YWU|=ut^mS!_%E%3f`#6m+wk7YNz$S~*f)d>y>>PQM?)oTsb)>9bFu^oM zN5#WPM%7J9r*WF~t|`{+#rp4`>gDQ{A3U1wwd4D}^Pg+x%YWbZq2JfD!rolV-&4ru zU5(n>Tl?78raAwq`}j@cK*;2V_+Bffb(X9jH?a>b-cEHy@Uf)lgP ziA106V4Y_iw%u>_O^y`;;f$(NjZa90o|EmpcYsG{!>-c%|F55y{}~b>td*jg9dc9W zO^e=!U8NKIj`M$3iDgz=wEHIeAEoEPPJWL02|-%nKMHo}-}79n&r+x7-V|A28LVT*^x@=Fwq47*yQV*k+pXK=UZk*Q?mxF&)~GjDCzGuO z(ykxKUt?H$^Uv+9W8qJW7}s(6e~R89WHXJq=*uUaj;yRHkF>=u-N;g7;GbP^I!a5+ z=FOh%S~W}cJ}7-VVE(mIhkajd&GC2ljO)%-#Z8N5I&KxMS9Q_0?*F8ZH(765Z?}}| zIntcU?i0dVRSFNk|ahALr$iTqB;OXk;vd$@?2>@ydJpTXy literal 0 HcmV?d00001 diff --git a/Base/res/icons/catdog/nerun2.png b/Base/res/icons/catdog/nerun2.png new file mode 100644 index 0000000000000000000000000000000000000000..6a5ef1743252e80ba8af1b0d27d186a6a6bf7179 GIT binary patch literal 762 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4mJh`hT^KKFANL}Y)RhkE(~87PBF|oU-7`4 zfq{Xuz$3Dlfq`2Xgc%uT&5>YWU|=ut^mS!_%E%A_d#CUB zmQIv7ZeM;@sa!$CiR-!m%hZ6^YE{|p*L5Q2{9)e3)igQa#VmV;U@H%g*}8nw)@a?$ zTB71KL8^m;^`VpFtr+&tc6;y4tx{WWSD><|eERwCwRKM`A6A}~k4-vOd}up&C4*hf zKgFESon;c`AJY=`J~b^A^m$*01FW_hh+kN^{(iZ+1RuA;+;+ZbwPb;{i#BklY`}*g6RhIIZ zE7yM0jdod4Q*cM=ZyIO*gNenLHtszzN9-N1&CbGmyOoTKi*G;Nw60^L?(F8jZU+B^ z%@-L~tiG%Ie91=L*s7h0BG+*sG)VJD#9Q?S^{);5 z3m%B4s|RH{21v}Cx%1)W>Fd8An#?gFmN{n5To*4*od<>=+MNuZeNwn1_3si>eFz`R z!-Fof+3M~y*X@sd^xntqRm|I{gU!4BXBBv|{&1fvTjV$E^F2|9Z0X&}wYEI$hf3$| z*mJo4cwK6C?5r-P@NL&3BjP4*TP1a7%ZCq#|CK4~H$ToOGMwUWb$|cH4SSRpP3dU< z>-J`i`AYUf1q{i#$>AUo|uNOW83YOM=ZbBrg?dCK=q+Mmh4#Aw!*ee>T~tiAn@k!{^( WSL=ZPUl|w}7(8A5T-G@yGywoI3|Zs= literal 0 HcmV?d00001 diff --git a/Base/res/icons/catdog/nrun1.png b/Base/res/icons/catdog/nrun1.png new file mode 100644 index 0000000000000000000000000000000000000000..f0fb254172a3de8fb4fd61c8f8ee1b0f8d334406 GIT binary patch literal 636 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4mJh`hT^KKFANL}Y)RhkE(}W;${9SBqF7Hb zFfecyctjR6FmMZlFeAgPIT8#E4D2PIzOL*~8JUC?)QxZXdND9CaeBHqhD02GJ8ggV zZ3mI#_C-&ZiphE@s=9G5w3sn1#b;~Tmsgg-TraPkO!#m`GvS2&1t*)E&C^w8duJ|) zzM{j*K3jlaO^}PlYoTi9TuQj#`wz41+^;dhwPk4|hz{c3$R_^x{U$uJk*>%BnUpNiSus3Ew(3$gXO!40BlFN=L$Q-D6cG;eF zS7vLCf78Zo3v=Qpm%h8@`>ZgpciYDD165mHm(G}O)wL^U<+DxQF*^+Uo71K)nt1EB z$v3_i-+piMs`NW8>h zszZ>LuZOuVpLG7e9rtdo-?X*bDSf}yZa2>7DiVC+w;O>cZpqbtfBNI~{T5H0#BCH)ZN)X*w?z?(#A`fB8<(4~E?NR)yM< r`$gIJ+VR~F{>d)%ZvWx^?f3OUUhG%%oyoz#z`)??>gTe~DWM4f)IAm0 literal 0 HcmV?d00001 diff --git a/Base/res/icons/catdog/nrun2.png b/Base/res/icons/catdog/nrun2.png new file mode 100644 index 0000000000000000000000000000000000000000..a3e0cd884ec3caccac8bd4355c5e1f3e30eb3630 GIT binary patch literal 713 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4mJh`hT^KKFANL}Y)RhkE(}W;${9SBqF7Hb zFfecyctjR6FmMZlFeAgPIT8#E4D2PIzOL*~8JUC?8TwD3OkiMO3iEVv42d}WcKZHo z;Y5k!_T|f(pJi+m(c)d`q9W2H`FO3Y@h#VO9-)PKevJ+XJvCT9@rPtAFX2d+B{&Q>kefcM?YZOG7zlX&yst|phxz2ItYR4Oz?-#f{ zQdXO7J9&j==^1UOgA5E;CtGzbQdr4(X5N91HW#jJ zs`#VTz3-{EYo~o@7r8T$ zp%+S+4@~!$zq6WE&FLV+)6LtSwgnhCEWcd1R&k=w|LvvkuZX+)|M#~|)R1`a;PLaq zpZD)(XFPhbp&>tU+Tz1ZQ{R>z+Iam?g{%Hl;rxb_X|EmzcOPlE5D|7W&fMtaiyeYzB%YWU|=ut^mS!_%E%Nth7X%~Y?m-G?`A)4 zVYTt&TW{%Ai_W7GMw>ySLM^g7UUhd8b(zI7!;&Z}GM_MS=@!sMr z&g7uRc0tyI^V#=EiR5!I6m+Vs`Mj2sSt)}fc#G^Fo0U#Jr`x||FN}&-SMf%VU4s4#pfOf^{#wm z<~l)R-b40B`y^&?MeRJ}bcrEoPvl93m_-LQ(pX$o4mL12<++Clyxbl4w2Z$`-Fo(Q z|LY3Z%vS}Un<2u$_UM%Qi=f}H6oO3{lv6so*T27i=k(t=10AW=OJ(NVuV0{lCi&~t z==(Jr{~r9X`^GxkYOdPEI5x#6{n7`fyxj6V?!oVe{*97S`rmJPFgYYtKiTab#M6?b g*7)uJ@{i(Se?6Zjs64V`U|?YIboFyt=akR{0Ik7I%>V!Z literal 0 HcmV?d00001 diff --git a/Base/res/icons/catdog/nwrun2.png b/Base/res/icons/catdog/nwrun2.png new file mode 100644 index 0000000000000000000000000000000000000000..1242326b1fb782859df93d90d10ec369526a56bd GIT binary patch literal 807 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4mJh`hT^KKFANL}Y)RhkE(~87PBF|oU-7`4 zfq{Xuz$3Dlfq`2Xgc%uT&5>YWU|=ut^mS!_%E%!Z{y=e;*ODpsi1JFIJT@N0Bf_pf2zn}sb)cFuI} zx~}r&np6{;OO&G^(;*!vja$xtml?m_B~?C|Pv_K`HScTR*WN#)uF(JRMdh}I9S^E+ zOEWYaz8wAg)@0tRb{~uGZdv{Ci%lmJOV_2mF8?LQk(ti<3l4fbQ``GKmQm1R?nx(q z5r&3(y_I57)8~Ku{ap1=fU}_T@)xcNWq&VzJbKT;`2vUXhG}1xxExUY`J;eo{WU2L z*GKzqE)Zb!vg^91`$=%eqi|7;_T}4mtTeA^VevD&U~@8W``Lb#DIPa;S6q|oaP`eR zyIw_RbyLI@m#x<(DD}Jgu5(M!?JQf`;kWuFH|N#dKz|W|t|J$vGZ+|@XFBf=Vqwtv zV!dyIgmOVyQO|~rOlgK&v|S}m%6y-Dpw#zydQ-TN5aX%l?$1W-nc-a_uQ~MW7TkRG z@3dfdrP{*~uRS`KXX?y2Y9YyRf$jT_eXkY8Ob_a`rLFFcxH9K=LeVM4IKg!F;}=Y2 z&m>)Hb4lq`*HV4E$7_e-Q?Hte|7>&raeH!ZYIxQWpdlnab;hb=CM#n+Z@d-k&tfo+ zT;vzr@#e>ur`k>3{F7uC+1`3EFZ$E#cgN36Te11Z6StCl`^?8MH(^)adSBM_d4^un7WboX z`Tq2C_*KZD^yA37=sDqk8SdY{_u%ZAw0{Xn*5*v#=CrH}yD(MvNvl!0^QRNhp^OXG zYWU|=ut^mS!_%E%6$k}!D@~-J}P75b2-g)b?n9Vm44wgM)T(+7Vx-)`V9M{~t zUl%#icT~Sk0*a!LajDcFa;E7uEmAr~6;9wRFx(lDRwC z_)NMuBg4AqNm{#wv^jkh4&A=hXOYZk&{kZhE2LYdr? zS4z(LWmU4jedZP3iYTGB%*PKlC@*yiI=-ba?tVk!tqU($O{x^X@;+^JJXCt>!%5RR z(f8+HOMk3T*c9HPpQh3l)bMoO{c!b5(>BHLVGI6X&FZ0)`*GJixz`7UPX+Nl>zpn2 zKK;PdB);CT_T29(r`EY0{iGDexMkZp(Zqyx!C_KH66fdbfAAnM_`vFi#+UX4f3IFR zb>dq7$;t7CQ)73=DA#S9`!?&z-2l%=JNEWhJ=N?8?RYX>ql+h`ZSCIJE#JxlPo-OQ z&V8%p_0#7>%(~!dH3IC6o3@0xE-tM!OHg@tZ=S2>{D}HV(%cZ25J-#Mpw8G=O9V!St&EaO?G_2G<1o!yHS^#%Wq-YWU|=ut^mS!_%E%Qo<^Fx%Z$*V$E6P>UyhJLN z2Qo42c~cu*`u>_**xiDV6NhtNduRy-vWUDt{qf04zT;*>iW~hRUViTv|C99nNy+8s z$%e0Pu(3Lv-R5WAEA-aHYa>SpXF%SnZ4l5)})BTo(rQ zuJs9a^xM34ab=n7Ui~FXKOR5hW?;D7x-9ELmadj-vs=cIa(&LA+J!-_sbxRAn+}+U zGBa4LQx4~t>;G%UxBG0alTHcprDV*Em3d=(q~aGdgT)4RmgA*0EG-@hb}yM3(k>f* zdv!jACu>`2&0e{W&%~~Lb1(B9y^uHZa=$%JtQ7EFy|o}c)@k)thZnXSd%yn-o3_xU ziRr;3DW3fd45yCPym0QzO;DWUdVg+dXWaY0w^(-g1?{v-Rk?KJXo5wTilWLs|MXSkMS=50T-#ng-S=w3>4~x3!IwAk^67kU%xym@)M?;&s_f&d zt@($QqJ=&zJv_ZQ)Vb`rdYQl9{}T6?H!4)4+mEcD`zAxbJW7UVeJn#36lA3IOkYdxtH@2Ot?xVDLRiAka4jzbK43(sgPzFRt}OIpM@f0vfxf9aFD zo2K1dnikC;b$ds@ibunH(WG;&Y%5fJ8=n7)kA7soX$e)L!sxab#d%VDNPH Kb6Mw<&;$T6i(>%* literal 0 HcmV?d00001 diff --git a/Base/res/icons/catdog/sleep1.png b/Base/res/icons/catdog/sleep1.png new file mode 100644 index 0000000000000000000000000000000000000000..d1d8214fb9889bca6bcb479f7af90b4413b7d218 GIT binary patch literal 602 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4mJh`hT^KKFANL}Y)RhkE(~87PBF|oU-7`4 zfq{Xuz$3Dlfq`2Xgc%uT&5>YWU|=ut^mS!_%E%-E?bcKO|@wumqV@Sl|x1syJ z4?Bqb)4Sr@EwWsxG+=|s(x&dKzH>_6#)z~3)q@h^!Ls8@vBnZC&n;mmbKQt{n5o`9Jhot)LNkJt-)-UvWZ3es{EhAcRm0Xq5g&6) z8$0Ke-&d}cJ~ed6W));m;C5an%&_QTgRbGOGh#c^!$P7@sh9k{`{IB|!xVpq1y|Yh zL$Cgycsuy5kJ@V)hQ_dup1*eFa7YF8-D&!FAu2j3S5u^*Z(4(`rN8(&h6$=u&Oa{T z-*J291XYhsPdwxoe7BQlNcfO&w`B77r?LzU`y<|1h#OYLoRaH*I=MnyG}k^udgGb7 zd3H%xI_@=fPh&hHzGsGn{L^Fk^7Bd@C73F7_bv#kdzM#KTDkDn<>Jr3q$bUhvOKxu zw!@BHf&%(0&3-P~f6{BkygR$t7!;=8S@U1!Ce!QWziEc9@=;=6BoZ z*OvdNtZnE`?Z322Oy_Ikap{ZO{PoSA$_MT@^wr$Q5K_o!`Ge2#I|Bm)gQu&X%Q~lo FCIAhQ_*(z~ literal 0 HcmV?d00001 diff --git a/Base/res/icons/catdog/sleep2.png b/Base/res/icons/catdog/sleep2.png new file mode 100644 index 0000000000000000000000000000000000000000..88c9c0acef1ef05a91b3060b256a95adb8019587 GIT binary patch literal 605 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4mJh`hT^KKFANL}Y)RhkE(}W;${9SBqF7Hb zFfecyctjR6FmMZlFeAgPIT8#E4D2PIzOL*~8JPqnG`81S_%SdrzVdW&42d}WHgvzY zlcUW4JBz1Hny`#Rnny^JCu-BSV^MQ+Ggtgy;E=)9vS{U6#pyW{PTZNbXxls?7EVRZ zzYeU;Y@M53UrK$7^RNB>?(37x0QTdxKkNE`*S!1vx8{9=9RDHSV-lC=v`m<1m?e-{ z&lVHXv@9Z=qd-n=<2r#K;>p(!rm7aia4$N%Tg~m$?bh^A_A`PXsvNf}xruT9%u*wwp2{$`Uj5+stMz6;$&#G%#+wox>$Wz&@;-RdavI~}+1(`%IT}A5y(ix37+$Tm zN@R=ITD!AP-1k4+dz_g;!YXF^y+^r~>}szG4+!-{^Xp#p1)6KTRj)6lR?SX%*+eQ}!8DA>9X)ddYJDfL3=z*KnK28RXw(S>QWq&=L6f@@+k3?p}UAZ+$ zHU`&^?74dU@1pVrrqiq}uN}$oY~hc*y6wD%*<0z$*WB0`80LpCaXOWLx%ZlZfq}u( L)z4*}Q$iB}<-i0k literal 0 HcmV?d00001 diff --git a/Base/res/icons/catdog/srun1.png b/Base/res/icons/catdog/srun1.png new file mode 100644 index 0000000000000000000000000000000000000000..300bb4891d85f7622db9c54aa7d52cd4548dc42d GIT binary patch literal 626 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4mJh`hT^KKFANL}Y)RhkE(}W;${9SBqF7Hb zFfecyctjR6FmMZlFeAgPIT8#E4D2PIzOL*~8JUC?WoDn6s?Wf{_}|mTF(l&f+pzQA zOpYS|(oP0@cb0V2IkLNUEzwJBS9tMc?H-W`apwO`9v`k~8dy~tukdDd{PH-hebMV% z7d?(_==9K^g!`cp}eeuQ> zdxQfj{vS$+@4r-it!(CXl{LribDfuH=n#7DQ2v$KDeh29F^l+e^%FKWhV!}C$v$?9 z%Lv#c zTIR4v(f8-YpIb}w8|N^mBu8=RoxARl;>*qWQtI16C9ba9o%yn==Pq7Jv1D*z&buo) z@uk>@djh9cvQ*@A$ovhQ6_s~Wm!Y9Zt5IvCp#7+W$RamsW)EjS-9lk z?Z3+^y=@kxhP;!0uKUs9quMzopr09KX_ivR!s literal 0 HcmV?d00001 diff --git a/Base/res/icons/catdog/srun2.png b/Base/res/icons/catdog/srun2.png new file mode 100644 index 0000000000000000000000000000000000000000..49da2400b2b1a89769b074862d74c49e5a19ff4f GIT binary patch literal 709 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 S9nZkPz~JfX=d#Wzp$P!C!(3

YWU|=ut^mS!_%E%qN`f`Y<3{wrDG3=EqVJ=(IBpW%n2@aatsj0bY+gp`W^zJ5JD zwIR&=sHNr$OTXyfJ2w8E(=6axTX^Zn4HJRsIrn+((+zuknb*FOW^k~Zp2`@+b|{#s zb6&FBHj9o8*IvG!_q|51+b_Po$l5M`Ms2&UYT{OH8JCugbJw0rb-q6>pOFc!pegxTHC^$omU^6X!Vp~)l#Jt*Qfl-DH6{& zEjqMm?b1#6YyVd|wk?TyfAQi+?jAX@pX_x3CdaNb&E2lOA*Z|epuRT41=$zeMGF?Y zIB{6p&OOxsk*8tJ3JKYI76yrDDF=53`#rk6fg_mF(|`G#Je|Kf++jY)*5}6_QB`YWU|=ut^mS!_%E%JYJW|9^RfBtM@-x|}a`|Iul?iuPFsYQ(LQ3?E^ zDtsT3{DfC&e10R7saSApTCnj`8`k~%zq(Yk%CY{L^#8D^fZU9x^=tDL=0*z2eMmX@ z^5HsmlP6qGuNmvln>@dM&0I+`*z&~7hj}lS-S0Fpn%d66trEEKVPn4DUCy(Mv{|>s zwOgI*IldrLD7F6gtrgl6rX5RuH2vPDwI}m~cx7xP|8lH}oF*Evdv8^_7L#1&m7=K< zRgC)aHqEb^qPHFWr!E`J5q2uu!)jT2uE|oSiN~6Qwb$#h1%>E_GdJ#j!(-r7X2xVw zamn!Fzq)t(=CXg2ll^Yn#c;rgO@g=av?I6IHm8cM%A8At_ZK{yd~aH?#?zxmPiC3h zXvxTa4?L9}a5|JHntjdI&ni<^T*^GHxkPwbdy73szOLE~uPtp??&ofv@}~B8)zYR1 zT2odewpcBRPdTm07E=|#y;l2c+H{Fs+x7O``qz= + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +class MainFrame final : public GUI::Widget { + C_OBJECT(MainFrame); + +public: + virtual void timer_event(Core::TimerEvent&) override + { + if (m_temp_pos.x() > 48) { + m_left = false; + m_right = true; + m_moveX = 16; + + m_curr_bmp = m_erun1; + if (m_curr_frame == 2) + m_curr_bmp = m_erun2; + } else if (m_temp_pos.x() < -16) { + m_left = true; + m_right = false; + m_moveX = -16; + + m_curr_bmp = m_wrun1; + if (m_curr_frame == 2) + m_curr_bmp = m_wrun2; + } else { + m_left = false; + m_right = false; + m_moveX = 0; + } + + if (m_temp_pos.y() > 48) { + m_up = false; + m_down = true; + m_moveY = 10; + + m_curr_bmp = m_srun1; + if (m_curr_frame == 2) + m_curr_bmp = m_srun2; + } else if (m_temp_pos.y() < -16) { + m_up = true; + m_down = false; + m_moveY = -10; + + m_curr_bmp = m_nrun1; + if (m_curr_frame == 2) + m_curr_bmp = m_nrun2; + } else { + m_up = false; + m_down = false; + m_moveY = 0; + } + + if (m_up && m_left) { + m_curr_bmp = m_nwrun1; + if (m_curr_frame == 2) + m_curr_bmp = m_nwrun2; + } else if (m_up && m_right) { + m_curr_bmp = m_nerun1; + if (m_curr_frame == 2) + m_curr_bmp = m_nerun2; + } else if (m_down && m_left) { + m_curr_bmp = m_swrun1; + if (m_curr_frame == 2) + m_curr_bmp = m_swrun2; + } else if (m_down && m_right) { + m_curr_bmp = m_serun1; + if (m_curr_frame == 2) + m_curr_bmp = m_serun2; + } + + window()->move_to(window()->position().x() + m_moveX, window()->position().y() + m_moveY); + m_temp_pos.set_x(m_temp_pos.x() + (-m_moveX)); + m_temp_pos.set_y(m_temp_pos.y() + (-m_moveY)); + + if (m_curr_frame == 1) { + m_curr_frame = 2; + } else { + m_curr_frame = 1; + } + + if (!m_up && !m_down && !m_left && !m_right) { + m_curr_bmp = m_still; + if (m_timer.elapsed() > 5000) { + m_curr_bmp = m_sleep1; + if (m_curr_frame == 2) + m_curr_bmp = m_sleep2; + m_sleeping = true; + } + } + + update(); + } + + void paint_event(GUI::PaintEvent& event) override + { + GUI::Painter painter(*this); + painter.clear_rect(event.rect(), Gfx::Color()); + painter.blit(Gfx::IntPoint(0, 0), *m_curr_bmp, m_curr_bmp->rect()); + } + + void mousemove_event(GUI::MouseEvent& event) override + { + m_temp_pos = event.position(); + m_timer.start(); + if (m_sleeping) { + m_curr_bmp = m_alert; + update(); + } + m_sleeping = false; + } + + void track_cursor_globally() + { + ASSERT(window()); + auto window_id = window()->window_id(); + ASSERT(window_id >= 0); + + set_global_cursor_tracking(true); + GUI::WindowServerConnection::the().send_sync(window_id, true); + } + + void start_the_timer() { m_timer.start(); } + +private: + Gfx::IntPoint m_temp_pos; + Core::ElapsedTimer m_timer; + int m_curr_frame = 1; + int m_moveX, m_moveY = 0; + bool m_up, m_down, m_left, m_right, m_sleeping = false; + + NonnullRefPtr m_alert = *Gfx::Bitmap::load_from_file("/res/icons/catdog/alert.png"); + NonnullRefPtr m_erun1 = *Gfx::Bitmap::load_from_file("/res/icons/catdog/erun1.png"); + NonnullRefPtr m_erun2 = *Gfx::Bitmap::load_from_file("/res/icons/catdog/erun2.png"); + NonnullRefPtr m_nerun1 = *Gfx::Bitmap::load_from_file("/res/icons/catdog/nerun1.png"); + NonnullRefPtr m_nerun2 = *Gfx::Bitmap::load_from_file("/res/icons/catdog/nerun2.png"); + NonnullRefPtr m_nrun1 = *Gfx::Bitmap::load_from_file("/res/icons/catdog/nrun1.png"); + NonnullRefPtr m_nrun2 = *Gfx::Bitmap::load_from_file("/res/icons/catdog/nrun2.png"); + NonnullRefPtr m_nwrun1 = *Gfx::Bitmap::load_from_file("/res/icons/catdog/nwrun1.png"); + NonnullRefPtr m_nwrun2 = *Gfx::Bitmap::load_from_file("/res/icons/catdog/nwrun2.png"); + NonnullRefPtr m_serun1 = *Gfx::Bitmap::load_from_file("/res/icons/catdog/serun1.png"); + NonnullRefPtr m_serun2 = *Gfx::Bitmap::load_from_file("/res/icons/catdog/serun2.png"); + NonnullRefPtr m_sleep1 = *Gfx::Bitmap::load_from_file("/res/icons/catdog/sleep1.png"); + NonnullRefPtr m_sleep2 = *Gfx::Bitmap::load_from_file("/res/icons/catdog/sleep2.png"); + NonnullRefPtr m_srun1 = *Gfx::Bitmap::load_from_file("/res/icons/catdog/srun1.png"); + NonnullRefPtr m_srun2 = *Gfx::Bitmap::load_from_file("/res/icons/catdog/srun2.png"); + NonnullRefPtr m_still = *Gfx::Bitmap::load_from_file("/res/icons/catdog/still.png"); + NonnullRefPtr m_swrun1 = *Gfx::Bitmap::load_from_file("/res/icons/catdog/swrun1.png"); + NonnullRefPtr m_swrun2 = *Gfx::Bitmap::load_from_file("/res/icons/catdog/swrun2.png"); + NonnullRefPtr m_wrun1 = *Gfx::Bitmap::load_from_file("/res/icons/catdog/wrun1.png"); + NonnullRefPtr m_wrun2 = *Gfx::Bitmap::load_from_file("/res/icons/catdog/wrun2.png"); + + NonnullRefPtr m_curr_bmp = m_alert; + MainFrame() + : m_temp_pos { 0, 0 } + { + } +}; + +int main(int argc, char** argv) +{ + auto app = GUI::Application::construct(argc, argv); + auto app_icon = GUI::Icon::default_icon("app-catdog"); + + if (pledge("stdio rpath shared_buffer", nullptr) < 0) { + perror("pledge"); + return 1; + } + + if (unveil("/res", "r") < 0) { + perror("unveil"); + return 1; + } + + auto window = GUI::Window::construct(); + window->set_title("CatDog Demo"); + window->resize(32, 32); + window->set_frameless(true); + window->set_resizable(false); + window->set_has_alpha_channel(true); + window->set_icon(app_icon.bitmap_for_size(16)); + + auto& root_widget = window->set_main_widget(); + root_widget.set_layout(); + root_widget.layout()->set_spacing(0); + + auto menubar = GUI::MenuBar::construct(); + auto& app_menu = menubar->add_menu("CatDog Demo"); + app_menu.add_action(GUI::CommonActions::make_quit_action([&](auto&) { app->quit(); })); + auto& help_menu = menubar->add_menu("Help"); + help_menu.add_action(GUI::Action::create("About", [&](auto&) { + GUI::AboutDialog::show("CatDog Demo", app_icon.bitmap_for_size(32), window); + })); + app->set_menubar(move(menubar)); + + window->show(); + root_widget.track_cursor_globally(); + root_widget.start_timer(250, Core::TimerShouldFireWhenNotVisible::Yes); + root_widget.start_the_timer(); // timer for "mouse sleep detection" + + return app->exec(); +}