Espruino/libs/js/banglejs/Bangle_setUI_Q3.min.js
thyttan 269b3e3e80 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.
2024-10-15 22:48:38 +02:00

7 lines
3.2 KiB
JavaScript

(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<Math.abs(f);)0<f?(f-=32,d(1)):(f+=32,d(-1)),Bangle.buzz(20)};Bangle.on("drag",Bangle.dragHandler);
Bangle.touchHandler=b=>{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<Math.abs(h);)0<h?(h-=32,d(1)):(h+=32,d(-1)),Bangle.buzz(20)};Bangle.on("drag",Bangle.dragHandler);Bangle.touchHandler=b=>{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<e.y?1:-1))},Bangle.btnWatches=[setWatch(Bangle.showLauncher,BTN1,{repeat:1,edge:"rising"})];else if("custom"==c)a.clock&&(Bangle.btnWatches=[setWatch(Bangle.showLauncher,BTN1,{repeat:1,edge:"rising"})]);else throw Error("Unknown UI mode "+E.toJS(c));a.clock&&(Bangle.CLOCK=1);a.touch&&(Bangle.touchHandler=a.touch);a.drag&&(Bangle.dragHandler=
a.drag,Bangle.on("drag",Bangle.dragHandler));a.swipe&&(Bangle.swipeHandler=a.swipe,Bangle.on("swipe",Bangle.swipeHandler));!a.btn&&!a.btnRelease||Bangle.btnWatches||(Bangle.btnWatches=[]);a.btn&&Bangle.btnWatches.push(setWatch(a.btn.bind(a),BTN1,{repeat:1,edge:"rising"}));a.btnRelease&&Bangle.btnWatches.push(setWatch(a.btnRelease.bind(a),BTN1,{repeat:1,edge:"falling"}));a.remove&&(Bangle.uiRemove=a.remove);a.redraw&&(Bangle.uiRedraw=a.redraw);if(a.back){var n=(b,e)=>{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)}})