kineticscroll - Update to latest E.showScroller implementation

pull/2898/head
Martin Boonk 2023-07-23 17:41:48 +02:00
parent 2d5f9a5788
commit e614bdfb51
2 changed files with 21 additions and 9 deletions

View File

@ -31,7 +31,7 @@
let menuScrollMax = options.h*options.c - R.h;
if (menuScrollMax<menuScrollMin) menuScrollMax=menuScrollMin;
let touchHandler = (_,e)=>{
const touchHandler = (_,e)=>{
if (e.y<R.y-4) return;
velocity = 0;
accDy = 0;
@ -39,11 +39,21 @@
if ((menuScrollMin<0 || i>=0) && i<options.c){
let yAbs = (e.y + rScroll - R.y);
let yInElement = yAbs - i*options.h;
print("selected");
options.select(i, {x:e.x, y:yInElement});
}
};
let draw = () => {
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 = () => {
@ -137,6 +148,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)

View File

@ -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<l&&(r=l);let t=(a,d)=>{d.y<b.y-4||(k=e=0,a=n(d.y),(0>l||0<=a)&&a<c.c&&c.select(a,{x:d.x,y:d.y+h-b.y-a*c.h}))},u=()=>{var a=e;f.scroll-a>r&&(a=f.scroll-r,e=0);f.scroll-a<l&&(a=f.scroll-l,e=0);f.scroll-=a;a=h;h=f.scroll&-2;a-=h;p=.01<Math.abs(e)?setTimeout(u,
0):void 0;if(a){g.reset().setClipRect(b.x,b.y,b.x2,b.y2).scroll(0,a);if(0>a){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);a<b.y2;a+=c.h)c.draw(d,{x:b.x,y:a,w:b.w,h:c.h}),d++}else for(a=Math.min(b.y+a,b.y2),g.setClipRect(b.x,b.y,b.x2,a),d=n(a),m(d),a=m(d);a>b.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&&0<a.dy||0<e&&0>a.dy)e*=-1,k=5*e;0<a.b&&(q||(q=Date.now(),k=
e=0),k+=a.dy);e=k/(Date.now()-q)*100;q&&0==a.b&&(q=k=0);e=E.clip(e,-100,100);lastDrag=Date.now();p||(p=setTimeout(u,0))},touch:t};c.remove&&(v.remove=()=>{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<n&&(r=n);const t=()=>{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-a<n&&(a=f.scroll-n,e=0);f.scroll-=a;a=l;l=f.scroll&-2;a-=l;p=.01<Math.abs(e)?setTimeout(u,0):void 0;if(a){g.reset().setClipRect(b.x,b.y,b.x2,b.y2).scroll(0,a);if(0>a){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);a<b.y2;a+=c.h)c.draw(d,{x:b.x,y:a,w:b.w,h:c.h}),d++}else for(a=Math.min(b.y+a,b.y2),g.setClipRect(b.x,b.y,b.x2,a),d=h(a),k(d),a=k(d);a>b.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&&0<a.dy||0<e&&0>a.dy)e*=-1,m=5*e;0<a.b&&(q||(q=Date.now(),m=e=0),m+=a.dy);e=m/(Date.now()-q)*100;q&&0==a.b&&(q=m=0);e=E.clip(e,-100,100);lastDrag=Date.now();p||(p=setTimeout(u,0))},touch:(a,d)=>{if(!(d.y<b.y-4)&&(m=e=0,a=h(d.y),(0>n||0<=a)&&a<c.c)){let x=d.y+l-b.y-a*c.h;print("selected");c.select(a,{x:d.x,y:x})}},redraw:t};c.remove&&(v.remove=()=>{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}})()