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 5911409 commit eea6182
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 @@ -28,6 +28,7 @@
STM32F4: Update stm32f4xx_ll_usb to fix over-buffered USB CDC tx after being woken from deep sleep
Waveform: Add 'npin' option to allow +/- output on two pins
Waveform: Add ability to play directly from Storage
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 eea6182

Please sign in to comment.