From 3aa0e09f28d9b8d1179011594d8c4221e9ce36a6 Mon Sep 17 00:00:00 2001 From: Spioune <> Date: Tue, 9 Apr 2024 16:03:16 +0800 Subject: [PATCH 1/5] add Meridian Clock --- apps/meridian/ChangeLog | 1 + apps/meridian/README.md | 25 +++++ apps/meridian/app-icon.js | 1 + apps/meridian/app.js | 188 +++++++++++++++++++++++++++++++++++ apps/meridian/app.png | Bin 0 -> 1561 bytes apps/meridian/metadata.json | 17 ++++ apps/meridian/screenshot.png | Bin 0 -> 2074 bytes 7 files changed, 232 insertions(+) create mode 100644 apps/meridian/ChangeLog create mode 100644 apps/meridian/README.md create mode 100644 apps/meridian/app-icon.js create mode 100644 apps/meridian/app.js create mode 100644 apps/meridian/app.png create mode 100644 apps/meridian/metadata.json create mode 100644 apps/meridian/screenshot.png diff --git a/apps/meridian/ChangeLog b/apps/meridian/ChangeLog new file mode 100644 index 000000000..09953593e --- /dev/null +++ b/apps/meridian/ChangeLog @@ -0,0 +1 @@ +0.01: New Clock! diff --git a/apps/meridian/README.md b/apps/meridian/README.md new file mode 100644 index 000000000..5d750a965 --- /dev/null +++ b/apps/meridian/README.md @@ -0,0 +1,25 @@ +# Clock Name + +More info on making Clock Faces: https://www.espruino.com/Bangle.js+Clock + +Describe the Clock... + +## Usage + +Describe how to use it + +## Features + +Name the function + +## Controls + +Name the buttons and what they are used for + +## Requests + +Name who should be contacted for support/update requests + +## Creator + +Your name diff --git a/apps/meridian/app-icon.js b/apps/meridian/app-icon.js new file mode 100644 index 000000000..43e7bca3b --- /dev/null +++ b/apps/meridian/app-icon.js @@ -0,0 +1 @@ +require("heatshrink").decompress(atob("mEwgMAkEAwEEBIMQAo8IH1WAAgcBsAFDgwRFJwIADgYYF8AMEvAFEjgFEh4eF4AGE+AFEnAeKG4Y0BgIFBg5QHC4ojFF4kBHYkHMAhzGABcQxAkEhgDBawMAZQMEFokDaVUQagI2BAocEIQYFCA=")) \ No newline at end of file diff --git a/apps/meridian/app.js b/apps/meridian/app.js new file mode 100644 index 000000000..e560cc6fd --- /dev/null +++ b/apps/meridian/app.js @@ -0,0 +1,188 @@ +require("FontDylex7x13").add(Graphics); + +var weather = require("Storage").readJSON("weather.json", 1) || {}; + +function getArcXY(centerX, centerY, radius, angle) { + var s, + r = []; + s = (2 * Math.PI * angle) / 360; + r.push(centerX + Math.round(Math.cos(s) * radius)); + r.push(centerY + Math.round(Math.sin(s) * radius)); + return r; +} + +function getArc(centerX, centerY, radius, startAngle, endAngle) { + var xy, + r = [], + actAngle = startAngle; + var stepAngle = ((radius + radius) * Math.PI) / 60; + stepAngle = 6; + while (actAngle < endAngle) { + r = r.concat(getArcXY(centerX, centerY, radius, actAngle)); + actAngle += stepAngle; + actAngle = Math.min(actAngle, endAngle); + } + return r.concat(getArcXY(centerX, centerY, radius, endAngle)); +} + +var timeout; + +function fillLine(x1, y1, x2, y2, thickness) { + const angle = Math.atan2(y2 - y1, x2 - x1); + const offset_x = (thickness * Math.sin(angle)) / 2; + const offset_y = (thickness * Math.cos(angle)) / 2; + g.fillPoly( + [ + x1 + offset_x, + y1 - offset_y, + x1 - offset_x, + y1 + offset_y, + x2 - offset_x, + y2 + offset_y, + x2 + offset_x, + y2 - offset_y, + ], + true + ); +} + +function getWeatherIcon(txt) { + txt = txt.toLowerCase(); + if (txt == "rainy") { + return atob("EhCBAAAAAPwAf4A/8A/8D//H//v////////3//j//AjEBiMDEIAAAA=="); + } else if (txt == "cloudy") { + return atob("FA6BAABgAD/AB/4Af+A//wf/+H//7//+//////////f//j//4P/4"); + } else if (txt == "sunny") { + return atob( + "FBSBAABgAAYAAAABgBgY8YA/wAf+AH/gD/8M//PP/zD/8Af+AH/gA/wBjxgYAYAAAABgAAYA" + ); + } else { + return null; + } +} + +function draw() { + g.setTheme({ fg: 0xffff, bg: 0 }); + + if (timeout) { + clearTimeout(timeout); + timeout = undefined; + } + g.reset().clear(); + g.setColor("#FFF"); + + const mid = g.getWidth() / 2; + g.drawImage( + require("heatshrink").decompress( + atob( + "2GwgIGDhwMEgPAAwk4Dg8HCpdwCqnwCo8DwAVK8AVIB4gVFgIVIB4wFKD5IPFG4pLJCosHMYiNJCozNJvAVJh4VJkAKJgT/PAH4A/AH4A/AH4A/AH4A/ADWACqngCicD/AVTh9+Cqc/n4VTv0P4AURgP4gZuSCYQrTVwNACqT/6AH4A/AH4A/AH4A/AH4A/AH4A/AH4A/AH4Ah//ACaMD/4VrQP4A/AH4A/AH4A/AH4A/AH4A/AH4A/AH4A/ADlACSMBAQPACqMDwED8AVS8EPFaUB/E/Nad+vwVTn/4CqcPNiSEDd/4A/AH4A/AH4A/AH4A/AH8gAgcB4AFDgwVJvAVJh4VJuAVJg4VJ8AVJgeACg8BCqoPEApYfECpY3EGpIlGCpEHCpfwCo6jFCoylEA=" + ) + ) + ); + + g.setFontAlign(0, 0); + g.setFont("Dylex7x13", 1); + + const battery = E.getBattery() || 50; + const outerarc = getArc( + g.getWidth() * (1 / 4) + 1, + g.getHeight() * (1 / 4) - 1, + 14, + -90, + Math.max(battery * 3.6, 10) - 90 + ); + const innerarc = getArc( + g.getWidth() * (1 / 4) + 1, + g.getHeight() * (1 / 4) - 1, + 11, + -92, + Math.max(battery * 3.6, 10) - 88 + ); + g.setColor("#00FF00").fillPoly( + [g.getWidth() * (1 / 4), g.getHeight() * (1 / 4) - 2].concat(outerarc) + ); + g.setColor("#000").fillPoly( + [g.getWidth() * (1 / 4), g.getHeight() * (1 / 4) - 2].concat(innerarc) + ); + g.setColor("#FFF").drawString( + battery, + g.getWidth() * (1 / 4), + g.getHeight() * (1 / 4) + ); + + if (weather && weather.txt) { + const icon = getWeatherIcon(weather.txt); + if (icon) { + g.drawImage( + icon, + g.getWidth() * (3 / 4) - 10, + g.getHeight() * (1 / 4) - 10 + ); + } else { + g.drawString( + weather.txt, + g.getWidth() * (3 / 4), + g.getHeight() * (1 / 4) + ); + } + g.drawString( + weather.temp || "-", + g.getWidth() * (3 / 4), + g.getHeight() * (1 / 4) + 16 + ); + } + + const now = new Date(); + + g.setFont("Vector", 14); + // Date (ex. MON 8) + g.drawString( + require("locale").dow(now, 1).toUpperCase() + " " + now.getDate(), + g.getWidth() / 2, + g.getHeight() * (3 / 4) + ); + + let rhour = + (now.getHours() * Math.PI) / 6 + + (now.getMinutes() * Math.PI) / 30 / 12 - + Math.PI / 2; + let rmin = (now.getMinutes() * Math.PI) / 30 - Math.PI / 2; + + // Middle circle + g.fillCircle(mid, mid, 4); + + // Hours hand + fillLine(mid, mid, mid + Math.cos(rhour) * 10, mid + Math.sin(rhour) * 10, 3); + fillLine( + mid + Math.cos(rhour) * 10, + mid + Math.sin(rhour) * 10, + mid + Math.cos(rhour) * 50, + mid + Math.sin(rhour) * 50, + 7 + ); + + // Minutes hand + fillLine(mid, mid, mid + Math.cos(rmin) * 10, mid + Math.sin(rmin) * 10, 3); + fillLine( + mid + Math.cos(rmin) * 10, + mid + Math.sin(rmin) * 10, + mid + Math.cos(rmin) * 76, + mid + Math.sin(rmin) * 76, + 7 + ); + + if (now.getMinutes() == 0) { + Bangle.buzz(); + } + + timeout = setTimeout(() => { + timeout = undefined; + draw(); + }, 60000 - (Date.now() % 60000)); +} + +draw(); + +Bangle.setUI("clock"); +Bangle.loadWidgets(); +Bangle.drawWidgets(); diff --git a/apps/meridian/app.png b/apps/meridian/app.png new file mode 100644 index 0000000000000000000000000000000000000000..dfb282495d55ab62dab29f8c5ed52e1df2e24165 GIT binary patch literal 1561 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 literal 0 HcmV?d00001 From 684e62eb7f407437acc70b4f7be01daefb1781f5 Mon Sep 17 00:00:00 2001 From: Spioune <> Date: Tue, 9 Apr 2024 19:04:59 +0800 Subject: [PATCH 2/5] add clock_info --- apps/meridian/README.md | 22 +--- apps/meridian/app.js | 247 ++++++++++++++--------------------- apps/meridian/app.png | Bin 1561 -> 0 bytes apps/meridian/metadata.json | 4 +- apps/meridian/screenshot.png | Bin 2074 -> 2316 bytes 5 files changed, 103 insertions(+), 170 deletions(-) delete mode 100644 apps/meridian/app.png diff --git a/apps/meridian/README.md b/apps/meridian/README.md index 5d750a965..1fdd03546 100644 --- a/apps/meridian/README.md +++ b/apps/meridian/README.md @@ -1,25 +1,11 @@ -# Clock Name +# Meridian Clock -More info on making Clock Faces: https://www.espruino.com/Bangle.js+Clock - -Describe the Clock... +An elegant clock with 2 clock info ## Usage -Describe how to use it - -## Features - -Name the function - -## Controls - -Name the buttons and what they are used for - -## Requests - -Name who should be contacted for support/update requests +Tap on a widget and swipe left/right/up/down to change the displayed info ## Creator -Your name +Spioune diff --git a/apps/meridian/app.js b/apps/meridian/app.js index e560cc6fd..3bb904c7c 100644 --- a/apps/meridian/app.js +++ b/apps/meridian/app.js @@ -1,188 +1,135 @@ -require("FontDylex7x13").add(Graphics); -var weather = require("Storage").readJSON("weather.json", 1) || {}; -function getArcXY(centerX, centerY, radius, angle) { - var s, - r = []; - s = (2 * Math.PI * angle) / 360; +function getArcXY(centerX,centerY,radius,angle){ + var s,r = []; + s = 2 * Math.PI * angle / 360; r.push(centerX + Math.round(Math.cos(s) * radius)); r.push(centerY + Math.round(Math.sin(s) * radius)); return r; } -function getArc(centerX, centerY, radius, startAngle, endAngle) { - var xy, - r = [], - actAngle = startAngle; - var stepAngle = ((radius + radius) * Math.PI) / 60; +function getArc(centerX,centerY,radius,startAngle,endAngle){ + var r = [], actAngle = startAngle; + var stepAngle = (radius + radius) * Math.PI / 60; stepAngle = 6; - while (actAngle < endAngle) { - r = r.concat(getArcXY(centerX, centerY, radius, actAngle)); + while(actAngle < endAngle){ + r = r.concat(getArcXY(centerX,centerY,radius,actAngle)); actAngle += stepAngle; - actAngle = Math.min(actAngle, endAngle); + actAngle = Math.min(actAngle,endAngle); } - return r.concat(getArcXY(centerX, centerY, radius, endAngle)); + return r.concat(getArcXY(centerX,centerY,radius,endAngle)); } + +let clockInfoItems = require("clock_info").load(); + +clockInfoItems[0].items.unshift({ + name : "BatteryRing", + hasRange : true, + get : () => { + var s = 30; + var mid=s/2; + var v = E.getBattery(); + var img; + var g = Graphics.createArrayBuffer(s,s,4); + + const outerarc = getArc(mid,mid,14,-90,Math.max(v*3.6, 10)-90); + const innerarc = getArc(mid,mid,11,-92,Math.max(v*3.6, 10)-88); + + g.reset(); + g.setColor('#00FF00').fillPoly([mid, mid].concat(outerarc)); + g.setColor('#000').fillPoly([mid, mid].concat(innerarc)); + g.setFont("6x8").setColor('#FFF').setFontAlign(0, 0).drawString(v, mid, mid); + img = g.asImage("object"); + return { v : v, min:0, max:100, img : img }; + }, + show : function() { }, + hide : function() { }, +}); + +function drawInfoClock(itm,info,options){ + g.reset().clearRect(options.x-1, options.y-1, options.x+options.w+1, options.y+options.h+1); + if (options.focus) g.drawRect(options.x-1, options.y-1, options.x+options.w+1, options.y+options.h+1); + if (info.img) g.drawImage(info.img, options.x+options.w/2-(info.img.width||options.w)*options.scale/2,options.y, {scale:options.scale}); + if(info.text) g.setFont("6x8").setFontAlign(0,1).drawString(info.text, options.x+options.w/2,options.y+options.h); +} + +const topleft = require("clock_info").addInteractive(clockInfoItems, { + x : g.getWidth()*(1/4)-15, y: g.getHeight()*(1/4)-15, w: 30, h:30, scale:1, + draw : drawInfoClock +}); + +const topright = require("clock_info").addInteractive(clockInfoItems, { + x : g.getWidth()*(3/4)-15, y: g.getHeight()*(1/4)-15, w: 30, h:30, scale:1, + draw : drawInfoClock +}); + + var timeout; -function fillLine(x1, y1, x2, y2, thickness) { +function fillLine(x1,y1,x2,y2,thickness){ const angle = Math.atan2(y2 - y1, x2 - x1); - const offset_x = (thickness * Math.sin(angle)) / 2; - const offset_y = (thickness * Math.cos(angle)) / 2; - g.fillPoly( - [ - x1 + offset_x, - y1 - offset_y, - x1 - offset_x, - y1 + offset_y, - x2 - offset_x, - y2 + offset_y, - x2 + offset_x, - y2 - offset_y, - ], - true - ); + const offset_x = thickness * Math.sin(angle) / 2; + const offset_y = thickness * Math.cos(angle) / 2; + g.fillPoly([ + x1 + offset_x, + y1 - offset_y, + x1 - offset_x, + y1 + offset_y, + x2 - offset_x, + y2 + offset_y, + x2 + offset_x, + y2 - offset_y + ],true); } -function getWeatherIcon(txt) { - txt = txt.toLowerCase(); - if (txt == "rainy") { - return atob("EhCBAAAAAPwAf4A/8A/8D//H//v////////3//j//AjEBiMDEIAAAA=="); - } else if (txt == "cloudy") { - return atob("FA6BAABgAD/AB/4Af+A//wf/+H//7//+//////////f//j//4P/4"); - } else if (txt == "sunny") { - return atob( - "FBSBAABgAAYAAAABgBgY8YA/wAf+AH/gD/8M//PP/zD/8Af+AH/gA/wBjxgYAYAAAABgAAYA" - ); - } else { - return null; - } -} - -function draw() { - g.setTheme({ fg: 0xffff, bg: 0 }); - - if (timeout) { +function draw(){ + g.setTheme({fg:0xFFFF, bg:0}); + + if(timeout){ clearTimeout(timeout); timeout = undefined; } g.reset().clear(); - g.setColor("#FFF"); - - const mid = g.getWidth() / 2; - g.drawImage( - require("heatshrink").decompress( - atob( - "2GwgIGDhwMEgPAAwk4Dg8HCpdwCqnwCo8DwAVK8AVIB4gVFgIVIB4wFKD5IPFG4pLJCosHMYiNJCozNJvAVJh4VJkAKJgT/PAH4A/AH4A/AH4A/AH4A/ADWACqngCicD/AVTh9+Cqc/n4VTv0P4AURgP4gZuSCYQrTVwNACqT/6AH4A/AH4A/AH4A/AH4A/AH4A/AH4A/AH4Ah//ACaMD/4VrQP4A/AH4A/AH4A/AH4A/AH4A/AH4A/AH4A/ADlACSMBAQPACqMDwED8AVS8EPFaUB/E/Nad+vwVTn/4CqcPNiSEDd/4A/AH4A/AH4A/AH4A/AH8gAgcB4AFDgwVJvAVJh4VJuAVJg4VJ8AVJgeACg8BCqoPEApYfECpY3EGpIlGCpEHCpfwCo6jFCoylEA=" - ) - ) - ); - - g.setFontAlign(0, 0); - g.setFont("Dylex7x13", 1); - - const battery = E.getBattery() || 50; - const outerarc = getArc( - g.getWidth() * (1 / 4) + 1, - g.getHeight() * (1 / 4) - 1, - 14, - -90, - Math.max(battery * 3.6, 10) - 90 - ); - const innerarc = getArc( - g.getWidth() * (1 / 4) + 1, - g.getHeight() * (1 / 4) - 1, - 11, - -92, - Math.max(battery * 3.6, 10) - 88 - ); - g.setColor("#00FF00").fillPoly( - [g.getWidth() * (1 / 4), g.getHeight() * (1 / 4) - 2].concat(outerarc) - ); - g.setColor("#000").fillPoly( - [g.getWidth() * (1 / 4), g.getHeight() * (1 / 4) - 2].concat(innerarc) - ); - g.setColor("#FFF").drawString( - battery, - g.getWidth() * (1 / 4), - g.getHeight() * (1 / 4) - ); - - if (weather && weather.txt) { - const icon = getWeatherIcon(weather.txt); - if (icon) { - g.drawImage( - icon, - g.getWidth() * (3 / 4) - 10, - g.getHeight() * (1 / 4) - 10 - ); - } else { - g.drawString( - weather.txt, - g.getWidth() * (3 / 4), - g.getHeight() * (1 / 4) - ); - } - g.drawString( - weather.temp || "-", - g.getWidth() * (3 / 4), - g.getHeight() * (1 / 4) + 16 - ); - } - + + const mid=g.getWidth()/2; + g.drawImage(require("heatshrink").decompress(atob("2GwgIGDhwMEgPAAwk4Dg8HCpdwCqnwCo8DwAVK8AVIB4gVFgIVIB4wFKD5IPFG4pLJCosHMYiNJCozNJvAVJh4VJkAKJgT/PAH4A/AH4A/AH4A/AH4A/ADWACqngCicD/AVTh9+Cqc/n4VTv0P4AURgP4gZuSCYQrTVwNACqT/6AH4A/AH4A/AH4A/AH4A/AH4A/AH4A/AH4Ah//ACaMD/4VrQP4A/AH4A/AH4A/AH4A/AH4A/AH4A/AH4A/ADlACSMBAQPACqMDwED8AVS8EPFaUB/E/Nad+vwVTn/4CqcPNiSEDd/4A/AH4A/AH4A/AH4A/AH8gAgcB4AFDgwVJvAVJh4VJuAVJg4VJ8AVJgeACg8BCqoPEApYfECpY3EGpIlGCpEHCpfwCo6jFCoylEA="))); + + + topleft.redraw(); + topright.redraw(); + const now = new Date(); - - g.setFont("Vector", 14); + + g.setFont("Vector",14); + g.setColor('#FFF'); + g.setFontAlign(0,0); // Date (ex. MON 8) - g.drawString( - require("locale").dow(now, 1).toUpperCase() + " " + now.getDate(), - g.getWidth() / 2, - g.getHeight() * (3 / 4) - ); - - let rhour = - (now.getHours() * Math.PI) / 6 + - (now.getMinutes() * Math.PI) / 30 / 12 - - Math.PI / 2; - let rmin = (now.getMinutes() * Math.PI) / 30 - Math.PI / 2; + g.drawString(require("locale").dow(now, 1).toUpperCase() + " " + now.getDate(), g.getWidth()/2, g.getHeight()*(3/4)); + let rhour = (now.getHours()*Math.PI/6)+(now.getMinutes()*Math.PI/30/12)-Math.PI/2; + let rmin = now.getMinutes()*Math.PI/30-Math.PI/2; + // Middle circle - g.fillCircle(mid, mid, 4); - + g.fillCircle(mid,mid,4); + // Hours hand - fillLine(mid, mid, mid + Math.cos(rhour) * 10, mid + Math.sin(rhour) * 10, 3); - fillLine( - mid + Math.cos(rhour) * 10, - mid + Math.sin(rhour) * 10, - mid + Math.cos(rhour) * 50, - mid + Math.sin(rhour) * 50, - 7 - ); + fillLine(mid, mid, mid+Math.cos(rhour)*10, mid+Math.sin(rhour)*10,3); + fillLine(mid+Math.cos(rhour)*10, mid+Math.sin(rhour)*10, mid+Math.cos(rhour)*50, mid+Math.sin(rhour)*50,7); // Minutes hand - fillLine(mid, mid, mid + Math.cos(rmin) * 10, mid + Math.sin(rmin) * 10, 3); - fillLine( - mid + Math.cos(rmin) * 10, - mid + Math.sin(rmin) * 10, - mid + Math.cos(rmin) * 76, - mid + Math.sin(rmin) * 76, - 7 - ); - - if (now.getMinutes() == 0) { + fillLine(mid, mid, mid+Math.cos(rmin)*10, mid+Math.sin(rmin)*10,3); + fillLine(mid+Math.cos(rmin)*10, mid+Math.sin(rmin)*10, mid+Math.cos(rmin)*76, mid+Math.sin(rmin)*76,7); + + if(now.getMinutes()==0){ Bangle.buzz(); } - timeout = setTimeout(() => { + timeout = setTimeout(()=>{ timeout = undefined; draw(); }, 60000 - (Date.now() % 60000)); } draw(); - Bangle.setUI("clock"); -Bangle.loadWidgets(); -Bangle.drawWidgets(); diff --git a/apps/meridian/app.png b/apps/meridian/app.png deleted file mode 100644 index dfb282495d55ab62dab29f8c5ed52e1df2e24165..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1561 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 P;1`Z|E{7^8w4{FkQ>e)) From d9954f85aa3bb0dd114556d4d27855c8272ca743 Mon Sep 17 00:00:00 2001 From: Spioune <> Date: Tue, 9 Apr 2024 19:17:24 +0800 Subject: [PATCH 3/5] update icons --- apps/meridian/app-icon.js | 2 +- apps/meridian/icon.png | Bin 0 -> 1769 bytes apps/meridian/metadata.json | 2 +- apps/meridian/screenshot.png | Bin 2316 -> 2308 bytes 4 files changed, 2 insertions(+), 2 deletions(-) create mode 100644 apps/meridian/icon.png diff --git a/apps/meridian/app-icon.js b/apps/meridian/app-icon.js index 43e7bca3b..c1584cbf2 100644 --- a/apps/meridian/app-icon.js +++ b/apps/meridian/app-icon.js @@ -1 +1 @@ -require("heatshrink").decompress(atob("mEwgMAkEAwEEBIMQAo8IH1WAAgcBsAFDgwRFJwIADgYYF8AMEvAFEjgFEh4eF4AGE+AFEnAeKG4Y0BgIFBg5QHC4ojFF4kBHYkHMAhzGABcQxAkEhgDBawMAZQMEFokDaVUQagI2BAocEIQYFCA=")) \ No newline at end of file +require("heatshrink").decompress(atob("mEwgMAkEAwEEBIMQAo8IDpMYAq0wAoosCAoU8gNgAoV+gwRDvgXDsAFFEYgFR4AFQIgQFHgIFC8AFDg4HBhwWEngFE+AEDgYuEh4QEDgoASiGII4kMAYLWBgDKBggzEgb/YICSJBGwIFDghCDAoQ")); \ No newline at end of file diff --git a/apps/meridian/icon.png b/apps/meridian/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..3edf38218047afaf876afb80f9119ee55b779930 GIT binary patch literal 1769 zcmV004R>004l5008;`004mK004C`008P>0026e000+ooVrmw0000) zWmrjOO-%qQ0000800D<-00aO40096102%-Q00003paB2_0000100961paK8{00001 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 Date: Tue, 9 Apr 2024 19:19:34 +0800 Subject: [PATCH 4/5] fix app-icon.js --- apps/meridian/app-icon.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/meridian/app-icon.js b/apps/meridian/app-icon.js index c1584cbf2..8c37d4e1b 100644 --- a/apps/meridian/app-icon.js +++ b/apps/meridian/app-icon.js @@ -1 +1 @@ -require("heatshrink").decompress(atob("mEwgMAkEAwEEBIMQAo8IDpMYAq0wAoosCAoU8gNgAoV+gwRDvgXDsAFFEYgFR4AFQIgQFHgIFC8AFDg4HBhwWEngFE+AEDgYuEh4QEDgoASiGII4kMAYLWBgDKBggzEgb/YICSJBGwIFDghCDAoQ")); \ No newline at end of file +require("heatshrink").decompress(atob("mEwgMAkEAwEEBIMQAo8IDpMYAq0wAoosCAoU8gNgAoV+gwRDvgXDsAFFEYgFR4AFQIgQFHgIFC8AFDg4HBhwWEngFE+AEDgYuEh4QEDgoASiGII4kMAYLWBgDKBggzEgb/YICSJBGwIFDghCDAoQ")) \ No newline at end of file From ab221e52bf7347fc918739639e78a7d013ef13ea Mon Sep 17 00:00:00 2001 From: Spioune <> Date: Fri, 12 Apr 2024 10:55:20 +0800 Subject: [PATCH 5/5] fix clock info rendering --- apps/meridian/app.js | 136 ++++++++++++++++++++++++------------------- 1 file changed, 77 insertions(+), 59 deletions(-) diff --git a/apps/meridian/app.js b/apps/meridian/app.js index 3bb904c7c..26de3df5f 100644 --- a/apps/meridian/app.js +++ b/apps/meridian/app.js @@ -1,5 +1,3 @@ - - function getArcXY(centerX,centerY,radius,angle){ var s,r = []; s = 2 * Math.PI * angle / 360; @@ -20,53 +18,6 @@ function getArc(centerX,centerY,radius,startAngle,endAngle){ return r.concat(getArcXY(centerX,centerY,radius,endAngle)); } - -let clockInfoItems = require("clock_info").load(); - -clockInfoItems[0].items.unshift({ - name : "BatteryRing", - hasRange : true, - get : () => { - var s = 30; - var mid=s/2; - var v = E.getBattery(); - var img; - var g = Graphics.createArrayBuffer(s,s,4); - - const outerarc = getArc(mid,mid,14,-90,Math.max(v*3.6, 10)-90); - const innerarc = getArc(mid,mid,11,-92,Math.max(v*3.6, 10)-88); - - g.reset(); - g.setColor('#00FF00').fillPoly([mid, mid].concat(outerarc)); - g.setColor('#000').fillPoly([mid, mid].concat(innerarc)); - g.setFont("6x8").setColor('#FFF').setFontAlign(0, 0).drawString(v, mid, mid); - img = g.asImage("object"); - return { v : v, min:0, max:100, img : img }; - }, - show : function() { }, - hide : function() { }, -}); - -function drawInfoClock(itm,info,options){ - g.reset().clearRect(options.x-1, options.y-1, options.x+options.w+1, options.y+options.h+1); - if (options.focus) g.drawRect(options.x-1, options.y-1, options.x+options.w+1, options.y+options.h+1); - if (info.img) g.drawImage(info.img, options.x+options.w/2-(info.img.width||options.w)*options.scale/2,options.y, {scale:options.scale}); - if(info.text) g.setFont("6x8").setFontAlign(0,1).drawString(info.text, options.x+options.w/2,options.y+options.h); -} - -const topleft = require("clock_info").addInteractive(clockInfoItems, { - x : g.getWidth()*(1/4)-15, y: g.getHeight()*(1/4)-15, w: 30, h:30, scale:1, - draw : drawInfoClock -}); - -const topright = require("clock_info").addInteractive(clockInfoItems, { - x : g.getWidth()*(3/4)-15, y: g.getHeight()*(1/4)-15, w: 30, h:30, scale:1, - draw : drawInfoClock -}); - - -var timeout; - function fillLine(x1,y1,x2,y2,thickness){ const angle = Math.atan2(y2 - y1, x2 - x1); const offset_x = thickness * Math.sin(angle) / 2; @@ -83,22 +34,87 @@ function fillLine(x1,y1,x2,y2,thickness){ ],true); } -function draw(){ - g.setTheme({fg:0xFFFF, bg:0}); +function drawInfoClock(itm,info,options){ + g.reset(); + if (options.focus) + g.drawCircle(options.x+options.w/2, options.y+options.h/2, options.w/2+3); + + if (info.img) + g.drawImage(info.img, info.img.width ? options.x+options.w/2-info.img.width/2 : options.x, options.y); + + if(info.text) + g.setFont("6x8").setFontAlign(0,1).drawString(info.text, options.x+options.w/2,options.y+options.h); +} + +var clockInfoItems = require("clock_info").load(); + +clockInfoItems[0].items.unshift({ + name : "BatteryRing", + hasRange : true, + get : () => { + var s = 30; + var mid=s/2; + var v = E.getBattery(); + var g = Graphics.createArrayBuffer(s,s,4); + + const outerarc = getArc(mid,mid,14,-90,Math.max(v*3.6, 10)-90); + const innerarc = getArc(mid,mid,11,-92,Math.max(v*3.6, 10)-88); + + g.reset(); + g.transparent=0; + g.setColor('#00FF00').fillPoly([mid, mid].concat(outerarc)); + g.setColor('#000').fillPoly([mid, mid].concat(innerarc)); + g.setFont("6x8").setColor('#FFF').setFontAlign(0, 0).drawString(v, mid, mid); + return { v : v, min:0, max:100, img : g.asImage("object") }; + }, + show : function() { }, + hide : function() { }, +}); + +var topleft = require("clock_info").addInteractive(clockInfoItems, { + x : g.getWidth()*(1/4)-15, y: g.getHeight()*(1/4)-15, w: 30, h:30, + draw : (itm,info,options)=>{ + topleft.info = info; + topleft.options = options; + if(typeof draw === 'function') draw(); + } +}); + +var topright = require("clock_info").addInteractive(clockInfoItems, { + x : g.getWidth()*(3/4)-15, y: g.getHeight()*(1/4)-15, w: 30, h:30, + draw : (itm,info,options)=>{ + topright.info = info; + topright.options = options; + if(typeof draw === 'function') draw(); + } +}); + +var timeout; + +function draw(){ if(timeout){ clearTimeout(timeout); timeout = undefined; } + + g.setTheme({fg:0xFFFF, bg:0}); g.reset().clear(); const mid=g.getWidth()/2; - g.drawImage(require("heatshrink").decompress(atob("2GwgIGDhwMEgPAAwk4Dg8HCpdwCqnwCo8DwAVK8AVIB4gVFgIVIB4wFKD5IPFG4pLJCosHMYiNJCozNJvAVJh4VJkAKJgT/PAH4A/AH4A/AH4A/AH4A/ADWACqngCicD/AVTh9+Cqc/n4VTv0P4AURgP4gZuSCYQrTVwNACqT/6AH4A/AH4A/AH4A/AH4A/AH4A/AH4A/AH4Ah//ACaMD/4VrQP4A/AH4A/AH4A/AH4A/AH4A/AH4A/AH4A/ADlACSMBAQPACqMDwED8AVS8EPFaUB/E/Nad+vwVTn/4CqcPNiSEDd/4A/AH4A/AH4A/AH4A/AH8gAgcB4AFDgwVJvAVJh4VJuAVJg4VJ8AVJgeACg8BCqoPEApYfECpY3EGpIlGCpEHCpfwCo6jFCoylEA="))); + for(let i = 0; i<12;i++){ + const angle = i*Math.PI/6; + fillLine(mid, mid, mid+Math.cos(angle)*120, mid+Math.sin(angle)*120, 3); + } - topleft.redraw(); - topright.redraw(); - + g.clearRect(10,10,g.getWidth()-10,g.getHeight()-10); + + if(topleft && topleft.info && topleft.options) + drawInfoClock(topleft.itm, topleft.info, topleft.options); + if(topright && topright.info && topright.options) + drawInfoClock(topright.itm, topright.info, topright.options); + const now = new Date(); g.setFont("Vector",14); @@ -106,22 +122,24 @@ function draw(){ g.setFontAlign(0,0); // Date (ex. MON 8) g.drawString(require("locale").dow(now, 1).toUpperCase() + " " + now.getDate(), g.getWidth()/2, g.getHeight()*(3/4)); - + + let rhour = (now.getHours()*Math.PI/6)+(now.getMinutes()*Math.PI/30/12)-Math.PI/2; let rmin = now.getMinutes()*Math.PI/30-Math.PI/2; // Middle circle g.fillCircle(mid,mid,4); - // Hours hand + // Hour hand fillLine(mid, mid, mid+Math.cos(rhour)*10, mid+Math.sin(rhour)*10,3); fillLine(mid+Math.cos(rhour)*10, mid+Math.sin(rhour)*10, mid+Math.cos(rhour)*50, mid+Math.sin(rhour)*50,7); - // Minutes hand + // Minute hand fillLine(mid, mid, mid+Math.cos(rmin)*10, mid+Math.sin(rmin)*10,3); fillLine(mid+Math.cos(rmin)*10, mid+Math.sin(rmin)*10, mid+Math.cos(rmin)*76, mid+Math.sin(rmin)*76,7); - if(now.getMinutes()==0){ + + if(new Date().getMinutes()==0){ Bangle.buzz(); }