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 _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
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -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",
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue