[qwaq] Get click and drag reporting working

This commit is contained in:
Bill Currie 2020-03-19 19:25:57 +09:00
parent 95d20d67c7
commit e8d947ed8a
3 changed files with 33 additions and 6 deletions

View file

@ -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];
}

View file

@ -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

View file

@ -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