Merge pull request #3834 from bobrippling/fix/promenu-y-offset
promenu: always render at a fixed ymaster
commit
893a67ab1b
|
|
@ -15,3 +15,4 @@
|
||||||
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
|
0.13: Update to new touch-event handling
|
||||||
|
0.14: Fix bug in handling changes to `Bangle.appRect`
|
||||||
|
|
|
||||||
|
|
@ -20,14 +20,7 @@ E.showMenu = function (items) {
|
||||||
var menuItems = Object.keys(items).filter(function (x) { return x.length; });
|
var menuItems = Object.keys(items).filter(function (x) { return x.length; });
|
||||||
var fontHeight = options.fontHeight || 25;
|
var fontHeight = options.fontHeight || 25;
|
||||||
var selected = options.scroll || options.selected || 0;
|
var selected = options.scroll || options.selected || 0;
|
||||||
var ar = Bangle.appRect;
|
g.reset().clearRect(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;
|
|
||||||
var lastIdx = 0;
|
var lastIdx = 0;
|
||||||
var selectEdit = undefined;
|
var selectEdit = undefined;
|
||||||
var scroller = {
|
var scroller = {
|
||||||
|
|
@ -36,6 +29,7 @@ E.showMenu = function (items) {
|
||||||
var nameScroller = null;
|
var nameScroller = null;
|
||||||
var drawLine = function (name, v, item, idx, x, y, nameScroll) {
|
var drawLine = function (name, v, item, idx, x, y, nameScroll) {
|
||||||
if (nameScroll === void 0) { nameScroll = 0; }
|
if (nameScroll === void 0) { nameScroll = 0; }
|
||||||
|
var x2 = Bangle.appRect.x2;
|
||||||
var hl = (idx === selected && !selectEdit);
|
var hl = (idx === selected && !selectEdit);
|
||||||
if (g.theme.dark) {
|
if (g.theme.dark) {
|
||||||
fillRectRnd(x, y, x2, y + fontHeight - 3, 7, hl ? g.theme.bgH : g.theme.bg + 40);
|
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 = {
|
var l = {
|
||||||
draw: function (rowmin, rowmax) {
|
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)
|
if (nameScroller)
|
||||||
clearInterval(nameScroller), nameScroller = null;
|
clearInterval(nameScroller), nameScroller = null;
|
||||||
var rows = 0 | Math.min((y2 - y) / fontHeight, menuItems.length);
|
var rows = 0 | Math.min((y2 - y) / fontHeight, menuItems.length);
|
||||||
|
|
|
||||||
|
|
@ -34,15 +34,7 @@ E.showMenu = (items?: Menu): MenuInstance => {
|
||||||
|
|
||||||
let selected = options.scroll || options.selected || 0;
|
let selected = options.scroll || options.selected || 0;
|
||||||
|
|
||||||
const ar = Bangle.appRect;
|
g.reset().clearRect(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;
|
|
||||||
|
|
||||||
let lastIdx = 0;
|
let lastIdx = 0;
|
||||||
let selectEdit: undefined | ActualMenuItem = undefined;
|
let selectEdit: undefined | ActualMenuItem = undefined;
|
||||||
|
|
@ -61,6 +53,7 @@ E.showMenu = (items?: Menu): MenuInstance => {
|
||||||
y: number,
|
y: number,
|
||||||
nameScroll: number = 0,
|
nameScroll: number = 0,
|
||||||
) => {
|
) => {
|
||||||
|
const { x2 } = Bangle.appRect;
|
||||||
const hl = (idx === selected && !selectEdit);
|
const hl = (idx === selected && !selectEdit);
|
||||||
if(g.theme.dark){
|
if(g.theme.dark){
|
||||||
fillRectRnd(x, y, x2, y + fontHeight - 3, 7, hl ? g.theme.bgH : g.theme.bg + 40);
|
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 = {
|
const l = {
|
||||||
draw: (rowmin?: number, rowmax?: number) => {
|
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;
|
if (nameScroller) clearInterval(nameScroller), nameScroller = null;
|
||||||
let rows = 0|Math.min((y2 - y) / fontHeight, menuItems.length);
|
let rows = 0|Math.min((y2 - y) / fontHeight, menuItems.length);
|
||||||
let idx = E.clip(selected - (rows>>1), 0, menuItems.length - rows);
|
let idx = E.clip(selected - (rows>>1), 0, menuItems.length - rows);
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
{
|
{
|
||||||
"id": "promenu",
|
"id": "promenu",
|
||||||
"name": "Pro Menu",
|
"name": "Pro Menu",
|
||||||
"version": "0.13",
|
"version": "0.14",
|
||||||
"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