From 269b3e3e807ba9a56956a061977e83eef23e2a18 Mon Sep 17 00:00:00 2001 From: thyttan <6uuxstm66@mozmail.com> Date: Tue, 15 Oct 2024 22:48:38 +0200 Subject: [PATCH] Bangle_setUI_Q3: tweaks (read below) - Add custom handlers on top of the standard modes as well. Previously this was only possible for mode == "custom". - The goal here is to make it possible to move all input handling inside `setUI` where today some apps add on extra handlers outside of `setUI` calls. - Change the default behaviour of the hardware button to act immediately on press down. Previously it has been acting on button release. - This makes the interaction slightly snappier. - In addition to the existing `btn` key a new `btnRelease` key can now be specified. `btnRelease` will let you listen to the rising edge of the hardware button. --- libs/js/banglejs/Bangle_setUI_Q3.js | 45 +++++++++++++------------ libs/js/banglejs/Bangle_setUI_Q3.min.js | 13 +++---- 2 files changed, 30 insertions(+), 28 deletions(-) diff --git a/libs/js/banglejs/Bangle_setUI_Q3.js b/libs/js/banglejs/Bangle_setUI_Q3.js index 3a30c43a96..a6453da040 100644 --- a/libs/js/banglejs/Bangle_setUI_Q3.js +++ b/libs/js/banglejs/Bangle_setUI_Q3.js @@ -39,6 +39,7 @@ try{Bangle.buzz(30);}catch(e){} } if (mode=="updown") { + if (options.drag) throw new Error("Custom drag handler not supported in mode updown!") var dy = 0; Bangle.dragHandler = e=>{ dy += e.dy; @@ -52,9 +53,10 @@ Bangle.on('drag',Bangle.dragHandler); Bangle.touchHandler = d => {b();cb();}; Bangle.btnWatches = [ - setWatch(function() { b();cb(); }, BTN1, {repeat:1, edge:"falling"}), + setWatch(function() { b();cb(); }, BTN1, {repeat:1, edge:"rising"}), ]; } else if (mode=="leftright") { + if (options.drag) throw new Error("Custom drag handler not supported in mode leftright!") var dx = 0; Bangle.dragHandler = e=>{ dx += e.dx; @@ -68,12 +70,12 @@ Bangle.on('drag',Bangle.dragHandler); Bangle.touchHandler = d => {b();cb();}; Bangle.btnWatches = [ - setWatch(function() { b();cb(); }, BTN1, {repeat:1, edge:"falling"}), + setWatch(function() { b();cb(); }, BTN1, {repeat:1, edge:"rising"}), ]; } else if (mode=="clock") { Bangle.CLOCK=1; Bangle.btnWatches = [ - setWatch(Bangle.showLauncher, BTN1, {repeat:1,edge:"falling"}) + setWatch(Bangle.showLauncher, BTN1, {repeat:1,edge:"rising"}) ]; } else if (mode=="clockupdown") { Bangle.CLOCK=1; @@ -82,31 +84,30 @@ b();cb((e.y > 88) ? 1 : -1); }; Bangle.btnWatches = [ - setWatch(Bangle.showLauncher, BTN1, {repeat:1,edge:"falling"}) + setWatch(Bangle.showLauncher, BTN1, {repeat:1,edge:"rising"}) ]; } else if (mode=="custom") { - if (options.clock) Bangle.CLOCK=1; - if (options.touch) - Bangle.touchHandler = options.touch; - if (options.drag) { - Bangle.dragHandler = options.drag; - Bangle.on("drag", Bangle.dragHandler); - } - if (options.swipe) { - Bangle.swipeHandler = options.swipe; - Bangle.on("swipe", Bangle.swipeHandler); - } - if (options.btn) { - Bangle.btnWatches = [ - setWatch(function() { options.btn(1); }, BTN1, {repeat:1,edge:"falling"}) - ]; - } else if (options.clock) { + if (options.clock) { Bangle.btnWatches = [ - setWatch(Bangle.showLauncher, BTN1, {repeat:1,edge:"falling"}) + setWatch(Bangle.showLauncher, BTN1, {repeat:1,edge:"rising"}) ]; } } else throw new Error("Unknown UI mode "+E.toJS(mode)); + if (options.clock) Bangle.CLOCK=1; + if (options.touch) + Bangle.touchHandler = options.touch; + if (options.drag) { + Bangle.dragHandler = options.drag; + Bangle.on("drag", Bangle.dragHandler); + } + if (options.swipe) { + Bangle.swipeHandler = options.swipe; + Bangle.on("swipe", Bangle.swipeHandler); + } + if ((options.btn || options.btnRelease) && !Bangle.btnWatches) Bangle.btnWatches = []; + if (options.btn) Bangle.btnWatches.push(setWatch(options.btn.bind(options), BTN1, {repeat:1,edge:"rising"})) + if (options.btnRelease) Bangle.btnWatches.push(setWatch(options.btnRelease.bind(options), BTN1, {repeat:1,edge:"falling"})) if (options.remove) // handler for removing the UI (intervals/etc) Bangle.uiRemove = options.remove; if (options.redraw) // handler for redrawing the UI @@ -133,7 +134,7 @@ btnWatch = setWatch(function() { btnWatch = undefined; options.back(); - }, BTN1, {edge:"falling"}); + }, BTN1, {edge:"rising"}); WIDGETS = Object.assign({back:{ area:"tl", width:24, draw:e=>g.reset().setColor("#f00").drawImage(atob("GBiBAAAYAAH/gAf/4A//8B//+D///D///H/P/n+H/n8P/n4f/vwAP/wAP34f/n8P/n+H/n/P/j///D///B//+A//8Af/4AH/gAAYAA=="),e.x,e.y), diff --git a/libs/js/banglejs/Bangle_setUI_Q3.min.js b/libs/js/banglejs/Bangle_setUI_Q3.min.js index 613765056b..f3c8419131 100644 --- a/libs/js/banglejs/Bangle_setUI_Q3.min.js +++ b/libs/js/banglejs/Bangle_setUI_Q3.min.js @@ -1,6 +1,7 @@ -(function(c,d){function k(){try{Bangle.buzz(30)}catch(a){}}var b={};if("object"==typeof c&&(b=c,c=b.mode,!c))throw Error("Missing mode in setUI({...})");var m=!0;global.WIDGETS&&WIDGETS.back&&(m=!1,WIDGETS.back.remove(c&&b.back));Bangle.btnWatches&&(Bangle.btnWatches.forEach(clearWatch),delete Bangle.btnWatches);Bangle.swipeHandler&&(Bangle.removeListener("swipe",Bangle.swipeHandler),delete Bangle.swipeHandler);Bangle.dragHandler&&(Bangle.removeListener("drag",Bangle.dragHandler), -delete Bangle.dragHandler);Bangle.touchHandler&&(Bangle.removeListener("touch",Bangle.touchHandler),delete Bangle.touchHandler);delete Bangle.uiRedraw;delete Bangle.CLOCK;if(Bangle.uiRemove){let a=Bangle.uiRemove;delete Bangle.uiRemove;a()}g.reset();if(c){if("updown"==c){var f=0;Bangle.dragHandler=a=>{f+=a.dy;for(a.b||(f=0);32{k();d()};Bangle.btnWatches=[setWatch(function(){k(); -d()},BTN1,{repeat:1,edge:"falling"})]}else if("leftright"==c){var h=0;Bangle.dragHandler=a=>{h+=a.dx;for(a.b||(h=0);32{k();d()};Bangle.btnWatches=[setWatch(function(){k();d()},BTN1,{repeat:1,edge:"falling"})]}else if("clock"==c)Bangle.CLOCK=1,Bangle.btnWatches=[setWatch(Bangle.showLauncher,BTN1,{repeat:1,edge:"falling"})];else if("clockupdown"==c)Bangle.CLOCK=1,Bangle.touchHandler= -(a,e)=>{120>e.x||(k(),d(88{36>e.y&&48>e.x&&(e.handled=!0,E.stopEventPropagation(),b.back())};Bangle.on("touch",n);if(Bangle.touchHandler){var p=Bangle.touchHandler;Bangle.touchHandler=(a,e)=>{e.handled||p(a,e)};Bangle.on("touch",Bangle.touchHandler)}var l;void 0===Bangle.btnWatches&&(l=setWatch(function(){l=void 0;b.back()},BTN1,{edge:"falling"})); -WIDGETS=Object.assign({back:{area:"tl",width:24,draw:a=>g.reset().setColor("#f00").drawImage(atob("GBiBAAAYAAH/gAf/4A//8B//+D///D///H/P/n+H/n8P/n4f/vwAP/wAP34f/n8P/n+H/n/P/j///D///B//+A//8Af/4AH/gAAYAA=="),a.x,a.y),remove:a=>{l&&clearWatch(l);Bangle.removeListener("touch",n);a||g.reset().clearRect({x:WIDGETS.back.x,y:WIDGETS.back.y,w:24,h:24});delete WIDGETS.back;a||Bangle.drawWidgets()}}},global.WIDGETS);m&&Bangle.drawWidgets()}else if(Bangle.touchHandler)Bangle.on("touch",Bangle.touchHandler)}}) \ No newline at end of file +(function(c,d){function k(){try{Bangle.buzz(30)}catch(b){}}var a={};if("object"==typeof c&&(a=c,c=a.mode,!c))throw Error("Missing mode in setUI({...})");var m=!0;global.WIDGETS&&WIDGETS.back&&(m=!1,WIDGETS.back.remove(c&&a.back));Bangle.btnWatches&&(Bangle.btnWatches.forEach(clearWatch),delete Bangle.btnWatches);Bangle.swipeHandler&&(Bangle.removeListener("swipe",Bangle.swipeHandler),delete Bangle.swipeHandler);Bangle.dragHandler&&(Bangle.removeListener("drag",Bangle.dragHandler), +delete Bangle.dragHandler);Bangle.touchHandler&&(Bangle.removeListener("touch",Bangle.touchHandler),delete Bangle.touchHandler);delete Bangle.uiRedraw;delete Bangle.CLOCK;if(Bangle.uiRemove){let b=Bangle.uiRemove;delete Bangle.uiRemove;b()}g.reset();if(c){if("updown"==c){if(a.drag)throw Error("Custom drag handler not supported in mode updown!");var f=0;Bangle.dragHandler=b=>{f+=b.dy;for(b.b||(f=0);32{k();d()};Bangle.btnWatches=[setWatch(function(){k();d()},BTN1,{repeat:1,edge:"rising"})]}else if("leftright"==c){if(a.drag)throw Error("Custom drag handler not supported in mode leftright!");var h=0;Bangle.dragHandler=b=>{h+=b.dx;for(b.b||(h=0);32{k();d()};Bangle.btnWatches=[setWatch(function(){k();d()},BTN1,{repeat:1,edge:"rising"})]}else if("clock"==c)Bangle.CLOCK= +1,Bangle.btnWatches=[setWatch(Bangle.showLauncher,BTN1,{repeat:1,edge:"rising"})];else if("clockupdown"==c)Bangle.CLOCK=1,Bangle.touchHandler=(b,e)=>{120>e.x||(k(),d(88{36>e.y&&48>e.x&&(e.handled=!0, +E.stopEventPropagation(),a.back())};Bangle.on("touch",n);if(Bangle.touchHandler){var p=Bangle.touchHandler;Bangle.touchHandler=(b,e)=>{e.handled||p(b,e)};Bangle.on("touch",Bangle.touchHandler)}var l;void 0===Bangle.btnWatches&&(l=setWatch(function(){l=void 0;a.back()},BTN1,{edge:"rising"}));WIDGETS=Object.assign({back:{area:"tl",width:24,draw:b=>g.reset().setColor("#f00").drawImage(atob("GBiBAAAYAAH/gAf/4A//8B//+D///D///H/P/n+H/n8P/n4f/vwAP/wAP34f/n8P/n+H/n/P/j///D///B//+A//8Af/4AH/gAAYAA=="),b.x, +b.y),remove:b=>{l&&clearWatch(l);Bangle.removeListener("touch",n);b||g.reset().clearRect({x:WIDGETS.back.x,y:WIDGETS.back.y,w:24,h:24});delete WIDGETS.back;b||Bangle.drawWidgets()}}},global.WIDGETS);m&&Bangle.drawWidgets()}else if(Bangle.touchHandler)Bangle.on("touch",Bangle.touchHandler)}}) \ No newline at end of file