[Qemu-devel] [PATCH 30/42] input: mouse: switch cocoa ui to new core

2014-01-28 Thread Gerd Hoffmann
Build fixes by Peter Maydell.

Signed-off-by: Gerd Hoffmann kra...@redhat.com
---
 include/ui/console.h |  2 ++
 ui/cocoa.m   | 63 ++--
 2 files changed, 44 insertions(+), 21 deletions(-)

diff --git a/include/ui/console.h b/include/ui/console.h
index 8543d18..a3062d0 100644
--- a/include/ui/console.h
+++ b/include/ui/console.h
@@ -14,6 +14,8 @@
 #define MOUSE_EVENT_LBUTTON 0x01
 #define MOUSE_EVENT_RBUTTON 0x02
 #define MOUSE_EVENT_MBUTTON 0x04
+#define MOUSE_EVENT_WHEELUP 0x08
+#define MOUSE_EVENT_WHEELDN 0x10
 
 /* identical to the ps/2 keyboard bits */
 #define QEMU_SCROLL_LOCK_LED (1  0)
diff --git a/ui/cocoa.m b/ui/cocoa.m
index d4af3e5..f20fd1f 100644
--- a/ui/cocoa.m
+++ b/ui/cocoa.m
@@ -27,6 +27,7 @@
 
 #include qemu-common.h
 #include ui/console.h
+#include ui/input.h
 #include sysemu/sysemu.h
 
 #ifndef MAC_OS_X_VERSION_10_4
@@ -49,14 +50,6 @@
 #endif
 
 #define cgrect(nsrect) (*(CGRect *)(nsrect))
-#define COCOA_MOUSE_EVENT \
-if (isTabletEnabled) { \
-kbd_mouse_event((int)(p.x * 0x7FFF / (screen.width - 1)), 
(int)((screen.height - p.y) * 0x7FFF / (screen.height - 1)), 0, buttons); \
-} else if (isMouseGrabbed) { \
-kbd_mouse_event((int)[event deltaX], (int)[event deltaY], 0, 
buttons); \
-} else { \
-[NSApp sendEvent:event]; \
-}
 
 typedef struct {
 int width;
@@ -67,6 +60,7 @@ typedef struct {
 
 NSWindow *normalWindow;
 static DisplayChangeListener *dcl;
+static int last_buttons;
 
 int gArgc;
 char **gArgv;
@@ -501,6 +495,7 @@ QemuCocoaView *cocoaView;
 
 int buttons = 0;
 int keycode;
+bool mouse_event = false;
 NSPoint p = [event locationInWindow];
 
 switch ([event type]) {
@@ -620,7 +615,7 @@ QemuCocoaView *cocoaView;
 }
 }
 }
-COCOA_MOUSE_EVENT
+mouse_event = true;
 break;
 case NSLeftMouseDown:
 if ([event modifierFlags]  NSCommandKeyMask) {
@@ -628,15 +623,15 @@ QemuCocoaView *cocoaView;
 } else {
 buttons |= MOUSE_EVENT_LBUTTON;
 }
-COCOA_MOUSE_EVENT
+mouse_event = true;
 break;
 case NSRightMouseDown:
 buttons |= MOUSE_EVENT_RBUTTON;
-COCOA_MOUSE_EVENT
+mouse_event = true;
 break;
 case NSOtherMouseDown:
 buttons |= MOUSE_EVENT_MBUTTON;
-COCOA_MOUSE_EVENT
+mouse_event = true;
 break;
 case NSLeftMouseDragged:
 if ([event modifierFlags]  NSCommandKeyMask) {
@@ -644,19 +639,19 @@ QemuCocoaView *cocoaView;
 } else {
 buttons |= MOUSE_EVENT_LBUTTON;
 }
-COCOA_MOUSE_EVENT
+mouse_event = true;
 break;
 case NSRightMouseDragged:
 buttons |= MOUSE_EVENT_RBUTTON;
-COCOA_MOUSE_EVENT
+mouse_event = true;
 break;
 case NSOtherMouseDragged:
 buttons |= MOUSE_EVENT_MBUTTON;
