Merge pull request #3834 from bobrippling/fix/promenu-y-offset

promenu: always render at a fixed y
master
Rob Pilling 2025-05-01 20:20:26 +01:00 committed by GitHub
commit 893a67ab1b
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 19 additions and 18 deletions

View File

@ -15,3 +15,4 @@
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
0.14: Fix bug in handling changes to `Bangle.appRect`

View File

@ -20,14 +20,7 @@ E.showMenu = function (items) {
var menuItems = Object.keys(items).filter(function (x) { return x.length; });
var fontHeight = options.fontHeight || 25;
var selected = options.scroll || options.selected || 0;
var ar = Bangle.appRect;
g.reset().clearRect(ar);
var x = ar.x;
var x2 = ar.x2;
var y = ar.y;
var y2 = ar.y2 - 12;
if (options.title)
y += 22;
g.reset().clearRect(Bangle.appRect);
var lastIdx = 0;
var selectEdit = undefined;
var scroller = {
@ -36,6 +29,7 @@ E.showMenu = function (items) {
var nameScroller = null;
var drawLine = function (name, v, item, idx, x, y, nameScroll) {
if (nameScroll === void 0) { nameScroll = 0; }
var x2 = Bangle.appRect.x2;
var hl = (idx === selected && !selectEdit);
if (g.theme.dark) {
fillRectRnd(x, y, x2, y + fontHeight - 3, 7, hl ? g.theme.bgH : g.theme.bg + 40);
@ -74,6 +68,12 @@ E.showMenu = function (items) {
};
var l = {
draw: function (rowmin, rowmax) {
var _a = Bangle.appRect, x = _a.x, x2 = _a.x2, y = _a.y, y2 = _a.y2;
if (y === 0)
y = 24;
if (options.title)
y += 22;
y2 -= 12;
if (nameScroller)
clearInterval(nameScroller), nameScroller = null;
var rows = 0 | Math.min((y2 - y) / fontHeight, menuItems.length);

View File

@ -34,15 +34,7 @@ E.showMenu = (items?: Menu): MenuInstance => {
let selected = options.scroll || options.selected || 0;
const ar = Bangle.appRect;
g.reset().clearRect(ar);
const x = ar.x;
const x2 = ar.x2;
let y = ar.y;
const y2 = ar.y2 - 12; // padding at end for arrow
if (options.title)
y += 22;
g.reset().clearRect(Bangle.appRect);
let lastIdx = 0;
let selectEdit: undefined | ActualMenuItem = undefined;
@ -61,6 +53,7 @@ E.showMenu = (items?: Menu): MenuInstance => {
y: number,
nameScroll: number = 0,
) => {
const { x2 } = Bangle.appRect;
const hl = (idx === selected && !selectEdit);
if(g.theme.dark){
fillRectRnd(x, y, x2, y + fontHeight - 3, 7, hl ? g.theme.bgH : g.theme.bg + 40);
@ -114,6 +107,13 @@ E.showMenu = (items?: Menu): MenuInstance => {
const l = {
draw: (rowmin?: number, rowmax?: number) => {
// always refresh appRect, a back button may have appeared
let { x, x2, y, y2 } = Bangle.appRect;
if(y === 0) y = 24; // always bump down for widgets/back button
if (options.title) y += 22;
y2 -= 12; // padding at end for arrow
if (nameScroller) clearInterval(nameScroller), nameScroller = null;
let rows = 0|Math.min((y2 - y) / fontHeight, menuItems.length);
let idx = E.clip(selected - (rows>>1), 0, menuItems.length - rows);

View File

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