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 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

View File

@ -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

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.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;
};

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.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;
};

View File

@ -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",