-COCOA_MOUSE_EVENT
+mouse_event = true;
 break;
 case NSLeftMouseUp:
 if (isTabletEnabled) {
-COCOA_MOUSE_EVENT
+mouse_event = true;
 } else if (!isMouseGrabbed) {
 if (p.x  -1  p.x  screen.width  p.y  -1  p.y  
screen.height) {
 [self grabMouse];
@@ -664,18 +659,20 @@ QemuCocoaView *cocoaView;
 [NSApp sendEvent:event];
 }
 } else {
-COCOA_MOUSE_EVENT
+mouse_event = true;
 }
 break;
 case NSRightMouseUp:
-COCOA_MOUSE_EVENT
+mouse_event = true;
 break;
 case NSOtherMouseUp:
-COCOA_MOUSE_EVENT
+mouse_event = true;
 break;
 case NSScrollWheel:
 if (isTabletEnabled || isMouseGrabbed) {
-kbd_mouse_event(0, 0, -[event deltaY], 0);
+buttons |= ([event deltaY]  0) ?
+MOUSE_EVENT_WHEELUP : MOUSE_EVENT_WHEELDN;
+mouse_event = true;
 } else {
 [NSApp sendEvent:event];
 }
@@ -683,6 +680,30 @@ QemuCocoaView *cocoaView;
 default:
 [NSApp sendEvent:event];
 }
