From c047cfda6d85847814ca62c818d4609dfd14bc61 Mon Sep 17 00:00:00 2001 From: Martin Boonk Date: Sun, 13 Mar 2022 14:02:18 +0100 Subject: [PATCH] Allow hiding/showing widgets on drag up/down --- apps/imageclock/ChangeLog | 1 + apps/imageclock/app.js | 54 +++++++++++++++++++++++++++++++++++++-- 2 files changed, 53 insertions(+), 2 deletions(-) diff --git a/apps/imageclock/ChangeLog b/apps/imageclock/ChangeLog index d76ddca6b..5b99b5848 100644 --- a/apps/imageclock/ChangeLog +++ b/apps/imageclock/ChangeLog @@ -6,3 +6,4 @@ 0.05: Add precompilation to js for performance 0.06: Watchfaces can be refreshed partly 0.07: Allow wrapping drawing in timeouts to get faster reactions + Show/Hide widgets with swipe up or down diff --git a/apps/imageclock/app.js b/apps/imageclock/app.js index aaad34da8..a3551167f 100644 --- a/apps/imageclock/app.js +++ b/apps/imageclock/app.js @@ -577,6 +577,12 @@ function initialDraw(resources, face){ promise.then(()=>{ var currentDrawingTime = Date.now(); + if (showWidgets){ + //print("Draw widgets"); + Bangle.drawWidgets(); + g.setColor(g.theme.fg); + g.drawLine(0,24,g.getWidth(),24); + } lastDrawTime = Date.now() - start; drawingTime += Date.now() - currentDrawingTime; //print(new Date().toISOString(), "Drawing done in", lastDrawTime.toFixed(0), "active:", drawingTime.toFixed(0)); @@ -695,7 +701,42 @@ function handleLock(isLocked, forceRedraw){ } } + +var showWidgets = false; +var showWidgetsChanged = false; +var currentDragDistance = 0; + Bangle.setUI("clock"); +Bangle.on('drag', (e)=>{ + currentDragDistance += e.dy; + if (Math.abs(currentDragDistance) < 10) return; + dragDown = currentDragDistance > 0; + currentDragDistance = 0; + if (!showWidgets && dragDown){ + //print("Enable widgets"); + if (WIDGETS && typeof WIDGETS === "object") { + for (let w in WIDGETS) { + var wd = WIDGETS[w]; + wd.draw = originalWidgetDraw[w]; + wd.area = originalWidgetArea[w]; + } + } + showWidgetsChanged = true; + } + if (showWidgets && !dragDown){ + //print("Disable widgets"); + clearWidgetsDraw(); + firstDraw = true; + showWidgetsChanged = true; + } + if (showWidgetsChanged){ + showWidgetsChanged = false; + //print("Draw after widget change"); + showWidgets = dragDown; + initialDraw(); + } + } +); if (!events || events.includes("pressure")){ Bangle.on('pressure', handlePressure); @@ -716,9 +757,18 @@ if (!events || events.includes("charging")) { Bangle.on('charging', handleCharging); } +var originalWidgetDraw = {}; +var originalWidgetArea = {}; + function clearWidgetsDraw(){ + //print("Clear widget draw calls"); if (WIDGETS && typeof WIDGETS === "object") { - for (let wd of WIDGETS) { + originalWidgetDraw = {}; + originalWidgetArea = {}; + for (let w in WIDGETS) { + var wd = WIDGETS[w]; + originalWidgetDraw[w] = wd.draw; + originalWidgetArea[w] = wd.area; wd.draw = () => {}; wd.area = ""; } @@ -728,6 +778,6 @@ function clearWidgetsDraw(){ setTimeout(()=>{ Bangle.loadWidgets(); clearWidgetsDraw(); -}, 100); +}, 0); handleLock(Bangle.isLocked());