promenu/folderlaunch: update to new touch event arg
e.g. from https://github.com/espruino/BangleApps/issues/3804#issuecomment-2834920685 aka: - https://github.com/espruino/BangleApps/pull/3604 - https://github.com/espruino/Espruino/pull/2565 - https://github.com/espruino/BangleApps/pull/3609 - https://github.com/espruino/Espruino/pull/2569master
parent
260dff75f7
commit
123498424a
|
|
@ -174,7 +174,7 @@
|
|||
* @param _button 1 for left half, 2 for right half
|
||||
* @param xy postion on screen
|
||||
*/
|
||||
let onTouch = function (_button: number, xy: { x: number, y: number } | undefined) {
|
||||
let onTouch = function (_button, xy) {
|
||||
// Determine which grid cell was tapped
|
||||
let x: number = Math.floor((xy!.x - 12) / ((g.getWidth() - 24) / config.display.rows));
|
||||
if (x < 0) x = 0;
|
||||
|
|
@ -206,7 +206,7 @@
|
|||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
} satisfies TouchCallback;
|
||||
|
||||
let page: number = 0;
|
||||
let nPages: number; // Set when setting folder
|
||||
|
|
|
|||
|
|
@ -14,3 +14,4 @@
|
|||
0.10: Trigger `remove` callbacks when ending the menu
|
||||
0.11: Add options for natural scroll and disabling wrap-around
|
||||
0.12: Fix bug where settings would behave as if all were set to false
|
||||
0.13: Update to new touch-event handling
|
||||
|
|
|
|||
|
|
@ -133,10 +133,10 @@ E.showMenu = function (items) {
|
|||
g.setColor((idx < menuItems.length) ? g.theme.fg : g.theme.bg).fillPoly([72, 166, 104, 166, 88, 174]);
|
||||
g.flip();
|
||||
},
|
||||
select: function () {
|
||||
select: function (evt) {
|
||||
var item = items[menuItems[selected]];
|
||||
if (typeof item === "function") {
|
||||
item();
|
||||
item(evt);
|
||||
}
|
||||
else if (typeof item === "object") {
|
||||
if (typeof item.value === "number") {
|
||||
|
|
@ -146,12 +146,12 @@ E.showMenu = function (items) {
|
|||
if (typeof item.value === "boolean")
|
||||
item.value = !item.value;
|
||||
if (item.onchange)
|
||||
item.onchange(item.value);
|
||||
item.onchange(item.value, evt);
|
||||
}
|
||||
l.draw();
|
||||
}
|
||||
},
|
||||
move: function (dir) {
|
||||
move: function (dir, evt) {
|
||||
var item = selectEdit;
|
||||
if (typeof item === "object" && typeof item.value === "number") {
|
||||
var orig = item.value;
|
||||
|
|
@ -162,7 +162,7 @@ E.showMenu = function (items) {
|
|||
item.value = item.wrap ? item.min : item.max;
|
||||
if (item.value !== orig) {
|
||||
if (item.onchange)
|
||||
item.onchange(item.value);
|
||||
item.onchange(item.value, evt);
|
||||
l.draw(selected, selected);
|
||||
}
|
||||
}
|
||||
|
|
@ -198,6 +198,12 @@ E.showMenu = function (items) {
|
|||
};
|
||||
Bangle.on('swipe', onSwipe);
|
||||
}
|
||||
var cb = function (dir, evt) {
|
||||
if (dir)
|
||||
l.move(prosettings.naturalScroll ? -dir : dir, evt);
|
||||
else
|
||||
l.select(evt);
|
||||
};
|
||||
Bangle.setUI({
|
||||
mode: "updown",
|
||||
back: back,
|
||||
|
|
@ -208,11 +214,9 @@ E.showMenu = function (items) {
|
|||
Bangle.removeListener("swipe", onSwipe);
|
||||
(_a = options.remove) === null || _a === void 0 ? void 0 : _a.call(options);
|
||||
},
|
||||
}, function (dir) {
|
||||
if (dir)
|
||||
l.move(prosettings.naturalScroll ? -dir : dir);
|
||||
else
|
||||
l.select();
|
||||
});
|
||||
touch: (function (_button, xy) {
|
||||
cb(void 0, xy);
|
||||
}),
|
||||
}, cb);
|
||||
return l;
|
||||
};
|
||||
|
|
|
|||
|
|
@ -175,11 +175,11 @@ E.showMenu = (items?: Menu): MenuInstance => {
|
|||
g.setColor((idx < menuItems.length)?g.theme.fg:g.theme.bg).fillPoly([72, 166, 104, 166, 88, 174]);
|
||||
g.flip();
|
||||
},
|
||||
select: () => {
|
||||
select: (evt: TouchCallbackXY | undefined) => {
|
||||
const item = items![menuItems[selected]] as ActualMenuItem;
|
||||
|
||||
if (typeof item === "function") {
|
||||
item();
|
||||
item(evt);
|
||||
} else if (typeof item === "object") {
|
||||
if (typeof item.value === "number") {
|
||||
selectEdit = selectEdit ? undefined : item;
|
||||
|
|
@ -188,12 +188,12 @@ E.showMenu = (items?: Menu): MenuInstance => {
|
|||
item.value = !item.value;
|
||||
|
||||
if (item.onchange)
|
||||
item.onchange(item.value as boolean);
|
||||
item.onchange(item.value as boolean, evt);
|
||||
}
|
||||
l.draw();
|
||||
}
|
||||
},
|
||||
move: (dir: number) => {
|
||||
move: (dir: number, evt: TouchCallbackXY | undefined) => {
|
||||
const item = selectEdit;
|
||||
|
||||
if (typeof item === "object" && typeof item.value === "number") {
|
||||
|
|
@ -209,7 +209,7 @@ E.showMenu = (items?: Menu): MenuInstance => {
|
|||
|
||||
if (item.value !== orig) {
|
||||
if (item.onchange)
|
||||
item.onchange(item.value);
|
||||
item.onchange(item.value, evt);
|
||||
|
||||
l.draw(selected, selected);
|
||||
}
|
||||
|
|
@ -247,6 +247,11 @@ E.showMenu = (items?: Menu): MenuInstance => {
|
|||
Bangle.on('swipe', onSwipe);
|
||||
}
|
||||
|
||||
const cb = (dir?: 1 | -1, evt?: TouchCallbackXY) => {
|
||||
if (dir) l.move(prosettings.naturalScroll ? -dir : dir, evt);
|
||||
else l.select(evt);
|
||||
};
|
||||
|
||||
Bangle.setUI({
|
||||
mode: "updown",
|
||||
back,
|
||||
|
|
@ -255,11 +260,13 @@ E.showMenu = (items?: Menu): MenuInstance => {
|
|||
Bangle.removeListener("swipe", onSwipe);
|
||||
options.remove?.();
|
||||
},
|
||||
} as SetUIArg<"updown">,
|
||||
dir => {
|
||||
if (dir) l.move(prosettings.naturalScroll ? -dir : dir);
|
||||
else l.select();
|
||||
});
|
||||
touch: ((_button, xy) => {
|
||||
// since we've specified options.touch,
|
||||
// we need to pass through all taps since the default
|
||||
// touchHandler isn't installed in setUI
|
||||
cb(void 0, xy);
|
||||
}) satisfies TouchCallback,
|
||||
} as SetUIArg<"updown">, cb);
|
||||
|
||||
return l;
|
||||
};
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"id": "promenu",
|
||||
"name": "Pro Menu",
|
||||
"version": "0.12",
|
||||
"version": "0.13",
|
||||
"description": "Replace the built in menu function. Supports Bangle.js 1 and Bangle.js 2.",
|
||||
"icon": "icon.png",
|
||||
"type": "bootloader",
|
||||
|
|
|
|||
Loading…
Reference in New Issue