From 2b7529cdc6668fa7bb29ff49c0589f75df52eea4 Mon Sep 17 00:00:00 2001 From: Hugh Barney Date: Sat, 16 Sep 2023 10:04:36 +0100 Subject: [PATCH 1/5] widhrt2 - heart rate widget with digits for bpm, uses lato font, heart icon goes red when HRM is on --- apps/widhrt/widget.png | Bin 1319 -> 5452 bytes apps/widhrt2/README.md | 13 ++++++++ apps/widhrt2/icons8-heart-20.png | Bin 0 -> 5452 bytes apps/widhrt2/metadata.json | 15 ++++++++++ apps/widhrt2/screenshot.png | Bin 0 -> 1060 bytes apps/widhrt2/widget.js | 49 +++++++++++++++++++++++++++++++ apps/widhrt2/widget.png | Bin 0 -> 1319 bytes 7 files changed, 77 insertions(+) create mode 100644 apps/widhrt2/README.md create mode 100644 apps/widhrt2/icons8-heart-20.png create mode 100644 apps/widhrt2/metadata.json create mode 100644 apps/widhrt2/screenshot.png create mode 100644 apps/widhrt2/widget.js create mode 100644 apps/widhrt2/widget.png diff --git a/apps/widhrt/widget.png b/apps/widhrt/widget.png index 8060d93ecdbf3a696125006cb00339e41b80d205..d0e801502331718bd0f3c620e3e06d514a21fb08 100644 GIT binary patch literal 5452 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 e1;Vfwh3qe(&t=QFv!7!C0000 { + hp.apply(Bangle, arguments); + WIDGETS.widhrt.draw(); + }; + + var bp = Math.round(Bangle.getHealthStatus().bpm||Bangle.getHealthStatus("last").bpm); + + Bangle.on('HRM',(e)=>{ + //console.log('onHrm'); + if (e && e.confidence>60) bp = Math.round(e.bpm); + if (bp == 0) bp = Math.round(Bangle.getHealthStatus().bpm||Bangle.getHealthStatus("last").bpm); + WIDGETS["widhrt"].draw(); + }); + + WIDGETS.widhrt={area:"tr",sortorder:9,width:56,draw:function() { + g.reset(); + // Lato from fonts.google.com, Actual height 17 (17 - 1), Numeric only + g.setFontCustom(atob("AAAAABwAAOAAAgAAHAADwAD4AB8AB8AA+AAeAADAAAAOAAP+AH/8B4DwMAGBgAwMAGBgAwOAOA//gD/4AD4AAAAAAAABgAAcAwDAGAwAwP/+B//wAAGAAAwAAGAAAAAAAAIAwHgOA4DwMA+BgOwMDmBg4wOeGA/gwDwGAAAAAAAAAGAHA8A4DwMAGBhAwMMGBjgwOcOA+/gDj4AAAAABgAAcAAHgADsAA5gAOMAHBgBwMAP/+B//wABgAAMAAAAAAAgD4OB/AwOYGBjAwMYGBjBwMe8Bh/AIHwAAAAAAAAAfAAP8AHxwB8GAdgwPMGBxgwMOOAB/gAH4AAAAAAABgAAMAABgAwMAeBgPgMHwBj4AN8AB+AAPAABAAAAAAAMfAH38B/xwMcGBhgwMMGBjgwP+OA+/gDj4AAAAAAAAOAAH4AA/gQMMGBgzwME8BhvAOPgA/4AD8AAEAAAAAAGAwA4OAHBwAAA="), 46, atob("BAgMDAwMDAwMDAwMBQ=="), 21+(1<<8)+(1<<16)); + //console.log("hrm=" + bp); + + var text_w = g.stringWidth(bp); + var hw = 20; // heart image width + var w = text_w + 3 + hw + 2; + // we need this to be able to shrink or grow on the 3,2,1 digit bpm + if (w != this.width) {this.width = w; setTimeout(() => Bangle.drawWidgets(),10); return;} + //var h = 12; // height + + g.setColor(g.theme.bg); + g.fillRect(this.x, this.y, this.x + this.width, this.y + 23); // erase background + g.setColor(g.theme.fg); + g.setFontAlign(-1, 0); + g.drawString(bp, this.x, this.y + 12); + var x = this.x + text_w + 3; + + // draw image + if (Bangle.isHRMOn()) { + g.setColor('#f00'); // on = red + } else { + g.setColor(g.theme.dark ? '#fff' : '#000'); // off + } + + // image converter https://www.espruino.com/Image+Converter ; settings to get a fillable image + // 1 bit bw, transparency? Y, transparent bg, white heart (must be white for color fill) + g.drawImage(atob("FBSBAAAAAAAAAAAB+fg//8f//n//5//+f//n//5//+P//D//wf/4D/8Af+AB+AAPAABgAAAA"), x, 1+this.y); + }}; +})(); diff --git a/apps/widhrt2/widget.png b/apps/widhrt2/widget.png new file mode 100644 index 0000000000000000000000000000000000000000..8060d93ecdbf3a696125006cb00339e41b80d205 GIT binary patch literal 1319 zcmV+?1=#wDP)*_*xCvc+UseB&$KoZBRek}XW9E+%f8__R^QMI$~8a8rq*(+P2#j^GLR zV6WhBxh>lZr?x#2dUm zQd$4|h%az?*cbd3YZ_n0npMWA8S`Jsz?zp|AE{iqf5aEO`cFo%d&CzwhSiO4V{Jnr z#G40I4Mkz^isOn;ZdJ3gfGfGSWO4F-`Bwvt^_ySGnTWa`U@v25s z#245mRjw4m)2p}$laG=iDump-T*FlAoTTN_wcQqfi8hS;3TrLlw)pL9f4h$Qzi?RV?QOqh)j%dINHsguJ?^?_bk|yNj zGGp{Uof~1zIm6@07$i+7clq-%-_;YjGkfud{ye8RC!1a;^t9xx_L;dor zQ;@y6Gw$Xx(blD8~H;cF%H--q?dTo!z!T$z;O0p+=`p~6mb5}(j;DTfB!izahwhsW6=kZ;d(zZvrYq5L__N!v{RYLW)80Zgh_)LJ}go5i(eyE9-koUoRCde$^W zydsB8qV4H6@r2d62}X-NaVV>V?b4>;Wq?VsOG{#FR_Q=nt~2Vd>SH;|%xGw(i@2W% z6<(B&vS;YeL=t{aJGdiRrORME9LjXGgp4`d1ps_jb^&0>WaAGqj%FAyhwb*{1N796 zkijB$$|u4E+W~;B28(dOTy$m|xHJ$Cb}(h+zI6MKM<_--2Y}}%(C?^BVPAS-=U%#) zf_Sn&!(rHK%D-@kG>h#3cqY!a1K>fD7WbO+JLCrj6T!}Od+MIF+;iWM41bDH;c0-l zc#2TrK9b>gr`g)${^TE}4M6=BW!tigvhv4O8axRwF56UU+)Y`z9h9vlZhJl!S}5z< zFUf5Fuv-7{2LK$4ht&FqEu@wI!Z77Em<*crQ!1KMEVsW-HuA@Sz~cZh86pVWlWY_} zPqFkhr)0TcGT90=wOyaNr&(v_4yrWRDj$PSQC_oMM{}Pg(>r$nGch0QSlFsD*Eea+ z_jjqu@KO0Vd_?))ZZ#>%YnrsQAC$;uFlT+DF|{?R)42Ua5*`NlTlrePw?%Dg-2#~m zD4h>frZ+xJGV;3!?L*nkNk-u#m1zw;PizEZ*+#<9w}~*^+5}_?Jddmg(0vS$JlQ=G dBuD_t Date: Sat, 16 Sep 2023 10:19:39 +0100 Subject: [PATCH 2/5] widhrt/widhrt2 Icon and README updates --- apps/widhrt/README.md | 3 +-- apps/widhrt/widget.png | Bin 5452 -> 1319 bytes apps/widhrt2/screenshot.png | Bin 1060 -> 2876 bytes 3 files changed, 1 insertion(+), 2 deletions(-) diff --git a/apps/widhrt/README.md b/apps/widhrt/README.md index dc1bb4388c..0cb1b984a7 100644 --- a/apps/widhrt/README.md +++ b/apps/widhrt/README.md @@ -3,8 +3,7 @@ A simple widget that shows the on/off status of the Heart Rate Monitor. -- Uses Bangle.isHRTOn(). Requires firmware v2.08.167 or later. -- Shows in grey when the HRT is off +- Shows in white/black when the HRT is off - Shows in red when the HRT is on Written by: [Hugh Barney](https://github.com/hughbarney) For support diff --git a/apps/widhrt/widget.png b/apps/widhrt/widget.png index d0e801502331718bd0f3c620e3e06d514a21fb08..8060d93ecdbf3a696125006cb00339e41b80d205 100644 GIT binary patch literal 1319 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 literal 1060 zcmV+<1l#+GP)Px&-bqA3RA@u(S+PzdF%X?V12hQ~@BzRNpah8m36N+A5FtqZftCs=5EanCZ%`nJ zlF(5=MFZjo0v|w%L@5$zAgAZt?0FsAyPMrpxYJrfY`h+O-kY&!#+x9b4*kO|0RWv& z7sKuCEp2RUphNslBof+Z-8&lx>im^TMGVJUcv@G4p%lifuXo=-4?IIZZkQAO0swbj zUtiPq_O|#rH#bKwFE2DPF+ufuT>yaq8lG=%ZfIv`M?CXb8;FC013EoD6+_n6)@XNk zw@a2r=r^l0JUmQaUti9;vhqwog6U_rS;=<0O=DwYLiqdp+nMC#-+or^ziUN%gf7R-23}GO-@esq_mu7^JM)1VC6A~DP@-X zF&=+ILqiS*mkXKL(DkcTTTlQ<-C;d7efN_}%WJs+sAZd)f6Hv3$VsQuqG|(}pa3Ah zxw$Fiba}s5Ex@|?+QeQ8n%+Z6G}+`_s5F~RN~KcbeGmYc6S7Wy1Jr5q2MCJ`*PiO$Fg)QyoK*j$}=YBtkA_E|QhEgLhqC5va&M;S3 zSLyEVuBR3b3L-K9wgMeWU0z<&)6)}OTwFL`9Bny}Um%eKFzo|bS$3fx1K{K1gGNS1 z1Zld&EuYVeLWUczX==4v&$nN{tjpsfu>gD=rxAY#?njY+Wg-F4@8VI&#Q>sUG0YsX e1;Vfwh3qe(&t=QFv!7!C0000 Date: Sat, 16 Sep 2023 10:23:47 +0100 Subject: [PATCH 3/5] widhrt2 README update --- apps/widhrt2/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/widhrt2/README.md b/apps/widhrt2/README.md index 2764d9ff54..7231e938fe 100644 --- a/apps/widhrt2/README.md +++ b/apps/widhrt2/README.md @@ -7,6 +7,7 @@ Monitor and the last measured value. - Shows in black or white (foreground colour) when the HRM is off - Does not power the HRM on or off. Relies on the Health app to do that. - Resizes widget based on value of heart rate +- Uses Lato font so looks consistant with Lato Pedometer and Yet Another Battery Widget Written by: [Hugh Barney](https://github.com/hughbarney) For support and discussion please post in the [Bangle JS From bae348703c2341d903d1a2084e3743afe6299933 Mon Sep 17 00:00:00 2001 From: Hugh Barney Date: Mon, 18 Sep 2023 21:57:16 +0100 Subject: [PATCH 4/5] widhrtplus - renamed id to widhrtplus --- apps/widhrt2/README.md | 14 --------- apps/widhrt2/icons8-heart-20.png | Bin 5452 -> 0 bytes apps/widhrt2/metadata.json | 15 ---------- apps/widhrt2/screenshot.png | Bin 2876 -> 0 bytes apps/widhrt2/widget.js | 49 ------------------------------- apps/widhrt2/widget.png | Bin 1319 -> 0 bytes 6 files changed, 78 deletions(-) delete mode 100644 apps/widhrt2/README.md delete mode 100644 apps/widhrt2/icons8-heart-20.png delete mode 100644 apps/widhrt2/metadata.json delete mode 100644 apps/widhrt2/screenshot.png delete mode 100644 apps/widhrt2/widget.js delete mode 100644 apps/widhrt2/widget.png diff --git a/apps/widhrt2/README.md b/apps/widhrt2/README.md deleted file mode 100644 index 7231e938fe..0000000000 --- a/apps/widhrt2/README.md +++ /dev/null @@ -1,14 +0,0 @@ -# Heart Rate Widget+ - -A simple widget that shows the on/off status of the Heart Rate -Monitor and the last measured value. - -- Shows in red when the HRM is on -- Shows in black or white (foreground colour) when the HRM is off -- Does not power the HRM on or off. Relies on the Health app to do that. -- Resizes widget based on value of heart rate -- Uses Lato font so looks consistant with Lato Pedometer and Yet Another Battery Widget - -Written by: [Hugh Barney](https://github.com/hughbarney) For support -and discussion please post in the [Bangle JS -Forum](http://forum.espruino.com/microcosms/1424/) diff --git a/apps/widhrt2/icons8-heart-20.png b/apps/widhrt2/icons8-heart-20.png deleted file mode 100644 index d0e801502331718bd0f3c620e3e06d514a21fb08..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5452 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 diff --git a/apps/widhrt2/widget.js b/apps/widhrt2/widget.js deleted file mode 100644 index c2fdda9d3b..0000000000 --- a/apps/widhrt2/widget.js +++ /dev/null @@ -1,49 +0,0 @@ -(function(){ - if (!Bangle.isHRMOn) return; // old firmware - var hp = Bangle.setHRMPower; - Bangle.setHRMPower = () => { - hp.apply(Bangle, arguments); - WIDGETS.widhrt.draw(); - }; - - var bp = Math.round(Bangle.getHealthStatus().bpm||Bangle.getHealthStatus("last").bpm); - - Bangle.on('HRM',(e)=>{ - //console.log('onHrm'); - if (e && e.confidence>60) bp = Math.round(e.bpm); - if (bp == 0) bp = Math.round(Bangle.getHealthStatus().bpm||Bangle.getHealthStatus("last").bpm); - WIDGETS["widhrt"].draw(); - }); - - WIDGETS.widhrt={area:"tr",sortorder:9,width:56,draw:function() { - g.reset(); - // Lato from fonts.google.com, Actual height 17 (17 - 1), Numeric only - g.setFontCustom(atob("AAAAABwAAOAAAgAAHAADwAD4AB8AB8AA+AAeAADAAAAOAAP+AH/8B4DwMAGBgAwMAGBgAwOAOA//gD/4AD4AAAAAAAABgAAcAwDAGAwAwP/+B//wAAGAAAwAAGAAAAAAAAIAwHgOA4DwMA+BgOwMDmBg4wOeGA/gwDwGAAAAAAAAAGAHA8A4DwMAGBhAwMMGBjgwOcOA+/gDj4AAAAABgAAcAAHgADsAA5gAOMAHBgBwMAP/+B//wABgAAMAAAAAAAgD4OB/AwOYGBjAwMYGBjBwMe8Bh/AIHwAAAAAAAAAfAAP8AHxwB8GAdgwPMGBxgwMOOAB/gAH4AAAAAAABgAAMAABgAwMAeBgPgMHwBj4AN8AB+AAPAABAAAAAAAMfAH38B/xwMcGBhgwMMGBjgwP+OA+/gDj4AAAAAAAAOAAH4AA/gQMMGBgzwME8BhvAOPgA/4AD8AAEAAAAAAGAwA4OAHBwAAA="), 46, atob("BAgMDAwMDAwMDAwMBQ=="), 21+(1<<8)+(1<<16)); - //console.log("hrm=" + bp); - - var text_w = g.stringWidth(bp); - var hw = 20; // heart image width - var w = text_w + 3 + hw + 2; - // we need this to be able to shrink or grow on the 3,2,1 digit bpm - if (w != this.width) {this.width = w; setTimeout(() => Bangle.drawWidgets(),10); return;} - //var h = 12; // height - - g.setColor(g.theme.bg); - g.fillRect(this.x, this.y, this.x + this.width, this.y + 23); // erase background - g.setColor(g.theme.fg); - g.setFontAlign(-1, 0); - g.drawString(bp, this.x, this.y + 12); - var x = this.x + text_w + 3; - - // draw image - if (Bangle.isHRMOn()) { - g.setColor('#f00'); // on = red - } else { - g.setColor(g.theme.dark ? '#fff' : '#000'); // off - } - - // image converter https://www.espruino.com/Image+Converter ; settings to get a fillable image - // 1 bit bw, transparency? Y, transparent bg, white heart (must be white for color fill) - g.drawImage(atob("FBSBAAAAAAAAAAAB+fg//8f//n//5//+f//n//5//+P//D//wf/4D/8Af+AB+AAPAABgAAAA"), x, 1+this.y); - }}; -})(); diff --git a/apps/widhrt2/widget.png b/apps/widhrt2/widget.png deleted file mode 100644 index 8060d93ecdbf3a696125006cb00339e41b80d205..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1319 zcmV+?1=#wDP)*_*xCvc+UseB&$KoZBRek}XW9E+%f8__R^QMI$~8a8rq*(+P2#j^GLR zV6WhBxh>lZr?x#2dUm zQd$4|h%az?*cbd3YZ_n0npMWA8S`Jsz?zp|AE{iqf5aEO`cFo%d&CzwhSiO4V{Jnr z#G40I4Mkz^isOn;ZdJ3gfGfGSWO4F-`Bwvt^_ySGnTWa`U@v25s z#245mRjw4m)2p}$laG=iDump-T*FlAoTTN_wcQqfi8hS;3TrLlw)pL9f4h$Qzi?RV?QOqh)j%dINHsguJ?^?_bk|yNj zGGp{Uof~1zIm6@07$i+7clq-%-_;YjGkfud{ye8RC!1a;^t9xx_L;dor zQ;@y6Gw$Xx(blD8~H;cF%H--q?dTo!z!T$z;O0p+=`p~6mb5}(j;DTfB!izahwhsW6=kZ;d(zZvrYq5L__N!v{RYLW)80Zgh_)LJ}go5i(eyE9-koUoRCde$^W zydsB8qV4H6@r2d62}X-NaVV>V?b4>;Wq?VsOG{#FR_Q=nt~2Vd>SH;|%xGw(i@2W% z6<(B&vS;YeL=t{aJGdiRrORME9LjXGgp4`d1ps_jb^&0>WaAGqj%FAyhwb*{1N796 zkijB$$|u4E+W~;B28(dOTy$m|xHJ$Cb}(h+zI6MKM<_--2Y}}%(C?^BVPAS-=U%#) zf_Sn&!(rHK%D-@kG>h#3cqY!a1K>fD7WbO+JLCrj6T!}Od+MIF+;iWM41bDH;c0-l zc#2TrK9b>gr`g)${^TE}4M6=BW!tigvhv4O8axRwF56UU+)Y`z9h9vlZhJl!S}5z< zFUf5Fuv-7{2LK$4ht&FqEu@wI!Z77Em<*crQ!1KMEVsW-HuA@Sz~cZh86pVWlWY_} zPqFkhr)0TcGT90=wOyaNr&(v_4yrWRDj$PSQC_oMM{}Pg(>r$nGch0QSlFsD*Eea+ z_jjqu@KO0Vd_?))ZZ#>%YnrsQAC$;uFlT+DF|{?R)42Ua5*`NlTlrePw?%Dg-2#~m zD4h>frZ+xJGV;3!?L*nkNk-u#m1zw;PizEZ*+#<9w}~*^+5}_?Jddmg(0vS$JlQ=G dBuD_t Date: Mon, 18 Sep 2023 21:58:08 +0100 Subject: [PATCH 5/5] widhrtplus - renamed id to widhrtplus --- apps/widhrtplus/README.md | 14 ++++++++ apps/widhrtplus/icons8-heart-20.png | Bin 0 -> 5452 bytes apps/widhrtplus/metadata.json | 15 +++++++++ apps/widhrtplus/screenshot.png | Bin 0 -> 2876 bytes apps/widhrtplus/widget.js | 49 ++++++++++++++++++++++++++++ apps/widhrtplus/widget.png | Bin 0 -> 1319 bytes 6 files changed, 78 insertions(+) create mode 100644 apps/widhrtplus/README.md create mode 100644 apps/widhrtplus/icons8-heart-20.png create mode 100644 apps/widhrtplus/metadata.json create mode 100644 apps/widhrtplus/screenshot.png create mode 100644 apps/widhrtplus/widget.js create mode 100644 apps/widhrtplus/widget.png diff --git a/apps/widhrtplus/README.md b/apps/widhrtplus/README.md new file mode 100644 index 0000000000..7231e938fe --- /dev/null +++ b/apps/widhrtplus/README.md @@ -0,0 +1,14 @@ +# Heart Rate Widget+ + +A simple widget that shows the on/off status of the Heart Rate +Monitor and the last measured value. + +- Shows in red when the HRM is on +- Shows in black or white (foreground colour) when the HRM is off +- Does not power the HRM on or off. Relies on the Health app to do that. +- Resizes widget based on value of heart rate +- Uses Lato font so looks consistant with Lato Pedometer and Yet Another Battery Widget + +Written by: [Hugh Barney](https://github.com/hughbarney) For support +and discussion please post in the [Bangle JS +Forum](http://forum.espruino.com/microcosms/1424/) diff --git a/apps/widhrtplus/icons8-heart-20.png b/apps/widhrtplus/icons8-heart-20.png new file mode 100644 index 0000000000000000000000000000000000000000..d0e801502331718bd0f3c620e3e06d514a21fb08 GIT binary patch literal 5452 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 literal 0 HcmV?d00001 diff --git a/apps/widhrtplus/widget.js b/apps/widhrtplus/widget.js new file mode 100644 index 0000000000..c2fdda9d3b --- /dev/null +++ b/apps/widhrtplus/widget.js @@ -0,0 +1,49 @@ +(function(){ + if (!Bangle.isHRMOn) return; // old firmware + var hp = Bangle.setHRMPower; + Bangle.setHRMPower = () => { + hp.apply(Bangle, arguments); + WIDGETS.widhrt.draw(); + }; + + var bp = Math.round(Bangle.getHealthStatus().bpm||Bangle.getHealthStatus("last").bpm); + + Bangle.on('HRM',(e)=>{ + //console.log('onHrm'); + if (e && e.confidence>60) bp = Math.round(e.bpm); + if (bp == 0) bp = Math.round(Bangle.getHealthStatus().bpm||Bangle.getHealthStatus("last").bpm); + WIDGETS["widhrt"].draw(); + }); + + WIDGETS.widhrt={area:"tr",sortorder:9,width:56,draw:function() { + g.reset(); + // Lato from fonts.google.com, Actual height 17 (17 - 1), Numeric only + g.setFontCustom(atob("AAAAABwAAOAAAgAAHAADwAD4AB8AB8AA+AAeAADAAAAOAAP+AH/8B4DwMAGBgAwMAGBgAwOAOA//gD/4AD4AAAAAAAABgAAcAwDAGAwAwP/+B//wAAGAAAwAAGAAAAAAAAIAwHgOA4DwMA+BgOwMDmBg4wOeGA/gwDwGAAAAAAAAAGAHA8A4DwMAGBhAwMMGBjgwOcOA+/gDj4AAAAABgAAcAAHgADsAA5gAOMAHBgBwMAP/+B//wABgAAMAAAAAAAgD4OB/AwOYGBjAwMYGBjBwMe8Bh/AIHwAAAAAAAAAfAAP8AHxwB8GAdgwPMGBxgwMOOAB/gAH4AAAAAAABgAAMAABgAwMAeBgPgMHwBj4AN8AB+AAPAABAAAAAAAMfAH38B/xwMcGBhgwMMGBjgwP+OA+/gDj4AAAAAAAAOAAH4AA/gQMMGBgzwME8BhvAOPgA/4AD8AAEAAAAAAGAwA4OAHBwAAA="), 46, atob("BAgMDAwMDAwMDAwMBQ=="), 21+(1<<8)+(1<<16)); + //console.log("hrm=" + bp); + + var text_w = g.stringWidth(bp); + var hw = 20; // heart image width + var w = text_w + 3 + hw + 2; + // we need this to be able to shrink or grow on the 3,2,1 digit bpm + if (w != this.width) {this.width = w; setTimeout(() => Bangle.drawWidgets(),10); return;} + //var h = 12; // height + + g.setColor(g.theme.bg); + g.fillRect(this.x, this.y, this.x + this.width, this.y + 23); // erase background + g.setColor(g.theme.fg); + g.setFontAlign(-1, 0); + g.drawString(bp, this.x, this.y + 12); + var x = this.x + text_w + 3; + + // draw image + if (Bangle.isHRMOn()) { + g.setColor('#f00'); // on = red + } else { + g.setColor(g.theme.dark ? '#fff' : '#000'); // off + } + + // image converter https://www.espruino.com/Image+Converter ; settings to get a fillable image + // 1 bit bw, transparency? Y, transparent bg, white heart (must be white for color fill) + g.drawImage(atob("FBSBAAAAAAAAAAAB+fg//8f//n//5//+f//n//5//+P//D//wf/4D/8Af+AB+AAPAABgAAAA"), x, 1+this.y); + }}; +})(); diff --git a/apps/widhrtplus/widget.png b/apps/widhrtplus/widget.png new file mode 100644 index 0000000000000000000000000000000000000000..8060d93ecdbf3a696125006cb00339e41b80d205 GIT binary patch literal 1319 zcmV+?1=#wDP)*_*xCvc+UseB&$KoZBRek}XW9E+%f8__R^QMI$~8a8rq*(+P2#j^GLR zV6WhBxh>lZr?x#2dUm zQd$4|h%az?*cbd3YZ_n0npMWA8S`Jsz?zp|AE{iqf5aEO`cFo%d&CzwhSiO4V{Jnr z#G40I4Mkz^isOn;ZdJ3gfGfGSWO4F-`Bwvt^_ySGnTWa`U@v25s z#245mRjw4m)2p}$laG=iDump-T*FlAoTTN_wcQqfi8hS;3TrLlw)pL9f4h$Qzi?RV?QOqh)j%dINHsguJ?^?_bk|yNj zGGp{Uof~1zIm6@07$i+7clq-%-_;YjGkfud{ye8RC!1a;^t9xx_L;dor zQ;@y6Gw$Xx(blD8~H;cF%H--q?dTo!z!T$z;O0p+=`p~6mb5}(j;DTfB!izahwhsW6=kZ;d(zZvrYq5L__N!v{RYLW)80Zgh_)LJ}go5i(eyE9-koUoRCde$^W zydsB8qV4H6@r2d62}X-NaVV>V?b4>;Wq?VsOG{#FR_Q=nt~2Vd>SH;|%xGw(i@2W% z6<(B&vS;YeL=t{aJGdiRrORME9LjXGgp4`d1ps_jb^&0>WaAGqj%FAyhwb*{1N796 zkijB$$|u4E+W~;B28(dOTy$m|xHJ$Cb}(h+zI6MKM<_--2Y}}%(C?^BVPAS-=U%#) zf_Sn&!(rHK%D-@kG>h#3cqY!a1K>fD7WbO+JLCrj6T!}Od+MIF+;iWM41bDH;c0-l zc#2TrK9b>gr`g)${^TE}4M6=BW!tigvhv4O8axRwF56UU+)Y`z9h9vlZhJl!S}5z< zFUf5Fuv-7{2LK$4ht&FqEu@wI!Z77Em<*crQ!1KMEVsW-HuA@Sz~cZh86pVWlWY_} zPqFkhr)0TcGT90=wOyaNr&(v_4yrWRDj$PSQC_oMM{}Pg(>r$nGch0QSlFsD*Eea+ z_jjqu@KO0Vd_?))ZZ#>%YnrsQAC$;uFlT+DF|{?R)42Ua5*`NlTlrePw?%Dg-2#~m zD4h>frZ+xJGV;3!?L*nkNk-u#m1zw;PizEZ*+#<9w}~*^+5}_?Jddmg(0vS$JlQ=G dBuD_t