From 99fa71bf4e33147ad640264a2eabb521cf747eec Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Fri, 16 Dec 2022 15:16:25 +0000 Subject: [PATCH] new lcd clock app --- apps/lcdclock/ChangeLog | 1 + apps/lcdclock/app-icon.js | 1 + apps/lcdclock/app.js | 84 +++++++++++++++++++++++++++++++++++ apps/lcdclock/app.png | Bin 0 -> 12258 bytes apps/lcdclock/metadata.json | 14 ++++++ apps/lcdclock/screenshot.png | Bin 0 -> 2474 bytes 6 files changed, 100 insertions(+) create mode 100644 apps/lcdclock/ChangeLog create mode 100644 apps/lcdclock/app-icon.js create mode 100644 apps/lcdclock/app.js create mode 100644 apps/lcdclock/app.png create mode 100644 apps/lcdclock/metadata.json create mode 100644 apps/lcdclock/screenshot.png diff --git a/apps/lcdclock/ChangeLog b/apps/lcdclock/ChangeLog new file mode 100644 index 000000000..5560f00bc --- /dev/null +++ b/apps/lcdclock/ChangeLog @@ -0,0 +1 @@ +0.01: New App! diff --git a/apps/lcdclock/app-icon.js b/apps/lcdclock/app-icon.js new file mode 100644 index 000000000..ed3161c41 --- /dev/null +++ b/apps/lcdclock/app-icon.js @@ -0,0 +1 @@ +atob("MDABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf///T//+f///T///Q///Qf//Sf//Qf//Pf//Qf//AP//Yf//f///c///f///f///fiD/f8f/fur/f9f/fir/f9f/f67/f9f/fy7/f8f/fz//f+//AAAAAAAAAAAAAAAAf///////TD/u///vQB/EX/9PUV/d3/9fSd/F3/9HWd/d3/9Xf9/d//9Hf///////f///////f///8Hg/fmefwPAffmecz/Offmecz/Offmecz/OffmAcwHOffngc8DPffn+c/zOffn+c/zOffn+c/zOffn+f8DAff///8Hg/f///8Pw/f///////f//////+P//////8AAAAAAAAAAAAAAAAAAAAAAAA") diff --git a/apps/lcdclock/app.js b/apps/lcdclock/app.js new file mode 100644 index 000000000..2bc23247c --- /dev/null +++ b/apps/lcdclock/app.js @@ -0,0 +1,84 @@ +Graphics.prototype.setFont7Seg = function() { + return this.setFontCustom(atob("AAAAAAAAAAAACAQCAAAAAAIAd0BgMBdwAAAAAAAADuAAAB0RiMRcAAAAAiMRiLuAAAcAQCAQdwAADgiMRiIOAAAd0RiMRBwAAAAgEAgDuAAAd0RiMRdwAADgiMRiLuAAAABsAAAd0QiEQdwAADuCIRCIOAAAd0BgMBAAAAAOCIRCLuAAAd0RiMRAAAADuiEQiAAAAAd0BgMBBwAADuCAQCDuAAAdwAAAAAAAAAAAIBALuAAAdwQCAQdwAADuAIBAIAAAAd0AgEAcEAgEAdwAd0AgEAdwAADugMBgLuAAAd0QiEQcAAADgiEQiDuAAAd0AgEAAAAADgiMRiIOAAAAEAgEAdwAADuAIBALuAAAdwBAIBdwAADuAIBAIOAIBALuADuCAQCDuAAAcAQCAQdwAAAOiMRiLgAAAA=="), 32, atob("BwAAAAAAAAAAAAAAAAcCAAcHBwcHBwcHBwcEAAAAAAAABwcHBwcHBwcHBwcHCgcHBwcHBwcHBwoHBwc="), 9); +} + + +{ // must be inside our own scope here so that when we are unloaded everything disappears + // we also define functions using 'let fn = function() {..}' for the same reason. function decls are global +let drawTimeout; + +// Actually draw the watch face +let draw = function() { + var x = R.x + R.w/2; + var y = R.y + R.h/2; + g.reset().setColor(g.theme.bg).setBgColor(g.theme.fg); + g.clearRect(R.x,barY+2,R.x2,R.y2-8); + var date = new Date(); + var timeStr = require("locale").time(date, 1); // Hour and minute + g.setFontAlign(0, 0).setFont("7Seg:5").drawString(timeStr, x, y+39); + // Show date and day of week + g.setFontAlign(0, 0).setFont("7Seg:2"); + g.setFontAlign(-1, 0).drawString(require("locale").meridian(date).toUpperCase(), R.x+6, y); + g.setFontAlign(0, 0).drawString(require("locale").dow(date, 1).toUpperCase(), x, y); + g.setFontAlign(1, 0).drawString(date.getDate(), R.x2 - 6, y); + + // queue next draw + if (drawTimeout) clearTimeout(drawTimeout); + drawTimeout = setTimeout(function() { + drawTimeout = undefined; + draw(); + }, 60000 - (Date.now() % 60000)); +}; + +// Show launcher when middle button pressed +Bangle.setUI({ + mode : "clock", + remove : function() { + // Called to unload all of the clock app + if (drawTimeout) clearTimeout(drawTimeout); + drawTimeout = undefined; + delete Graphics.prototype.setFont7Seg; + // remove info menu + clockInfoMenu.remove(); + delete clockInfoMenu; + clockInfoMenu2.remove(); + delete clockInfoMenu2; + // reset theme + g.setTheme(oldTheme); + }}); +// Load widgets +Bangle.loadWidgets(); +var R = Bangle.appRect; +R.x+=1; +R.y+=1; +R.x2-=1; +R.y2-=1; +R.w-=2; +R.h-=2; +var midX = R.x+R.w/2; +var barY = 80; +// Clear the screen once, at startup +let oldTheme = g.theme; +g.setTheme({bg:"#000",fg:"#fff",dark:true}).clear(1); +g.fillRect({x:R.x, y:R.y, w:R.w, h:R.h, r:8}).clearRect(R.x,barY,R.w,barY+1).clearRect(midX,R.y,midX+1,barY); +draw(); +setTimeout(Bangle.drawWidgets,0); + +let clockInfoDraw = (itm, info, options) => { + let texty = options.y+41; + g.reset().setFont("7Seg").setColor(g.theme.bg).setBgColor(g.theme.fg); + if (options.focus) g.setBgColor("#FF0"); + g.clearRect({x:options.x,y:options.y,w:options.w,h:options.h,r:8}); + + if (info.img) g.drawImage(info.img, options.x+2, options.y+2); + var title = clockInfoItems[options.menuA].name; + var text = info.text.toString().toUpperCase(); + if (title!="Bangle") g.setFontAlign(1,0).drawString(title.toUpperCase(), options.x+options.w-2, options.y+14); + if (g.setFont("7Seg:2").stringWidth(text)+8>options.w) g.setFont("7Seg"); + g.setFontAlign(0,0).drawString(text, options.x+options.w/2, options.y+40); + +}; +let clockInfoItems = require("clock_info").load(); +let clockInfoMenu = require("clock_info").addInteractive(clockInfoItems, { x:R.x, y:R.y, w:midX-2, h:barY-R.y-2, draw : clockInfoDraw}); +let clockInfoMenu2 = require("clock_info").addInteractive(clockInfoItems, { x:midX+2, y:R.y, w:midX-3, h:barY-R.y-2, draw : clockInfoDraw}); +} diff --git a/apps/lcdclock/app.png b/apps/lcdclock/app.png new file mode 100644 index 0000000000000000000000000000000000000000..6a117b52598202f852ce5013571c533806e30cc1 GIT binary patch literal 12258 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 literal 0 HcmV?d00001 diff --git a/apps/lcdclock/metadata.json b/apps/lcdclock/metadata.json new file mode 100644 index 000000000..d7d09b106 --- /dev/null +++ b/apps/lcdclock/metadata.json @@ -0,0 +1,14 @@ +{ "id": "lcdclock", + "name": "LCD Clock", + "version":"0.01", + "description": "A Casio-style clock, with ClockInfo areas at the top and bottom. Tap them and swipe up/down to toggle between different information", + "icon": "app.png", + "screenshots": [{"url":"screenshot.png"}], + "type": "clock", + "tags": "clock,clkinfo", + "supports" : ["BANGLEJS2"], + "storage": [ + {"name":"lcdclock.app.js","url":"app.js"}, + {"name":"lcdclock.img","url":"app-icon.js","evaluate":true} + ] +} diff --git a/apps/lcdclock/screenshot.png b/apps/lcdclock/screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..b0bb5934a9ce315db242f7da0fbd61afb93dcc7d GIT binary patch literal 2474 zcmV;b303xqP)Px;WJyFpRCr$Poa=g{It&2Q_kZY~kDSsa)F4?GTfpqkjVB;q^^F$sM7 zWqZDfYklL^+kw*;)V=@$PXeEQS?yV{a}S)p4&?>-MTQd8WrnqG>;jYL7a4&t2?c=` z0iK1xi%Szg;7gZ}|=PqHRU~=)lOE2m6fe zwjk6%SA&(=ufTxQf$JS5b>P;=BDK&_{&*f3XgX-Uqbve1*PtFU>0g0?CBw3gKwv95 z-Mse}0)cg~EThf@KKqkR)I>)+MBt?m0B-}g3d}ZQkigPMq%Mv7j*|HFc41B|K3#Ej z;5~f0@ZUFLq`;h5H27-w!24~&zA#du?%QL}S0-`McHpCNPj4Ek4!r-^Ix31(tS3q= zG0}>t9rrZG-2!g`wch>Q(CzkUKfi=H>XceBwVfJ)cLaL33R1^;9AH7|#yU5(b;pkKcfsF!t?{L`<|Jxo&EUnuJDehew z!O=RJ9k{1!oB@i8bLApv86dE&%6|mb0@q$HI-d5rRmSzK|7Z)LxzVe#-qCq{2rS+0 zdXszN$6b`bEBkGYp2&0WAOd^emBRcUf!U7r7en<$Mt@jl>^r8XTT1)mC(}mYXD*~Wb!ndTdM?U# z^vVKP)(g}-AAvmta_7>4bNO zz{$nGL-@)9--2(YQ;0hN-LC# zUYn^)zWXwAzy&zbI}rbjbE;70kakgfABWuPtrWR zm-0FaFnXT2kck7VPFPb$;0?LaB3iF!E%u0c2t4tZyjGz`&l@44^%@9_z*cuk%tK%V zE+L{d2?R!9t2-s;l@fR*5`FYhg7irePh0QEdPK8LJqI2MCh}U*kRx-udaP)+u4A<5 zbJ2arAN^CO(WeR4>s6N6x`nW^Kw!>+L*EYw%uQUVP@{t(FanQuF7$c`jKHBnjShyu z2t3-k(Cd{FICNzMgTSUa?O|9?oK)w)kcU7NfuZNXQAraA0$Bv;z*%I8JA?oN55deu zvIrn>7FpsBA%MU`FmsVC0tlQ%mbgO*An*{(TqKJC0%wsW?hpb9JOs1tB1eb*nrPN< zwvJ*~%4M4)0&8rTG^Ua?m2yGgNkaBswvsfJazWr;lO~O?Bu%AU5O|W1y_c;dO{H9> z3fuyrz2Wf8ZOIcIuUF8ILVPW^BcK1YTs+qu!6lRP@S8Z#Vmxz46v`t~^x7)rlDRen zzG>G(U=M+lxt@2UXD%IBU(hRYrUTP~|Co)y5ADF7!h7cGd#i3_bS}~HIEDBj5DnH7 z&ofu2rG8X&F46H27=cf1jutLD9s(mU0_#7JK1X`qjh?w9P9Z$`dFEPcaWpSFm*{wO zU^*}z*!r&byc<1p>A?DmRp(3xrUTP~_3vl)z#3N3T~BjO_P_>8oixPzn97QrA4g$+i5m;t4Z3F_#=!Xj&eTOSA@pwdZF46I3tu1;T(eb99LS!zc zx8TvaM91r0&qrY$KN5{zM|3;{{vi+zHaZ>x%LLd$>==1YWDvM5TqYL;M&LizMGF@l zk1YgSh||yJXyKycAus|Xu)Mt;dp$nl#6E_(OoZ^OLV-crx4MFx^ui%;kE1aJkz0l zL(Iwrfwkl(k3(R&0K-oq3m1pfWC92*Gh#$x0tj5VIHV>MKwy~> zBMK9E3%ukP{q$1dHIv#+2rS=JBJfR$`NU;>2uv4#q5{`l^ZJ~~ZwFqN!dBwCMSV)< o+lQR~2#m;2(cpUPY(1U#A8YpJ;fbu0#sB~S07*qoM6N<$g72V_`v3p{ literal 0 HcmV?d00001