Skip to content

Commit

Permalink
E_showMenu_/E_showScroller_Q3: forward touch event
Browse files Browse the repository at this point in the history
The goal was to make it possible for menus to distinguish between short
and long touches when the entry maps to a function.

With this alarms in the `alarm` app could be made togglable by longpressing
corresponding menu entries.
  • Loading branch information
thyttan committed Oct 8, 2024
1 parent ad04963 commit 2f4f710
Show file tree
Hide file tree
Showing 4 changed files with 10 additions and 6 deletions.
1 change: 1 addition & 0 deletions ChangeLog
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@
Waveform: Add 'npin' option to allow +/- output on two pins
Waveform: Add ability to play directly from Storage
Puck.js: Remove networking support from default build, add PUCKJS_NETWORK -> espruino_2vxx_puckjs_network.zip builds for those that need it
Bangle.js2: Pass the modified touch event on through both E.showScroller and E.showMenu (to enable more complex interaction with menus).

2v24 : Bangle.js2: Add 'Bangle.touchRd()', 'Bangle.touchWr()'
Bangle.js2: After Bangle.showTestScreen, put Bangle.js into a hard off state (not soft off)
Expand Down
3 changes: 3 additions & 0 deletions libs/banglejs/jswrap_bangle.c
Original file line number Diff line number Diff line change
Expand Up @@ -5904,6 +5904,8 @@ On Bangle.js there are a few additions over the standard `graphical_menu`:
menu is removed
* (Bangle.js 2) `scroll : int` - an integer specifying how much the initial
menu should be scrolled by
* `onchange : function(value, touch) {}` - on Bangle.js 2 this function can
consider ~how~ the entry was touched. See `E.showScroller` for more info.
* The object returned by `E.showMenu` contains:
* (Bangle.js 2) `scroller` - the object returned by `E.showScroller` -
`scroller.scroll` returns the amount the menu is currently scrolled by
Expand Down Expand Up @@ -6046,6 +6048,7 @@ Supply an object containing:
draw : function(idx, rect) { ... }
// a function to call when the item is selected, touch parameter is only relevant
// for Bangle.js 2 and contains the coordinates touched inside the selected item
// as well as the type of the touch - see `Bangle.touch`.
select : function(idx, touch) { ... }
// optional function to be called when 'back' is tapped
back : function() { ...}
Expand Down
10 changes: 5 additions & 5 deletions libs/js/banglejs/E_showMenu_Q3.js
Original file line number Diff line number Diff line change
Expand Up @@ -38,11 +38,11 @@
g.setColor(g.theme.fg2).setFont("12x20").setFontAlign(-1,0).drawString((item.format) ? item.format(v,1) : v, r.x+12, r.y+H/2);
g.drawImage(/* 20x20 */atob(v==item.value?"FBSBAAH4AH/gHgeDgBww8MY/xmf+bH/jz/88//PP/zz/88f+Nn/mY/xjDww4AcHgeAf+AB+A":"FBSBAAH4AH/gHgeDgBwwAMYABmAAbAADwAA8AAPAADwAA8AANgAGYABjAAw4AcHgeAf+AB+A"), r.x+r.w-32, r.y+H/2-10);
},
select : function(idx) {
select : function(idx, touch) {
if (idx<0) return; // TITLE
Bangle.buzz(20);
item.value = item.min + idx*step;
if (item.onchange) item.onchange(item.value);
if (item.onchange) item.onchange(item.value, touch);
scr.scroll = l.scroller.scroll; // set scroll to prev position
show(); // redraw original menu
}
Expand Down Expand Up @@ -133,19 +133,19 @@
l = g.setFont("6x15").wrapString(title,r.w-pad);
g.setFontAlign(-1,0).drawString(l.join("\n"), r.x+12, r.y+H/2);
},
select : function(idx) {
select : function(idx, touch) {
if (idx<0) return back&&back(); // title
var item = menu[keys[idx]];
Bangle.buzz(20);
if ("function" == typeof item) item(l);
if ("function" == typeof item) item(l, touch);
else if ("object" == typeof item) {
// if a bool, just toggle it
if ("number" == typeof item.value) {
showSubMenu(item, keys[idx]);
} else {
if ("boolean"==typeof item.value)
item.value=!item.value;
if (item.onchange) item.onchange(item.value);
if (item.onchange) item.onchange(item.value, touch);
if (l.scroller.isActive()) l.scroller.drawItem(idx);
}
}
Expand Down
2 changes: 1 addition & 1 deletion libs/js/banglejs/E_showScroller_Q3.js
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@ Bangle.setUI({
}
if ((menuScrollMin<0 || i>=0) && i<options.c){
//console.log("Press ",e.y,i,yInElement);
options.select(i, {x:e.x, y:yInElement});
options.select(i, {x:e.x, y:yInElement, type:e.type});
}
}
});
Expand Down

0 comments on commit 2f4f710

Please sign in to comment.