forked from FOSS/BangleApps
Fix compass and compass widget
parent
69c5c9d8a2
commit
38ab8521d1
|
@ -537,11 +537,11 @@
|
||||||
{
|
{
|
||||||
"id": "compass",
|
"id": "compass",
|
||||||
"name": "Compass",
|
"name": "Compass",
|
||||||
"version": "0.03",
|
"version": "0.04",
|
||||||
"description": "Simple compass that points North",
|
"description": "Simple compass that points North",
|
||||||
"icon": "compass.png",
|
"icon": "compass.png",
|
||||||
"tags": "tool,outdoors",
|
"tags": "tool,outdoors",
|
||||||
"supports": ["BANGLEJS"],
|
"supports": ["BANGLEJS","BANGLEJS2"],
|
||||||
"storage": [
|
"storage": [
|
||||||
{"name":"compass.app.js","url":"compass.js"},
|
{"name":"compass.app.js","url":"compass.js"},
|
||||||
{"name":"compass.img","url":"compass-icon.js","evaluate":true}
|
{"name":"compass.img","url":"compass-icon.js","evaluate":true}
|
||||||
|
@ -3382,7 +3382,7 @@
|
||||||
"icon": "widget.png",
|
"icon": "widget.png",
|
||||||
"type": "widget",
|
"type": "widget",
|
||||||
"tags": "widget,compass",
|
"tags": "widget,compass",
|
||||||
"supports": ["BANGLEJS"],
|
"supports": ["BANGLEJS","BANGLEJS2"],
|
||||||
"readme": "README.md",
|
"readme": "README.md",
|
||||||
"storage": [
|
"storage": [
|
||||||
{"name":"widcom.wid.js","url":"widget.js"}
|
{"name":"widcom.wid.js","url":"widget.js"}
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
0.01: New App!
|
0.01: New App!
|
||||||
0.02: Show text if uncalibrated
|
0.02: Show text if uncalibrated
|
||||||
0.03: Eliminate flickering
|
0.03: Eliminate flickering
|
||||||
|
0.04: Fix for Bangle.js 2 and themes
|
||||||
|
|
|
@ -1,60 +1,72 @@
|
||||||
var tg = Graphics.createArrayBuffer(120,20,1,{msb:true});
|
var W = g.getWidth();
|
||||||
var timg = {
|
var M = W/2; // middle of screen
|
||||||
width:tg.getWidth(),
|
// Angle buffer
|
||||||
height:tg.getHeight(),
|
var AGS = W > 200 ? 160 : 120; // buffer size
|
||||||
bpp:1,
|
var AGM = AGS/2; // midpoint/radius
|
||||||
buffer:tg.buffer
|
var AGH = AGM-10; // hand size
|
||||||
};
|
var ag = Graphics.createArrayBuffer(AGS,AGS,2,{msb:true});
|
||||||
|
|
||||||
var ag = Graphics.createArrayBuffer(160,160,2,{msb:true});
|
|
||||||
var aimg = {
|
var aimg = {
|
||||||
width:ag.getWidth(),
|
width:ag.getWidth(),
|
||||||
height:ag.getHeight(),
|
height:ag.getHeight(),
|
||||||
bpp:2,
|
bpp:2,
|
||||||
buffer:ag.buffer,
|
buffer:ag.buffer,
|
||||||
palette:new Uint16Array([0,0x03FF,0xF800,0x001F])
|
palette:new Uint16Array([
|
||||||
|
g.theme.bg,
|
||||||
|
g.toColor("#07f"),
|
||||||
|
g.toColor("#f00"),
|
||||||
|
g.toColor("#00f")])
|
||||||
};
|
};
|
||||||
ag.setColor(1);
|
ag.setColor(1).fillCircle(AGM,AGM,AGM-1,AGM-1);
|
||||||
ag.fillCircle(80,80,79,79);
|
ag.setColor(0).fillCircle(AGM,AGM,AGM-11,AGM-11);
|
||||||
ag.setColor(0);
|
|
||||||
ag.fillCircle(80,80,69,69);
|
|
||||||
|
|
||||||
function arrow(r,c) {
|
function arrow(r,c) {
|
||||||
r=r*Math.PI/180;
|
r=r*Math.PI/180;
|
||||||
var p = Math.PI/2;
|
var p = Math.PI/2;
|
||||||
ag.setColor(c);
|
ag.setColor(c).fillPoly([
|
||||||
ag.fillPoly([
|
AGM+AGH*Math.sin(r), AGM-AGH*Math.cos(r),
|
||||||
80+60*Math.sin(r), 80-60*Math.cos(r),
|
AGM+10*Math.sin(r+p), AGM-10*Math.cos(r+p),
|
||||||
80+10*Math.sin(r+p), 80-10*Math.cos(r+p),
|
AGM+10*Math.sin(r-p), AGM-10*Math.cos(r-p),
|
||||||
80+10*Math.sin(r-p), 80-10*Math.cos(r-p),
|
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var wasUncalibrated = false;
|
||||||
var oldHeading = 0;
|
var oldHeading = 0;
|
||||||
Bangle.on('mag', function(m) {
|
Bangle.on('mag', function(m) {
|
||||||
if (!Bangle.isLCDOn()) return;
|
if (!Bangle.isLCDOn()) return;
|
||||||
tg.clear();
|
g.reset();
|
||||||
tg.setFont("6x8",1);
|
|
||||||
tg.setColor(1);
|
|
||||||
if (isNaN(m.heading)) {
|
if (isNaN(m.heading)) {
|
||||||
tg.setFontAlign(0,-1);
|
if (!wasUncalibrated) {
|
||||||
tg.setFont("6x8",1);
|
g.clearRect(0,24,W,48);
|
||||||
tg.drawString("Uncalibrated",60,4);
|
g.setFontAlign(0,-1).setFont("6x8");
|
||||||
tg.drawString("turn 360° around",60,12);
|
g.drawString("Uncalibrated\nturn 360° around",M,24+4);
|
||||||
|
wasUncalibrated = true;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (wasUncalibrated) {
|
||||||
|
g.clearRect(0,24,W,48);
|
||||||
|
wasUncalibrated = false;
|
||||||
|
}
|
||||||
|
g.setFontAlign(0,0).setFont("6x8",3);
|
||||||
|
var y = 36;
|
||||||
|
g.clearRect(M-40,y,M+40,y+24);
|
||||||
|
g.drawString(Math.round(m.heading),M,y,true);
|
||||||
}
|
}
|
||||||
else {
|
|
||||||
tg.setFontAlign(0,0);
|
|
||||||
tg.setFont("6x8",2);
|
|
||||||
tg.drawString(Math.round(m.heading),60,12);
|
|
||||||
}
|
|
||||||
g.drawImage(timg,0,0,{scale:2});
|
|
||||||
|
|
||||||
ag.setColor(0);
|
ag.setColor(0);
|
||||||
arrow(oldHeading,0);
|
arrow(oldHeading,0);
|
||||||
arrow(oldHeading+180,0);
|
arrow(oldHeading+180,0);
|
||||||
arrow(m.heading,2);
|
arrow(m.heading,2);
|
||||||
arrow(m.heading+180,3);
|
arrow(m.heading+180,3);
|
||||||
g.drawImage(aimg,40,50);
|
g.drawImage(aimg,
|
||||||
|
(W-ag.getWidth())/2,
|
||||||
|
g.getHeight()-(ag.getHeight()+4));
|
||||||
oldHeading = m.heading;
|
oldHeading = m.heading;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
g.clear();
|
||||||
|
Bangle.loadWidgets();
|
||||||
|
Bangle.drawWidgets();
|
||||||
Bangle.setCompassPower(1);
|
Bangle.setCompassPower(1);
|
||||||
|
Bangle.setLCDPower(1);
|
||||||
|
Bangle.setLCDTimeout(0);
|
||||||
|
|
|
@ -0,0 +1,3 @@
|
||||||
|
0.02: Works with light theme
|
||||||
|
Doesn't drain battery by updating every 2 secs
|
||||||
|
Fix alignment
|
|
@ -1,30 +1,17 @@
|
||||||
(function(){
|
(function(){
|
||||||
//var img = E.toArrayBuffer(atob("FBSBAAAAAAAAA/wAf+AP/wH/2D/zw/w8PwfD9nw+b8Pg/Dw/w8/8G/+A//AH/gA/wAAAAAAA"));
|
var cp = Bangle.setCompassPower;
|
||||||
//var img = E.toArrayBuffer(atob("GBiBAAB+AAP/wAeB4A4AcBgAGDAADHAADmABhmAHhsAfA8A/A8BmA8BmA8D8A8D4A2HgBmGABnAADjAADBgAGA4AcAeB4AP/wAB+AA=="));
|
Bangle.setCompassPower = () => {
|
||||||
var img = E.toArrayBuffer(atob("FBSBAAH4AH/gHAODgBwwAMYABkAMLAPDwPg8CYPBkDwfA8PANDACYABjAAw4AcHAOAf+AB+A"));
|
cp.apply(Bangle, arguments);
|
||||||
|
WIDGETS.compass.draw();
|
||||||
function draw() {
|
};
|
||||||
|
|
||||||
|
WIDGETS.compass={area:"tr",width:24,draw:function() {
|
||||||
g.reset();
|
g.reset();
|
||||||
if (Bangle.isCompassOn()) {
|
if (Bangle.isCompassOn()) {
|
||||||
g.setColor(1,0.8,0); // on = amber
|
g.setColor(g.theme.dark ? "#FC0" : "#F00");
|
||||||
} else {
|
} else {
|
||||||
g.setColor(0.3,0.3,0.3); // off = grey
|
g.setColor(g.theme.dark ? "#333" : "#CCC");
|
||||||
}
|
}
|
||||||
g.drawImage(img, 10+this.x, 2+this.var);
|
g.drawImage(atob("FBSBAAH4AH/gHAODgBwwAMYABkAMLAPDwPg8CYPBkDwfA8PANDACYABjAAw4AcHAOAf+AB+A"), 2+this.x, 2+this.var);
|
||||||
}
|
}};
|
||||||
|
|
||||||
var timerInterval;
|
|
||||||
Bangle.on('lcdPower', function(on) {
|
|
||||||
if (on) {
|
|
||||||
WIDGETS.compass.draw();
|
|
||||||
if (!timerInterval) timerInterval = setInterval(()=>WIDGETS.compass.draw(), 2000);
|
|
||||||
} else {
|
|
||||||
if (timerInterval) {
|
|
||||||
clearInterval(timerInterval);
|
|
||||||
timerInterval = undefined;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
WIDGETS.compass={area:"tr",width:24,draw:draw};
|
|
||||||
})();
|
})();
|
||||||
|
|
Loading…
Reference in New Issue