From 123498424aea7444db0943851286cd4f411bcd64 Mon Sep 17 00:00:00 2001 From: Rob Pilling Date: Mon, 28 Apr 2025 21:36:58 +0100 Subject: [PATCH] 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/2569 --- apps/folderlaunch/app.ts | 4 ++-- apps/promenu/ChangeLog | 1 + apps/promenu/bootb2.js | 26 +++++++++++++++----------- apps/promenu/bootb2.ts | 27 +++++++++++++++++---------- apps/promenu/metadata.json | 2 +- 5 files changed, 36 insertions(+), 24 deletions(-) diff --git a/apps/folderlaunch/app.ts b/apps/folderlaunch/app.ts index aff8e5c7e..5140919db 100644 --- a/apps/folderlaunch/app.ts +++ b/apps/folderlaunch/app.ts @@ -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 diff --git a/apps/promenu/ChangeLog b/apps/promenu/ChangeLog index 4a0f538fb..d944788bf 100644 --- a/apps/promenu/ChangeLog +++ b/apps/promenu/ChangeLog @@ -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 diff --git a/apps/promenu/bootb2.js b/apps/promenu/bootb2.js index d11beb48c..540a0f04c 100644 --- a/apps/promenu/bootb2.js +++ b/apps/promenu/bootb2.js @@ -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; }; diff --git a/apps/promenu/bootb2.ts b/apps/promenu/bootb2.ts index e128151e3..86bc41488 100644 --- a/apps/promenu/bootb2.ts +++ b/apps/promenu/bootb2.ts @@ -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; }; diff --git a/apps/promenu/metadata.json b/apps/promenu/metadata.json index 05583e1fd..9b0ba2121 100644 --- a/apps/promenu/metadata.json +++ b/apps/promenu/metadata.json @@ -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",