Much improved icons with a white border for better visibility

master
Gordon Williams 2025-06-03 16:53:35 +01:00
parent 4828624aa5
commit 316f59c5fe
3 changed files with 12 additions and 12 deletions

View File

@ -10,14 +10,14 @@ var startDrag = undefined; //< to detect a short tap when zooming
var hasRecorder = require("Storage").read("recorder")!=undefined; // do we have the recorder library? var hasRecorder = require("Storage").read("recorder")!=undefined; // do we have the recorder library?
var hasWaypoints = require("Storage").read("waypoints")!=undefined; // do we have the recorder library? var hasWaypoints = require("Storage").read("waypoints")!=undefined; // do we have the recorder library?
var labelFont = g.getFonts().includes("17")?"17":"6x8:2"; var labelFont = g.getFonts().includes("17")?"17":"6x8:2";
var imgLoc, ovLoc, ovSize = 34; /*Math.ceil(Math.sqrt(imgLoc[0]*imgLoc[0]+imgLoc[1]*imgLoc[1]))*/ var imgLoc, ovLoc, ovSize = 30; /*Math.ceil(Math.sqrt(imgLoc[0]*imgLoc[0]+imgLoc[1]*imgLoc[1]))*/
var locOnscreen = undefined; // is the GPS location currently onscreen? var locOnscreen = undefined; // is the GPS location currently onscreen?
if (Bangle.setLCDOverlay) { if (Bangle.setLCDOverlay) {
// Icon for current location+direction: https://icons8.com/icon/11932/gps 24x24, 1 Bit + transparency + inverted // Icon for current location + direction (icon_gps.png, 2 bit bw, transparent)
imgLoc = require("heatshrink").decompress(atob("jEYwINLAQk8AQl+AQn/AQcB/+AAQUD//AAQUH//gAQUP//wAQUf//4j8AvA9IA==")); imgLoc = atob("EBiCAVVQBVVVU8VVVVPFVVVDwVVVT/FVVU/xVVUP8FVVP/xVVT/8VVQ//BVU//8VVP//FVD//wVT///FU///xUP//8FP///xD/AP8D/BQ/w/BVD8PxVU/AAVVABVVVVVVVVVVQ==");
// overlay buffer for current location, a bit bigger then image so we can rotate // overlay buffer for current location, a bit bigger then image so we can rotate
ovLoc = Graphics.createArrayBuffer(ovSize,ovSize,imgLoc[2] & 0x7f,{msb:true}); ovLoc = Graphics.createArrayBuffer(ovSize,ovSize,2,{msb:true});
} }
if (settings.lat !== undefined && settings.lon !== undefined && settings.scale !== undefined) { if (settings.lat !== undefined && settings.lon !== undefined && settings.scale !== undefined) {
@ -78,12 +78,12 @@ function drawPOI() {
} }
if (!waypoints) return; if (!waypoints) return;
g; g;
var img = atob("DRXCAP//APgfAAAAAFVAAVVVAVVVUFUBVFUAFVVABVVQAVRVAVQVVVUBVVUAVVVABVVAAVVQABVQAAVUAABUAACVgACJiACISIAIiIAAiIAA"); var img = atob("ERnCAQD4/////x8AVWqqVVWoAKlVoAAClaAAAClgAqACaAJWAKgCVWAKAJVYAoAlVgCoAlYApgAqACVgAAApWAAACVWAAApVYAACVVYAApVVgACVVVgApVVWACVVVeAtVVXcDdVV3s7dVd3i3dVd3t3VVd3d1UA="); // icon_place.png optimal 2 bit + transparent
g.setFont(labelFont).setFontAlign(-1,0); g.setFont(labelFont).setFontAlign(-1,0);
waypoints.forEach((wp, idx) => { waypoints.forEach((wp, idx) => {
if (wp.lat === undefined || wp.lon === undefined) return; if (wp.lat === undefined || wp.lon === undefined) return;
var p = m.latLonToXY(wp.lat, wp.lon); var p = m.latLonToXY(wp.lat, wp.lon);
g.setColor("#fff").drawImage(img, p.x-6, p.y-18); g.setColor("#fff").drawImage(img, p.x-8, p.y-22);
g.setColor(0).drawString(wp.name, p.x+8, p.y); g.setColor(0).drawString(wp.name, p.x+8, p.y);
}); });
} }
@ -118,19 +118,19 @@ function drawLocation() {
} }
var p = m.latLonToXY(fix.lat, fix.lon); var p = m.latLonToXY(fix.lat, fix.lon);
ovLoc.clear(); ovLoc.setBgColor(1).clear().setBgColor(0);
locOnscreen = isInside(R, p, ovLoc.getWidth(), ovLoc.getHeight()); locOnscreen = isInside(R, p, ovSize, ovSize);
if (locOnscreen) { // if we're onscreen, draw the course if (locOnscreen) { // if we're onscreen, draw the course
const angle = settings.dirSrc === 1 ? fix.course : Bangle.getCompass().heading; const angle = settings.dirSrc === 1 ? fix.course : Bangle.getCompass().heading;
if (isNaN(angle)) { if (isNaN(angle)) {
ovLoc.fillCircle(ovSize/2,ovSize/2,8); ovLoc.fillCircle(ovSize/2,ovSize/2,8);
} else { } else {
ovLoc.drawImage(imgLoc, ovLoc.getWidth()/2, ovLoc.getHeight()/2, {rotate: angle*Math.PI/180}); ovLoc.drawImage(imgLoc, ovSize/2, ovSize/2, {rotate: angle*Math.PI/180});
} }
} else { // if off-screen, draw a blue circle on the edge } else { // if off-screen, draw a blue circle on the edge
var mx = R.w/2, my = R.h/2; var mx = R.w/2, my = R.h/2;
var dy = p.y - (R.y+my), dx = p.x - mx; var dy = p.y - (R.y+my), dx = p.x - mx;
ovLoc.fillCircle(ovSize/2,ovSize/2,16); ovLoc.fillCircle(ovSize/2,ovSize/2,15);
if (Math.abs(dx)>Math.abs(dy)) { if (Math.abs(dx)>Math.abs(dy)) {
dy = mx * dy / Math.abs(dx); dy = mx * dy / Math.abs(dx);
dx = mx * Math.sign(dx); dx = mx * Math.sign(dx);
@ -143,8 +143,8 @@ function drawLocation() {
p.y = R.y+my+dy; p.y = R.y+my+dy;
} }
Bangle.setLCDOverlay({width:ovSize, height:ovSize, Bangle.setLCDOverlay({width:ovSize, height:ovSize,
bpp:ovLoc.getBPP(), transparent:0, bpp:ovLoc.getBPP(), transparent:1,
palette:new Uint16Array([0, g.toColor("#00F")]), palette:new Uint16Array([g.toColor("#FFF"), 0, 0, g.toColor("#00F")]),
buffer:ovLoc.buffer buffer:ovLoc.buffer
}, p.x-ovSize/2, p.y-ovSize/2); }, p.x-ovSize/2, p.y-ovSize/2);

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 KiB