From: Mike Kronenberg <mike.kronenberg@kberg.ch>
To: Qemu-devel@nongnu.org
Subject: [Qemu-devel] Experimental Cocoa Video Driver - Mousesupport and Keymap
Date: Wed, 06 Apr 2005 21:34:02 +0200 [thread overview]
Message-ID: <425439AA.5000509@kberg.ch> (raw)
[-- Attachment #1: Type: text/plain, Size: 457 bytes --]
Hello
this patch provides initial Mouse- and better Keyboard support.
There are still alot of things to do.
known Bugs and Workarounds:
- still no modifiers (help is apreciated)
-> no grab and ungrab (use alt-tab to switch)
- Mouseevents are only correcty passed, if the Cursor is within the
qemu-Window, when it's activated (else the Mousedown/Mouseup are passed
to the window, that was under the Cursor, when the qemu-Window is activated)
G Mike
[-- Attachment #2: cocoa.m.diff --]
[-- Type: text/plain, Size: 8890 bytes --]
--- /Users/mike/Documents/qemu/devel/qemu-snapshot-2005-04-05_23/cocoa.m Wed Mar 2 23:22:43 2005
+++ /Users/mike/Documents/qemu/devel/qemu-snapshot-2005-04-05_23_kberg/cocoa.m Wed Apr 6 20:57:56 2005
@@ -173,55 +173,129 @@
static int keymap[] =
{
- 30, //'a' 0x0
- 31, //'s'
- 32, //'d'
- 33, //'f'
- 35, //'h'
- 34, //'g'
- 44, //'z'
- 45, //'x'
- 46, //'c'
- 47, //'v'
- 0, // 0 0x0a
- 48, //'b'
- 16, //'q'
- 17, //'w'
- 18, //'e'
- 19, //'r'
- 21, //'y' 0x10
- 20, //'t'
- 2, //'1'
- 3, //'2'
- 4, //'3'
- 5, //'4'
- 7, //'6'
- 6, //'5'
- 0, //'='
- 10, //'9'
- 8, //'7' 0x1A
- 0, //'-'
- 9, //'8'
- 11, //'0'
- 27, //']'
- 24, //'o'
- 22, //'u' 0x20
- 26, //'['
- 23, //'i'
- 25, //'p'
- 28, //'\n'
- 38, //'l'
- 36, //'j'
- 40, //'"'
- 37, //'k'
- 39, //';'
- 15, //'\t' 0x30
- 0, //' '
- 0, //'`'
- 14, //'<backspace>'
- 0, //'' 0x34
- 0, //'<esc>'
- 0, //'<esc>'
+ 30, // 0x00 #define QZ_a 0x1e
+ 31, // 0x01 #define QZ_s 0x1f
+ 32, // 0x02 #define QZ_d 0x20
+ 33, // 0x03 #define QZ_f 0x21
+ 35, // 0x04 #define QZ_h 0x23
+ 34, // 0x05 #define QZ_g 0x22
+ 44, // 0x06 #define QZ_z 0x2c
+ 45, // 0x07 #define QZ_x 0x2d
+ 46, // 0x08 #define QZ_c 0x2e
+ 47, // 0x09 #define QZ_v 0x2f
+ 0, // 0x0A Undefined
+ 48, // 0x0B #define QZ_b 0x30
+ 16, // 0x0C #define QZ_q 0x10
+ 17, // 0x0D #define QZ_w 0x11
+ 18, // 0x0E #define QZ_e 0x12
+ 19, // 0x0F #define QZ_r 0x13
+ 21, // 0x10 #define QZ_y 0x15
+ 20, // 0x11 #define QZ_t 0x14
+ 2, // 0x12 #define QZ_1 0x2
+ 3, // 0x13 #define QZ_2 0x3
+ 4, // 0x14 #define QZ_3 0x4
+ 5, // 0x15 #define QZ_4 0x5
+ 7, // 0x16 #define QZ_6 0x7
+ 6, // 0x17 #define QZ_5 0x6
+ 13, // 0x18 #define QZ_EQUALS 0xd
+ 10, // 0x19 #define QZ_9 0xa
+ 8, // 0x1A #define QZ_7 0x8
+ 12, // 0x1B #define QZ_MINUS 0xc
+ 9, // 0x1C #define QZ_8 0x9
+ 11, // 0x1D #define QZ_0 0xb
+ 27, // 0x1E #define QZ_RIGHTBRACKET 0x1b
+ 24, // 0x1F #define QZ_o 0x18
+ 22, // 0x20 #define QZ_u 0x16
+ 26, // 0x21 #define QZ_LEFTBRACKET 0x1a
+ 23, // 0x22 #define QZ_i 0x17
+ 25, // 0x23 #define QZ_p 0x19
+ 28, // 0x24 #define QZ_RETURN 0x1c
+ 38, // 0x25 #define QZ_l 0x26
+ 36, // 0x26 #define QZ_j 0x24
+ 40, // 0x27 #define QZ_QUOTE 0x28
+ 37, // 0x28 #define QZ_k 0x25
+ 39, // 0x29 #define QZ_SEMICOLON 0x27
+ 43, // 0x2A #define QZ_BACKSLASH 0x2b
+ 51, // 0x2B #define QZ_COMMA 0x33
+ 53, // 0x2C #define QZ_SLASH 0x35
+ 49, // 0x2D #define QZ_n 0x31
+ 50, // 0x2E #define QZ_m 0x32
+ 52, // 0x2F #define QZ_PERIOD 0x34
+ 15, // 0x30 #define QZ_TAB 0xf
+ 57, // 0x31 #define QZ_SPACE 0x39
+ 41, // 0x32 #define QZ_BACKQUOTE 0x29
+ 14, // 0x33 #define QZ_BACKSPACE 0xe
+ 0, // 0x34 Undefined
+ 1, // 0x35 #define QZ_ESCAPE 0x1
+ 0, // 0x36 #define QZ_RMETA
+ 0, // 0x37 #define QZ_LMETA
+ 26, // 0x38 #define QZ_LSHIFT 0x2a
+ 58, // 0x39 #define QZ_CAPSLOCK 0x3a
+ 56, // 0x3A #define QZ_LALT 0x38
+ 29, // 0x3B #define QZ_LCTRL 0x1d
+ 54, // 0x3C #define QZ_RSHIFT 0x36
+ 168, // 0x3D #define QZ_RALT 0xb8
+ 157, // 0x3E #define QZ_RCTRL 0x9d
+ 0, // 0x3F Undefined
+ 0, // 0x40 Undefined
+ 0, // 0x41 Undefined
+ 0, // 0x42 Undefined
+ 55, // 0x43 #define QZ_KP_MULTIPLY 0x37
+ 78, // 0x45 #define QZ_KP_PLUS 0x4e
+ 69, // 0x47 #define QZ_NUMLOCK 0x45
+ 0, // 0x48 Undefined
+ 0, // 0x49 Undefined
+ 0, // 0x4A Undefined
+ 21, // 0x4B #define QZ_KP_DIVIDE 0xb5
+ 152, // 0x4C #define QZ_KP_ENTER 0x9c
+ 74, // 0x4E #define QZ_KP_MINUS 0x4a
+ 0, // 0x4F Undefined
+ 0, // 0x50 Undefined
+ 0, // 0x51 #define QZ_KP_EQUALS
+ 82, // 0x52 #define QZ_KP0 0x52
+ 79, // 0x53 #define QZ_KP1 0x4f
+ 80, // 0x54 #define QZ_KP2 0x50
+ 81, // 0x55 #define QZ_KP3 0x51
+ 76, // 0x56 #define QZ_KP4 0x4b
+ 77, // 0x57 #define QZ_KP5 0x4c
+ 78, // 0x58 #define QZ_KP6 0x4d
+ 71, // 0x59 #define QZ_KP7 0x47
+ 0, // 0x5A Undefined
+ 72, // 0x5B #define QZ_KP8 0x48
+ 73, // 0x5C #define QZ_KP9 0x49
+ 0, // 0x5D Undefined
+ 0, // 0x5E Undefined
+ 0, // 0x5F Undefined
+ 63, // 0x60 #define QZ_F5 0x3f
+ 64, // 0x61 #define QZ_F6 0x40
+ 65, // 0x62 #define QZ_F7 0x41
+ 61, // 0x63 #define QZ_F3 0x3d
+ 66, // 0x64 #define QZ_F8 0x42
+ 67, // 0x65 #define QZ_F9 0x43
+ 0, // 0x66 Undefined
+ 87, // 0x67 #define QZ_F11 0x57
+ 0, // 0x68 Undefined
+ 23, // 0x69 #define QZ_PRINT 0xb7
+ 0, // 0x6A Undefined
+ 70, // 0x6B #define QZ_SCROLLOCK 0x46
+ 68, // 0x6D #define QZ_F10 0x44
+ 0, // 0x6E Undefined
+ 88, // 0x6F #define QZ_F12 0x58
+ 0, // 0x70 Undefined
+ 110, // 0x71 #define QZ_PAUSE 0x0
+ 210, // 0x72 #define QZ_INSERT 0xd2
+ 199, // 0x73 #define QZ_HOME 0xc7
+ 201, // 0x74 #define QZ_PAGEUP 0xc9
+ 211, // 0x75 #define QZ_DELETE 0xd3
+ 62, // 0x76 #define QZ_F4 0x3e
+ 223, // 0x77 #define QZ_END 0xcf
+ 60, // 0x78 #define QZ_F2 0x3c
+ 209, // 0x79 #define QZ_PAGEDOWN 0xd1
+ 59, // 0x7A #define QZ_F1 0x3b
+ 219, // 0x7B #define QZ_LEFT 0xcb
+ 221, // 0x7C #define QZ_RIGHT 0xcd
+ 208, // 0x7D #define QZ_DOWN 0xd0
+ 200, // 0x7E #define QZ_UP 0xc8
/* Not completed to finish see http://www.libsdl.org/cgi/cvsweb.cgi/SDL12/src/video/quartz/SDL_QuartzKeys.h?rev=1.6&content-type=text/x-cvsweb-markup */
};
@@ -235,6 +309,9 @@
return keymap[keycode];
}
+
+static uint8_t modifiers_state[256]; //Mike
+
/*
------------------------------------------------------
cocoa_refresh
@@ -253,16 +330,26 @@
if (is_active_console(vga_console))
vga_update_display();
+
+// [NSCursor hide];
+// CGAssociateMouseAndMouseCursorPosition ( FALSE );
+
do {
event = [ NSApp nextEventMatchingMask:NSAnyEventMask untilDate:distantPast
inMode: NSDefaultRunLoopMode dequeue:YES ];
if (event != nil) {
- switch ([event type]) {
+ /*
+ //workaround to force Mouse inside Window
+ CGPoint cGPoint1;
+ cGPoint1.x = 400;
+ cGPoint1.y = 400;
+ CGWarpMouseCursorPosition (cGPoint1);
+ */
+ switch ([event type]) {
case NSKeyDown:
if(grab)
{
int keycode = cocoa_keycode_to_qemu([event keyCode]);
-
if (keycode & 0x80)
kbd_put_keycode(0xe0);
kbd_put_keycode(keycode & 0x7f);
@@ -272,28 +359,74 @@
if(grab)
{
int keycode = cocoa_keycode_to_qemu([event keyCode]);
-
if (keycode & 0x80)
kbd_put_keycode(0xe0);
kbd_put_keycode(keycode | 0x80);
}
break;
case NSScrollWheel:
-
+ if(grab)
+ {
+ int dz = [event deltaZ];
+ kbd_mouse_event(0, 0, dz, 0);
+ }
+ break;
case NSLeftMouseDown:
+ if(grab)
+ {
+ int buttons = 0;
+ buttons |= MOUSE_EVENT_LBUTTON;
+ kbd_mouse_event(0, 0, 0, buttons);
+ }
+ break;
case NSLeftMouseUp:
-
+ if(grab)
+ {
+ kbd_mouse_event(0, 0, 0, 0);
+ }
+ break;
case NSOtherMouseDown:
case NSRightMouseDown:
-
+ if(grab)
+ {
+ int buttons = 0;
+ buttons |= MOUSE_EVENT_RBUTTON;
+ kbd_mouse_event(0, 0, 0, buttons);
+ }
+ break;
case NSOtherMouseUp:
case NSRightMouseUp:
+ if(grab)
+ {
+ kbd_mouse_event(0, 0, 0, 0);
+ }
+ break;
case NSMouseMoved:
+ if(grab)
+ {
+ int dx, dy, dz, buttons;
+ dx = [event deltaX];
+ dy = [event deltaY];
+ dz = 0;
+ buttons = 0;
+ kbd_mouse_event(dx, dy, dz, buttons);
+ }
+ break;
case NSOtherMouseDragged:
case NSRightMouseDragged:
case NSLeftMouseDragged:
-
+ if(grab)
+ {
+ int dx, dy, dz, buttons;
+ dx = [event deltaX];
+ dy = [event deltaY];
+ dz = 0;
+ buttons = 0;
+ buttons |= MOUSE_EVENT_LBUTTON;
+ kbd_mouse_event(dx, dy, dz, buttons);
+ }
+ break;
default: [NSApp sendEvent:event];
}
}
@@ -324,6 +457,9 @@
ds->dpy_refresh = cocoa_refresh;
cocoa_resize(ds, 640, 400);
+
+ [NSCursor hide];
+ CGAssociateMouseAndMouseCursorPosition ( FALSE );
atexit(cocoa_cleanup);
}
next reply other threads:[~2005-04-06 19:16 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2005-04-06 19:34 Mike Kronenberg [this message]
2005-04-08 18:29 ` [Qemu-devel] Experimental Cocoa Video Driver - Mousesupport and Keymap Pierre d'Herbemont
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=425439AA.5000509@kberg.ch \
--to=mike.kronenberg@kberg.ch \
--cc=Qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.