Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Added analog clock with image background
- Loading branch information
1 parent
f18c9c6
commit 50a2df6
Showing
6 changed files
with
131 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
0.01: New App! |
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,115 @@ | ||
var bgimg = require("Storage").read("analogimgclk.bg.img"); | ||
|
||
function getImg(g, col) { | ||
return { | ||
width:g.getWidth(), | ||
height:g.getHeight(), | ||
bpp:1,transparent:0, | ||
buffer:g.buffer, | ||
palette:new Uint16Array([0,col])}; | ||
} | ||
|
||
var handSizeMin = 90; | ||
var handSizeHr = 60; | ||
var handSizeSec = 96; | ||
var gmin = Graphics.createArrayBuffer(12,handSizeMin*2,1,{msb:true}); | ||
var gminimg = getImg(gmin, 0xFFFF); | ||
var ghr = Graphics.createArrayBuffer(16,handSizeHr*2,1,{msb:true}); | ||
var ghrimg = getImg(ghr, g.setColor("#E0E0E0").getColor()); | ||
var gsec = Graphics.createArrayBuffer(6,handSizeSec*2,1,{msb:true}); | ||
var gsecimg = getImg(gsec, g.setColor("#FF0000").getColor()); | ||
|
||
// create hand images | ||
var c = gmin.getHeight()/2; | ||
var o = 16; // overhang | ||
gmin.fillCircle(6,6,6); | ||
gmin.fillCircle(6,c+o,6); | ||
gmin.fillRect(0,6,11,c+o); | ||
c = ghr.getHeight()/2; | ||
ghr.fillCircle(8,8,8); | ||
ghr.fillCircle(8,c+o,8); | ||
ghr.fillRect(0,8,15,c+o); | ||
c = gsec.getHeight()/2; | ||
gsec.fillCircle(3,3,3); | ||
gsec.fillCircle(3,c+o,3); | ||
gsec.fillRect(0,3,5,c+o); | ||
|
||
// last positions of hands (in radians) | ||
var lastrmin=0, lastrhr=0, lastrsec=0; | ||
|
||
// draw hands - just the bit of the image that changed | ||
function drawHands(full) { | ||
var d = new Date(); | ||
var rsec = d.getSeconds()*Math.PI/30; | ||
var rmin = d.getMinutes()*Math.PI/30; | ||
// hack so hour hand only moves every 10 minutes | ||
var rhr = (d.getHours() + Math.round(d.getMinutes()/10)/6)*Math.PI/6; | ||
var bounds = {}; | ||
if (!full) { // work out the bounds of the hands | ||
var x1 = (g.getWidth()/2)-10; | ||
var y1 = (g.getHeight()/2)-10; | ||
var x2 = (g.getWidth()/2)+10; | ||
var y2 = (g.getHeight()/2)+10; | ||
function addPt(ang, r, ry) { | ||
var x = (g.getWidth()/2) + Math.sin(ang)*r + Math.cos(ang)*ry; | ||
var y = (g.getHeight()/2) - Math.cos(ang)*r + Math.sin(ang)*ry; | ||
//g.setColor("#ff0000").fillRect(x-2,y-2,x+2,y+2); | ||
if (x<x1)x1=x; | ||
if (y<y1)y1=y; | ||
if (x>x2)x2=x; | ||
if (y>y2)y2=y; | ||
} | ||
function addSec(r) { | ||
addPt(r,handSizeSec,5);addPt(r,handSizeSec,-5); | ||
addPt(r,-(o+8),5);addPt(r,-(o+8),-5); | ||
} | ||
function addMin(r) { | ||
addPt(r,handSizeMin,8);addPt(r,handSizeMin,-8); | ||
addPt(r,-(o+8),8);addPt(r,-(o+8),-8); | ||
} | ||
function addHr(r) { | ||
addPt(r,handSizeHr,8);addPt(r,handSizeHr,-8); | ||
addPt(r,-(o+8),8);addPt(r,-(o+8),-8); | ||
} | ||
if (rsec!=lastrsec) { | ||
addSec(rsec);addSec(lastrsec); | ||
} | ||
if (rmin!=lastrmin) { | ||
addMin(rmin);addMin(lastrmin); | ||
} | ||
if (rhr!=lastrhr) { | ||
addHr(rhr);addHr(lastrhr); | ||
} | ||
bounds = {x:x1,y:y1,width:1+x2-x1,height:1+y2-y1}; | ||
} | ||
|
||
g.drawImages([ | ||
{image:bgimg,x:24,y:24}, | ||
{image:ghrimg,x:120,y:120,center:true,rotate:rhr}, | ||
{image:gminimg,x:120,y:120,center:true,rotate:rmin}, | ||
{image:gsecimg,x:120,y:120,center:true,rotate:rsec} | ||
],bounds); | ||
lastrsec = rsec; | ||
lastrmin = rmin; | ||
lastrhr = rhr; | ||
} | ||
|
||
if (g.drawImages) { | ||
var secondInterval = setInterval(drawHands,1000); | ||
// handle display switch on/off | ||
Bangle.on('lcdPower', (on) => { | ||
if (secondInterval) { | ||
clearInterval(secondInterval); | ||
secondInterval = undefined; | ||
} | ||
if (on) { | ||
drawHands(); | ||
secondInterval = setInterval(drawHands,1000); | ||
} | ||
}); | ||
|
||
g.clear(); | ||
drawHands(true); | ||
} else { | ||
E.showMessage("Please update\nBangle.js firmware\nto use this clock","analogimgclk"); | ||
} |
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file not shown.