optimized indicator
parent
817abe183d
commit
9b9300512e
|
|
@ -44,7 +44,7 @@
|
||||||
const ITEM_HEIGHT = 95;
|
const ITEM_HEIGHT = 95;
|
||||||
|
|
||||||
// Create scroll indicator overlay
|
// Create scroll indicator overlay
|
||||||
const overlayWidth = 30; // Increased width
|
const overlayWidth = 30;
|
||||||
const overlayHeight = 35;
|
const overlayHeight = 35;
|
||||||
const overlay = Graphics.createArrayBuffer(overlayWidth, overlayHeight, 16, { msb: true });
|
const overlay = Graphics.createArrayBuffer(overlayWidth, overlayHeight, 16, { msb: true });
|
||||||
|
|
||||||
|
|
@ -132,26 +132,17 @@
|
||||||
|
|
||||||
// Function to update scroll indicator
|
// Function to update scroll indicator
|
||||||
function updateScrollIndicator(idx) {
|
function updateScrollIndicator(idx) {
|
||||||
|
|
||||||
// Calculate visible items that can fit on screen
|
|
||||||
const visibleItems = Math.floor(g.getHeight() / ITEM_HEIGHT);
|
|
||||||
// Calculate scroll percentage based on current index relative to total scrollable items
|
|
||||||
let scrollPercent = idx / (apps.length - visibleItems);
|
|
||||||
// Constrain scroll percentage between 0 and 1
|
|
||||||
scrollPercent = Math.max(0, Math.min(1, scrollPercent));
|
|
||||||
|
|
||||||
// Add margins to the scrollable area
|
|
||||||
const marginX = 1;
|
const marginX = 1;
|
||||||
const marginY = 5;
|
const marginY = 5;
|
||||||
const scrollableHeight = g.getHeight() - (marginY * 2) - overlayHeight;
|
let scrollPercent = (idx) / (apps.length - 1);
|
||||||
let indicatorY = marginY + (scrollableHeight * scrollPercent);
|
let scrollableHeight = g.getHeight() - marginY * 2 - overlayHeight;
|
||||||
|
let indicatorY = scrollPercent * scrollableHeight + marginY;
|
||||||
// Ensure indicator stays within bounds
|
|
||||||
indicatorY = Math.max(marginY, Math.min(g.getHeight() - overlayHeight - marginY, indicatorY));
|
|
||||||
|
|
||||||
Bangle.setLCDOverlay(overlay, g.getWidth() - overlayWidth - marginX, indicatorY, { id: "scrollIndicator" });
|
Bangle.setLCDOverlay(overlay, g.getWidth() - overlayWidth - marginX, indicatorY, { id: "scrollIndicator" });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let prev_idx = -1;
|
||||||
|
|
||||||
E.showScroller({
|
E.showScroller({
|
||||||
h: ITEM_HEIGHT,
|
h: ITEM_HEIGHT,
|
||||||
c: apps.length,
|
c: apps.length,
|
||||||
|
|
@ -189,7 +180,10 @@
|
||||||
}
|
}
|
||||||
let textY = rect.y + iconPadding + iconSize + 15;
|
let textY = rect.y + iconPadding + iconSize + 15;
|
||||||
g.drawString(text, rectX + rectSize / 2, textY);
|
g.drawString(text, rectX + rectSize / 2, textY);
|
||||||
updateScrollIndicator(idx);
|
if (idx != prev_idx && settings.scrollbar) {
|
||||||
|
updateScrollIndicator(idx);
|
||||||
|
prev_idx = idx;
|
||||||
|
}
|
||||||
},
|
},
|
||||||
select: (idx) => {
|
select: (idx) => {
|
||||||
// Launch the selected app
|
// Launch the selected app
|
||||||
|
|
@ -200,11 +194,8 @@
|
||||||
setWatch(() => { }, BTN1);
|
setWatch(() => { }, BTN1);
|
||||||
// Remove lock handler
|
// Remove lock handler
|
||||||
Bangle.removeListener('lock');
|
Bangle.removeListener('lock');
|
||||||
// Remove drag handler
|
// Clear the scroll overlay
|
||||||
if (settings.scrollbar) {
|
Bangle.setLCDOverlay();
|
||||||
// Clear the scroll overlay
|
|
||||||
Bangle.setLCDOverlay();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue