diff --git a/apps/kineticscroll/boot.js b/apps/kineticscroll/boot.js index 8c44c02ec..1f1b7923a 100644 --- a/apps/kineticscroll/boot.js +++ b/apps/kineticscroll/boot.js @@ -31,7 +31,7 @@ let menuScrollMax = options.h*options.c - R.h; if (menuScrollMax{ + const touchHandler = (_,e)=>{ if (e.y=0) && i { + + const uiDraw = () => { + 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); + } + + const draw = () => { let dy = velocity; if (s.scroll - dy > menuScrollMax){ dy = s.scroll - menuScrollMax; @@ -124,7 +134,8 @@ mode : "custom", back : options.back, drag : dragHandler, - touch : touchHandler + touch : touchHandler, + redraw : uiDraw } if (options.remove) uiOpts.remove = () => { @@ -136,6 +147,7 @@ Bangle.setUI(uiOpts); + function idxToY(i) { return i*options.h + R.y - rScroll; @@ -158,7 +170,7 @@ 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 + }, isActive : () => Bangle.uiRedraw == uiDraw }; let rScroll = s.scroll&~1; // rendered menu scroll (we only shift by 2 because of dither) diff --git a/apps/kineticscroll/boot.min.js b/apps/kineticscroll/boot.min.js index 4b549a4f7..42f0afa67 100644 --- a/apps/kineticscroll/boot.min.js +++ b/apps/kineticscroll/boot.min.js @@ -1,4 +1,4 @@ -(function(){E.showScroller=function(c){function m(a){return a*c.h+b.y-h}function n(a){return Math.floor((a+h-b.y)/c.h)}if(!c)return Bangle.setUI();let p,e=0,k=0,w=setInterval(()=>{e*=.9},50),q=0,b=Bangle.appRect,l=0|c.scrollMin,r=c.h*c.c-b.h;r{d.yl||0<=a)&&a{var a=e;f.scroll-a>r&&(a=f.scroll-r,e=0);f.scroll-aa){a=Math.max(b.y2-(1-a),b.y);g.setClipRect(b.x,a,b.x2,b.y2);var d=n(a);for(a=m(d);ab.y-c.h;a-=c.h)c.draw(d,{x:b.x,y:a,w:b.w,h:c.h}),d--;g.setClipRect(0,0,g.getWidth()-1,g.getHeight()-1)}},v={mode:"custom",back:c.back,drag:a=>{if(0>e&&0a.dy)e*=-1,k=5*e;0{p&&clearTimeout(p);clearInterval(w);c.remove&&c.remove()});Bangle.setUI(v);let f={scroll:E.clip(0|c.scroll,l,r),draw:()=>{g.reset().clearRect(b).setClipRect(b.x,b.y,b.x2,b.y2);var a=n(b.y);let d=Math.min(n(b.y2),c.c-1);for(;a<=d;a++)c.draw(a,{x:b.x,y:m(a),w:b.w,h:c.h});g.setClipRect(0,0,g.getWidth()-1,g.getHeight()-1)},drawItem:a=>{let d=m(a);g.reset().setClipRect(b.x, -Math.max(d,b.y),b.x2,Math.min(d+c.h,b.y2));c.draw(a,{x:b.x,y:d,w:b.w,h:c.h});g.setClipRect(0,0,g.getWidth()-1,g.getHeight()-1)},isActive:()=>Bangle.touchHandler==t},h=f.scroll&-2;f.draw();g.flip();return f}})() +(function(){E.showScroller=function(c){function k(a){return a*c.h+b.y-l}function h(a){return Math.floor((a+l-b.y)/c.h)}if(!c)return Bangle.setUI();let p,e=0,m=0,w=setInterval(()=>{e*=.9},50),q=0,b=Bangle.appRect,n=0|c.scrollMin,r=c.h*c.c-b.h;r{g.reset().clearRect(b).setClipRect(b.x,b.y,b.x2,b.y2);for(var a=h(b.y),d=Math.min(h(b.y2),c.c-1);a<=d;a++)c.draw(a,{x:b.x,y:k(a),w:b.w,h:c.h});g.setClipRect(0,0,g.getWidth()-1,g.getHeight()-1)},u=()=>{var a=e;f.scroll-a>r&& +(a=f.scroll-r,e=0);f.scroll-aa){a=Math.max(b.y2-(1-a),b.y);g.setClipRect(b.x,a,b.x2,b.y2);var d=h(a);for(a=k(d);ab.y-c.h;a-=c.h)c.draw(d,{x:b.x,y:a,w:b.w,h:c.h}),d--;g.setClipRect(0,0,g.getWidth()-1,g.getHeight()- +1)}};let v={mode:"custom",back:c.back,drag:a=>{if(0>e&&0a.dy)e*=-1,m=5*e;0{if(!(d.yn||0<=a)&&a{p&&clearTimeout(p);clearInterval(w);c.remove()});Bangle.setUI(v);let f={scroll:E.clip(0|c.scroll, +n,r),draw:()=>{g.reset().clearRect(b).setClipRect(b.x,b.y,b.x2,b.y2);var a=h(b.y);let d=Math.min(h(b.y2),c.c-1);for(;a<=d;a++)c.draw(a,{x:b.x,y:k(a),w:b.w,h:c.h});g.setClipRect(0,0,g.getWidth()-1,g.getHeight()-1)},drawItem:a=>{let d=k(a);g.reset().setClipRect(b.x,Math.max(d,b.y),b.x2,Math.min(d+c.h,b.y2));c.draw(a,{x:b.x,y:d,w:b.w,h:c.h});g.setClipRect(0,0,g.getWidth()-1,g.getHeight()-1)},isActive:()=>Bangle.uiRedraw==t},l=f.scroll&-2;f.draw();g.flip();return f}})() \ No newline at end of file