Skip to content

Commit a7e5c0f

Browse files
committed
Minimal handle of key release/repeat
1 parent 7a1c35d commit a7e5c0f

1 file changed

Lines changed: 74 additions & 5 deletions

File tree

slowbongo/Main.qml

Lines changed: 74 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,7 @@ Item {
139139
}
140140

141141
if (root.useTappyMode) {
142-
root.onKeyPress(root.bassIntensity > root.bigBeatThreshold);
142+
root.musicEvent(root.bassIntensity > root.bigBeatThreshold);
143143
}
144144

145145
beatCooldownTimer.restart();
@@ -168,8 +168,8 @@ Item {
168168
onTriggered: root.catState = root.pendingCatState
169169
}
170170

171-
// === KEY PRESS HANDLER ===
172-
function onKeyPress(isBigHit = false) {
171+
// === MUSIC HANDLER ===
172+
function musicEvent(isBigHit = false) {
173173
if (root.paused) return;
174174
root.waiting = false;
175175

@@ -195,6 +195,65 @@ Item {
195195
waitingTimer.restart();
196196
}
197197

198+
// === KEY PRESS HANDLER ===
199+
function onKeyPress(isBigHit = false) {
200+
if (root.paused) return;
201+
root.waiting = false;
202+
203+
let targetState;
204+
if (isBigHit) {
205+
targetState = 3;
206+
} else {
207+
if (root.catState !== 0){
208+
targetState = 3;
209+
} else {
210+
root.leftWasLast = !root.leftWasLast;
211+
targetState = root.leftWasLast ? 1 : 2;
212+
}
213+
}
214+
215+
root.catState = targetState;
216+
waitingTimer.restart();
217+
}
218+
219+
function onKeyRelease(isBigHit = false) {
220+
if (root.paused) return;
221+
root.waiting = false;
222+
223+
let targetState;
224+
if (isBigHit) {
225+
targetState = 0;
226+
} else {
227+
if (root.catState === 3){
228+
targetState = root.leftWasLast ? 1 : 2;
229+
} else {
230+
targetState = 0;
231+
}
232+
}
233+
234+
root.catState = targetState;
235+
waitingTimer.restart();
236+
}
237+
238+
function onKeyRepeat(isBigHit = false){
239+
if (root.paused) return;
240+
root.waiting = false;
241+
242+
let targetState;
243+
if (root.catState !== 0) {
244+
targetState = root.catState;
245+
} else {
246+
if (isBigHit){
247+
targetState = 3;
248+
} else {
249+
targetState = root.leftWasLast ? 1 : 2;
250+
}
251+
}
252+
253+
root.catState = targetState;
254+
waitingTimer.restart();
255+
}
256+
198257
// === STATE CHANGE HANDLERS ===
199258
onPausedChanged: {
200259
if (root.paused) {
@@ -291,10 +350,20 @@ Item {
291350

292351
stdout: SplitParser {
293352
onRead: data => {
294-
if (data.includes("EV_KEY") && data.includes("value 1")) {
353+
if (data.includes("EV_KEY")) {
295354
// Detect spacebar/enter for double slap (both paws)
296355
const isBigHit = data.includes("KEY_SPACE") || data.includes("KEY_ENTER");
297-
root.onKeyPress(isBigHit);
356+
// Key pressed
357+
// Ignore BTN_TOOL_ events to avoid double events with touchpads
358+
if (data.includes("value 1") && !data.includes("BTN_TOOL_")){
359+
root.onKeyPress(isBigHit);
360+
// Key released
361+
} else if (data.includes("value 0")) {
362+
root.onKeyRelease(isBigHit);
363+
// Key repeat
364+
} else if (data.includes("value 2")) {
365+
root.onKeyRepeat(isBigHit);
366+
}
298367
}
299368
}
300369
}

0 commit comments

Comments
 (0)