From b52220a070381af0cfd906e269d3071ab4f6c7ff Mon Sep 17 00:00:00 2001 From: stweedo Date: Sun, 25 Jun 2023 04:16:17 -0500 Subject: [PATCH 1/6] Only use drag handler if any box isDragging --- apps/boxclk/ChangeLog | 1 + apps/boxclk/app.js | 12 ++++++++++++ apps/boxclk/metadata.json | 2 +- 3 files changed, 14 insertions(+), 1 deletion(-) diff --git a/apps/boxclk/ChangeLog b/apps/boxclk/ChangeLog index f35b35819..794203d36 100644 --- a/apps/boxclk/ChangeLog +++ b/apps/boxclk/ChangeLog @@ -1,3 +1,4 @@ 0.01: New App! 0.02: New config options such as step, meridian, short/long formats, custom prefix/suffix 0.03: Allows showing the month in short or long format by setting `"shortMonth"` to true or false +0.04: Improves touchscreen drag handling for background apps such as Pattern Launcher diff --git a/apps/boxclk/app.js b/apps/boxclk/app.js index 0b0ca8e65..6321be7c3 100644 --- a/apps/boxclk/app.js +++ b/apps/boxclk/app.js @@ -4,6 +4,7 @@ * 1. Module dependencies and initial configurations * --------------------------------------------------------------- */ + let storage = require("Storage"); let locale = require("locale"); let widgets = require("widget_utils"); @@ -30,6 +31,7 @@ * 2. Graphical and visual configurations * --------------------------------------------------------------- */ + let w = g.getWidth(); let h = g.getHeight(); let totalWidth, totalHeight; @@ -40,6 +42,7 @@ * 3. Touchscreen Handlers * --------------------------------------------------------------- */ + let touchHandler; let dragHandler; let movementDistance = 0; @@ -49,6 +52,7 @@ * 4. Font loading function * --------------------------------------------------------------- */ + let loadCustomFont = function() { Graphics.prototype.setFontBrunoAce = function() { // Actual height 23 (24 - 2) @@ -66,6 +70,7 @@ * 5. Initial settings of boxes and their positions * --------------------------------------------------------------- */ + for (let key in boxesConfig) { if (key === 'bg' && boxesConfig[key].img) { bgImage = storage.read(boxesConfig[key].img); @@ -167,6 +172,7 @@ * 7. String forming helper functions * --------------------------------------------------------------- */ + let isBool = function(val, defaultVal) { return typeof val !== 'undefined' ? Boolean(val) : defaultVal; }; @@ -211,6 +217,7 @@ * 8. Main draw function * --------------------------------------------------------------- */ + let draw = (function() { let updatePerMinute = true; // variable to track the state of time display @@ -272,6 +279,7 @@ * 9. Helper function for touch event * --------------------------------------------------------------- */ + let touchInText = function(e, boxItem, boxKey) { calcBoxSize(boxItem); const pos = calcBoxPos(boxKey); @@ -296,6 +304,7 @@ * 10. Setup function to configure event handlers * --------------------------------------------------------------- */ + let setup = function() { // ------------------------------------ // Define the touchHandler function @@ -343,6 +352,8 @@ // Define the dragHandler function // ------------------------------------ dragHandler = function(e) { + // Check if any box is being dragged + if (!Object.values(isDragging).some(Boolean)) return; // Calculate the movement distance movementDistance += Math.abs(e.dx) + Math.abs(e.dy); // Check if the movement distance exceeds a threshold @@ -396,6 +407,7 @@ * 11. Main execution part * --------------------------------------------------------------- */ + Bangle.loadWidgets(); widgets.swipeOn(); modSetColor(); diff --git a/apps/boxclk/metadata.json b/apps/boxclk/metadata.json index 6717b79d8..06db0b2fe 100644 --- a/apps/boxclk/metadata.json +++ b/apps/boxclk/metadata.json @@ -1,7 +1,7 @@ { "id": "boxclk", "name": "Box Clock", - "version": "0.03", + "version": "0.04", "description": "A customizable clock with configurable text boxes that can be positioned to show your favorite background", "icon": "app.png", "screenshots": [ From 99c3731ed4aca41f0ef0a8ffe9665b2288477374 Mon Sep 17 00:00:00 2001 From: Tom Wallroth Date: Sun, 25 Jun 2023 16:12:13 +0200 Subject: [PATCH 2/6] a half-life alyx style clock --- apps/alyxclock/ChangeLog | 1 + apps/alyxclock/README.md | 4 + apps/alyxclock/alyxclock.app.js | 174 ++++++++++++++++++++++++ apps/alyxclock/alyxclock.icon.js | 1 + apps/alyxclock/alyxclock.png | Bin 0 -> 854 bytes apps/alyxclock/metadata.json | 17 +++ apps/alyxclock/screenshot_alyxclock.png | Bin 0 -> 3559 bytes 7 files changed, 197 insertions(+) create mode 100644 apps/alyxclock/ChangeLog create mode 100644 apps/alyxclock/README.md create mode 100644 apps/alyxclock/alyxclock.app.js create mode 100644 apps/alyxclock/alyxclock.icon.js create mode 100644 apps/alyxclock/alyxclock.png create mode 100644 apps/alyxclock/metadata.json create mode 100644 apps/alyxclock/screenshot_alyxclock.png diff --git a/apps/alyxclock/ChangeLog b/apps/alyxclock/ChangeLog new file mode 100644 index 000000000..9db0e26c5 --- /dev/null +++ b/apps/alyxclock/ChangeLog @@ -0,0 +1 @@ +0.01: first release diff --git a/apps/alyxclock/README.md b/apps/alyxclock/README.md new file mode 100644 index 000000000..7765a878f --- /dev/null +++ b/apps/alyxclock/README.md @@ -0,0 +1,4 @@ +# Half-Life Alyx Style clock + +![](screenshot_alyxclock.png) + diff --git a/apps/alyxclock/alyxclock.app.js b/apps/alyxclock/alyxclock.app.js new file mode 100644 index 000000000..57b7d7f48 --- /dev/null +++ b/apps/alyxclock/alyxclock.app.js @@ -0,0 +1,174 @@ +const icoH = [ + [0,1,1,0,0,1,1,0], + [1,1,1,1,1,1,1,1], + [1,1,1,1,1,1,1,1], + [1,1,1,1,1,1,1,1], + [0,1,1,1,1,1,1,0], + [0,0,1,1,1,1,0,0], + [0,0,0,1,1,0,0,0], + [0,0,0,0,0,0,0,0], +] + +const icoR = [ + [0,0,0,0,1,1,1,1,0,0,0,0], + [0,0,1,1,0,0,0,0,1,1,0,0], + [0,1,1,1,1,0,0,1,1,0,1,0], + [0,1,1,0,0,0,0,0,0,0,1,0], + [1,1,1,1,1,1,1,1,0,0,0,1], + [1,1,0,0,1,0,0,0,0,0,0,1], + [1,1,1,1,1,1,1,0,1,1,0,1], + [1,1,1,1,1,1,0,0,0,0,1,1], + [0,1,1,1,1,1,1,1,1,1,1,0], + [0,1,1,1,1,1,1,1,1,1,1,0], + [0,0,1,1,1,1,1,1,1,1,0,0], + [0,0,0,0,1,1,1,1,0,0,0,0], +] + +let idTimeout = null; + +function icon (icon, x, y, size, gap) { + const color = g.getColor(); + for (let r=0; r5lJs`1^iK2F7m0LrPbiMF;ap?0WjO;&YmgNDUO3K|w8HZ&|o z(%Ye6F}4E=ojWUb?Pg$47h3DiR3!FNSkTH+?1NTMF9XRwXzi!SLF)iTe;!H$6wX2D z9C8^t43)tnT-SRP8bgd^p->oRWCRKWj5(udY0RbJ7+UdcnvS193n_+9o}x&hxq?q| z`pj7h8_g9N8plMMfypT}GkuO?BmtbKxPT@+n<9M?z!1fy3>up$QOu%Z?lOgih6+B# zm3aiNQd~nrMT+Y;AZ}8)x6r_XOK}^a?mHAY{NJEWakmHSauoe}0Ny>+yYDdIJV4b$ zmjUMy9xpCE=|in$pW>;9$TN!PFJ6*-g<3_5*As}nq2VoREVvZoFudzvEd3q^?*qlh z3{0PB$igsFVj%e$HAWp)mHZXNmRBjhpw3r@{BPg8VEFMPx# literal 0 HcmV?d00001 diff --git a/apps/alyxclock/metadata.json b/apps/alyxclock/metadata.json new file mode 100644 index 000000000..b188c48d8 --- /dev/null +++ b/apps/alyxclock/metadata.json @@ -0,0 +1,17 @@ +{ + "id": "alyxclock", + "name": "Alyx Clock", + "version": "0.01", + "description": "A clock in the style of half-life alyx gravity gloves", + "icon": "alyxclock.png", + "screenshots": [{"url":"screenshot_alyxclock.png"}], + "type": "clock", + "tags": "clock", + "supports": ["BANGLEJS2"], + "readme": "README.md", + "allow_emulator": true, + "storage": [ + {"name":"alyxclock.app.js","url":"alyxclock.app.js"}, + {"name":"alyxclock.img","url":"alyxclock.icon.js","evaluate":true} + ] +} diff --git a/apps/alyxclock/screenshot_alyxclock.png b/apps/alyxclock/screenshot_alyxclock.png new file mode 100644 index 0000000000000000000000000000000000000000..309ff972a78dfd6cb3cb180088505111d4da29c2 GIT binary patch literal 3559 zcmb7Hc{CK>`_|0FkTJ$G#$IDBLa3Cj82eIGma>ywP4=CU7-Y>>8kB_W%YMy72#AAA9tMN(Ga-91OKPOdd%VsO4> z{`RL!cg#G=zetZHpVL>o&%bLdXgOjQtP+iOIeOJ9jp zq~VMvq6s|Ir+*HJ>H^Qv{l?-%&F`0zYi0_y_VAmE!nURy0@F*3_oVJLP-8_w2N@Hf>(KolFxgO zVK^f-Aqp!*=QLu$VpUZJlq+EF3p#omn~Vp`x3I0ovAbF%iR(PDw#V#@Vxvp50sPkk z?WBXaeyOGm7lh23dw_`^wDCo;HclU8@zhiahtW*X{e*KgZQej0ho}`J(DJaR-$8X` z$zebs*GM8^SAc#~E$p%qX%5@BAgzu&jaK-QVF$NUoznlJ6pp39K@Xr*2*Cey-vm8VWdeWY{ zdIDw#a@yBMAkjv5E33kxSOT&EELLLMBo9SP@L~*HV1O+NS|&1SC4zY2dXM zA>tYce#|M^-ZquM?#6=^kGbs#nY2G_EB`47$Fw_GosBp>2RtsO2*J(?!G^F8_`jb=4IFHrcW&ad%k#jSq&cvk2|Vb`lqIM_co%<9_<*{=K}8 z^R(Ku>3QyTq`ET(-Vx-R+xI4QGP>xtG|BZN#mQ>Uzl9X?Ok7;-;latR-$x^Cwe(uh zd(sV-Uu}=?(Q9LkuNh#6FX}MF8SjjZanSGC7=>SBJvX2ZPCzLnzB>cZ6vFy)xPG92 zP(r_I;qr#F$hl{2qoiog5Wp8Q% zcuA(SRcD?2Zqf&kDN(B4@R0otrW|vm^?iOCs_beN=|wXD=42M-jaN{O@1Dv)LK#yMIJ9LL^5W<~F+5BIh2>#Ud?*t)skXC1KHB>$d!D zc-cc!L@B13Gjyx7srATfja<1iQyJ<5Q3S;C&6*WX+k$D#$nknvbUn|5O=BQSO9{gL zcSR=kVI(?$4rO`w@wtLBCUTw9g=n{V3iRPXWDAjvz)PdU)Rz z^gvrn`PksJIOHc0Hf*>})X36!k9TH9BO_BNrGiU>cDcBOse26lE2Wr5!<_o`6kJo1&lGvBloqykgenDWV~-OyD$f3t?daLv%gwoTOXV(0wKG&Avwof#FzTW0(2~*W!fzu8V)d2e&@9FZzde z##$X9+-`vwZ{RzEYzq0?OjO8%)@cBl<}JPGWs_(HIzLc2e^1l7#N)b%HeNGLd(jJ~ z0R(y)VBNtFQ^qM?XZynqk6S^K<_O1}TFWUDM)q3a%4!s|`SAs$7Cz>W!<_@EUFDwk zqhH-uVvKXlvzVkko~!D^Dpd_z&-9`37N+M~_+Ui+sZ)G

jgp5D44%zhuQre+)aRwU*=;!fQIB{33!EKl?hh zJo4D2vZMgYmXx~?e+c|dOt$tz-3lZ+eHq2$HXwYz|DR#`d3zGoDm3X4L~85s<+F(W z>Re12wKRydx)MK4tZWpukTVNv0AY&a{ogp+FX%3A@%((tfv18qGemRr385&TKZPv$ zq+X_8C;O4v``M!07rM~sBsJ%xRXAV$V8>qMTpqzzwy~gXl(0u@->{@8_|5Mz@v)gn zymr#vCoPw}c)i+UG?CQg61`mZZ>xiXgDr)N)$FuvG#i=@2+c|$CRf;*pw9^ zy?Tmw#som{lnB0NBKT#w7)gO!^GTNM@<36Y_3E$$a{C+u0ktr2$woY5Dtg@SZxlP0 z3jeMgTE?8^ROEB#lTvkD+7A}7BU)nX;81lb6_WAl{JT{sV@2xF5hF z+!(3&vK%^~|2EA-qB5ER%#Jbz=&CaCnGv*0x+QVbM+Xa<)5Cv)M58txnq#L}yA;-V zHEa9ti_YDb4w-}r6D=#Yj)XM&H6oHO*?{=dn%0wCXX{~Tm7a49sHv*q+PE^asmou z(_{wv9Xq&%YeG#KS>g&+P+Ncz`c*74uJNNuUIzd}b56pAu$$%VKJA@4JFS1vn6qC> z9=TqKFWATDj2l>+zO6n5Gkfi}in&@+CDt zNtcdyT=8v1Cfo?&!pLe{j9K&E{NsLkK)z5X!L2A5Wg~!+M~F*%9LNJ~ zJsc`OE1W!WMz;oJ$@<2JkP-fHnB5}3n(c3D>k88dGmpoc`b^8uz9|L!n7{2Bs%#?u z|Do<6xtSXVlwM)7`LW>#N^au>vdH`uA8hH| z29{7`6Pg<&&ZpAUKYr~>#|PdvX;FszIh>wK91)}|CFfgk-&gA2~suhSI_&Po8W5b1yV>vo+^rq3}8eWE^3r3J`R4 zo8Eimw?~>GbHtspx7J-CzQ8&Z9jpe<#l|UMcjdefZKiH%r^CB8EC$S90Wj<$C6;ec=72vePH@zT55z zZq5?Yl9}%ZhRD;dW^WfLrq;5qOMgNkYg*Hd+6LpSeer@0^bLyu{D3-pNO0?ZfLz1TkvqE_Kk%y`}5vFW*nV?LaMXp zfLcqA&qVoO3ErRkmrJu z8O3@lGGSEpfdb5aG=JYEfT$tlhfA=NO;z+uFG6amZN|)|=znBQ3ag||Sa!5*kJDv@ zjrG&A?K9_<@37tC3$H924{zhJD||)yHoX@MPuPq#12o6nY!A`8#)sgMZ Date: Mon, 26 Jun 2023 02:47:46 +0200 Subject: [PATCH 3/6] podadrem: Issue newline before GB commands reference: https://github.com/espruino/BangleApps/commit/ba7a2f79968ed26d3caa8ac2821e07856369e60e --- apps/podadrem/ChangeLog | 1 + apps/podadrem/app.js | 3 +++ apps/podadrem/metadata.json | 2 +- 3 files changed, 5 insertions(+), 1 deletion(-) diff --git a/apps/podadrem/ChangeLog b/apps/podadrem/ChangeLog index 3c68f15ac..cfdf9fcd9 100644 --- a/apps/podadrem/ChangeLog +++ b/apps/podadrem/ChangeLog @@ -7,3 +7,4 @@ Addict. 0.06: Add compatibility with Fastload Utils. 0.07: Remove just the specific listeners to not interfere with Quick Launch when fastloading. +0.08: Issue newline before GB commands (solves issue with console.log and ignored commands) diff --git a/apps/podadrem/app.js b/apps/podadrem/app.js index 9c9ed8b04..01ee74231 100644 --- a/apps/podadrem/app.js +++ b/apps/podadrem/app.js @@ -144,6 +144,7 @@ let simpleSearchTerm = function() { // input a simple search term without tags, let searchPlayWOTags = function() { //make a search and play using entered terms searchString = simpleSearch; + Bluetooth.println(""); Bluetooth.println(JSON.stringify({ t: "intent", action: "android.media.action.MEDIA_PLAY_FROM_SEARCH", @@ -157,6 +158,7 @@ let searchPlayWOTags = function() { //make a search and play using entered terms }; let gadgetbridgeWake = function() { + Bluetooth.println(""); Bluetooth.println(JSON.stringify({ t: "intent", target: "activity", @@ -174,6 +176,7 @@ let actFn = function(actName, activOrServ) { // Send the intent message to Gadgetbridge let btMsg = function(activOrServ, cls, actName, xtra) { + Bluetooth.println(""); Bluetooth.println(JSON.stringify({ t: "intent", action: actFn(actName, activOrServ), diff --git a/apps/podadrem/metadata.json b/apps/podadrem/metadata.json index c58b9241d..02e255ca4 100644 --- a/apps/podadrem/metadata.json +++ b/apps/podadrem/metadata.json @@ -2,7 +2,7 @@ "id": "podadrem", "name": "Podcast Addict Remote", "shortName": "PA Remote", - "version": "0.07", + "version": "0.08", "description": "Control Podcast Addict on your android device.", "readme": "README.md", "type": "app", From 330450516ff207c8d14962aeaa133e91759e4257 Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Mon, 26 Jun 2023 08:51:09 +0100 Subject: [PATCH 4/6] add dependency on mylocation --- apps/clkinfosunrise/metadata.json | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/clkinfosunrise/metadata.json b/apps/clkinfosunrise/metadata.json index d130c6453..7bcbb289b 100644 --- a/apps/clkinfosunrise/metadata.json +++ b/apps/clkinfosunrise/metadata.json @@ -5,6 +5,7 @@ "icon": "app.png", "type": "clkinfo", "tags": "clkinfo,sunrise", + "dependencies": {"mylocation":"app"}, "supports" : ["BANGLEJS2"], "storage": [ {"name":"sunrise.clkinfo.js","url":"clkinfo.js"} From 2c9ec746b6a3595d182383820707e1f0e18668e7 Mon Sep 17 00:00:00 2001 From: stweedo Date: Tue, 27 Jun 2023 08:34:42 -0500 Subject: [PATCH 5/6] Use Bangle.getHealthStatus("day").steps) instead --- apps/boxclk/ChangeLog | 1 + apps/boxclk/app.js | 2 +- apps/boxclk/metadata.json | 2 +- 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/apps/boxclk/ChangeLog b/apps/boxclk/ChangeLog index 794203d36..cc73fbc08 100644 --- a/apps/boxclk/ChangeLog +++ b/apps/boxclk/ChangeLog @@ -2,3 +2,4 @@ 0.02: New config options such as step, meridian, short/long formats, custom prefix/suffix 0.03: Allows showing the month in short or long format by setting `"shortMonth"` to true or false 0.04: Improves touchscreen drag handling for background apps such as Pattern Launcher +0.05: Fixes step count not resetting after a new day starts diff --git a/apps/boxclk/app.js b/apps/boxclk/app.js index 6321be7c3..12c69e789 100644 --- a/apps/boxclk/app.js +++ b/apps/boxclk/app.js @@ -249,7 +249,7 @@ boxes.batt.string = modString(boxes.batt, E.getBattery()); } if (boxes.step) { - boxes.step.string = modString(boxes.step, Bangle.getStepCount()); + boxes.step.string = modString(boxes.step, Bangle.getHealthStatus("day").steps); } boxKeys.forEach((boxKey) => { let boxItem = boxes[boxKey]; diff --git a/apps/boxclk/metadata.json b/apps/boxclk/metadata.json index 06db0b2fe..dd81ac436 100644 --- a/apps/boxclk/metadata.json +++ b/apps/boxclk/metadata.json @@ -1,7 +1,7 @@ { "id": "boxclk", "name": "Box Clock", - "version": "0.04", + "version": "0.05", "description": "A customizable clock with configurable text boxes that can be positioned to show your favorite background", "icon": "app.png", "screenshots": [ From 8f5d097120017dc28a6efe59b24116daaacb7e53 Mon Sep 17 00:00:00 2001 From: thyttan <6uuxstm66@mozmail.com⁩> Date: Tue, 27 Jun 2023 23:52:45 +0200 Subject: [PATCH 6/6] swscroll: fix check boxes not behaving ... by more properly rebasing on latest E_showScroller_Q3.js from Espruino. --- apps/swscroll/ChangeLog | 2 +- apps/swscroll/boot.js | 70 ++++++++++++++++++------------------- apps/swscroll/metadata.json | 2 +- 3 files changed, 37 insertions(+), 37 deletions(-) diff --git a/apps/swscroll/ChangeLog b/apps/swscroll/ChangeLog index 1adab01bb..9283a85da 100644 --- a/apps/swscroll/ChangeLog +++ b/apps/swscroll/ChangeLog @@ -2,4 +2,4 @@ 0.02: Rebasing on latest changes to showScroller_Q3 (https://github.com/espruino/Espruino/commit/2d3c34ef7c2b9fe2118e816aacd2e096adb99596). 0.03: Rebasing on latest changes to showScroller_Q3 (https://github.com/espruino/Espruino/commit/b6f8105b6348bb6f7cd03ac11efc1f3585c6ad79). Ensure that changing a menu item when half-scrolled off screen doesn't overwrite widgets. 0.04: Rebasing on latest changes to showScroller_Q3 (https://github.com/espruino/Espruino/commit/a0e2d9231df709849f81abf572a742b0fceab85b). Fixes missing `isActive` function that caused an error. - +0.05: Fix for the rebase in ver 0.04. Check boxes didn't behave but now they do. diff --git a/apps/swscroll/boot.js b/apps/swscroll/boot.js index 3c4b55817..1c5a84140 100644 --- a/apps/swscroll/boot.js +++ b/apps/swscroll/boot.js @@ -1,4 +1,4 @@ -E.showScroller = (function(options) { +E.showScroller = (function(options) { /* options = { h = height c = # of items @@ -19,20 +19,20 @@ E.showScroller = (function(options) { */ if (!options) return Bangle.setUI(); // remove existing handlers -var touchHandler = (_,e)=>{ - if (e.y=0) && i { + g.reset().clearRect(R).setClipRect(R.x,R.y,R.x2,R.y2); + var a = YtoIdx(R.y); + var b = Math.min(YtoIdx(R.y2),options.c-1); + for (var i=a;i<=b;i++) + options.draw(i, {x:R.x,y:idxToY(i),w:R.w,h:options.h}); + g.setClipRect(0,0,g.getWidth()-1,g.getHeight()-1); }; Bangle.setUI({ mode : "custom", back : options.back, remove : options.remove, + redraw : draw, swipe : (_,UD)=>{ pixels = 120; var dy = UD*pixels; @@ -45,13 +45,13 @@ Bangle.setUI({ rScroll = s.scroll &~1; dy = oldScroll-rScroll; if (!dy || options.c<=3) return; //options.c<=3 should maybe be dynamic, so 3 would be replaced by a variable dependent on R=Bangle.appRect. It's here so we don't try to scroll if all entries fit in the app rectangle. - g.reset().setClipRect(R.x,R.y,R.x2,R.y2); - g.scroll(0,dy); + g.reset().setClipRect(R.x,R.y,R.x2,R.y2).scroll(0,dy); var d = UD*pixels; if (d < 0) { - g.setClipRect(R.x,R.y2-(1-d),R.x2,R.y2); - let i = YtoIdx(R.y2-(1-d)); - let y = idxToY(i); + let y = Math.max(R.y2-(1-d), R.y); + g.setClipRect(R.x,y,R.x2,R.y2); + let i = YtoIdx(y); + y = idxToY(i); //print(i, options.c, options.c-i); //debugging info while (y < R.y2 - (options.h*((options.c-i)<=0)) ) { //- (options.h*((options.c-i)<=0)) makes sure we don't go beyond the menu entries in the menu object "options". This has to do with "dy = s.scroll - menuScrollMax-8" above. options.draw(i, {x:R.x,y:y,w:R.w,h:options.h}); @@ -59,10 +59,10 @@ Bangle.setUI({ y += options.h; } } else { // d>0 - g.setClipRect(R.x,R.y,R.x2,R.y+d); - let i = YtoIdx(R.y+d); - let y = idxToY(i); - //print(i, options.c, options.c-i); //debugging info + let y = Math.min(R.y+d, R.y2); + g.setClipRect(R.x,R.y,R.x2,y); + let i = YtoIdx(y); + y = idxToY(i); while (y > R.y-options.h) { options.draw(i, {x:R.x,y:y,w:R.w,h:options.h}); y -= options.h; @@ -70,7 +70,15 @@ Bangle.setUI({ } } g.setClipRect(0,0,g.getWidth()-1,g.getHeight()-1); - }, touch : touchHandler + }, touch : (_,e)=>{ + if (e.y=0) && i { - g.reset().clearRect(R.x,R.y,R.x2,R.y2); - g.setClipRect(R.x,R.y,R.x2,R.y2); - var a = YtoIdx(R.y); - var b = Math.min(YtoIdx(R.y2),options.c-1); - for (var i=a;i<=b;i++) - options.draw(i, {x:R.x,y:idxToY(i),w:R.w,h:options.h}); - g.setClipRect(0,0,g.getWidth()-1,g.getHeight()-1); -}, drawItem : i => { - var y = idxToY(i); - g.reset().setClipRect(R.x,Math.max(y,R.y),R.x2,Math.min(y+options.h,R.y2)); - options.draw(i, {x:R.x,y:y,w:R.w,h:options.h}); - g.setClipRect(0,0,g.getWidth()-1,g.getHeight()-1); - }, isActive : () => Bangle.touchHandler == touchHandler - }; + draw : draw, drawItem : i => { + var y = idxToY(i); + g.reset().setClipRect(R.x,Math.max(y,R.y),R.x2,Math.min(y+options.h,R.y2)); + options.draw(i, {x:R.x,y:y,w:R.w,h:options.h}); + g.setClipRect(0,0,g.getWidth()-1,g.getHeight()-1); + }, isActive : () => Bangle.uiRedraw == draw +}; var rScroll = s.scroll&~1; // rendered menu scroll (we only shift by 2 because of dither) s.draw(); // draw the full scroller g.flip(); // force an update now to make this snappier diff --git a/apps/swscroll/metadata.json b/apps/swscroll/metadata.json index 3258b9b21..3c0717d14 100644 --- a/apps/swscroll/metadata.json +++ b/apps/swscroll/metadata.json @@ -1,7 +1,7 @@ { "id": "swscroll", "name": "Swipe menus", - "version": "0.04", + "version": "0.05", "description": "Replace built in E.showScroller to act on swipe instead of drag. Navigate menus in discrete steps instead of a continuous motion.", "readme": "README.md", "icon": "app.png",