From 1ce7090bd697a0f124f98bde17f5e1911ef85ca4 Mon Sep 17 00:00:00 2001 From: Timerix Date: Fri, 9 Jan 2026 09:45:00 +0500 Subject: [PATCH] replaced confusing u64 joinded colors with struct TimStyle --- 256colors.jpg | Bin 0 -> 99573 bytes example/ask.c | 20 ++++---- example/hello.c | 21 +++++---- example/snek.c | 12 ++--- include/tim.h | 113 ++++++++++++++++++++++++++++---------------- project.config | 82 +++++++++++++++++++++++++------- readme.md | 55 ++++++++++++---------- src/edit.c | 8 ++-- src/widgets.c | 30 ++++++------ test/color.c | 1 + test/string.c | 1 + test/test.c | 122 ++++++++++++++++++++++++++---------------------- test/width.c | 1 + 13 files changed, 285 insertions(+), 181 deletions(-) create mode 100755 256colors.jpg diff --git a/256colors.jpg b/256colors.jpg new file mode 100755 index 0000000000000000000000000000000000000000..2930534dcb1cbd76d2d3b02f867ee0bfd783651e GIT binary patch literal 99573 zcmeFZcT^Nl_cu6zfMf;9VThtc$(d1+Bmx4GlSmwL8ZwN6fFLje0!kE-AUWrpb54>o zB5{ZV3^Ut)pXdF(XZN4oXaCr9_ME4fKHXhi_tw3)s&7@@`ZU;C>5Dy3hx(&JoA_3t7SFFGxj{^ekK_K9SlMc}Quj{uslpwr+ z@_{EnGIMruvas}ElKHc%rj?*FQpnedaRWr9OQL_|tLN=HUUC(OpgCj1{KY%A#QZIBP>9UcxF2=^`y-d!AQCkPBkiw{`+ zui^ilaB%T%;S&(vCL$&Q3RK+zG{(cjy@iL5e+w`(P9X3cbn7lYC7aL_0xB&FLUy-% z!tY`;Z*x2?Yopd4JK_|1;~q>zOhZdY&%kw``@usVQ894|NhxWCXNpS7Dyq+QUg_%T z8yFf{T3OrJ+Cl9-JYinmKE8e-??c1FKSV^v#eYsnO#1RQ`Fqxn?3~=ZpZVn#l~vU> zwRQFF9i3g>J-vPX;}erp(=)Tb=2q9%H#WDnfA9Q39-o|^onN3Xum0+V1H${4TK}Wj z|3$C6fL^$_ZsFY`{HqrZt~YSt-Mxj+CPYB_M2pbEjf!3P-R*l%V>8Rzh&V*FkEq|c zj}g;wimq}Y|El(nX8+F=3;utl+5af^zxA2}k>cS1jfZy^1OXkltz1vIJ2lVPZoTV2 zfR~uoj#N1}f0V0gDx_TOV*ETSp2(VtlTJu?QONrz_Q0xKD?zQnu0=%WT3#(sUQ>9L zgMRq5uSZkEA@?ZpBg`Mp`A}9d@&21Z6}kn<-+>O>We-P^X%-Ixs^#-B^YJzF%Nrj{ zQGQ$79eyDl`A@u=yvE4}%h@;|a-uu94=J1zwhA&A#1>*d=Becny{KUdp|T0yZk0E@`D2CY>mB+cB(b&u5&*e?;c2evS&~Cyo%da;c1;tA>c+tLm(X2!EM-%esJbRMQ1T8&n3ghsjQcb(4 zm!@H~x-7+l#5HbjU_lggLq1>Xeoof!`S=D^dQ}%*Mn-PR1V@4%e8Y_dO<_Urb9GMw zmaBTUV2c|)>0fqh##1p5r@7kve+1y-*l|b_mK;sIGBu^FE8<7CCW9VOe_ftBD!D6DeSxME5(2A*|!c}JS|Zs3+WkE z*9y@;W>(a2KIT;|uy?PE-QeqtQ;qOH+t=quo0b?FiKXh>vwAI!^*J#H`)qIN{D$!O zMABWkdKA$ldBsH5M(F46*&H&9p3Y8`p%T_*REf%`#Dxgi_}OHs;=4zTJX`L_LdCzz zCp)(rj*uAlks1Zu4PnG3M&}7#q~!iA5zy7$=l*FBfUi$77UIym8Po&Ag5-~}pk)F? znJE@DQn`H5Rzxk;6k9Us2IcCV-2eajCW>btJPg7nifqTN@7T)ys%BCVtS1k5{=Fn5m% z;@$laD?rhS)luph*E&ha=?E57Vy+q1EpPYxHF6{=B?-w)6I|?5#~KAg0FSicuQTJJ z^{gSSzh)3cezO5a8~UcIK7Afy11LlwzK*lAar!D@-o-^>pv}OZ1e7j5$dWA8vaaxC z?`b-@{o)&kkk0x9N(cW$SrO~={pTu;LtoxkyQQzA9datiENhATJbkzEaSrz!j`vJ$ ziR<|b1E=*P&tKhhnu>>8KAX{`o%^CvSb!;z>RpgQj-Fwv_^yPXA(dvx2UjCQqhNS9 zhwyCw&u&IdKNNS_|qj2gZD`0dymw1lfRFn zc@r~{4;JKy{-MXf+?dJ0TeGQw$L)ABy7q&C>HhgMTJ^1hJdOc6&Yu^jBTar^0-kTE z3gkj&C?i#AA*(D{P;Lo291EKH-q2ioO?!5M&bd?WB3hDkcf>IY3rerDDE#p<#qtAF z;54gk4*bQ;#w>9`+U_Via|$8c)R)|q$aiU1%fXpI%}FEBPZY^M+r}GZ1-o(BDV>7F zygVymZ+4=sPGRpNVGYDyVAjW&WjS;ImzYw54lbL|s|N zo5H7bvjwlq%rqp|!H888^XSz_yLTSGtg9i!yV)uj%J;CaDw#d#=TS2FFn2B7(^30k ziM94+W|@5t;mt~3h>hyS|p&A+*z976=&%Hn&bc1NBxAN?IIbtZ*KRNvBm_otWW=y+xs>jtG zQ--QKV8YM-v>pe7SSAA#SC$r(O6(u|AXzr~LVou4(1X^c&Pv{d>JQY#7j2niMj$6` z5H>}azwUzBqPJu`6g*EI@RNdjyRUV92jMIiRAsZ)FZV$<=?gV$^emkuVKv3cZX~(` zPwV7x6uml?BrCUBvtW?e52>gjM_DbGHqz1kBX9(bE6iIbtCFRF7VH*viHj>FWfgsiHIckV|%YW*GmFs zD#G(Fz5eJvpU~xo^0y2;xe)&p{y|i`|Hqx#zE(;4?niz%ZmHfS;;5uMA3JF>J%;kr z;mh{F2YIAkI*gu{)At+XnVu$wBHknUmLAsYabsk^ATd|^`B0jNn^AMB4q+S)s*Ulr zA$`n}gmNdRBU|)S%1kff5-MZTF66i8B!55WzvrMWILpmj$GFdKQo^$?DJK;5+V&7P z5PH>|;v$-;HIOT|;dnsA-)WV3-NE#8gXtP3S@JYgd8kE!+c4gq<`IH?n6lsa{T(c* zC(o%+N&a^$H>;mVmsx3Pgr)1-r8&;8D0o#P?TT19I z%v^JtFS!hAnaWSa?;Ea%^jsO#2|G5=Dv<^mtyfblU14C*X4W0f?j_SJ5XGY6HWtLv zvje=As3-y*owUm7^Lq=H#V*IJkOccaCZ z?ZY$HcUTY(`quJM29*7@FIpMe%`sa`cnc1vJB)%cJIrQ&p4w~?ULMq5LF=Su`xq9$ zCXT?c^~L)-G>}S**4JL_C$We_7~w70m3{_VVY;Yl(Q9sNitCx$%l9fEsfC_0`KoH` zq{+;u+MnaA8q$1i$=4oHXX#}j>XW^i7BSD3Nvr0~DNu212mAMZmd3JhS&8~Q<$Bjc z%#w1@&&Hj!UVBYCi#Oac6XUO}e#}`nEN#;wG*rH`CPe;xUU}2u5^NjZyKDJ6zg^W_ z-DP4!L!K3?nm^>uIpy^t?>la!u7SJCz>1aI#B!4+3`wGzyfy48ohq*&WY;e6>(x&> z4!C77g=9~&!$em6)K=5<#}Ra70B=Oq<$6vUyf^+OD)fihP7)0g3xdw8vVV$KiX>*~ z2`4OZjEbyqK=P`XZmv&q@+}7Zplihg!zZawGi70Y4*q3Z=7>xB=6hWMvdESZ^asz8 z57N4yN${ErU{woYaiW|BLOetQsyvdzaGX{$7Zxad-rRwfA-{9*{k)@g9T9u%#SzXz zZtknYSj3w!O`{p@fB4aMqMy4}0FB9^gQ2nc2n@FVT<*p3U;96&Ca*;EI7PUHyaGu!4xITMxVgSuE47 z7yIkaQ4f>Nqt|4?ninZEJG!ZQpO50y&+kiqeHBo&01tNJXq>i*Q5k$|T=ClWdSK_Q zcxguAL$Ab680Ve@rQbEn*=3l8X?s&$QQ6s7C3erF9f8BmGOOQifdwQv2`{3@DK%C@ zCQ^~D+tWX4N7ry<(?okW?l6B@C6_r#4dk86j7V6@wJL*2nJvHL{q2PXSy|pBA2*9^ z9&m6YC4YV!%^dKphKu{mna5tvRE2eEAidevc|3rL&8NgUt~#PL{#CHJ(n*i3r`*-V zaK!Ce*LoeNe)MMV@`&6?Pm|v%V1P2j40nGunglYdmvOQMw9$l?X@+6O3H8}r#-Inn z))8i{BRV9x@c_(&oWz0zdv^82Wax|*Ex&HL2ur+-ebC3~+pTHhS<>gK%QbQ+5Z>Bf zF!6MMGgZ}sS6!s=wY!$@zV@tG&^MY3<3W${VpM+>L>W$Yi5uAf;LWa2U3?nP6$m>2oq<0;nW(p~&5 zqg_#X;<#QPr*y*fojrz;gX!e(?8adj!_~Fv6FEt+m?9?C4T;{(0&6`FF$=4G9-~WH z6fjgC#~S_^kEK3`wp4OPH21!;(0jB# zNEWq%_{RO4$9ThExr%MiLMLu*?Qz3rOU^(XjP9iduA8pkUQ3C>Dzi1LfNyDDl^}!f z1!n!Hm!+eOJlX^6&4W^v7273zT(;^bq_9{c|t0 z7Yalc3`||=NZ$N-z*Xvz{-g(dklq9h8gPYGN4xNovVCUsD6KDhvDc&ZiDV-c`I|g2 znc8zfqtZA1nqt}_Zjs~ou!t}1`)8hEWS(VB*yX$7iKutGBbmpDC?UE4L%Rmttu771 z>qFDp35Ry`)q7WebfqjE66HH!=jVgf0~D#Z+&~Q}8@IA-krpw2 zUbh%&^}O$>GWXGx{pw;&33*8Ju8l1HEr?O-tay&vaagJ2n0?ZW#+ z@WVF7@DdIV&{rQ!gDs3+2GOuup~t2aZg(C{H&D$XDGIG1xhH#l(zQcpY+b zEQk1ZfFCeS_#kU|S!B!?9{Wq4u04Bbh+lLE^Q;`LGPPChvr$oM?VM%x_T~x2C*>N^ zYt0Y!MU77-i}->`Khaxpr~4%h1>Og9W%~4d#eg^7p!A83Jk(k=k7*{>#0zluVmdUV zY`;YV)AWN7N#=0phwxR%B%{`~)`TY(B&S599v4V-jUue}Td~acrwd39i9R?BGT%_X zst66b5UrZXy`(Y;cs9i?bXiS9@phn=^D9o+?bR#rz`F(FRaxKSMV}C(nudm$d$Ih9 zkJz;d@PrODWv9R97^_i)e_mUh0u~6Rd9Rl%-={dJJI!pU9$lN(ADy?zEq;G`ELZUC z*|*r>UjMrz)XTt3=FS=8gY~d^jnc?RIJ(Chmws*o*W`dB7{DVwoBy0#uRovLd)1i1 z*|GlUPqxy*ypeHk?`PD((eh2{j*&$zW%!8^_was-H$}#EE;zgj7{m#+Y7?cbCqyrQ zsQl7-fNHaPBae}Kkb6|37o(+?lJfO;(F8hX$F=*eV*l~P1Uf>qlV7pWqQ*(SwS)1Q z7Osl;XKP+`;0MB^0vb4_n2%NhU*)Ox!R$O+pABcaaUCZx*X^^D*Bt~x4aZcgj@%N0 zqAe81jMhlnS5+z&H4}STVUm=R9em;TC5mnE7ao%sYF1Q4KIeEn^jzjgsv3vWC(1Tm z1&WMOoNfXfbf6!-7$M{0;U-2Ia#iu(ZL1OB#t&~Fo^IKm*TjNaT(F?7F;mFwXUJC! zJ{FY!MRO}@6{CEs`iHs7_Z1pRGVq{Rs+B)E;qC#C+OFyMI~Oh_<)vCQYsN9IASpTN zkeL{jlHo^UayLca<=tUZHT+9P1^|5auiZ3o!&Yq{|bWbXB#eJ*Bi*u3jNu}*{{W@zdm*#ScnQZA2$9y4rRx_b~ zJ;rx;f8T6~c`5RLf}RwX~@xd|5bGq%liq zxQ|~H#x_~zjd9gp63{i$%fsk-&#Vz_&9h@SRU}`ZerVse?Pr9pj~SfY9OgJ`;&pLa z7i)PiW<1pQkbmS3qL-wn123^m{drmNb7{9gPBpj6Xa6GQL*~nVwRCq0atKQXf|@Hk zHHI18`skwQ)+lm@`V26Gm{mf1F~wK@S0Z;idxyOtX*qHkm;{Zw#@|gR_+o7l$@qX8u!vg zDY@SsR)UD2wx=^#fN^ThgJ$BDLaAeF;F^EP^2Biouq1iI?Bq@Rva}JG!y>ms^sR(Q z#RD_RHhS5N&BNHu4C>5dSuOhp;;lY%$cl@pL0^p`Ix3w73XbrFj6hPK0_$E)*?Eb|6uJ$YS9nR!vgsdfxLA^L2)B# z$8GHeQPec+?)75B*RbjBJf0_#zkTGlDVL$;brEkS;$F7Bi+hs67yH(0!^&frLPG}m z`(?plfGOFg;c>a|9`orIZ?5n7ClS){m|y4X8O72uRdU4{tQ6bEpv{QE*DEp0A9m7F z!vwB!z(`-kHRHVyt~svDZ0*D#W0|sT^7)&^ARTD{T-v7;IdUT6|jyLSJL9ir5(`@R}nV|6Ihl@+7@x&kssyAh4 z-clM-d8y|q(ycORAF1Xp$ruAE$(8(Bd2L`_ZTLDs@xE!0)(L^sV%uTr)yat1;cC8r zUfcAA7uz@=fAFK~D*xAy3eBiZ7vj6gZ*NO61uS^uFg~w|H(TIJr=Or?F3b6K)ZiVegX9%_1J+Yly{qvxWicFqhDwkJoULH05^2uE`Jol9v z!qWEb#0^{zwL<>TkH(AU%WBT01--XVW@>y<@n+g-`hcpZ1)4Q36;F1)y&_YiW{&?IDi>)S?O zVoafRTyz^&)f8DTR`fn8&&k;(4Kqyf)xB7Diu{$k3^U9?RUI16#oLPXYY# z=t7lf#y)3SH&Ap#1W|l^yx9;#%5R%pUq*-p7L=2b4Ri;^eNAA|waSO2xFM{9ph@D< z(Dg1euGa3Bd`nCVClPQ>mq9 z5om-s&cuS|n?*RHz4dx-;4J{pSAv!^V$ekY%VHNU-C54s41fIHsQ8Ka%PA@G!e1{l zpOYgaUj${4x8#_J&N}UgZtBA5O5xT)#7X0Oz9MgoAl)N zm&Q*5+qW#Sph|f*CqCGa)q{=rd~reyL_=-)L&=3$lhuuw9u~CrXNuUt?pp)n{cI#L zopnOhzLhd%qPv)$%;RA{NEy0-7efW7!GcD|iU2FMoBvC7LNqrEKTvb7F&5PJz6Gs& zuXPy+^@G)}Z9i%JxK~Z{;-^lx=Cc(~rnBwwqJb4Taf#47%aX2YkmN`zy4~ZejP1uX zR!8Jtsk0iL;36CNQ7R#vpQQI!bU%VYJ37zG>BVl>knVY_w|b2XOuq$NtniDQ(Bt1U zKYm@rP8F;na%?Gy7nN$0YmT#%F(*i~_?Q)sik^zpZJ1!`7c+eBbOU#2`K@Q~APyzQ z^$FkFD_o&>eV6XOJ$TiAr{Xy%cy>+(2lxB|IJ(R?uK_{V$NN^!4tEjpR@9fueISpO zp3du~59DA%bOZ;g$wontW%p}cSjoL^om0>Zezi^TRsi1KJg)Km_n19SkZHwb+3JW+ z_ri*W@=s3WTXlmb6#PfYubzZF6Al9MT~5mZx(l-(D_$V0IHAWh)<@)D=G2~-Et@=l z^{7TzNqFHkr9K|v&-0zR;#nU;@|4(Dq`H&|4?nd;T-SlOV0fVC*koHdTh z%F@rlQp$=QB2Pvv>m%*s=lplVkt4wBFv{0^TA5F7CF1LQ+yv zf{%m+g@yTn68s*%&Yl)N{LUU6|M2)1lV{c*mhMnjPpFGC>tCi8Z(LxWa_oQ*|43)) z?(sjI|4(+Xv~aR^x8QfT@aFfh_Vk20+j{(C7j{;FL|VndL&4p}RgPWB!qLN;UGN{7 z1^+GdUn>ayj~ReF*8dOEe=GTqjQn47{nuRokp=#v!vF1E|25ZtWP$&v@PB*P|1Zq- zzb8=E&Q@~V-rNxRf1qc$I5>ZQ|4w-Lcz+WC0DHnGBmnSez;T<1gy{BdVgQ{+Oh!yh zLJA~8B612cQu4po|3J?G>c3RLkMuU-?Y|}dv-A)23?~RD6%U8~ztA&K)&K9IXJ{ew zjG0;6Y)0Nn&0jTZ!idW|vQAh~uuKU?LJbQdT|_cs-h&x{g<0e-7W5%2Q7)QGJMdR$ z{aTaDxr9^8oil-!V>0KAvuWuq&AoXf9TqegvhISuYYInF{{feWx3)0)`1d3o+p~}% zb)(!3gbNm+5_ccUI|f+CPl#=8jRE^GX^7^d@+=dr_f9uI{Awa#iKCSf0yJWY>b)~UAHzu zVFJBiV5y8wtTT6=R%>`2F(RX%jWVR$h>DkLaLl(vwr zI;=z>G!#HaH~#8ovuNaCZ%yiR1)UlNueMs&F0e3FqnD?cI)D`ks0yq{N`0?O#M{iF zu9h;1it}wlJB&7yQlRn$AiGly@alwql<~@PWTPBe`vNpMp?$$b)%7`4=h=MPM+t3r zsn&Dm-DZ^9N}z)}l5fN<>(3`%W8tv4Uz1c#6mI)w;5$k}?UUudgG|>G*-Ow*(H@=E z`Ti3AhxHQ8>^|k1w|$_+{Oe&3^AT%Rl`*!wj6-~pA8XIG8r;r^{a}S)f&jHfq()H@ z^pUCERp?aeT@%AU;z(8IgnlU=4HEG~{;78lHiU58i#|zbd;lVL;J

0Q91r|D9gnfX1n9Cd`5xm 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 literal 0 HcmV?d00001 diff --git a/example/ask.c b/example/ask.c index d84d242..d694605 100644 --- a/example/ask.c +++ b/example/ask.c @@ -3,12 +3,6 @@ #include "tim.h" -// colors -#define CTXT 0xf // text black, white -#define CFR 0x8 // frame black, gray -#define CYES 0xa000f // yes green, black, white -#define CNO 0x9000f // no red, black white - i32 main(i32 argc, char** argv) { if (argc < 2 || strcmp(argv[1], "-h") == 0) { printf("syntax: %s message\n", argv[0]); @@ -18,6 +12,11 @@ i32 main(i32 argc, char** argv) { // get text properties TimText msg = tim_scan_str(argv[1]); + TimStyle style_frame = { .brd = TimColor16_DarkGray }; + TimStyle style_text = { .fg = TimColor16_White }; + TimStyle style_yes = { .brd = TimColor16_Green, .fg = style_text.fg }; + TimStyle style_no = { .brd = TimColor16_Red, .fg = style_yes.fg }; + while (tim_run(0)) { // calculate size of message box i32 w = MAX(msg.width + 4, 28); @@ -25,18 +24,18 @@ i32 main(i32 argc, char** argv) { tim_scope(A, A, w, h) { // draw frame around entire scope - tim_frame(0, 0, ~0, ~0, CFR); + tim_frame(0, 0, ~0, ~0, style_frame); // draw message - tim_label(argv[1], A, 1, msg.width, msg.lines, CTXT); + tim_label(argv[1], A, 1, msg.width, msg.lines, style_text); // draw 'yes' button, return 0 when clicked - if (tim_button("[y] Yes", 2, ~1, A, A, CYES) || tim_is_key_press('y')) { + if (tim_button("[y] Yes", 2, ~1, A, A, style_yes) || tim_is_key_press('y')) { exit(0); } // draw 'no' button, return 1 when clicked - if (tim_button("[n] No", ~2, ~1, A, A, CNO) || tim_is_key_press('n')) { + if (tim_button("[n] No", ~2, ~1, A, A, style_no) || tim_is_key_press('n')) { exit(1); } @@ -46,4 +45,5 @@ i32 main(i32 argc, char** argv) { } } } + return 0; } diff --git a/example/hello.c b/example/hello.c index 328de35..fae35ab 100644 --- a/example/hello.c +++ b/example/hello.c @@ -1,15 +1,20 @@ #include "tim.h" i32 main(void) { - while (tim_run(0)) { // init state and start event loop - tim_scope(A, A, 24, 8) { // centered 24x8 scope - u64 c = 0x0a060f; // three colors - tim_frame(0, 0, ~0, ~0, c); // draw frame for scope + while (tim_run(0)) { // init state and start event loop + tim_scope(A, A, 24, 8) { // centered 24x8 scope + TimStyle c = { // three colors + .brd= TimColor16_Green, + .bg = TimColor16_DarkCyan, + .fg = TimColor16_White + }; + tim_frame(0, 0, ~0, ~0, c); // draw frame for scope tim_label("Greetings!", A, 2, A, A, c); // label in top center if (tim_button("OK", A, ~1, 8, A, c)) // button in bottom center - return 0; // exit on button click - if (tim_is_key_press('q')) // ctrl-c is masked - return 0; // exit on 'q' press + return 0; // exit on button click + if (tim_is_key_press('q')) // ctrl-c is masked + return 0; // exit on 'q' press } - } // atexit() cleanup + } // atexit() cleanup + return 0; } diff --git a/example/snek.c b/example/snek.c index 278be84..81f86af 100644 --- a/example/snek.c +++ b/example/snek.c @@ -6,7 +6,6 @@ #define FG 0x10 #define BG 0xdd -#define BTN (FG << 16 | BG << 8 | FG) #define NEW 0 #define RUN 1 @@ -81,7 +80,7 @@ static void game(void) { } // user input - if (tim->event.type == KEY_EVENT) { + if (tim->event.type == TimEvent_Key) { i32 key = tim->event.key; if ((key == TimKey_Right || key == 'd') && snek.look.x != -1) { snek.look = (point){{1, 0}}; @@ -99,17 +98,18 @@ static void game(void) { } static void menu(void) { + TimStyle style_button = (TimStyle){ .brd= FG, .bg = BG, .fg = FG }; tim_scope(A, A, 20, 13) { char* lbl = snek.state == OVER ? "GAME OVER" : "SNEK - THE GAME"; char* btn = snek.state == PAUSE ? "Resume" : "Play"; - tim_label(lbl, A, 0, A, A, BTN); - if (tim_button(btn, A, 2, 20, 5, BTN) || tim_is_key_press(TimKey_Enter)) { + tim_label(lbl, A, 0, A, A, style_button); + if (tim_button(btn, A, 2, 20, 5, style_button) || tim_is_key_press(TimKey_Enter)) { if (snek.state != PAUSE) { start(); } snek.state = RUN; } - if (tim_button("Exit", A, 8, 20, 5, BTN) || tim_is_key_press('q') || tim_is_key_press(TimKey_Escape)) { + if (tim_button("Exit", A, 8, 20, 5, style_button) || tim_is_key_press('q') || tim_is_key_press(TimKey_Escape)) { exit(0); } } @@ -126,6 +126,6 @@ i32 main(void) { } else { menu(); } - } + return 0; } diff --git a/include/tim.h b/include/tim.h index 0bc3c71..a1f9b5e 100644 --- a/include/tim.h +++ b/include/tim.h @@ -60,42 +60,42 @@ extern "C" { #pragma region constants #define TIM_ENABLE_DBUF 1 // double buffering -#define TIM_MAX_SCOPE 20 // max scope nesting +#define TIM_MAX_SCOPE 32 // max scope nesting #define TIM_MAX_CELLS 0x20000 // size of screen buffer #define TIM_MAX_BUF (TIM_MAX_CELLS * 4) // size of output buffer #define A INT_MAX // auto center / width / height -typedef enum TimEventType { - TimEvent_Void, // an event was consumed - TimEvent_Draw, // draw screen - TimEvent_Key, // a key was pressed - TimEvent_Mouse, // mouse button, scroll or move -} TimEventType; - -enum { - TimKey_MouseButtonLeft = 1, - TimKey_Backspace = 8, - TimKey_Tab = 9, - TimKey_Enter = 13, - TimKey_Escape = 27, - TimKey_Insert = -1, - TimKey_Delete = -2, - TimKey_Home = -3, - TimKey_End = -4, - TimKey_PageUp = -5, - TimKey_PageDown = -6, - TimKey_Up = -7, - TimKey_Down = -8, - TimKey_Left = -9, - TimKey_Right = -10, -}; -// key code or 32-bit unicode char -typedef i32 TimKey; - #pragma endregion #pragma region types + +/* first 16 colors from xterm256 supported by any terminal emulator */ +enum { + TimColor16_Black = 0x00, + TimColor16_DarkRed = 0x01, + TimColor16_DarkGreen = 0x02, + TimColor16_DarkYellow = 0x03, + TimColor16_DarkBlue = 0x04, + TimColor16_DarkMagenta = 0x05, + TimColor16_DarkCyan = 0x06, + TimColor16_Gray = 0x07, + TimColor16_DarkGray = 0x08, + TimColor16_Red = 0x09, + TimColor16_Green = 0x0a, + TimColor16_Yellow = 0x0b, + TimColor16_Blue = 0x0c, + TimColor16_Magenta = 0x0d, + TimColor16_Cyan = 0x0e, + TimColor16_White = 0x0f, +}; + +typedef struct TimStyle { + u8 brd; // border + u8 bg; // background + u8 fg; // foreground +} TimStyle; + typedef struct TimCell { u8 fg; // foreground color u8 bg; // background color @@ -124,6 +124,33 @@ typedef struct TimLine { i32 width; // line width in glyph } TimLine; +typedef enum TimEventType { + TimEvent_Void, // an event was consumed + TimEvent_Draw, // draw screen + TimEvent_Key, // a key was pressed + TimEvent_Mouse, // mouse button, scroll or move +} TimEventType; + +enum { + TimKey_MouseButtonLeft = 1, + TimKey_Backspace = 8, + TimKey_Tab = 9, + TimKey_Enter = 13, + TimKey_Escape = 27, + TimKey_Insert = -1, + TimKey_Delete = -2, + TimKey_Home = -3, + TimKey_End = -4, + TimKey_PageUp = -5, + TimKey_PageDown = -6, + TimKey_Up = -7, + TimKey_Down = -8, + TimKey_Left = -9, + TimKey_Right = -10, +}; +// key code or 32-bit unicode char +typedef i32 TimKey; + typedef struct TimEvent { TimEventType type; TimKey key; // used by TimEvent_Key and TimEvent_Mouse @@ -133,9 +160,9 @@ typedef struct TimEvent { } TimEvent; typedef struct TimEditState { - i32 cursor; // cursor position (utf8) - i32 length; // string length (utf8) - i32 capacity; // buffer size + i32 cursor; // cursor position (utf8) + i32 length; // string length (utf8) + i32 capacity; // buffer size in bytes char* s; // zero terminated buffer } TimEditState; @@ -195,9 +222,17 @@ i64 tim_time_usec(void); #pragma region scope +// for some stupid reason gcc requires more than 3 levels of macros to concat _i_ with line number +#define _tim_cat2(A, B) A##B +#define _tim_scope_line(L) _tim_cat2(_i_, L) +#define _tim_scope_i _tim_scope_line(__LINE__) + // enter layout scope -#define tim_scope(x, y, w, h) \ - for (i32 _i = tim_enter_scope((x), (y), (w), (h)); _i; _i = tim_exit_scope()) +#define tim_scope(x, y, w, h) for (\ + i32 _tim_scope_i = tim_enter_scope((x), (y), (w), (h)); \ + _tim_scope_i;\ + _tim_scope_i = tim_exit_scope()\ + ) /* here goes your { code } */ // convert relative (scoped) to absolute (screen) coordinates TimRect tim_scope_rect_to_absolute(i32 x, i32 y, i32 w, i32 h); @@ -217,35 +252,35 @@ i32 tim_exit_scope(void); // frame // color: background, frame -void tim_frame(i32 x, i32 y, i32 w, i32 h, u64 color); +void tim_frame(i32 x, i32 y, i32 w, i32 h, TimStyle style); // text label // str : text - supports multiple lines // color: background, text -void tim_label(cstr s, i32 x, i32 y, i32 w, i32 h, u64 color); +void tim_label(cstr s, i32 x, i32 y, i32 w, i32 h, TimStyle style); // button - returns true on click // color: frame, background, text -bool tim_button(cstr txt, i32 x, i32 y, i32 w, i32 h, u64 color); +bool tim_button(cstr txt, i32 x, i32 y, i32 w, i32 h, TimStyle style); // check box - returns true when clicked // txt : text label // state: persistent state, 0 unchecked, -1 semi checked, !0: checked // color: check, background, text -bool tim_checkbox(cstr txt, i32* state, i32 x, i32 y, i32 w, u64 color); +bool tim_checkbox(cstr txt, i32* state, i32 x, i32 y, i32 w, TimStyle style); // radio button - return true when clicked // txt : text label // state: persistent state, selected if *state == v // v : value // color: radio, background, text -bool tim_radiobutton(cstr txt, i32* state, i32 v, i32 x, i32 y, i32 w, u64 color); +bool tim_radiobutton(cstr txt, i32* state, i32 v, i32 x, i32 y, i32 w, TimStyle style); /// text edit - value in state /// @param e persistent edit state, use TimEditState_init() to create new state /// @param color frame, background, text /// @return key id or 0 -TimKey tim_edit(TimEditState* e, i32 x, i32 y, i32 w, u64 color); +TimKey tim_edit(TimEditState* e, i32 x, i32 y, i32 w, TimStyle style); void TimEditState_init(TimEditState* e, i32 capacity, cstr initial_content); diff --git a/project.config b/project.config index a8cc118..d650b0f 100644 --- a/project.config +++ b/project.config @@ -38,17 +38,19 @@ STATIC_LIB_FILE="$PROJECT.a" # example: "-I./include -I$DEPENDENCIES_DIR/libexample" INCLUDE="-Iinclude -Isrc" +EXEC_FILE="" +EXEC_EXT="" + # OS-specific options case "$OS" in WINDOWS) - EXEC_FILE="snek.exe" + EXEC_EXT=".exe" SHARED_LIB_FILE="$PROJECT.dll" INCLUDE="$INCLUDE " # example: "-lSDL2 -lSDL2_image" LINKER_LIBS="" ;; LINUX) - EXEC_FILE="snek" SHARED_LIB_FILE="$PROJECT.so" INCLUDE="$INCLUDE " LINKER_LIBS="" @@ -60,26 +62,72 @@ esac # TASKS case "$TASK" in - # creates executable using profiling info if it exists - build_exec) - SRC_C="$SRC_C example/snek.c" - # -flto applies more optimizations across object files - # -flto=auto is needed to multithreaded copilation - # -fuse-linker-plugin is required to use static libs with lto - # -fprofile-use enables compiler to use profiling info files to optimize executable - # -fprofile-prefix-path sets path where profiling info about objects are be saved - # -fdata-sections -ffunction-sections -Wl,--gc-sections removes unused code - C_ARGS="-O2 -flto=auto -fuse-linker-plugin -fprofile-use -fprofile-prefix-path=$(realpath $OBJDIR)/objects -fdata-sections -ffunction-sections -Wl,--gc-sections" + # ./ask question? + ask) + EXEC_FILE="ask$EXEC_EXT" + SRC_C="example/ask.c" + LINKER_LIBS="bin/tim.a" + C_ARGS="-O0 -g" CPP_ARGS="$C_ARGS" LINKER_ARGS="$CPP_ARGS $LINKER_LIBS" PRE_TASK_SCRIPT="" TASK_SCRIPT="@cbuild/default_tasks/build_exec.sh" - POST_TASK_SCRIPT="@cbuild/default_tasks/strip_exec.sh" + POST_TASK_SCRIPT="" ;; - # creates executable with debug info and no optimizations - build_exec_dbg) - SRC_C="$SRC_C example/snek.c" - C_ARGS="-O0 -g3" + # hello world + hello) + EXEC_FILE="hello$EXEC_EXT" + SRC_C="example/hello.c" + LINKER_LIBS="bin/tim.a" + C_ARGS="-O0 -g" + CPP_ARGS="$C_ARGS" + LINKER_ARGS="$CPP_ARGS $LINKER_LIBS" + PRE_TASK_SCRIPT="" + TASK_SCRIPT="@cbuild/default_tasks/build_exec.sh" + POST_TASK_SCRIPT="" + ;; + # snake game + snek) + EXEC_FILE="snek$EXEC_EXT" + SRC_C="example/snek.c" + LINKER_LIBS="bin/tim.a" + C_ARGS="-O0 -g" + CPP_ARGS="$C_ARGS" + LINKER_ARGS="$CPP_ARGS $LINKER_LIBS" + PRE_TASK_SCRIPT="" + TASK_SCRIPT="@cbuild/default_tasks/build_exec.sh" + POST_TASK_SCRIPT="" + ;; + # test + test) + EXEC_FILE="test$EXEC_EXT" + SRC_C="test/test.c" + LINKER_LIBS="bin/tim.a" + C_ARGS="-O0 -g" + CPP_ARGS="$C_ARGS" + LINKER_ARGS="$CPP_ARGS $LINKER_LIBS" + PRE_TASK_SCRIPT="" + TASK_SCRIPT="@cbuild/default_tasks/build_exec.sh" + POST_TASK_SCRIPT="" + ;; + # color + color) + EXEC_FILE="color$EXEC_EXT" + SRC_C="test/color.c" + LINKER_LIBS="bin/tim.a" + C_ARGS="-O0 -g" + CPP_ARGS="$C_ARGS" + LINKER_ARGS="$CPP_ARGS $LINKER_LIBS" + PRE_TASK_SCRIPT="" + TASK_SCRIPT="@cbuild/default_tasks/build_exec.sh" + POST_TASK_SCRIPT="" + ;; + # string + string) + EXEC_FILE="string$EXEC_EXT" + SRC_C="test/string.c" + LINKER_LIBS="bin/tim.a" + C_ARGS="-O0 -g" CPP_ARGS="$C_ARGS" LINKER_ARGS="$CPP_ARGS $LINKER_LIBS" PRE_TASK_SCRIPT="" diff --git a/readme.md b/readme.md index 80cdee7..1457d0b 100644 --- a/readme.md +++ b/readme.md @@ -5,6 +5,26 @@ Fork of https://codeberg.org/chuvok/tim.h tim is a portable library to create simple terminal applications Demo video: https://asciinema.org/a/zn3p0dsVCOQOzwY1S9gDfyaxQ +## build +1. Clone this repository. + ``` + git clone https://timerix.ddns.net/git/Timerix/tim.git + ``` + +2. Install [cbuild](https://timerix.ddns.net/git/Timerix/cbuild/releases). + Select latest version compatible with the one in `project.config`. + Example: For `2.3.2` download latest `2.3.x`. + +3. Build static library + ``` + cd tim + cbuild build_static_lib + ``` +4. Build tests and examples + ``` + cbuild ask hello snek test color string + ``` + ## quick start See [example/hello.c](./example/hello.c) @@ -44,18 +64,10 @@ take the full available space from parent. The layout automatically adopts to terminal window resize events. ## colors -Most elements have a uint64 color argument which holds up to eight colors. -Typically byte 0 is the text color and byte 1 is the background color. - -For example 0x08040f encodes three colors. When used with a button the text -is white (0f), the background is blue (04), and the frame is gray (08). - -The terminal should support xterm-256 colors. The TERM variable is ignored. -The lower 16 colors vary across different terminals, so the upper 240 colors -should be used if consistency is important. - -xterm-256 color chart -https://upload.wikimedia.org/wikipedia/commons/1/15/Xterm_256color_chart.svg +Colors are stored as 8-bit values. +Most terminals support 16 basic colors. You can see them in TimColor16 enum. +There is also support for xterm-256 colors. +![xterm-256 color chart](./256colors.jpg) ## events tim_run blocks until it observes an event. Mouse and key events are always @@ -66,20 +78,13 @@ event when focused in order to prevent other key handlers on acting on them. The current event is stored in tim->event. - event | cause --------------|----------------------- - DRAW_EVENT | input, timeout, resize - KEY_EVENT | key press - MOUSE_EVENT | mouse click - VOID_EVENT | consumed event - ## elements frame (x, y, w, h, color) Draw an empty frame and fill area. x/y/w/h see layout documentation - color background, frame + style background, frame label (str, x, y, w, h, color) @@ -88,7 +93,7 @@ label (str, x, y, w, h, color) str zero terminated string x/y/w/h see layout documentation - color background, text + style background, text button (str, x, y, w, h, color) -> bool @@ -97,7 +102,7 @@ button (str, x, y, w, h, color) -> bool str zero terminated string x/y/w/h see layout documentation - color frame, background, text + style frame, background, text edit (state, x, y, w, color) -> int @@ -108,7 +113,7 @@ edit (state, x, y, w, color) -> int state pointer to persistent edit state struct x/y/w see layout documentation - color f rame, background, text + style f rame, background, text check (str, state, x, y, w, color) -> bool @@ -119,7 +124,7 @@ check (str, state, x, y, w, color) -> bool str zero terminated string state pointer to persistent state variable x/y/w see layout documentation - color check, background, text + style check, background, text radio (str, state, v, x, y, w, color) -> bool @@ -131,7 +136,7 @@ radio (str, state, v, x, y, w, color) -> bool state pointer to persistent state variable v unique state value x/y/w see layout documentation - color radio, background, text + style radio, background, text ## functions tim_run (fps) -> bool diff --git a/src/edit.c b/src/edit.c index 7b0a8a1..b366443 100755 --- a/src/edit.c +++ b/src/edit.c @@ -85,18 +85,18 @@ static TimKey edit_event(TimEditState* e, TimRect r) { return tim->event.key; } -TimKey tim_edit(TimEditState* e, i32 x, i32 y, i32 w, u64 color) { +TimKey tim_edit(TimEditState* e, i32 x, i32 y, i32 w, TimStyle style) { TimRect r = tim_scope_rect_to_absolute(x, y, w, 3); if (tim->event.type == TimEvent_Draw) { - tim_draw_box(r.x, r.y, r.w, r.h, color >> 16, color >> 8); + tim_draw_box(r.x, r.y, r.w, r.h, style.brd, style.bg); if (tim->focus == e) { char* s = e->s + tim_utf8_pos(e->s, e->cursor - r.w + 4); i32 cur = MIN(r.w - 4, e->cursor); - tim_draw_str(s, r.x + 2, r.y + 1, r.w - 3, color, color >> 8); + tim_draw_str(s, r.x + 2, r.y + 1, r.w - 3, style.fg, style.bg); tim_draw_invert(r.x + cur + 2, r.y + 1, 1); } else { - tim_draw_str(e->s, r.x + 2, r.y + 1, r.w - 3, color, color >> 8); + tim_draw_str(e->s, r.x + 2, r.y + 1, r.w - 3, style.fg, style.bg); } } diff --git a/src/widgets.c b/src/widgets.c index eacb1ff..c695ab5 100755 --- a/src/widgets.c +++ b/src/widgets.c @@ -1,19 +1,19 @@ #include "tim.h" -void tim_frame(i32 x, i32 y, i32 w, i32 h, u64 color) { +void tim_frame(i32 x, i32 y, i32 w, i32 h, TimStyle style) { if (tim->event.type == TimEvent_Draw) { TimRect r = tim_scope_rect_to_absolute(x, y, w, h); - tim_draw_box(r.x, r.y, r.w, r.h, color, color >> 8); + tim_draw_box(r.x, r.y, r.w, r.h, style.brd, style.bg); } } -void tim_label(cstr s, i32 x, i32 y, i32 w, i32 h, u64 color) { +void tim_label(cstr s, i32 x, i32 y, i32 w, i32 h, TimStyle style) { if (tim->event.type == TimEvent_Draw) { TimText t = tim_scan_str(s); w = (w == A) ? t.width : w; h = (h == A) ? t.lines : h; TimRect r = tim_scope_rect_to_absolute(x, y, w, h); - TimCell c = tim_cell(" ", color, color >> 8); + TimCell c = tim_cell(" ", style.fg, style.bg); tim_draw_lot(c, r.x, r.y, r.w, r.h); TimLine l = {.s = s, .line = ""}; for (i32 i = 0; tim_next_line(&l); i++) { @@ -22,28 +22,28 @@ void tim_label(cstr s, i32 x, i32 y, i32 w, i32 h, u64 color) { } } -bool tim_button(cstr txt, i32 x, i32 y, i32 w, i32 h, u64 color) { +bool tim_button(cstr txt, i32 x, i32 y, i32 w, i32 h, TimStyle style) { i32 tw = tim_utf8_len(txt); w = (w == A) ? (tw + 4) : w; h = (h == A) ? 3 : h; TimRect r = tim_scope_rect_to_absolute(x, y, w, h); if (tim->event.type == TimEvent_Draw) { - tim_draw_box(r.x, r.y, r.w, r.h, color >> 16, color >> 8); - tim_draw_str(txt, r.x + (w - tw) / 2, r.y + h / 2, w, color, color >> 8); + tim_draw_box(r.x, r.y, r.w, r.h, style.brd, style.bg); + tim_draw_str(txt, r.x + (w - tw) / 2, r.y + h / 2, w, style.fg, style.bg); } return tim_is_mouse_click_over(r); } -bool tim_checkbox(cstr txt, i32* state, i32 x, i32 y, i32 w, u64 color) { +bool tim_checkbox(cstr txt, i32* state, i32 x, i32 y, i32 w, TimStyle style) { w = (w == A) ? tim_utf8_len(txt) + 4 : w; TimRect r = tim_scope_rect_to_absolute(x, y, w, 1); if (tim->event.type == TimEvent_Draw) { cstr st = *state == -1 ? "-" : *state ? "x" : " "; - tim_draw_str("[ ] ", r.x, r.y, 4, color, color >> 8); - tim_draw_str(st, r.x + 1, r.y, 1, color >> 16, color >> 8); - tim_draw_str(txt, r.x + 4, r.y, r.w - 4, color, color >> 8); + tim_draw_str("[ ] ", r.x, r.y, 4, style.fg, style.bg); + tim_draw_str(st, r.x + 1, r.y, 1, style.brd, style.bg); + tim_draw_str(txt, r.x + 4, r.y, r.w - 4, style.fg, style.bg); } bool click = tim_is_mouse_click_over(r); @@ -52,15 +52,15 @@ bool tim_checkbox(cstr txt, i32* state, i32 x, i32 y, i32 w, u64 color) { } -bool tim_radiobutton(cstr txt, i32* state, i32 v, i32 x, i32 y, i32 w, u64 color) { +bool tim_radiobutton(cstr txt, i32* state, i32 v, i32 x, i32 y, i32 w, TimStyle style) { w = (w == A) ? tim_utf8_len(txt) + 4 : w; TimRect r = tim_scope_rect_to_absolute(x, y, w, 1); if (tim->event.type == TimEvent_Draw) { cstr st = *state == v ? "o" : " "; - tim_draw_str("( ) ", r.x, r.y, 4, color, color >> 8); - tim_draw_str(st, r.x + 1, r.y, 1, color >> 16, color >> 8); - tim_draw_str(txt, r.x + 4, r.y, r.w - 4, color, color >> 8); + tim_draw_str("( ) ", r.x, r.y, 4, style.fg, style.bg); + tim_draw_str(st, r.x + 1, r.y, 1, style.brd, style.bg); + tim_draw_str(txt, r.x + 4, r.y, r.w - 4, style.fg, style.bg); } bool click = tim_is_mouse_click_over(r); diff --git a/test/color.c b/test/color.c index 17f8a66..9ff280d 100644 --- a/test/color.c +++ b/test/color.c @@ -26,4 +26,5 @@ i32 main(void) { exit(1); } } + return 0; } diff --git a/test/string.c b/test/string.c index 6a94b25..5ada96f 100644 --- a/test/string.c +++ b/test/string.c @@ -67,4 +67,5 @@ i32 main(void) { TEST(tim_utf8_is_wide_perhaps(U("┌")) == false); TEST(tim_utf8_is_wide_perhaps(U("한")) == true); TEST(tim_utf8_is_wide_perhaps(U("𐍈")) == true); + return 0; } diff --git a/test/test.c b/test/test.c index 33f0a8d..60bef7a 100644 --- a/test/test.c +++ b/test/test.c @@ -1,120 +1,128 @@ #include "tim.h" -static inline void test_screen(TimEvent* e) { - static TimEvent me; - static TimEvent ke; - static i32 render_us; - char buf[64]; +static TimEditState ed1; +static TimEditState ed2; - ke = (e->type == KEY_EVENT) ? *e : ke; - me = (e->type == MOUSE_EVENT) ? *e : me; +static inline void test_screen(TimEvent* e) { + static TimEvent me = {0}; + static TimEvent ke = {0}; + static i32 render_us = 0; + char buf[64] = {0}; + + if(e->type == TimEvent_Key) + ke = *e; + if(e->type == TimEvent_Mouse) + me = *e; // positioning - tim_label("+", 0, 0, A, A, 0xf); - tim_label("+", ~0, 0, A, A, 0xf); - tim_label("+", 0, ~0, A, A, 0xf); - tim_label("+", ~0, ~0, A, A, 0xf); - tim_label("+", A, A, A, A, 0xf); - tim_label("-", 0, A, A, A, 0xf); - tim_label("-", ~0, A, A, A, 0xf); - tim_label("|", A, 0, A, A, 0xf); - tim_label("|", A, ~0, A, A, 0xf); + static TimStyle style_default = { .fg = TimColor16_White }; + tim_label("+", 0, 0, A, A, style_default); + tim_label("+", ~0, 0, A, A, style_default); + tim_label("+", 0, ~0, A, A, style_default); + tim_label("+", ~0, ~0, A, A, style_default); + tim_label("+", A, A, A, A, style_default); + tim_label("-", 0, A, A, A, style_default); + tim_label("-", ~0, A, A, A, style_default); + tim_label("|", A, 0, A, A, style_default); + tim_label("|", A, ~0, A, A, style_default); // some information sprintf(buf, "screen: %dx%d", tim->w, tim->h); - tim_label(buf, 2, 0, A, A, 0xf); + tim_label(buf, 2, 0, A, A, style_default); sprintf(buf, "frame : [%c] %d", ": "[tim->frame & 1], tim->frame); - tim_label(buf, 2, 1, A, A, 0xf); + tim_label(buf, 2, 1, A, A, style_default); sprintf(buf, "key : [%d] %s", ke.key, ke.s + (ke.key < 32)); - tim_label(buf, 2, 2, A, A, 0xf); + tim_label(buf, 2, 2, A, A, style_default); sprintf(buf, "mouse : [%d] %d:%d", me.key, me.x, me.y); - tim_label(buf, 2, 3, A, A, 0xf); + tim_label(buf, 2, 3, A, A, style_default); sprintf(buf, "input : %02hhx %02hhx %02hhx %02hhx %02hhx %02hhx %02hhx %02hhx", e->s[0], e->s[1], e->s[2], e->s[3], e->s[4], e->s[5], e->s[6], e->s[7]); - tim_label(buf, 2, 4, A, A, 0xf); + tim_label(buf, 2, 4, A, A, style_default); // lower right render_us += tim->render_us; sprintf(buf, "%d µs (Ø %d µs)", tim->render_us, render_us / MAX(tim->frame, 1)); - tim_label(buf, ~2, ~2, A, A, 0xf); + tim_label(buf, ~2, ~2, A, A, style_default); sprintf(buf, "%d cells (%.0f %%)", tim->w * tim->h, 100.0 * tim->w * tim->h / TIM_MAX_CELLS); - tim_label(buf, ~2, ~1, A, A, 0xf); + tim_label(buf, ~2, ~1, A, A, style_default); sprintf(buf, "%d bytes (%.0f %%)", tim->buf_size, 100.0 * tim->buf_size / TIM_MAX_BUF); - tim_label(buf, ~2, ~0, A, A, 0xf); + tim_label(buf, ~2, ~0, A, A, style_default); // multi line label - tim_label("multi\nliñe\nlabël", 24, 1, A, A, 0xf); + tim_label("multi\nliñe\nlabël", 24, 1, A, A, style_default); // colors tim_scope(1, 5, 16, 5) { - tim_frame(0, 0, ~0, ~0, 0xf); - tim_label(" Red ", 1, 1, 7, A, 0x0900); - tim_label(" ", 8, 1, 7, A, 0xc400); - tim_label(" Green ", 1, 2, 7, A, 0x0a00); - tim_label(" ", 8, 2, 7, A, 0x2e00); - tim_label(" Blue ", 1, 3, 7, A, 0x0c00); - tim_label(" ", 8, 3, 7, A, 0x1500); + tim_frame(0, 0, ~0, ~0, style_default); + tim_label(" Red ", 1, 1, 7, A, (TimStyle){ .bg = 0x09 }); + tim_label(" ", 8, 1, 7, A, (TimStyle){ .bg = 0xc4 }); + tim_label(" Green ", 1, 2, 7, A, (TimStyle){ .bg = 0x0a }); + tim_label(" ", 8, 2, 7, A, (TimStyle){ .bg = 0x2e }); + tim_label(" Blue ", 1, 3, 7, A, (TimStyle){ .bg = 0x0c }); + tim_label(" ", 8, 3, 7, A, (TimStyle){ .bg = 0x15 }); } // button - static u64 bc = 0x100; - if (tim_button("Click Me", 17, 5, 16, 5, bc)) { - bc = (bc + 0x100) & 0xff00; + static TimStyle style_button = { .bg = 0x01 }; + if (tim_button("Click Me", 17, 5, 16, 5, style_button)) { + style_button.bg = (style_button.bg + 1) & 0xff; } // edit - static TimEditState ed1; - static TimEditState ed2; - TimEditState_init(&ed1, 32, "Edit 1"); - TimEditState_init(&ed2, 32, ""); - tim_edit(&ed1, 1, 10, 32, 0xff00ff); + static TimStyle style_edit = { .brd = 0xff, .fg = 0xff }; + tim_edit(&ed1, 1, 10, 32, style_edit); sprintf(buf, "cursor: %d length: %d", ed1.cursor, ed1.length); - tim_label(buf, 2, 13, A, A, 0xf); - tim_edit(&ed2, 1, 14, 32, 0xff00ff); - tim_label(ed2.s, 2, 17, A, A, 0xf); + tim_label(buf, 2, 13, A, A, style_default); + tim_edit(&ed2, 1, 14, 32, style_edit); + tim_label(ed2.s, 2, 17, A, A, style_default); // checkbox + static TimStyle style_checkbox = { .brd = TimColor16_Cyan, .fg = TimColor16_White }; static i32 chk[2] = {-1, 1}; - tim_checkbox("Check 1", &chk[0], 1, 18, A, 0xa000f); - tim_checkbox("Check 2", &chk[1], 14, 18, A, 0xa000f); + tim_checkbox("Check 1", &chk[0], 1, 18, A, style_checkbox); + tim_checkbox("Check 2", &chk[1], 14, 18, A, style_checkbox); // radiobox static i32 rad = 0; - tim_radiobutton("Radio 1", &rad, 1, 1, 19, A, 0xa000f); - tim_radiobutton("Radio 2", &rad, 2, 14, 19, A, 0xa000f); - tim_radiobutton("Radio 3", &rad, 3, 1, 20, A, 0xa000f); - tim_radiobutton("Radio 4", &rad, 4, 14, 20, A, 0xa000f); + tim_radiobutton("Radio 1", &rad, 1, 1, 19, A, style_checkbox); + tim_radiobutton("Radio 2", &rad, 2, 14, 19, A, style_checkbox); + tim_radiobutton("Radio 3", &rad, 3, 1, 20, A, style_checkbox); + tim_radiobutton("Radio 4", &rad, 4, 14, 20, A, style_checkbox); // scope nesting tim_scope(~1, 1, 20, 10) { tim_scope(0, 0, 10, 5) { - tim_frame(0, 0, ~0, ~0, 0x9); + tim_frame(0, 0, ~0, ~0, (TimStyle){ .brd = TimColor16_Red }); } tim_scope(~0, 0, 10, 5) { - tim_frame(0, 0, ~0, ~0, 0xa); + tim_frame(0, 0, ~0, ~0, (TimStyle){ .brd = TimColor16_Green }); } tim_scope(~0, ~0, 10, 5) { - tim_frame(0, 0, ~0, ~0, 0xb); + tim_frame(0, 0, ~0, ~0, (TimStyle){ .brd = TimColor16_Yellow }); } tim_scope(0, ~0, 10, 5) { - tim_frame(0, 0, ~0, ~0, 0xc); + tim_frame(0, 0, ~0, ~0, (TimStyle){ .brd = TimColor16_Blue }); } } // funny characters + static TimStyle style_funny = { .bg = TimColor16_White, .fg = TimColor16_Magenta }; tim_scope(~1, ~3, 11, 5) { - tim_frame(0, 0, ~0, ~0, 0xf); - tim_label("123456789", 1, 1, 9, A, 0x0f05); - tim_label("$£ह€𐍈6789", 1, 2, A, A, 0x0f05); - tim_label("圍棋56789", 1, 3, A, A, 0x0f05); + tim_frame(0, 0, ~0, ~0, style_default); + tim_label("123456789", 1, 1, 9, A, style_funny); + tim_label("$£ह€𐍈6789", 1, 2, A, A, style_funny); + tim_label("圍棋56789", 1, 3, A, A, style_funny); } } i32 main(void) { + TimEditState_init(&ed1, 32, "Edit 1"); + TimEditState_init(&ed2, 32, ""); while (tim_run(1.5)) { test_screen(&tim->event); if (tim_is_key_press('q') || tim_is_key_press(TimKey_Escape)) { break; } } + return 0; } diff --git a/test/width.c b/test/width.c index 2a89ebc..14ddb36 100644 --- a/test/width.c +++ b/test/width.c @@ -66,4 +66,5 @@ i32 main(i32 argc, char** argv) { tim_reset_terminal(); fclose(f); + return 0; }