From e8d947ed8a7314e58d48d8f5a0fb118b73b6c008 Mon Sep 17 00:00:00 2001 From: Bill Currie Date: Thu, 19 Mar 2020 19:25:57 +0900 Subject: [PATCH] [qwaq] Get click and drag reporting working --- ruamoko/qwaq/qwaq-app.r | 12 ++++++------ ruamoko/qwaq/qwaq-button.h | 6 ++++++ ruamoko/qwaq/qwaq-button.r | 21 +++++++++++++++++++++ 3 files changed, 33 insertions(+), 6 deletions(-) diff --git a/ruamoko/qwaq/qwaq-app.r b/ruamoko/qwaq/qwaq-app.r index 7d5ed4ba2..2aaf62880 100644 --- a/ruamoko/qwaq/qwaq-app.r +++ b/ruamoko/qwaq/qwaq-app.r @@ -75,33 +75,33 @@ arp_end (void) -(void) buttonPressed: (id) sender { - [screen mvaddstr: {2, 0}, " pressed"]; + [screen mvaddstr: {2, 0}, " pressed "]; [screen refresh]; } -(void) buttonReleased: (id) sender { - [screen mvaddstr: {2, 0}, "released"]; + [screen mvaddstr: {2, 0}, "released "]; [screen refresh]; } -(void) buttonClick: (id) sender { - [screen mvaddstr: {2, 0}, "clicked "]; + [screen mvprintf: {2, 1}, "clicked %d", [sender click]]; [screen refresh]; } -(void) buttonDrag: (id) sender { [screen mvaddstr: {2, 0}, "dragged "]; - Rect rect = [sender rect]; - [screen mvprintf: {15, 0}, "%d %d", rect.offset.x, rect.offset.y]; + Point delta = [sender delta]; + [screen mvprintf: {15, 0}, "%3d %3d", delta.x, delta.y]; [screen refresh]; } -(void) buttonAuto: (id) sender { - [screen mvprintf: {2, 1}, "%d", autocount++]; + [screen mvprintf: {2, 2}, "%d", autocount++]; [screen refresh]; } diff --git a/ruamoko/qwaq/qwaq-button.h b/ruamoko/qwaq/qwaq-button.h index 470a2ae08..bab624e35 100644 --- a/ruamoko/qwaq/qwaq-button.h +++ b/ruamoko/qwaq/qwaq-button.h @@ -10,6 +10,9 @@ { DrawBuffer *icon[2]; int pressed; + int click; + Point dragBase; + Point dragPos; ListenerGroup *onPress; ListenerGroup *onRelease; ListenerGroup *onClick; @@ -25,6 +28,9 @@ -(ListenerGroup *) onDrag; -(ListenerGroup *) onAuto; -(ListenerGroup *) onHover; + +- (int) click; +- (Point) delta; @end #endif//__qwaq_button_h diff --git a/ruamoko/qwaq/qwaq-button.r b/ruamoko/qwaq/qwaq-button.r index 6287de9ce..fe7aa5f2f 100644 --- a/ruamoko/qwaq/qwaq-button.r +++ b/ruamoko/qwaq/qwaq-button.r @@ -38,25 +38,35 @@ switch ((qwaq_mouse_event) (event.what & qe_mouse)) { case qe_mousedown: pressed = 1; + click = 0; + dragBase = {event.mouse.x, event.mouse.y}; action = onPress; [self grabMouse]; [self redraw]; break; case qe_mouseup: pressed = 0; + click = 0; action = onRelease; [self releaseMouse]; + if ([self containsPoint: {event.mouse.x, event.mouse.y}]) { + [onClick respond: self]; + } [self redraw]; break; case qe_mouseclick: action = onClick; + click = event.mouse.click; break; case qe_mousemove: + click = 0; if (pressed) { + dragPos = {event.mouse.x, event.mouse.y}; action = onDrag; } break; case qe_mouseauto: + click = 0; action = onAuto; break; } @@ -96,4 +106,15 @@ { return onHover; } + +- (int) click +{ + return click; +} + +- (Point) delta +{ + return {dragPos.x - dragBase.x, dragPos.y - dragBase.y}; +} + @end