BangleApps/apps/ashadyclock/app.js

108 lines
2.7 KiB
JavaScript
Raw Permalink Normal View History

2024-06-30 19:52:29 +00:00
var settings = Object.assign({
// default values
showWidgets: false,
alternativeColor: false,
}, require('Storage').readJSON("ashadyclock.json", true) || {});
2024-06-29 15:39:46 +00:00
let drawTimeout;
// schedule a draw for the next minute
function queueDraw() {
if (drawTimeout) clearTimeout(drawTimeout);
drawTimeout = setTimeout(function() {
drawTimeout = undefined;
draw();
}, 60000 - (Date.now() % 60000));
}
2024-06-30 19:52:29 +00:00
let palBottom;
if (settings.alternativeColor) {
palBottom = new Uint16Array(E.toArrayBuffer(E.toFlatString(new Uint16Array([
g.toColor("#000"),
g.toColor("#000"),
g.toColor("#0FF"),
g.toColor("#0FF"),
g.toColor("#00F"),
g.toColor("#000"),
g.toColor("#00F"),
g.toColor("#000")
]).buffer)));
} else {
palBottom = new Uint16Array(E.toArrayBuffer(E.toFlatString(new Uint16Array([
g.toColor("#000"),
g.toColor("#000"),
g.toColor("#F00"),
g.toColor("#FF0"),
g.toColor("#00F"),
g.toColor("#000"),
g.toColor("#FF0"),
g.toColor("#000")
]).buffer)));
2024-06-29 15:39:46 +00:00
}
let palTop = new Uint16Array(E.toArrayBuffer(E.toFlatString(new Uint16Array([
g.toColor("#FFF"),
g.toColor("#000"),
g.toColor("#FFF"),
g.toColor("#FFF"),
g.toColor("#00F"),
g.toColor("#000"),
g.toColor("#FFF"),
g.toColor("#000"),
]).buffer)));
2024-06-30 19:52:29 +00:00
let xOffset = (g.getWidth() - 176) / 2;
let yOffset = (g.getHeight() - 176) / 2;
2024-06-29 15:39:46 +00:00
2024-06-30 19:52:29 +00:00
function drawTop(d0, d1) {
if (settings.showWidgets && g.getHeight()<=176) {
2024-07-01 04:42:09 +00:00
drawNumber(d1, 82 + xOffset, 24 + yOffset, palTop, {scale: 0.825});
drawNumber(d0, 13 + xOffset, 24 + yOffset, palTop, {scale: 0.825});
2024-06-30 19:52:29 +00:00
} else {
2024-07-01 04:42:09 +00:00
drawNumber(d1, 80, 0, palTop);
drawNumber(d0, -1, 0, palTop);
2024-06-30 19:52:29 +00:00
}
}
2024-06-29 15:39:46 +00:00
2024-06-30 19:52:29 +00:00
function drawBottom(d0, d1) {
if (settings.showWidgets && g.getHeight()<=176) {
drawNumber(d1, 82 + xOffset, 92 + yOffset, palBottom, {scale: 0.825});
drawNumber(d0, 13 + xOffset, 92 + yOffset, palBottom, {scale: 0.825});
} else {
drawNumber(d1, 80, 75, palBottom);
drawNumber(d0, -1, 75, palBottom);
}
}
function drawNumber(number, x, y, palette, options) {
let image =
{
width : 98, height : 100, bpp : 3,
transparent: 4,
buffer : require("Storage").read("ashadyclock." + number +".bin")
};
image.palette = palette;
g.drawImage(image, x, y, options);
}
function draw() {
let d = new Date();
g.clearRect(0, settings.showWidgets ? 24 : 0, g.getWidth(),g.getHeight());
2024-06-30 20:07:53 +00:00
drawBottom(Math.floor(d.getMinutes()/10), d.getMinutes() % 10);
drawTop(Math.floor(d.getHours()/10), d.getHours() % 10);
2024-06-29 15:39:46 +00:00
queueDraw();
}
g.clear();
// draw immediately at first
draw();
// Show launcher when middle button pressed
Bangle.setUI("clock");
2024-06-30 19:52:29 +00:00
if(settings.showWidgets) {
Bangle.loadWidgets();
Bangle.drawWidgets();
}