Rob Pilling 2025-04-28 21:36:58 +01:00
parent 260dff75f7
commit 123498424a
5 changed files with 36 additions and 24 deletions

View File

@ -174,7 +174,7 @@
* @param _button 1 for left half, 2 for right half * @param _button 1 for left half, 2 for right half
* @param xy postion on screen * @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 // Determine which grid cell was tapped
let x: number = Math.floor((xy!.x - 12) / ((g.getWidth() - 24) / config.display.rows)); let x: number = Math.floor((xy!.x - 12) / ((g.getWidth() - 24) / config.display.rows));
if (x < 0) x = 0; if (x < 0) x = 0;
@ -206,7 +206,7 @@
break; break;
} }
} }
} } satisfies TouchCallback;
let page: number = 0; let page: number = 0;
let nPages: number; // Set when setting folder let nPages: number; // Set when setting folder

View File

@ -14,3 +14,4 @@
0.10: Trigger `remove` callbacks when ending the menu 0.10: Trigger `remove` callbacks when ending the menu
0.11: Add options for natural scroll and disabling wrap-around 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.12: Fix bug where settings would behave as if all were set to false
0.13: Update to new touch-event handling

View File

@ -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.setColor((idx < menuItems.length) ? g.theme.fg : g.theme.bg).fillPoly([72, 166, 104, 166, 88, 174]);
g.flip(); g.flip();
}, },
select: function () { select: function (evt) {
var item = items[menuItems[selected]]; var item = items[menuItems[selected]];
if (typeof item === "function") { if (typeof item === "function") {
item(); item(evt);
} }
else if (typeof item === "object") { else if (typeof item === "object") {
if (typeof item.value === "number") { if (typeof item.value === "number") {
@ -146,12 +146,12 @@ E.showMenu = function (items) {
if (typeof item.value === "boolean") if (typeof item.value === "boolean")
item.value = !item.value; item.value = !item.value;
if (item.onchange) if (item.onchange)
item.onchange(item.value); item.onchange(item.value, evt);
} }
l.draw(); l.draw();
} }
}, },
move: function (dir) { move: function (dir, evt) {
var item = selectEdit; var item = selectEdit;
if (typeof item === "object" && typeof item.value === "number") { if (typeof item === "object" && typeof item.value === "number") {
var orig = item.value; var orig = item.value;
@ -162,7 +162,7 @@ E.showMenu = function (items) {
item.value = item.wrap ? item.min : item.max; item.value = item.wrap ? item.min : item.max;
if (item.value !== orig) { if (item.value !== orig) {
if (item.onchange) if (item.onchange)
item.onchange(item.value); item.onchange(item.value, evt);
l.draw(selected, selected); l.draw(selected, selected);
} }
} }
@ -198,6 +198,12 @@ E.showMenu = function (items) {
}; };
Bangle.on('swipe', onSwipe); Bangle.on('swipe', onSwipe);
} }
var cb = function (dir, evt) {
if (dir)
l.move(prosettings.naturalScroll ? -dir : dir, evt);
else
l.select(evt);
};
Bangle.setUI({ Bangle.setUI({
mode: "updown", mode: "updown",
back: back, back: back,
@ -208,11 +214,9 @@ E.showMenu = function (items) {
Bangle.removeListener("swipe", onSwipe); Bangle.removeListener("swipe", onSwipe);
(_a = options.remove) === null || _a === void 0 ? void 0 : _a.call(options); (_a = options.remove) === null || _a === void 0 ? void 0 : _a.call(options);
}, },
}, function (dir) { touch: (function (_button, xy) {
if (dir) cb(void 0, xy);
l.move(prosettings.naturalScroll ? -dir : dir); }),
else }, cb);
l.select();
});
return l; return l;
}; };

View File

@ -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.setColor((idx < menuItems.length)?g.theme.fg:g.theme.bg).fillPoly([72, 166, 104, 166, 88, 174]);
g.flip(); g.flip();
}, },
select: () => { select: (evt: TouchCallbackXY | undefined) => {
const item = items![menuItems[selected]] as ActualMenuItem; const item = items![menuItems[selected]] as ActualMenuItem;
if (typeof item === "function") { if (typeof item === "function") {
item(); item(evt);
} else if (typeof item === "object") { } else if (typeof item === "object") {
if (typeof item.value === "number") { if (typeof item.value === "number") {
selectEdit = selectEdit ? undefined : item; selectEdit = selectEdit ? undefined : item;
@ -188,12 +188,12 @@ E.showMenu = (items?: Menu): MenuInstance => {
item.value = !item.value; item.value = !item.value;
if (item.onchange) if (item.onchange)
item.onchange(item.value as boolean); item.onchange(item.value as boolean, evt);
} }
l.draw(); l.draw();
} }
}, },
move: (dir: number) => { move: (dir: number, evt: TouchCallbackXY | undefined) => {
const item = selectEdit; const item = selectEdit;
if (typeof item === "object" && typeof item.value === "number") { if (typeof item === "object" && typeof item.value === "number") {
@ -209,7 +209,7 @@ E.showMenu = (items?: Menu): MenuInstance => {
if (item.value !== orig) { if (item.value !== orig) {
if (item.onchange) if (item.onchange)
item.onchange(item.value); item.onchange(item.value, evt);
l.draw(selected, selected); l.draw(selected, selected);
} }
@ -247,6 +247,11 @@ E.showMenu = (items?: Menu): MenuInstance => {
Bangle.on('swipe', onSwipe); 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({ Bangle.setUI({
mode: "updown", mode: "updown",
back, back,
@ -255,11 +260,13 @@ E.showMenu = (items?: Menu): MenuInstance => {
Bangle.removeListener("swipe", onSwipe); Bangle.removeListener("swipe", onSwipe);
options.remove?.(); options.remove?.();
}, },
} as SetUIArg<"updown">, touch: ((_button, xy) => {
dir => { // since we've specified options.touch,
if (dir) l.move(prosettings.naturalScroll ? -dir : dir); // we need to pass through all taps since the default
else l.select(); // touchHandler isn't installed in setUI
}); cb(void 0, xy);
}) satisfies TouchCallback,
} as SetUIArg<"updown">, cb);
return l; return l;
}; };

View File

@ -1,7 +1,7 @@
{ {
"id": "promenu", "id": "promenu",
"name": "Pro Menu", "name": "Pro Menu",
"version": "0.12", "version": "0.13",
"description": "Replace the built in menu function. Supports Bangle.js 1 and Bangle.js 2.", "description": "Replace the built in menu function. Supports Bangle.js 1 and Bangle.js 2.",
"icon": "icon.png", "icon": "icon.png",
"type": "bootloader", "type": "bootloader",