From d3bb100512e747131f2c3e9e5ccf0b1747a4ece3 Mon Sep 17 00:00:00 2001 From: David Peer Date: Tue, 18 Oct 2022 19:24:47 +0200 Subject: [PATCH 01/19] Improvements --- apps/aiclock/ChangeLog | 3 ++- apps/aiclock/aiclock.app.js | 49 +++++++++++++++++++++++++---------- apps/aiclock/aiclock.icon.js | 2 +- apps/aiclock/aiclock.png | Bin 5878 -> 1550 bytes apps/aiclock/metadata.json | 2 +- 5 files changed, 39 insertions(+), 17 deletions(-) diff --git a/apps/aiclock/ChangeLog b/apps/aiclock/ChangeLog index 759f68777..68f77be10 100644 --- a/apps/aiclock/ChangeLog +++ b/apps/aiclock/ChangeLog @@ -1 +1,2 @@ -0.01: New app! \ No newline at end of file +0.01: New app! +0.02: Design improvements and fixes. \ No newline at end of file diff --git a/apps/aiclock/aiclock.app.js b/apps/aiclock/aiclock.app.js index d58da6e88..caf8ac9b1 100644 --- a/apps/aiclock/aiclock.app.js +++ b/apps/aiclock/aiclock.app.js @@ -57,6 +57,17 @@ function drawCircle(isLocked){ g.fillCircle(cx, cy, 6); } +function toAngle(a){ + if (a < 0){ + return 360 + a; + } + + if(a > 360) { + return 360 - a; + } + + return a +} function drawTime(){ var drawHourHand = g.drawRotRect.bind(g,8,12,R-38); @@ -74,10 +85,10 @@ function drawTime(){ // Draw minute and hour bg g.setColor(g.theme.bg); - drawHourHand(Math.max(0, h - 2)); - drawHourHand(Math.min(360, h + 2)); - drawMinuteHand(Math.max(0, m - 2)); - drawMinuteHand(Math.min(360, m + 2)); + drawHourHand(toAngle(h-3)); + drawHourHand(toAngle(h+3)); + drawMinuteHand(toAngle(m-2)); + drawMinuteHand(toAngle(m+3)); // Draw minute and hour fg g.setColor(g.theme.fg); @@ -95,13 +106,15 @@ function drawDate(){ var text = ("0"+date.getDate()).substr(-2) + "/" + ("0"+date.getMonth()).substr(-2); var w = g.stringWidth(text); g.setColor(g.theme.bg); - g.fillRect(cx-w/2-4, 20, cx+w/2+2, 40+12); + g.fillRect(cx-w/2-4, 20, cx+w/2+4, 40+12); g.setColor(g.theme.fg); - g.drawLine(cx+w/2+1, 20, cx+w/2+1, 40+12); - g.drawLine(cx+w/2+2, 20, cx+w/2+2, 40+12); - g.drawLine(cx+w/2+3, 20, cx+w/2+3, 40+12); - g.drawLine(cx+w/2+4, 20, cx+w/2+4, 40+12); + // Draw right line as designed by stable diffusion + g.drawLine(cx+w/2+5, 20, cx+w/2+5, 40+12); + g.drawLine(cx+w/2+6, 20, cx+w/2+6, 40+12); + g.drawLine(cx+w/2+7, 20, cx+w/2+7, 40+12); + + // And finally the text g.drawString(text, cx, 40); } @@ -115,13 +128,21 @@ function drawDigits(){ var text = ("0"+date.getHours()).substr(-2) + ":" + ("0"+date.getMinutes()).substr(-2); //Bangle.getHealthStatus("day").steps; var w = g.stringWidth(text); g.setColor(g.theme.bg); - g.fillRect(cx-w/2-4, 120, cx+w/2+2, 140+20); + g.fillRect(cx-w/2-4, 120, cx+w/2+4, 140+20); + + // Draw right line as designed by stable diffusion + g.setColor(g.theme.fg); + g.drawLine(cx+w/2+5, 120, cx+w/2+5, 140+20); + g.drawLine(cx+w/2+6, 120, cx+w/2+6, 140+20); + g.drawLine(cx+w/2+7, 120, cx+w/2+7, 140+20); + + // And the 7set text + g.setColor("#999"); + g.drawString("88:88", cx, 140); + g.drawString("88:88", cx+1, 140); + g.drawString("88:88", cx, 141); g.setColor(g.theme.fg); - g.drawLine(cx+w/2+1, 120, cx+w/2+1, 140+20); - g.drawLine(cx+w/2+2, 120, cx+w/2+2, 140+20); - g.drawLine(cx+w/2+3, 120, cx+w/2+3, 140+20); - g.drawLine(cx+w/2+4, 120, cx+w/2+4, 140+20); g.drawString(text, cx, 140); g.drawString(text, cx+1, 140); g.drawString(text, cx, 141); diff --git a/apps/aiclock/aiclock.icon.js b/apps/aiclock/aiclock.icon.js index 72d916455..0033b3848 100644 --- a/apps/aiclock/aiclock.icon.js +++ b/apps/aiclock/aiclock.icon.js @@ -1 +1 @@ -require("heatshrink").decompress(atob("mEwxH+lYACq2s64Ai1gqDFwgND6OswIABqwAUDAWsKIlWF4oKDFQI2BAA1XD4QAHCY4cBGQJhHBAZFEDAgAOlhCHAgInCwKNF2QtCFIMlkosPABQgCGAYJCwKMDHAMAFjQACDwIkCMAg1BRocACALsVAA0lGAYqCRwYvBLwaiB1gABAYYACxGIAQIBBeAeCCwogBgMBSAlQRwheDDoYcEGAmsw+HBguBq97C4ZgBF4QrDGYOzBAJeCBgIdDwRPCKYIIDG4umH4xgCkqQEwOzRwj2CDIwAP2QHGMAMrvbADMQOIZoQvBGgIAJroLKAA8rkgiBSAa+ETgJnCAChYBBAyDClgvFXwRfBLxJ0BVoIUBwClCeAQbBDA4kBQYVWIIa+CF4dXCQOBvYiCDQQWCAYOsb4QxDF5TwDF4oVCwWmwWCa4XXCoQvBLQhnCqxFBd42CGAQvGq0BLwIqDAAg5BH4QFBMISXDSYYAGYARCCdwg5CCo68ECoOCAgYCEC5IvJXwIWJACLjDAAYvD1YvGao4ASUQQeEQoQpBPgQvDVYRLHLh+HlcAgAuCFQQvGXwUkF5ClCCQQ0FA4YOBgErroJB6xdCL44vCL4J9IBgIgBQQQICRAZaBVIwkBEwQvIdwJRCJwQAEDYKACld0pIVBFgQVIPQgvD6wvDJYLXDSZAxCyWSLQbIKwQvGR4lQR5CVHkkkIgIAOqC/TDhEsCSEsF4pMCF4J4KADAnBF41Qkp7QACbmBF41WgNW1oHBAD5fE1gvEgBfB1mIIgoQCDooHHComCRwRfECwQ3BF4YAHCAIXBAQPXDIQdDI4QZILwINBF5LVICAIvBAIQHBAQIdBqwdBABGBEoQvFwMlBQI0BAApaBEgQBCIAJzCGIRNCAA0rEgOAF4wKCR5AgCF4VQP4QXBAYKPKEgRNCAASZCSBRfDSIZGCFwTvCRxEAlgvHYAMADoTvGFAToDCoQJCE4TuHEYSOC2QgDBYUrwTvIAYiICDIQDDHYKHBC4SDBgDuDQAiQDEgQAVF4YFCKQQnB2SMBSQTADSBAASrrKDRwYrCAgI7CSAhpBxCtCew4AJwOICgaOG65sBcIgODAAIZBcBILCAYWCwOHAoISCKAeAXwYvBSAgPCCAIACBAIARC4YeCEgIpDZgoVCCIQAJEAQjECJRdBRwqQDGAd7I4QvKKYoNHdQQuELwQwGB4QUCVAQAPCY7ZBEoQuEHoIKCBYLoDXyYxDFgIiEFwphFAAuyDAIAQDY6MFA=")) \ No newline at end of file +require("heatshrink").decompress(atob("mEwgP/ACfAEZU/ECZELIKhSR/+PAoWAv4FDhk/x/ggP+j0fx/AgP8n8PCIX8CwIFC/F/w4FBgP4gEHC4QFE//w//DC4QFB8YFC+P/8IdCAoYdBAoPxDoQAd+CiKh4dQwDhfAA4A=")) \ No newline at end of file diff --git a/apps/aiclock/aiclock.png b/apps/aiclock/aiclock.png index cfe98b53009f160315418d87faf9d82491d58183..104261254ec1fa64881a68593b27eecc566dd446 100644 GIT binary patch delta 1517 zcmVE`#k49jzC0&8b)002K*^C-vJ2#@_+d}GMNlZR8n9>CEG#g&rKKfgvsuTybUKYf zp#T6V6beYE(-!@bBtZaB(>5RhfGo@K`~5625C}k$BmjWd>qT8%9m}h)uV=q~J|7fC z0RVVB9t49ymVXxv2I28|R@AX>-8!saza9V}2m-?4Fw3i}tAp3;g;N_1{ZfrPq5p{y zuS7PR#nRG}B~90LsH$p{H5;A*?+6Uc4#7avG!%W;#6*CW(MhW8f|TDmSaXm&|e^xO3}c; z0PWhfi~N2+`FuW#L?U$V+&PNJ z5z6}sHGelZ)0Qn;*#EY+Hkz86axFhRJj`TUTU#lg&sSBy^!V{(+pHK{_pxKg95*0? z*RNmWQ{|0)c?*=o1kxUAlyqFJA%xT3T8# zK0c17rY0t{VZ#QDkB?*DzJ2)i?HiswdxpWmL0q_S!F2|7U3Z;)3IdjHxOp#^z z_kWBy7K>41Vk%8yjPz83+U@o6T0$ zmfv!tH*VZOB9Q<9G&D4zqoV`w-o0~_-MxD^Hf`F3+1Xjl&COwCWCVkQgH_Lf8$wS{ zkFA7Z#8t*Rn}P=6?dw{PE~wY3!haQE(Aba!_HC|@rViG=0) zX>k1baXfnTh&>`0NY}1ibFJ+1<;%9Tr%#_E9*>s`OA?~dsO?DX#K(^xp=laaRmH7a zx6s$u$8-pSz((G94dKx=&DMATkVZ#G?TNpPm>+!rn4Fws7oKP|im9oo6?a=ALVs^> zFGfa2Kt#BC^Cr%oJquZuZAW(}Hwgd}6BAGrg({UN^5qMF@{Mf&{{0n~-LYc_B9RCi z<%x+20I%USIMZwXdN7?`T_wS=vEW+dQFdHHw z*Cll5&>;wdVEe>mG6}bjzuYGh31)0tw{FGe&6_Lk005jgae_UBeg6Cz@pv3fO-<}! zD;y59{7Mn#=jUA=ZzvRkDE_m`R8__8+qW?{H;1mSF0{9|S5;Y|P{6~74}bCI%^U35 zvj>L{9|jTO)vH%{|NcGN+uN~o=T1wVD|Ucr?M}R^taV_uVMmF@#YN91E8O4%6>e1WJZTPWxHj(BnQS>~-i`jXccFg+-cHQ1 z2O@&1s*vv7xr0)vgj6cU1ZH_-HAfP8MF6m{u)vNOd@zD9%Nw{k$Wf`2F!;|$Dfzg9 zIp_zJgN0IecegD%$QvtfaJ(XOpn^9%zAPWWFh3~07-+QmtuBu+t8h9{U zz25u1-~91=RgzC~=H#7I{i>?ptNPvhyZ3v)-+N1RbaZGT1OO7j+O=zW^2sOZUb=+J z`;|j$jqm&a=ApGV4?tI5`x*ctMfF}GMD-!1G-n|YQX(&VRKB-zt=5{OhmY{cHy`2j zxpUR^2q6&d?d`hqLEE=q%lH2Fd!$k+K%+dx#f#INKmReKqobr})6C4ykj-W&l}eP$ zWn9lgDId>sQJ#m^fW{c+`v}WIT9+*fuq_M63E?<4j%|Yg+i{3SV?kxUSdgb6ue!jUl1Xq1o>!glPc*DTA%vTW?YlV*2B@Lb{f3SaqX?W2^3=XtoE zi*h~6T$)SI^4^|z894tjpZnbBId=3Aum9hFVdv-X03o^cGoRt;(IeP3i3FQAZ$fKL zE|+J|?%i~DbaUj`G0yh)Bc)(bYb%S|+K5D>ShfQQe9yyn9JD5ge~E3|CdPw>I+l&) z*hncTyX8wLguvH6UfHca2e2#)0)r*M|c`u1X3Iq&ZxWL531Y0(D@#0G_A%!3siE`6TH`CbC#QOE?DHQUwG`FyK z|9;vQx1oH6QVJoZ2@_xAdLE#wo;GJ6Uu)1H1o#@Hkd(`1wAOUCwWEARLt_K)?RgKk zTxKqv=ETX996EG}O&d4hxh{QueQe&ch5Gt>mi6{xU%BB*DtmwA$Pp5W1f!!P@rj6L^)@?ut zD3yzxI(~wt#wHFQK3Xj{>o;tmt-XVAIATJ?_wkkSx^fk6v25Z$h+!w>pge^oBue>6 zX>i`M!IBo9QbFMZ+X>Oo(8%^rwxX0WIS~}WVzJ1IRV#RR_inP84E^WNvvSo+`cC#y zDwYUG!mM4t7JJp|RcL&sr>B{mnxd_}je&syq?FXv)p6BTSFwKmIzpik0*p7ckEjAp zrP5xix&-K=wSO7vRL;SDQkrm*0^irjVE0TR)Mzw4y-RrK?RWX$;QLIBkE69Fo6RyY zF-}{12kX|a!;VD5_`c7;zyLxB=F)RyvpJAZ6HjpB#3?>Le}Ql~j1&TCSx9NnqFgQ` zg}}CLR6rq0r4o)4LI|^TOWGCu1WYctUKuGYl<(s>4n7*!b+Iig*iBJ&g6oyh+DB-~ z*w{GHXpDh@0ovL-h{a;qI)JkC=lZElr5GF>3XlLkyK^TyckU#StTCJgjSdo1YeO}{ z;jp0&0T3E5>woL{pavMqHIzn(fpx#Ti3GQy%o zS1@q?W43MIjt~+X4N7?o4GmLUo8sKLj{yidHfK)v@!Ye|l1L=cTA@4-C*&Bajsmy zjvxK6r)X?!LdreH03q;P4_|rsrp6)!OiWG^iAE@w%1lj7vTEfDh6aaFN?}Hsu`PO5PGdVFqPfssbT+xap?SNXSpmLjV^gNGrdY;kIaon;&uzW7Z zd}f|lJdOmIotXt~3{jp3LeRamhsNeclF0-$H8q68VPf$(iFll7G)gQUBNmPF?Qj1# zuD^Z<>DgH}TzMrIrzSak_%OS6{R`J$zk_YpTtjC^C-;Btt4PZt7K@Qe)za3{PIGfJ z(P$KDOO#glTH`4f9|H(N3PK@=j*bp&+eQe1TXwN*n|#i2Gu!ulrY~N^v2Et&=MYj7 zi^XVaY9?M2#|ee-eFZ`gjYdprNeeVsj?JBS{waN@&v4&;_Y#goxcZu_X=-VvP%M#5 zr6{|KKfdKwR;*Y~xm>2TwS}_l^1#=>&ftYX1}_YO2FJ1SeT^W5v@O7=Tz0W7o4WdX z;_*1ST#mW947TNvtr#GLV0wCnP$)z;lLPIuU_m`gmM&%C!YiRN(h+xWg>YI2H9CIe`c@~|yqr~qt@ zrcfy0I1c4<8GxRi9(LS#1B(_dLIz2q-V9EyOw36 z(Tt3Z^3pGU!LMFd{)$f4-lgkr5^*C&^@Ugu)@n7#ib9yV^{!eWe0Q zV91w1Vq22qCy!M_$EYS#9c|kNA#mL?Y4c{*uUp4~e?7pDfBX|(d-YY&(AC||0}tH76<4(4YoFI%eGSJpa5|r! zqq(txL_E&?{2a+-lBualv#-)JXbF`{tOCvsjuYax&wQ4(>(?+gHbyd)q^Ysd)W(XE zs<;<;^wCGy{qAm_d+s^D_2?t~_rLs0K7I4e969(A4`sVKk{;m)`}Z?5JIk@7$7pM7 z9NpbrIF18BZK<3q-W?wwC!f!gO4ahtJMZ%C$G?S?hKp&fky2uVX@A(4 z^<&1y#&F#dbMqN&#~~JtRQbH8Or4NYVp$eiYohTu_kZ<%ZrHJd*I$2~SAO|2{&a>- zsr7Us`N8fN>0P~=uRr*8wru?bv3QKh$w?+BCjosK9XE@wbUA!q;kqsh7Bnz4G!*on zG(rMWpas}M820BW1%T_8dH(t5*|cRN;ZOu8~vLBx3spfdeur|@fhg9JAl?kl-qViZ3UeO-~XK*GIUw+ zdw+24rEt(bf{Li8svktf7-{Yo+JufqV_Qbe<+C|Xo;(Q{Rp+{1HFs=;AQFk-xgL&V z190wKKOcPXA@O+pcY2ytNfz`$ZQCG}7a)RT+gOz*mXs)^On6BnUX*Vrx$pZ(VcIi3 z8ppPS3hxJ^KVZJLjSw)Go@e0vfPqcNrd%i!iA0Pug%HHzF_fo>MnY&b3mO}_gsAy$|DkqqJ5vC3m16vtv9K!uMgs0RlmHF6OLoEXwhQU ztXaeSd$|%5GEwGW_Wm*!GQ~C1o4^}lNS~7Sj{Cew_rgdT0=6GKx>$qnqqWx+;rS5D`=U6 zuM8{om4{_n)YawD+UNP_pXb?UpJmssT|E5{PjlbB_wk+Ye22-&DIR_F5x)7&M@S}< zELqykJ@?$h7w`TOcinXtYu2tIJ)0)vgwfi^wykP^NeF>NqLj)q$-(AB81@Hd++6i7hWJ7 z4)f-3-ry@=zMr9?VV-*GX_CnrT(`_)k3Gr{fA~YjMn_q_Y87Aj!krvBa)cEtR?^kg zQLXkGgD@4y)Y>PP&y&j=IuQbKJ}^V*t>ThwY7CbqcK`r7LrOP35Ub%-t!JUOM7q}hqvB( zi)G7t$>j=YH1EIvK9*(i^2@)ZuD;gnK+sS1JP(8kBd=WM@R1|F(~v zb<3PNeVT3CwsGsNw{Yn25f(HyvSLLqzHf#emC+QKZi!MJgM$Oi&COF=Tg&|197~q= zU`hKDj0!2~TGCBlUmxAw-R$4LpOKLf4u0?B2hX!JIUwrEMKwQ#GdDI;^Zl| zZT~$|wF%Isj8_PsZCf-qH=(uWnrp71SS%u?CZZHw92zO(vz)8-9)+<%^ICWCF;G&eP|Y2!M4U(oRI;sB?F?-C@WU1;M}>htXsE^;o)H}44mh0zxOw6 zz3OVDG_ughLob-V7~WFh@Jdx$=$FPzQrIZvnX#0xssc$V)4*~Zn?k<8=kK@!U;E6Z zXZgDy{XGJ~zW4TWacUBPb!*o!eQ}nh%a#%fg+RcGPeh%P(ulQk@$kbwCfK(Z!fXtq8i$ z6$220LO##wvu9b{(N3{Yq&AhrQyz{5&;I0D;}FYY)vA@8I@QODl`9PyREiVFPhg)q zb&|QcG&P9?U0q!ylL?$qm{qG*aqQSJ4jnqgdwcc}jYMg0?*L$AI8CuwU}$KVvRgJH zzB26Ay2^E=5LmVy5IBux8#U#*ZZN7c*QRIFq>@RJ$vDMAp5ftPCdMbK40P+(t+<{` zI1;A4!>nO^Y@FfYVeDKk$44LimTNzGEj7smo40P^z`g_Ac;k(nIdg`5KF@c*`&~9~ z+HBwyGk^$3!q}FLkOFCm>YPAGfmQ@9LRDp|ruaE%K>5mCqfM*u5~}$Kp(z$ieDu+8 z@jQ=ID#Z;q+`!=AAR9MrrZ$-ZA=tfpH=gGiJ@Cpaudw~v?MPv9^)=i1=z|Z@zT(SY zzK@^()6bcnnc>Yhf5U(DSh#2rXvpPqw70jD%VilE8KF=p{D(gSprfOmyY9M+bUKZY zlI`2KVOgfv^s8UJYDACLnuG7Z&ygcXSi5#T4RsCNe*5kGBJNy4Nz_c@)Xlz_SM@J{Uy}cw7 zan7F~Kq;R){^UQ?*wlmue*OCE^!N88q=o3}=+p>U+}6gkKYfmPJdW@C3=dvl&z?P; zJb98*$)&EYj#w;4ZEXtM4pAuNtG}1H{H&A;Cie=ZOczfED$EHvW+ERpT00Vs5Q#(x zM?xs&lP?q~m5O9CS+dzIb#*CvdzZ6q+jd%7S`b1oK0eN!ciu%hJqu_=XM2aP%!4*> z-pqIZ>aU1KV@PRQ+w=2tOioTQF)_)^%na%DEV*2sLZLvhSitkVOLH$_UDkThrfLTh zdC&C_(!#PV1OhDtQi5Y!gu@XMi3IU@oJ6vQ`uYZ%o11BDY^0{9#x&EknH~R^hacwj znX^@}_#Fd;h9ygu^4Q~#)4Q^_+Iy)Srqy8}(6sqVc!5Op0;Dm5ColkQ2ExH%*$&dO z0yQVGEt`;In@LNBs>n+}$ Date: Tue, 18 Oct 2022 19:29:33 +0200 Subject: [PATCH 02/19] Updated screenshot --- apps/aiclock/impl.png | Bin 2609 -> 2811 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/apps/aiclock/impl.png b/apps/aiclock/impl.png index 15415ef19a3c657d18699a517baa58426ceba873..291b4ad24dbe9606c4faa345e8144fb51a4c8d79 100644 GIT binary patch literal 2811 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 y(Ac*jsPXprf{DoZHdOzTr-lS+kTZ%^*WF zviHlHV_%X`jh%)Jp@bawp8MQ;?(^I~?jP^+dEWQ)`Ml5bCS0&E=0agn001si69emm zO8rM1Vn4{0&u3i^3hcVIu|9a(C%Oc{VWz2po^6=xO5TKBt2)|nX+I{!J3SjM)i&C0 z9XZiBnlX3%CVx8@E8@k6Rpsalcx$99&>~+i+N%Hn(K3PptdXr$Ezk=6zwIuQ$xIBD zV&I*SAk2wrvb*DQNM1#+v;a(p}qn6Z1t*+xF(eg8Opz50^^AD+y0?;3M+J4Bmm z^wVK}bJ_cWbvZL~r!1(q8dxu={cztU)<%h)yyh*_`E_ZL(4Im=Ui zanUPRu>6i}bE(s4s(jUbv!y9ZBFtoMRVStPD;eURdqznJ=}t#~(f1E0X)Y|f^nV*z zSSdZZ@_Xy|`*JCpP?`_l6}g5p$n^DwrystJ1iC2my>Do+Wky%;$+b(cGh|*K)75Ex zysclzUda}BrJQ{hZSET&C{WAD=_p@3cip^wNWzTeBOXsXo-h6!4ZU5}Cvbl@n>Vx* z?@x#mq-4w6Efs1CaR)pa{CH2}Q>xp?jmZ)jXH>FOs*qX9WveP&DX*2ES6et6gD(k7 zm3I2AbhJz5iShXgSM6&%!+gz}nc|5KII{1kPr{j7*;X1oBYfI7QBnzIu<~N8cW36- z&%+B~IYdFEdiiT#fLeuK>}7dYI8XLN&yGM=EZG8ihwbaLOvQof>C>CuPLJWOaR1n` zaS=qY%t?f~1eS5O6wOd|=bmMrBAA``Kxo2#UV7#Aqhi-YCSCLgW5DoT1Lo$!Z-JTjG z-0RveiCd==g)iFRO-VT34|IOp>2ReSPgr1p+zH;#IG31#OpY<@WannZrK@xK7=IY` zIo6L7v|{UFS(N{7(+&_RRqXCg3Eq#iD{I6KoNzUu%CMrg%BG3)2z{me3-(+LSyle( z^zKEx8L2<2ti%xH1`CV{GFsCXDHySON!vq+Tr-lU$ev=mIi-lI?fY%PR*hfj6KX2oDP+p zU&yfEfw{*?6`au<-C0FU46U4Tx>d`*ni|FB4r;>D(5WU$OvnX62x!3~ZiX|0)VF>6Co^NFADPPbS7_inA3q_Q+#pLY=D(V)BZS z5QYl0Bb}&5&LgFC{sfewoNfI&GG6=gQq&3sMs-oE61sV37mjbZ2K?VF?_-7@_+$(~ zepXCxMX(dXd0RMa??*s&Yj9K3ek~j{(ayoR$<-@~2+UmsqNTE_r+tfKS=}h{ ze~oo{CiOxxl57BJhIZ7N14)oN{ZDZal$&Aj@gV@Aym_)S{0}+)Bi>&-yP0WcyxpV& z@>5H=H4y*pFD!_kDWIF*dunWXa$G_NgDZIUHh*#muYnYw7v>^$@3)k(x7gIfs6iS! zo(6swyLyHZrd~P~PTJP7_Iqw!#reGm)2{eKVNUA_4*T^#R|I1Gh$OcyVO(o`5=VAY zmN@TS4NN_KR;JgbhNDkK8c~y!m9|9hr`OZVk7x*yKIFu7uUF1u$0++?-V0~mW71me z01n>rRja;q2z%Ml9w7oWVL=v;IZELB`p0HkLaWI+><~ah6tlT0Jxuy9g43M_X3TUS zZJuCTygjn-mmxk8k_5cgw(7*ickTqH!%AM+jl3t@Kom`VEevYpw}@Ii!C=`}>dsPZ zXqeEn;#S?Xqd6hlnWBbU)sJ*{`Xc$dVMyG#!A5k)p$2Ydl>D`hW1c{w3ys?_&*{LZ zMFVjK2&&7nCu~&5+*#gqD_{h{dV8(gwLJY4arI`%ejW_UlbCMoh;6njF4lRoM~u=7e#(!nhXxfF$%2)qFA9&RWt8zjWF& z>FLLF2uN(|%8~<8Ra{s`b+Z0;Ja15@FlbC1PW*J;fn*$>?QQkptz9*|wUINm(XvIE z0)VpbveLw~RG?6)(7R)QAvnV&*EOU7G(M?n@aH6j21g7=T|-s<4Z&H39iOUk5r1Dy e6m;j=E&3l From 070e4d1323b665541a31f617b2ef3da12c6573bb Mon Sep 17 00:00:00 2001 From: David Peer Date: Tue, 18 Oct 2022 19:49:37 +0200 Subject: [PATCH 03/19] Minor changes --- apps/aiclock/aiclock.app.js | 2 +- apps/aiclock/impl.png | Bin 2811 -> 2743 bytes 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/aiclock/aiclock.app.js b/apps/aiclock/aiclock.app.js index caf8ac9b1..ecac5f2dc 100644 --- a/apps/aiclock/aiclock.app.js +++ b/apps/aiclock/aiclock.app.js @@ -137,7 +137,7 @@ function drawDigits(){ g.drawLine(cx+w/2+7, 120, cx+w/2+7, 140+20); // And the 7set text - g.setColor("#999"); + g.setColor("#BBB"); g.drawString("88:88", cx, 140); g.drawString("88:88", cx+1, 140); g.drawString("88:88", cx, 141); diff --git a/apps/aiclock/impl.png b/apps/aiclock/impl.png index 291b4ad24dbe9606c4faa345e8144fb51a4c8d79..92374b68059bb87f00feb41525d8b6dcb9d91c87 100644 GIT binary patch delta 2722 zcmV;T3SIU46}J_TF@JGML_t(|UhSRHmYg^YM0@`Kqh}A3kPt7ns%!}?yXIw279*t6 zMaVYY{q_C*{r%CO6iBMTmjF(hIl29#fB+Tk>VY$7PrmD2 z2r-ab0af7K`P<%m0lYl|xdjlwx%0QZ_X2o(1ab=?fOF?>d+(=R2i8aR=3?{f>p*3` zKLI>nPNwuo0F!A^1ttXx9zHF=`c!gE=F5a@Bgq;CxKfYhLXzPZ(8ThuhK;oOyJk@EowRa3JHYSXw>t-Gq__47q*{cIyUqNHuICRRy*H zwT_pnpb%Tt&#G!=!dX9&2_ACOAZ<&!N!+ZTO1Anu>-b%jniXKQqP4(B07hcrW|jOs50b62PkxS=Tv^BToUVeL$;k z>+yfrrz8H4wnjbI@IEJ14~zug1F!`VGvTqWZymQ{WZH~$MC+Ch3uCUFd)J%87(wIVf1kZYiFGCHUNqpA*$LlVp+ zZUkVYM;-;3t>CSA(8=-0H3!rCztfkW#N7dcKz=8*1-^Csu*vk(J?#Sn2;y&R^2l5( zYODbMtt?Vitb|*~Eg0A}Sj6WRIH)b5r5TM4;>(OUns#<4)6Nn_g%w4X*> z2!F=U=&{SKLX>buL4?fwqktH#ytO9*>aW-JJ>XsvU{sji-6dplh9tS?`iR}$_ysVk z++^cWkkACPk9g$zp5V56apZ{=;Y%+P%k{v$Li9XVuh(KGM58`>ozJYsAUBzpUyL0A z%&65ED}bGZB+Uq5Qm~bVGdJC|61M4SQwI8Iwx z-dKUHH!?QP`!b=s1AIPeW?JlCCR+;Re+q;Fd|pW)i@Hb!TmeSk+=>iHw)axtF@RN( z_X6vwXx#wr*{M-`@l=}Ez0MR{$;?|`>!w1H^(f#1u=U9V)G>jKDy4C!0`34`rGM>d zD~|I8vH(RDaO;6v7wiSuf*B1`F5+nf$yfxJF+o)Jz9u=-@rG_PyRWg{a(9^~6^ znCl{61;yCY*f|uK7T~Kqp743vntvmOdwY=r;4?*@@Oj$W8=-fjPtgM-67_CZYlja} zciu6}0Ib!Ec_EARY&n461{rx0sOtM6y)3{_gN%S%rcEG^gS}hZh z7X&X4?{S6zE_4&TeIUJcmH@se-vjSRudJ#&j=cbGykTa^+xrEC0)N+17C*i{z#~-` zmsumD6xbHv9&k0;io&qp?v?-x-hNTpr`!accv-qUhi935-_P?z(^i+}PWO>GCEi=}%L1MgWhm4OZ2x$P0 z5MV}tz2l6EQ2>*fVk;A}DiM`jGPHk&vvFG2ii%MHTgnd}FB2E>(RhzXXU$I}{5NBq z2H;sfkx_%8tba&IVq2RV5x}56-HnUzC&FgwdrxH_(W!Rsvg^QTbz-XM2pH7_6kFjQ z{*3sEo-2UCb>M6jxRqGs(fOm01xpm_L?yS^ z^$33=Y<~)1BEx8 zw_>)ok|Qc!txw*e0(%0<+L|6XYa`l@Rog6#{hOc9>Vy zVdA;2o>-t=?e@mmictXfs_J-N&rI42T*ok)rlMjLz+?t{D^=?Cr**BU z7zMDU`~%0?VZQ-3QUfTvE6oU;@Vz?MQfKD7eV06fbVTu+@X zIXA5W)4a?xtwM5aY6S%F)aj9PmIBLeC0l{(_!{jBQiDM&JT?jXZ7}g#g|*^=kyK9vgU# cJZ>Ase{~Wm5m>Wt-2eap07*qoM6N<$f?Asw2LJ#7 literal 2811 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 y(Ac*jsPXprf{DoZHdOz Date: Wed, 19 Oct 2022 13:40:10 +0100 Subject: [PATCH 04/19] settings .50: Add Bangle.js 2 touchscreen calibration - for 2v16 or 2v15 cutting edge builds --- apps/setting/ChangeLog | 1 + apps/setting/README.md | 1 + apps/setting/metadata.json | 2 +- apps/setting/settings.js | 85 ++++++++++++++++++++++++++++++++++++++ 4 files changed, 88 insertions(+), 1 deletion(-) diff --git a/apps/setting/ChangeLog b/apps/setting/ChangeLog index 9b88f0073..a11995dd4 100644 --- a/apps/setting/ChangeLog +++ b/apps/setting/ChangeLog @@ -54,3 +54,4 @@ Improve "Turn Off" user experience 0.48: Allow reading custom themes from files 0.49: Now reloads settings properly after 'Calibrate Battery' +0.50: Add Bangle.js 2 touchscreen calibration - for 2v16 or 2v15 cutting edge builds diff --git a/apps/setting/README.md b/apps/setting/README.md index 657b96f71..abf968f62 100644 --- a/apps/setting/README.md +++ b/apps/setting/README.md @@ -33,6 +33,7 @@ This is Bangle.js's settings menu * On Bangle.js 2 when locked the touchscreen is turned off to save power. Because of this, `Wake on Touch` actually uses the accelerometer, and you need to actually tap the display to wake Bangle.js. * **Twist X** these options adjust the sensitivity of `Wake on Twist` to ensure Bangle.js wakes up with just the right amount of wrist movement. +* **Calibrate** on Bangle.js 2, pop up a screen allowing you to calibrate the touchscreen (calibration only works on 2v16 or 2v15 cutting edge builds) ## Locale diff --git a/apps/setting/metadata.json b/apps/setting/metadata.json index d209eafc3..c114e9daf 100644 --- a/apps/setting/metadata.json +++ b/apps/setting/metadata.json @@ -1,7 +1,7 @@ { "id": "setting", "name": "Settings", - "version": "0.49", + "version": "0.50", "description": "A menu for setting up Bangle.js", "icon": "settings.png", "tags": "tool,system", diff --git a/apps/setting/settings.js b/apps/setting/settings.js index 77e3fdd87..36af93a8a 100644 --- a/apps/setting/settings.js +++ b/apps/setting/settings.js @@ -491,6 +491,10 @@ function showLCDMenu() { } } }); + if (BANGLEJS2) + Object.assign(lcdMenu, { + /*LANG*/'Calibrate': () => showTouchscreenCalibration() + }); return E.showMenu(lcdMenu) } @@ -774,4 +778,85 @@ function showAppSettings(app) { } } +function showTouchscreenCalibration() { + Bangle.setUI(); + // disable touchscreen calibration (passed coords right through) + Bangle.setOptions({touchX1: 0, touchY1: 0, touchX2: g.getWidth(), touchY2: g.getHeight() }); + + var P = 32; + var corners = [ + [P,P], + [g.getWidth()-P,P], + [g.getWidth()-P,g.getHeight()-P], + [P,g.getHeight()-P], + ]; + var currentCorner = 0; + var currentTry = 0; + var pt = { + x1 : 0, y1 : 0, x2 : 0, y2 : 0 + }; + + function showTapSpot() { + var spot = corners[currentCorner]; + g.clear(1); + g.drawLine(spot[0]-32,spot[1],spot[0]+32,spot[1]); + g.drawLine(spot[0],spot[1]-32,spot[0],spot[1]+32); + g.drawCircle(spot[0],spot[1], 16); + var tapsLeft = (1-currentTry)*4+(4-currentCorner); + g.setFont("6x8:2").setFontAlign(0,0).drawString(tapsLeft+" taps\nto go", g.getWidth()/2, g.getHeight()/2); + } + + function calcCalibration() { + g.clear(1); + // we should now have 4 of each tap in 'pt' + pt.x1 /= 4; + pt.y1 /= 4; + pt.x2 /= 4; + pt.y2 /= 4; + // work out final values + var calib = { + x1 : Math.round(pt.x1 - (pt.x2-pt.x1)*P/(g.getWidth()-P*2)), + y1 : Math.round(pt.y1 - (pt.y2-pt.y1)*P/(g.getHeight()-P*2)), + x2 : Math.round(pt.x2 + (pt.x2-pt.x1)*P/(g.getWidth()-P*2)), + y2 : Math.round(pt.y2 + (pt.y2-pt.y1)*P/(g.getHeight()-P*2)) + }; + Bangle.setOptions({ + touchX1: calib.x1, touchY1: calib.y1, touchX2: calib.x2, touchY2: calib.y2 + }); + var s = require("Storage").readJSON("setting.json",1)||{}; + s.touch = calib; + require("Storage").writeJSON("setting.json",s); + g.setFont("6x8:2").setFontAlign(0,0).drawString("Calibrated!", g.getWidth()/2, g.getHeight()/2); + // now load the main menu again + setTimeout(showLCDMenu, 500); + } + + function touchHandler(_,e) { + var spot = corners[currentCorner]; + // store averages + if (spot[0]*2 < g.getWidth()) + pt.x1 += e.x; + else + pt.x2 += e.x; + if (spot[1]*2 < g.getHeight()) + pt.y1 += e.y; + else + pt.y2 += e.y; + // go to next corner + currentCorner++; + if (currentCorner>=corners.length) { + currentCorner = 0; + currentTry++; + if (currentTry==2) { + Bangle.removeListener('touch', touchHandler); + return calcCalibration(); + } + } + showTapSpot(); + } + Bangle.on('touch', touchHandler); + + showTapSpot(); +} + showMainMenu(); From 13fd18ff8ca185a94779042b645b829f055d72d7 Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Wed, 19 Oct 2022 15:33:41 +0100 Subject: [PATCH 05/19] Add option to send usage stats --- core | 2 +- index.html | 4 ++++ loader.js | 48 ++++++++++++++++++++++++++++++++++++++++++++++-- 3 files changed, 51 insertions(+), 3 deletions(-) diff --git a/core b/core index 764197500..80de03d8e 160000 --- a/core +++ b/core @@ -1 +1 @@ -Subproject commit 76419750083a88ee7a569db3975ae1bdd6dc155a +Subproject commit 80de03d8e665c210dc3443d6869176c848ab103f diff --git a/index.html b/index.html index b141cffc9..a322da77b 100644 --- a/index.html +++ b/index.html @@ -151,6 +151,10 @@ Bluetooth Compatibility mode (limit to 20 byte writes) +