mirror of
https://git.code.sf.net/p/quake/quakeforge
synced 2025-03-21 18:01:15 +00:00
[qwaq] Get click and drag reporting working
This commit is contained in:
parent
95d20d67c7
commit
e8d947ed8a
3 changed files with 33 additions and 6 deletions
|
@ -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];
|
||||
}
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue