mirror of https://github.com/espruino/BangleApps
188 lines
4.4 KiB
JavaScript
188 lines
4.4 KiB
JavaScript
(function () {
|
|
let pen = 'circle';
|
|
let discard = null;
|
|
const kule = [0, 255, 255]; // R, G, B
|
|
let oldLock = false;
|
|
|
|
Bangle.on("lock", function() {
|
|
if (Bangle.isLocked()) {
|
|
if (oldLock) {
|
|
return;
|
|
}
|
|
g.setColor('#fff');
|
|
g.fillRect(0, 0, g.getWidth(), 20);
|
|
g.setFont('6x8', 2);
|
|
g.setColor('#000');
|
|
g.drawString('PLEASE UNLOCK', 10, 2);
|
|
oldLock = true;
|
|
} else {
|
|
oldLock = false;
|
|
drawUtil();
|
|
}
|
|
});
|
|
function nextColor () {
|
|
kule[0] = Math.random();
|
|
kule[1] = Math.random();
|
|
kule[2] = Math.random();
|
|
}
|
|
|
|
function nextPen () {
|
|
switch (pen) {
|
|
case 'circle': pen = 'pixel'; break;
|
|
case 'pixel': pen = 'crayon'; break;
|
|
case 'crayon': pen = 'square'; break;
|
|
case 'square': pen = 'circle'; break;
|
|
default: pen = 'pixel'; break;
|
|
}
|
|
drawUtil();
|
|
|
|
discard = setTimeout(function () { oldX = -1; oldY = -1; console.log('timeout'); discard = null; }, 500);
|
|
}
|
|
|
|
var oldX = -1;
|
|
var oldY = -1;
|
|
|
|
function drawBrushIcon () {
|
|
const w = g.getWidth();
|
|
switch (pen) {
|
|
case 'circle':
|
|
g.fillCircle(w - 10, 10, 5);
|
|
break;
|
|
case 'square':
|
|
g.fillRect(w - 5, 5, w - 15, 15);
|
|
break;
|
|
case 'pixel':
|
|
g.setPixel(10, 10);
|
|
g.fillCircle(w - 10, 10, 2);
|
|
break;
|
|
case 'crayon':
|
|
g.drawLine(w - 10, 5, w - 10, 15);
|
|
g.drawLine(w - 14, 6, w - 10, 12);
|
|
g.drawLine(w - 6, 6, w - 10, 12);
|
|
break;
|
|
}
|
|
}
|
|
|
|
function drawUtil () {
|
|
if (Bangle.isLocked()) {
|
|
// do something to tell the user to unlock the screen
|
|
}
|
|
// titlebar
|
|
g.setColor(kule[0], kule[1], kule[2]);
|
|
g.fillRect(0, 0, g.getWidth(), 20);
|
|
// clear button
|
|
g.setColor('#000'); // black
|
|
g.fillCircle(10, 10, 8, 8);
|
|
g.setColor('#fff');
|
|
g.drawLine(8, 8, 13, 13);
|
|
g.drawLine(13, 8, 8, 13);
|
|
// tool button
|
|
g.setColor('#fff');
|
|
g.fillCircle(g.getWidth() - 10, 10, 8);
|
|
g.setColor('#000');
|
|
drawBrushIcon();
|
|
}
|
|
|
|
let tapTimer = null;
|
|
let dragTimer = null;
|
|
Bangle.on('drag', function (tap) {
|
|
let from = { x: tap.x, y: tap.y };
|
|
const to = { x: tap.x + tap.dx, y: tap.y + tap.dy };
|
|
if (oldX != -1) {
|
|
from = { x: oldX, y: oldY };
|
|
}
|
|
if (tap.b === 0) {
|
|
if (tapTimer !== null) {
|
|
clearTimeout(tapTimer);
|
|
tapTimer = null;
|
|
}
|
|
}
|
|
if (dragTimer != null) {
|
|
clearTimeout(dragTimer);
|
|
dragTimer = null;
|
|
}
|
|
dragTimer = setTimeout(function () {
|
|
oldX = -1;
|
|
oldY = -1;
|
|
}, 100);
|
|
|
|
// tap and hold the clear button
|
|
if (tap.x < 32 && tap.y < 32) {
|
|
if (tap.b === 1) {
|
|
if (tapTimer === null) {
|
|
tapTimer = setTimeout(function () {
|
|
g.clear();
|
|
drawUtil();
|
|
tapTimer = null;
|
|
}, 800);
|
|
}
|
|
if (discard) {
|
|
clearTimeout(discard); discard = null;
|
|
return;
|
|
}
|
|
}
|
|
return;
|
|
}
|
|
if (tap.x > g.getWidth() - 32 && tap.y < 32) {
|
|
if (tap.b === 1) {
|
|
if (tapTimer === null) {
|
|
tapTimer = setTimeout(function () {
|
|
g.clear();
|
|
drawUtil();
|
|
oldX = -1; oldY = -1;
|
|
|
|
tapTimer = null;
|
|
}, 800);
|
|
}
|
|
if (discard) {
|
|
clearTimeout(discard);
|
|
discard = null;
|
|
return;
|
|
}
|
|
nextPen();
|
|
}
|
|
drawUtil();
|
|
return;
|
|
} else if (tap.y < 32) {
|
|
nextColor();
|
|
drawUtil();
|
|
return;
|
|
}
|
|
oldX = to.x;
|
|
oldY = to.y;
|
|
g.setColor(kule[0], kule[1], kule[2]);
|
|
|
|
switch (pen) {
|
|
case 'pixel':
|
|
g.drawLine(from.x, from.y, to.x, to.y);
|
|
break;
|
|
case 'crayon':
|
|
g.drawLine(from.x, from.y, to.x, to.y);
|
|
g.drawLine(from.x + 1, from.y + 2, to.x, to.y - 2);
|
|
g.drawLine(from.x + 2, from.y + 2, to.x, to.y + 2);
|
|
break;
|
|
case 'circle':
|
|
var XS = (to.x - from.x) / 32;
|
|
var YS = (to.y - from.y) / 32;
|
|
for (i = 0; i < 32; i++) {
|
|
g.fillCircle(from.x + (i * XS), from.y + (i * YS), 4, 4);
|
|
}
|
|
break;
|
|
case 'square':
|
|
var XS = (to.x - from.x) / 32;
|
|
var YS = (to.y - from.y) / 32;
|
|
for (i = 0; i < 32; i++) {
|
|
const posX = from.x + (i * XS);
|
|
const posY = from.y + (i * YS);
|
|
g.fillRect(posX - 10, posY - 10, posX + 10, posY + 10);
|
|
}
|
|
break;
|
|
}
|
|
drawUtil();
|
|
});
|
|
|
|
g.clear();
|
|
drawUtil();
|
|
})();
|
|
|