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 11, 2024
1 parent 097a056 commit 54f631d
Show file tree
Hide file tree
Showing 4 changed files with 11 additions and 5 deletions.
1 change: 1 addition & 0 deletions ChangeLog
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@
jsvObjectIterator is now safe even if not called on something iterable
X.on now always allocates an array - tidies up code (fix #2559)
Bangle.js: E.showMenu no longer sends the internal `l` menu object as argument when running the callback function.
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
5 changes: 5 additions & 0 deletions libs/banglejs/jswrap_bangle.c
Original file line number Diff line number Diff line change
Expand Up @@ -5904,6 +5904,10 @@ 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
* (Bangle.js 2) The mapped functions can consider the touch event that interacted with the entry:
`"Entry" : function(touch) { ... }`
* This is also true of `onchange` mapped functions in entry objects:
`onchange : (value, touch) => { ... }`
* 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 +6050,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
8 changes: 4 additions & 4 deletions libs/js/banglejs/E_showMenu_Q3.js
Original file line number Diff line number Diff line change
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();
if ("function" == typeof item) item(touch);
else if ("object" == typeof item) {
// if a bool, just toggle it
if ("number" == typeof item.value) {
showSubMenu(item, keys[idx]);
} else {
// if a bool, just toggle it
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 54f631d

Please sign in to comment.