From a382c6bd4f785a49357712781dcb72c7ce44233b Mon Sep 17 00:00:00 2001 From: crazysaem Date: Wed, 22 Dec 2021 22:28:51 +0000 Subject: [PATCH] touchtimer: initial creation --- apps.json | 16 +++++++ apps/touchtimer/ChangeLog | 1 + apps/touchtimer/README.md | 3 ++ apps/touchtimer/app-icon.js | 1 + apps/touchtimer/app.js | 92 ++++++++++++++++++++++++++++++++++++ apps/touchtimer/app.png | Bin 0 -> 1770 bytes 6 files changed, 113 insertions(+) create mode 100644 apps/touchtimer/ChangeLog create mode 100644 apps/touchtimer/README.md create mode 100644 apps/touchtimer/app-icon.js create mode 100644 apps/touchtimer/app.js create mode 100644 apps/touchtimer/app.png diff --git a/apps.json b/apps.json index e5e9f8f02..33dae37c7 100644 --- a/apps.json +++ b/apps.json @@ -5062,5 +5062,21 @@ {"name":"ltherm.app.js","url":"app.js"}, {"name":"ltherm.img","url":"icon.js","evaluate":true} ] + }, + { + "id": "touchtimer", + "name": "Touch Timer", + "shortName": "Touch Timer", + "version": "0.01", + "description": "Quickly and easily create a timer touch-only.", + "icon": "app.png", + "tags": "tools", + "supports": ["BANGLEJS2"], + "readme": "README.md", + "storage": [ + { "name": "touchtimer.app.js", "url": "app.js" }, + { "name": "touchtimer.boot.js", "url": "boot.js" }, + { "name": "touchtimer.img", "url": "app-icon.js", "evaluate": true } + ] } ] diff --git a/apps/touchtimer/ChangeLog b/apps/touchtimer/ChangeLog new file mode 100644 index 000000000..193a476aa --- /dev/null +++ b/apps/touchtimer/ChangeLog @@ -0,0 +1 @@ +0.01: Initial creation of the touch timer app \ No newline at end of file diff --git a/apps/touchtimer/README.md b/apps/touchtimer/README.md new file mode 100644 index 000000000..99c755639 --- /dev/null +++ b/apps/touchtimer/README.md @@ -0,0 +1,3 @@ +# Touch Timer + +Quickly and easily create a timer touch-only. diff --git a/apps/touchtimer/app-icon.js b/apps/touchtimer/app-icon.js new file mode 100644 index 000000000..d58446bcc --- /dev/null +++ b/apps/touchtimer/app-icon.js @@ -0,0 +1 @@ +require("heatshrink").decompress(atob("mEwwkE/4A3mUQIAMRkYWQkBaFiQWQgMjn8zGYUDCxkxFA3zD4MfCxXygECMAURiReCDAM/IpUBFIJ2CAAIeB+ZJKBYI8BCwMBiABBDARSBC5EwFwMwEwUwh5FCEIJhJiEfGIIXC+IQBSwQeBNYR1Gn4xB+MDDYITBiEzFoIOCC4vwEAIxBAwQzBAoQtCBgaNEh4iEAwMwRQXxHgRnBLwsvFQJdCFoIGBl55DH4QAEEIK/BC4KjBC4RECiED+RnBXooxCn4uBKwPwgIiB+fxgQQCRwgeBLwRbBkAXBh5yCBwoACEAoVBC4fwJ4I+DC5EjJQQXDBYP/kJWDC4qmBBYYXFfIQXKiQvUL6AXGR5LzBR4YXIBAS/BC4UCeAQOFC4rvDN4LvCFYMgd4IXJmEABgMxC4bWBiADDC45EBZIRHBMYINCBQQXIIgIkB//wgIFDmBKBC5QNB+UDboU/kEzgCRBC5QTBNwUxLoZRDC5J5EmAqBkEAiYMCC5XzFIMRkECAgILDC5YYDAAUBIoQXNDAMhiMRkYJEC5oAKC7qKBACDfCK4IWRPwjqBkczAB0yGAcQGgYAOmByCfAYAP+MBC4QWR//yC4ciACMhC4YATC4T9BACUSLiQAdA=")) \ No newline at end of file diff --git a/apps/touchtimer/app.js b/apps/touchtimer/app.js new file mode 100644 index 000000000..7ffce959f --- /dev/null +++ b/apps/touchtimer/app.js @@ -0,0 +1,92 @@ +var DEBUG = true; + +var main = () => { + var button0 = new Button({ x1: 0, y1: 35, x2: 58, y1: 70 }, 0); + + button0.draw(); + + button0.onClick((value) => { + log("button with value clicked"); + log(value); + }); +}; + +// lib functions + +var log = (message) => { + if (DEBUG) { + console.log(JSON.stringify(message)); + } +}; + +var touchHandlers = []; + +Bangle.on("touch", (_button, xy) => { + touchHandlers.forEach((touchHandler) => { + touchHandler(xy); + }); +}); + +var BUTTON_BORDER_WITH = 2; + +class Button { + constructor(position, value) { + this.position = position; + this.value = value; + + this.onClickCallbacks = []; + + touchHandlers.push((xy) => { + var x = xy.x; + var y = xy.y; + + if ( + x >= this.position.x1 && + x <= this.position.x2 && + y >= this.position.y1 && + y <= this.position.y2 + ) { + this.onClickCallbacks.forEach((onClickCallback) => + onClickCallback(this.value) + ); + } + }); + } + + draw() { + g.clear(); + + g.setColor(g.theme.fg); + g.fillRect( + this.position.x1, + this.position.y1, + this.position.x2, + this.position.y2 + ); + + g.setColor(g.theme.bg); + g.fillRect( + this.position.x1 + BUTTON_BORDER_WITH, + this.position.y1 + BUTTON_BORDER_WITH, + this.position.x2 - BUTTON_BORDER_WITH, + this.position.y2 - BUTTON_BORDER_WITH + ); + + g.setColor(g.theme.fg); + g.setFontAlign(0, 0); + g.setFont("Vector", 40); + g.drawString( + this.value, + this.position.x2 - this.position.x1, + this.position.y2 - this.position.y1 + ); + } + + onClick(callback) { + this.onClickCallbacks.push(callback); + } +} + +// start main function + +main(); diff --git a/apps/touchtimer/app.png b/apps/touchtimer/app.png new file mode 100644 index 0000000000000000000000000000000000000000..8ccdb17f0cc322440aeb52d649f1c6dededacef4 GIT binary patch literal 1770 zcmVPx#1ZP1_K>z@;j|==^1poj7novwsMgRZ*{{H^*^782D=;`U{`1ts_xw&+7bU!~o z8yg!32L}QI0t^fcBO@bDPELr3h|<#1{r&yo;^Gz-761SME-o&YmzVbT_Ve@ec6N3N z2?+}e3rkB&wY9b1-{0Ka+{((zsi~=VcXu>2Gy?+z9v&X0rKQHk#wjT&nVFgK@$nE4 z5bEmcp`oD&2nZ1o5tx{m`}_O1x3`0XgJNQ0Qc_Y?RaI(gYLStV%gf9B{QT?d>t|V!Nl8grSy?M9D**uk4-XHG zjg8ye+u`Bi)YQ~bQBlRk#iOI6aBy%$L`2}=;2j+uHa0f-`T6?#`ZYB*FE20j^z;e} z3MVHgV`F1zXlUo>=YM~H)6>(=&dv=D4Js-s-rn9}VPUeeva_?Z6B83NGc#pnWv#8P zudlE5_4SO5j2Rgjd3kvzCMM?Q<_-=H1_lO3Mn<@}xM^u=U|?XLo}TXR?zFVDhK7dl z@bJ96yk=%*uCA^svsO%yB<21BVPrBEp-3K^DET4*9!5oKi- zm8lsiWfv>cEV|z>|4ZL<_HxM%jUVds%ihcLIq&V9cld9xjEk_2SLLvbw?$qT6|HG8 zu@ff7*;V7{#78D@1c^zLREIgq*E>k(jS7umt&^o5ltsy+*CnHj2^PfPDx=(% zgZ1UyP@!T&RQg#}4O@Ud%{yPFUb9gaut{nxuEk;pZ&$e?mePF(?hJBs-CeG`v1Kb+ zACCstJ@*FazYp8!NKrw>r0r}(auaJJki7#DLGEnkE_ikTyQA5H$||<1q~d=1_Mnk` zK(AQZxP0$}bj2B657Cv1eQd5ZYJ;@%VMNGw1|9((-A^7sx|hw5$*c6Z>{SP{4|1D| z8blo86FAJ3HSEOPBeFM!Kz0H7%%hfzC)uvD2Aw?W!Bc#?vIJ;lOle4XhTeUsNU;~o z9(B__PK9+E`7EqGd`^mMU3~snNLc>@H_PTqZ#$A5GKXOb_#$4Sqfm;+S#MFonz|lN zlctxs)q^I^HliU;a5Y}x&f{`qugds?g3PiPo<&*IUc>8rLxput@=YYkB7MLqo*ot^ z^9!R!XspCx!%TG|x%X z6#6Pmg!3BvrI_l~-W?R)W4Zp8UZ5W)g1v?dV29;>ZeJ1-R=7A1uv`3$G!taIKiD7B zjq~NhC*5bqht4do_ajr`;vv$z1t>{Wg11!;ra`=Vxj0M&d`y0#*9t%7B~QP|`UO+* z87WUO6|9$epjslRYvz^D>9HCWiH@5{Ub^RzGt~is7)3;XCTxwih$f7By?$G3xgL* zGs&J!gI~dD0`U8J9Vh*1T(0|t)$)Sh@`*U!KFs#(^b M07*qoM6N<$f}*WUg8%>k literal 0 HcmV?d00001