messagesoverlay - Add settings for using lower memory colors

master
Martin Boonk 2024-04-07 18:47:24 +02:00
parent 979178035a
commit 09140ebcfa
4 changed files with 42 additions and 19 deletions

View File

@ -2,7 +2,7 @@
This app handles the display of messages and message notifications as an overlay pop up. This app handles the display of messages and message notifications as an overlay pop up.
It is a GUI replacement for the `messages` apps. It is a GUI replacement for the `messagesgui` app.
Messages are ephemeral and not stored on the Bangle. Messages are ephemeral and not stored on the Bangle.
@ -10,6 +10,10 @@ Messages are ephemeral and not stored on the Bangle.
Close app by tapping the X and scroll by swiping. The border of the pop up changes color if the Bangle is locked. The color depends on your currently active theme. Close app by tapping the X and scroll by swiping. The border of the pop up changes color if the Bangle is locked. The color depends on your currently active theme.
## Theme support
Using the system theme needs more RAM since it uses a 16 bit color buffer for normal message display. Selecting the "low RAM" theme reduces that to a 4 bit buffer.
## Low memory mode ## Low memory mode
If free memory is below a configured number of blocks (default is 4000), the overlay automatically only uses 1 bit depth. Default mode uses roundabout 1300 blocks, while low memory mode uses about 600. If free memory is below a configured number of blocks (default is 4000), the overlay automatically only uses 1 bit depth. Default mode uses roundabout 1300 blocks, while low memory mode uses about 600.

View File

@ -2,5 +2,6 @@
"autoclear": 30, "autoclear": 30,
"border": 10, "border": 10,
"minfreemem": 2, "minfreemem": 2,
"lowmem": 4 "lowmem": 4,
"systemTheme": true
} }

View File

@ -126,6 +126,7 @@ const roundedRect = function(x,y,w,h,filled){
const DIVIDER = 38; const DIVIDER = 38;
const drawScreen = function(title, src, iconcolor, icon){ const drawScreen = function(title, src, iconcolor, icon){
setColors(true);
ovr.clearRect(2,2,ovr.getWidth()-3, DIVIDER - 1); ovr.clearRect(2,2,ovr.getWidth()-3, DIVIDER - 1);
ovr.setFont(settings.fontSmall); ovr.setFont(settings.fontSmall);
@ -135,6 +136,8 @@ const drawScreen = function(title, src, iconcolor, icon){
const w = ovr.getWidth() - 35 - 26; const w = ovr.getWidth() - 35 - 26;
drawBorder();
if (title) if (title)
drawTitle(title, textCenter, w, 8, DIVIDER - 8, 0); drawTitle(title, textCenter, w, 8, DIVIDER - 8, 0);
@ -200,19 +203,21 @@ const drawTitle = function(title, center, w, y, h) {
ovr.drawString(title, center, dh); ovr.drawString(title, center, dh);
}; };
const setColors = function(lockRelevant) {
if (lockRelevant && !Bangle.isLocked()){
ovr.setColor(ovr.theme.fg2);
ovr.setBgColor(ovr.theme.bg2);
} else {
ovr.setColor(ovr.theme.fg);
ovr.setBgColor(ovr.theme.bg);
}
};
const showMessage = function(msg) { const showMessage = function(msg) {
LOG("showMessage"); LOG("showMessage");
ovr.setClipRect(0,0,ovr.getWidth(),ovr.getHeight()); ovr.setClipRect(0,0,ovr.getWidth(),ovr.getHeight());
if (Bangle.isLocked()){
ovr.setColor(ovr.theme.fg);
ovr.setBgColor(ovr.theme.bg);
} else {
ovr.setColor(ovr.theme.fg2);
ovr.setBgColor(ovr.theme.bg2);
}
drawScreen(msg.title, msg.src || /*LANG*/ "Message", require("messageicons").getColor(msg), require("messageicons").getImage(msg)); drawScreen(msg.title, msg.src || /*LANG*/ "Message", require("messageicons").getColor(msg), require("messageicons").getImage(msg));
@ -235,13 +240,7 @@ const showMessage = function(msg) {
const drawBorder = function() { const drawBorder = function() {
LOG("drawBorder", isQuiet()); LOG("drawBorder", isQuiet());
if (Bangle.isLocked()){ setColors();
ovr.setColor(ovr.theme.fg);
ovr.setBgColor(ovr.theme.bg);
} else {
ovr.setColor(ovr.theme.fg2);
ovr.setBgColor(ovr.theme.bg2);
}
ovr.drawRect(0,0,ovr.getWidth()-1,ovr.getHeight()-1); ovr.drawRect(0,0,ovr.getWidth()-1,ovr.getHeight()-1);
ovr.drawRect(1,1,ovr.getWidth()-2,ovr.getHeight()-2); ovr.drawRect(1,1,ovr.getWidth()-2,ovr.getHeight()-2);
ovr.drawRect(2,DIVIDER,ovr.getWidth()-2,DIVIDER+1); ovr.drawRect(2,DIVIDER,ovr.getWidth()-2,DIVIDER+1);
@ -333,6 +332,7 @@ const scrollDown = function() {
}; };
const drawMessage = function(msg) { const drawMessage = function(msg) {
setColors(false);
const getStringHeight = function(str){ const getStringHeight = function(str){
"jit"; "jit";
const metrics = ovr.stringMetrics(str); const metrics = ovr.stringMetrics(str);
@ -639,7 +639,7 @@ exports.message = function(type, event) {
if(event.handled) return; if(event.handled) return;
if(event.messagesoverlayignore) return; if(event.messagesoverlayignore) return;
bpp = 16; bpp = settings.systemTheme ? 16 : 4;
if (process.memory().free < settings.lowmem) if (process.memory().free < settings.lowmem)
bpp = 1; bpp = 1;
@ -657,7 +657,18 @@ exports.message = function(type, event) {
ovr.reset(); ovr.reset();
if (bpp > 1){ if (bpp > 1){
if (settings.systemTheme){
ovr.theme = g.theme; ovr.theme = g.theme;
} else {
ovr.theme = {
fg: g.theme.dark ? 15: 0,
bg: g.theme.dark ? 0: 15,
fg2: g.theme.dark ? 15: 0,
bg2: g.theme.dark ? 9 : 8,
fgH: g.theme.dark ? 15 : 0,
bgH: g.theme.dark ? 9: 8,
};
}
} }
else { else {
if (g.theme.dark) if (g.theme.dark)

View File

@ -41,6 +41,13 @@
writeSettings("autoclear",v); writeSettings("autoclear",v);
} }
}, },
'Theme': {
value: settings.systemTheme,
format: v=>v?"System":"low RAM",
onchange: v => {
writeSettings("systemTheme",v);
}
},
'Min. free RAM': { 'Min. free RAM': {
value: settings.minfreemem, value: settings.minfreemem,
min: 0, min: 0,