ctrlpad: return dragging

pull/3383/head
Rob Pilling 2023-08-05 08:52:33 +01:00
parent d9c2bc94dd
commit 9a864c1488
1 changed files with 35 additions and 9 deletions

View File

@ -9,7 +9,15 @@
// move our drag to the start of the event listener array // move our drag to the start of the event listener array
const handlers = (Bangle as BangleEvents)[`#on${evt}`] const handlers = (Bangle as BangleEvents)[`#on${evt}`]
if(handlers && typeof handlers !== "function"){ if(!handlers){
Bangle.on(evt as any, listener);
}else{
if(typeof handlers === "function"){
// get Bangle to convert to array
Bangle.on(evt as any, listener);
}
// shuffle array
(Bangle as BangleEvents)[`#on${evt}`] = [listener as any].concat( (Bangle as BangleEvents)[`#on${evt}`] = [listener as any].concat(
(handlers as Array<any>).filter((f: unknown) => f !== listener) (handlers as Array<any>).filter((f: unknown) => f !== listener)
); );
@ -102,13 +110,15 @@
} }
let state = State.NoConn; let state = State.NoConn;
let startY = 0; let startY = 0;
let startedUpDrag = false;
let upDragAnim: IntervalId | undefined;
let overlay: Overlay | undefined; let overlay: Overlay | undefined;
let touchDown = false; let touchDown = false;
const onDrag = (e => { const onDrag = (e => {
const dragDistance = 30; const dragDistance = 30;
if (e.b === 0) touchDown = false; if (e.b === 0) touchDown = startedUpDrag = false;
switch (state) { switch (state) {
case State.NoConn: case State.NoConn:
@ -165,9 +175,24 @@
}else if(startY){ }else if(startY){
const dist = Math.max(0, startY - e.y); const dist = Math.max(0, startY - e.y);
overlay!.setBottom(g.getHeight() - dist); if (startedUpDrag || (startedUpDrag = dist > 10)) // ignore small drags
overlay!.setBottom(g.getHeight() - dist);
} }
}else if(e.b === 0 && startY > dragDistance){ }else if(e.b === 0 && startY > dragDistance){
let bottom = g.getHeight() - Math.max(0, startY - e.y);
if (upDragAnim) clearInterval(upDragAnim);
upDragAnim = setInterval(() => {
if (!overlay || bottom <= 0) {
clearInterval(upDragAnim!);
upDragAnim = undefined;
overlay?.hide();
overlay = undefined;
return;
}
overlay?.setBottom(bottom)
bottom -= 10;
}, 50)
deactivate(); deactivate();
} }
break; break;
@ -190,7 +215,6 @@
const deactivate = () => { const deactivate = () => {
Bangle.removeListener("touch", onTouch); Bangle.removeListener("touch", onTouch);
state = State.Idle; state = State.Idle;
overlay?.hide();
}; };
Bangle.prependListener("drag", onDrag); Bangle.prependListener("drag", onDrag);
@ -231,6 +255,7 @@
}); });
//const DEBUG = true; //const DEBUG = true;
/*
const sendHid = (code: number) => { const sendHid = (code: number) => {
//if(DEBUG) return; //if(DEBUG) return;
try{ try{
@ -244,10 +269,11 @@
}; };
const hid = { const hid = {
next: () => /*DEBUG ? console.log("next") : */ sendHid(0x01), next: () => sendHid(0x01),
prev: () => /*DEBUG ? console.log("prev") : */ sendHid(0x02), prev: () => sendHid(0x02),
toggle: () => /*DEBUG ? console.log("toggle") : */ sendHid(0x10), toggle: () => sendHid(0x10),
up: () => /*DEBUG ? console.log("up") : */ sendHid(0x40), up: () => sendHid(0x40),
down: () => /*DEBUG ? console.log("down") : */ sendHid(0x80), down: () => sendHid(0x80),
}; };
*/
})() })()