qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
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);
 }

             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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).