Skip to content

Commit 8b1e650

Browse files
authored
Merge pull request espruino#3836 from bobrippling/feat/promenu-touch-event
promenu: forward on touch event
2 parents 278a64d + 4524132 commit 8b1e650

File tree

6 files changed

+3289
-3964
lines changed

6 files changed

+3289
-3964
lines changed

apps/folderlaunch/app.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -174,7 +174,7 @@
174174
* @param _button 1 for left half, 2 for right half
175175
* @param xy postion on screen
176176
*/
177-
let onTouch = function (_button: number, xy: { x: number, y: number } | undefined) {
177+
let onTouch = function (_button, xy) {
178178
// Determine which grid cell was tapped
179179
let x: number = Math.floor((xy!.x - 12) / ((g.getWidth() - 24) / config.display.rows));
180180
if (x < 0) x = 0;
@@ -206,7 +206,7 @@
206206
break;
207207
}
208208
}
209-
}
209+
} satisfies TouchCallback;
210210

211211
let page: number = 0;
212212
let nPages: number; // Set when setting folder

apps/promenu/ChangeLog

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,3 +14,4 @@
1414
0.10: Trigger `remove` callbacks when ending the menu
1515
0.11: Add options for natural scroll and disabling wrap-around
1616
0.12: Fix bug where settings would behave as if all were set to false
17+
0.13: Update to new touch-event handling

apps/promenu/bootb2.js

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -133,10 +133,10 @@ E.showMenu = function (items) {
133133
g.setColor((idx < menuItems.length) ? g.theme.fg : g.theme.bg).fillPoly([72, 166, 104, 166, 88, 174]);
134134
g.flip();
135135
},
136-
select: function () {
136+
select: function (evt) {
137137
var item = items[menuItems[selected]];
138138
if (typeof item === "function") {
139-
item();
139+
item(evt);
140140
}
141141
else if (typeof item === "object") {
142142
if (typeof item.value === "number") {
@@ -146,12 +146,12 @@ E.showMenu = function (items) {
146146
if (typeof item.value === "boolean")
147147
item.value = !item.value;
148148
if (item.onchange)
149-
item.onchange(item.value);
149+
item.onchange(item.value, evt);
150150
}
151151
l.draw();
152152
}
153153
},
154-
move: function (dir) {
154+
move: function (dir, evt) {
155155
var item = selectEdit;
156156
if (typeof item === "object" && typeof item.value === "number") {
157157
var orig = item.value;
@@ -162,7 +162,7 @@ E.showMenu = function (items) {
162162
item.value = item.wrap ? item.min : item.max;
163163
if (item.value !== orig) {
164164
if (item.onchange)
165-
item.onchange(item.value);
165+
item.onchange(item.value, evt);
166166
l.draw(selected, selected);
167167
}
168168
}
@@ -198,6 +198,12 @@ E.showMenu = function (items) {
198198
};
199199
Bangle.on('swipe', onSwipe);
200200
}
201+
var cb = function (dir, evt) {
202+
if (dir)
203+
l.move(prosettings.naturalScroll ? -dir : dir, evt);
204+
else
205+
l.select(evt);
206+
};
201207
Bangle.setUI({
202208
mode: "updown",
203209
back: back,
@@ -208,11 +214,9 @@ E.showMenu = function (items) {
208214
Bangle.removeListener("swipe", onSwipe);
209215
(_a = options.remove) === null || _a === void 0 ? void 0 : _a.call(options);
210216
},
211-
}, function (dir) {
212-
if (dir)
213-
l.move(prosettings.naturalScroll ? -dir : dir);
214-
else
215-
l.select();
216-
});
217+
touch: (function (_button, xy) {
218+
cb(void 0, xy);
219+
}),
220+
}, cb);
217221
return l;
218222
};

apps/promenu/bootb2.ts

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -175,11 +175,11 @@ E.showMenu = (items?: Menu): MenuInstance => {
175175
g.setColor((idx < menuItems.length)?g.theme.fg:g.theme.bg).fillPoly([72, 166, 104, 166, 88, 174]);
176176
g.flip();
177177
},
178-
select: () => {
178+
select: (evt: TouchCallbackXY | undefined) => {
179179
const item = items![menuItems[selected]] as ActualMenuItem;
180180

181181
if (typeof item === "function") {
182-
item();
182+
item(evt);
183183
} else if (typeof item === "object") {
184184
if (typeof item.value === "number") {
185185
selectEdit = selectEdit ? undefined : item;
@@ -188,12 +188,12 @@ E.showMenu = (items?: Menu): MenuInstance => {
188188
item.value = !item.value;
189189

190190
if (item.onchange)
191-
item.onchange(item.value as boolean);
191+
item.onchange(item.value as boolean, evt);
192192
}
193193
l.draw();
194194
}
195195
},
196-
move: (dir: number) => {
196+
move: (dir: number, evt: TouchCallbackXY | undefined) => {
197197
const item = selectEdit;
198198

199199
if (typeof item === "object" && typeof item.value === "number") {
@@ -209,7 +209,7 @@ E.showMenu = (items?: Menu): MenuInstance => {
209209

210210
if (item.value !== orig) {
211211
if (item.onchange)
212-
item.onchange(item.value);
212+
item.onchange(item.value, evt);
213213

214214
l.draw(selected, selected);
215215
}
@@ -247,6 +247,11 @@ E.showMenu = (items?: Menu): MenuInstance => {
247247
Bangle.on('swipe', onSwipe);
248248
}
249249

250+
const cb = (dir?: 1 | -1, evt?: TouchCallbackXY) => {
251+
if (dir) l.move(prosettings.naturalScroll ? -dir : dir, evt);
252+
else l.select(evt);
253+
};
254+
250255
Bangle.setUI({
251256
mode: "updown",
252257
back,
@@ -255,11 +260,13 @@ E.showMenu = (items?: Menu): MenuInstance => {
255260
Bangle.removeListener("swipe", onSwipe);
256261
options.remove?.();
257262
},
258-
} as SetUIArg<"updown">,
259-
dir => {
260-
if (dir) l.move(prosettings.naturalScroll ? -dir : dir);
261-
else l.select();
262-
});
263+
touch: ((_button, xy) => {
264+
// since we've specified options.touch,
265+
// we need to pass through all taps since the default
266+
// touchHandler isn't installed in setUI
267+
cb(void 0, xy);
268+
}) satisfies TouchCallback,
269+
} as SetUIArg<"updown">, cb);
263270

264271
return l;
265272
};

apps/promenu/metadata.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"id": "promenu",
33
"name": "Pro Menu",
4-
"version": "0.12",
4+
"version": "0.13",
55
"description": "Replace the built in menu function. Supports Bangle.js 1 and Bangle.js 2.",
66
"icon": "icon.png",
77
"type": "bootloader",

0 commit comments

Comments
 (0)