+
+if (mouse_event) {
+if (last_buttons != buttons) {
+static uint32_t bmap[INPUT_BUTTON_MAX] = {
+[INPUT_BUTTON_LEFT]   = MOUSE_EVENT_LBUTTON,
+[INPUT_BUTTON_MIDDLE] = MOUSE_EVENT_MBUTTON,
+[INPUT_BUTTON_RIGHT]  = MOUSE_EVENT_RBUTTON,
+[INPUT_BUTTON_WHEEL_UP]   = MOUSE_EVENT_WHEELUP,
+[INPUT_BUTTON_WHEEL_DOWN] = MOUSE_EVENT_WHEELDN,
+};
+

[Qemu-devel] [PATCH 30/42] input: mouse: switch cocoa ui to new core [untested]

2013-12-16 Thread Gerd Hoffmann
Signed-off-by: Gerd Hoffmann kra...@redhat.com
---
 include/ui/console.h |  2 ++
 ui/cocoa.m   | 63 ++--
 2 files changed, 44 insertions(+), 21 deletions(-)

diff --git a/include/ui/console.h b/include/ui/console.h
index 8543d18..a3062d0 100644
--- a/include/ui/console.h
+++ b/include/ui/console.h
@@ -14,6 +14,8 @@
 #define MOUSE_EVENT_LBUTTON 0x01
 #define MOUSE_EVENT_RBUTTON 0x02
 #define MOUSE_EVENT_MBUTTON 0x04
+#define MOUSE_EVENT_WHEELUP 0x08
+#define MOUSE_EVENT_WHEELDN 0x10
 
 /* identical to the ps/2 keyboard bits */
 #define QEMU_SCROLL_LOCK_LED (1  0)
diff --git a/ui/cocoa.m b/ui/cocoa.m
index a029493..9cc512f 100644
--- a/ui/cocoa.m
+++ b/ui/cocoa.m
@@ -27,6 +27,7 @@
 
 #include qemu-common.h
 #include ui/console.h
+#include ui/input.h
 #include sysemu/sysemu.h
 
 #ifndef MAC_OS_X_VERSION_10_4
@@ -49,14 +50,6 @@
 #endif
 
 #define cgrect(nsrect) (*(CGRect *)(nsrect))
-#define COCOA_MOUSE_EVENT \
-if (isTabletEnabled) { \
-kbd_mouse_event((int)(p.x * 0x7FFF / (screen.width - 1)), 
(int)((screen.height - p.y) * 0x7FFF / (screen.height - 1)), 0, buttons); \
-} else if (isMouseGrabed) { \
-kbd_mouse_event((int)[event deltaX], (int)[event deltaY], 0, 
buttons); \
-} else { \
-[NSApp sendEvent:event]; \
-}
 
 typedef struct {
 int width;
@@ -67,6 +60,7 @@ typedef struct {
 
 NSWindow *normalWindow;
 static DisplayChangeListener *dcl;
+static int last_buttons;
 
 int gArgc;
 char **gArgv;
@@ -489,6 +483,7 @@ QemuCocoaView *cocoaView;
 
 int buttons = 0;
 int keycode;
+bool mouse_event = false;
 NSPoint p = [event locationInWindow];
 
 switch ([event type]) {
@@ -595,7 +590,7 @@ QemuCocoaView *cocoaView;
 }
 }
 }
-COCOA_MOUSE_EVENT
+mouse_event = true;
 break;
 case NSLeftMouseDown:
 if ([event modifierFlags]  NSCommandKeyMask) {
@@ -603,15 +598,15 @@ QemuCocoaView *cocoaView;
 } else {
 buttons |= MOUSE_EVENT_LBUTTON;
 }
-COCOA_MOUSE_EVENT
+mouse_event = true;
 break;
 case NSRightMouseDown:
 buttons |= MOUSE_EVENT_RBUTTON;
-COCOA_MOUSE_EVENT
+mouse_event = true;
 break;
 case NSOtherMouseDown:
 buttons |= MOUSE_EVENT_MBUTTON;
-COCOA_MOUSE_EVENT
+mouse_event = true;
 break;
 case NSLeftMouseDragged:
 if ([event modifierFlags]  NSCommandKeyMask) {
@@ -619,19 +614,19 @@ QemuCocoaView *cocoaView;
 } else {
 buttons |= MOUSE_EVENT_LBUTTON;
 }
-COCOA_MOUSE_EVENT
+mouse_event = true;
 break;
 case NSRightMouseDragged:
 buttons |= MOUSE_EVENT_RBUTTON;
-COCOA_MOUSE_EVENT
+mouse_event = true;
 break;
 case NSOtherMouseDragged:
 buttons |= MOUSE_EVENT_MBUTTON;
-COCOA_MOUSE_EVENT
+mouse_event = true;
 break;
 case NSLeftMouseUp:
 if (isTabletEnabled) {
-COCOA_MOUSE_EVENT
+mouse_event = true;
 } else if (!isMouseGrabed) {
 if (p.x  -1  p.x  screen.width  p.y  -1  p.y  
screen.height) {
 [self grabMouse];
@@ -639,18 +634,20 @@ QemuCocoaView *cocoaView;
 [NSApp sendEvent:event];
 }
 } else {
-COCOA_MOUSE_EVENT
+mouse_event = true;
 }
 break;
 case NSRightMouseUp:
-COCOA_MOUSE_EVENT
+mouse_event = true;
 break;
 case NSOtherMouseUp:
-COCOA_MOUSE_EVENT
+mouse_event = true;
 break;
 case NSScrollWheel:
 if (isTabletEnabled || isMouseGrabed) {
-kbd_mouse_event(0, 0, -[event deltaY], 0);
+button |= ([event deltaY]  0) ?
+MOUSE_EVENT_WHEELUP : MOUSE_EVENT_WHEELDN;
+mouse_event = true;
 } else {
 [NSApp sendEvent:event];
 }
@@ -658,6 +655,30 @@ QemuCocoaView *cocoaView;
 default:
 [NSApp sendEvent:event];
 }
+
+if (mouse_event) {
+if (last_buttons != buttons) {
+static uint32_t bmap[INPUT_BUTTON_MAX] = {
+[INPUT_BUTTON_LEFT]   = MOUSE_EVENT_LBUTTON,
+[INPUT_BUTTON_MIDDLE] = MOUSE_EVENT_MBUTTON,
+[INPUT_BUTTON_RIGHT]  = MOUSE_EVENT_RBUTTON,
+[INPUT_BUTTON_WHEEL_UP]   = MOUSE_EVENT_WHEELUP,
+[INPUT_BUTTON_WHEEL_DOWN] = MOUSE_EVENT_WHEELDN,
+};
+qemu_input_update_buttons(con, bmap, last_buttons, buttons);
+