📄 cocoa.m
字号:
208,// 125 0x7D 0xd0 E0,50 D ARROW QZ_DOWN 200,// 126 0x7E 0xc8 E0,48 U ARROW QZ_UP/* completed according to http://www.libsdl.org/cgi/cvsweb.cgi/SDL12/src/video/quartz/SDL_QuartzKeys.h?rev=1.6&content-type=text/x-cvsweb-markup */ /* Aditional 104 Key XP-Keyboard Scancodes from http://www.computer-engineering.org/ps2keyboard/scancodes1.html *//* 219 // 0xdb e0,5b L GUI 220 // 0xdc e0,5c R GUI 221 // 0xdd e0,5d APPS // E0,2A,E0,37 PRNT SCRN // E1,1D,45,E1,9D,C5 PAUSE 83 // 0x53 0x53 KP . // ACPI Scan Codes 222 // 0xde E0, 5E Power 223 // 0xdf E0, 5F Sleep 227 // 0xe3 E0, 63 Wake // Windows Multimedia Scan Codes 153 // 0x99 E0, 19 Next Track 144 // 0x90 E0, 10 Previous Track 164 // 0xa4 E0, 24 Stop 162 // 0xa2 E0, 22 Play/Pause 160 // 0xa0 E0, 20 Mute 176 // 0xb0 E0, 30 Volume Up 174 // 0xae E0, 2E Volume Down 237 // 0xed E0, 6D Media Select 236 // 0xec E0, 6C E-Mail 161 // 0xa1 E0, 21 Calculator 235 // 0xeb E0, 6B My Computer 229 // 0xe5 E0, 65 WWW Search 178 // 0xb2 E0, 32 WWW Home 234 // 0xea E0, 6A WWW Back 233 // 0xe9 E0, 69 WWW Forward 232 // 0xe8 E0, 68 WWW Stop 231 // 0xe7 E0, 67 WWW Refresh 230 // 0xe6 E0, 66 WWW Favorites */};int cocoa_keycode_to_qemu(int keycode){ if((sizeof(keymap)/sizeof(int)) <= keycode) { printf("(cocoa) warning unknow keycode 0x%x\n", keycode); return 0; } return keymap[keycode];}/* ------------------------------------------------------ cocoa_refresh ------------------------------------------------------*/static void cocoa_refresh(DisplayState *ds){ //printf("cocoa_refresh \n"); NSDate *distantPast; NSEvent *event; NSAutoreleasePool *pool; pool = [ [ NSAutoreleasePool alloc ] init ]; distantPast = [ NSDate distantPast ]; vga_hw_update(); do { event = [ NSApp nextEventMatchingMask:NSAnyEventMask untilDate:distantPast inMode: NSDefaultRunLoopMode dequeue:YES ]; if (event != nil) { switch ([event type]) { case NSFlagsChanged: { int keycode = cocoa_keycode_to_qemu([event keyCode]); if (keycode) { if (keycode == 58 || keycode == 69) { /* emulate caps lock and num lock keydown and keyup */ kbd_put_keycode(keycode); kbd_put_keycode(keycode | 0x80); } else if (is_graphic_console()) { if (keycode & 0x80) kbd_put_keycode(0xe0); if (modifiers_state[keycode] == 0) { /* keydown */ kbd_put_keycode(keycode & 0x7f); modifiers_state[keycode] = 1; } else { /* keyup */ kbd_put_keycode(keycode | 0x80); modifiers_state[keycode] = 0; } } } /* release Mouse grab when pressing ctrl+alt */ if (([event modifierFlags] & NSControlKeyMask) && ([event modifierFlags] & NSAlternateKeyMask)) { [window setTitle: @"QEMU"]; [NSCursor unhide]; CGAssociateMouseAndMouseCursorPosition ( TRUE ); grab = 0; } } break; case NSKeyDown: { int keycode = cocoa_keycode_to_qemu([event keyCode]); /* handle command Key Combos */ if ([event modifierFlags] & NSCommandKeyMask) { switch ([event keyCode]) { /* quit */ case 12: /* q key */ /* switch to windowed View */ exit(0); return; } } /* handle control + alt Key Combos */ if (([event modifierFlags] & NSControlKeyMask) && ([event modifierFlags] & NSAlternateKeyMask)) { switch (keycode) { /* toggle Monitor */ case 0x02 ... 0x0a: /* '1' to '9' keys */ console_select(keycode - 0x02); break; } } else { /* handle standard key events */ if (is_graphic_console()) { if (keycode & 0x80) //check bit for e0 in front kbd_put_keycode(0xe0); kbd_put_keycode(keycode & 0x7f); //remove e0 bit in front /* handle monitor key events */ } else { switch([event keyCode]) { case 123: kbd_put_keysym(QEMU_KEY_LEFT); break; case 124: kbd_put_keysym(QEMU_KEY_RIGHT); break; case 125: kbd_put_keysym(QEMU_KEY_DOWN); break; case 126: kbd_put_keysym(QEMU_KEY_UP); break; default: kbd_put_keysym([[event characters] characterAtIndex:0]); break; } } } } break; case NSKeyUp: { int keycode = cocoa_keycode_to_qemu([event keyCode]); if (is_graphic_console()) { if (keycode & 0x80) kbd_put_keycode(0xe0); kbd_put_keycode(keycode | 0x80); //add 128 to signal release of key } } break; case NSMouseMoved: if (grab) { int dx = [event deltaX]; int dy = [event deltaY]; int dz = [event deltaZ]; int buttons = 0; kbd_mouse_event(dx, dy, dz, buttons); } break; case NSLeftMouseDown: if (grab) { int buttons = 0; /* leftclick+command simulates rightclick */ if ([event modifierFlags] & NSCommandKeyMask) { buttons |= MOUSE_EVENT_RBUTTON; } else { buttons |= MOUSE_EVENT_LBUTTON; } kbd_mouse_event(0, 0, 0, buttons); } else { [NSApp sendEvent: event]; } break; case NSLeftMouseDragged: if (grab) { int dx = [event deltaX]; int dy = [event deltaY]; int dz = [event deltaZ]; int buttons = 0; if ([[NSApp currentEvent] modifierFlags] & NSCommandKeyMask) { //leftclick+command simulates rightclick buttons |= MOUSE_EVENT_RBUTTON; } else { buttons |= MOUSE_EVENT_LBUTTON; } kbd_mouse_event(dx, dy, dz, buttons); } break; case NSLeftMouseUp: if (grab) { kbd_mouse_event(0, 0, 0, 0); } else { [window setTitle: @"QEMU (Press ctrl + alt to release Mouse)"]; [NSCursor hide]; CGAssociateMouseAndMouseCursorPosition ( FALSE ); grab = 1; //[NSApp sendEvent: event]; } break; case NSRightMouseDown: if (grab) { int buttons = 0; buttons |= MOUSE_EVENT_RBUTTON; kbd_mouse_event(0, 0, 0, buttons); } else { [NSApp sendEvent: event]; } break; case NSRightMouseDragged: if (grab) { int dx = [event deltaX]; int dy = [event deltaY]; int dz = [event deltaZ]; int buttons = 0; buttons |= MOUSE_EVENT_RBUTTON; kbd_mouse_event(dx, dy, dz, buttons); } break; case NSRightMouseUp: if (grab) { kbd_mouse_event(0, 0, 0, 0); } else { [NSApp sendEvent: event]; } break; case NSOtherMouseDragged: if (grab) { int dx = [event deltaX]; int dy = [event deltaY]; int dz = [event deltaZ]; int buttons = 0; buttons |= MOUSE_EVENT_MBUTTON; kbd_mouse_event(dx, dy, dz, buttons); } break; case NSOtherMouseDown: if (grab) { int buttons = 0; buttons |= MOUSE_EVENT_MBUTTON; kbd_mouse_event(0, 0, 0, buttons); } else { [NSApp sendEvent:event]; } break; case NSOtherMouseUp: if (grab) { kbd_mouse_event(0, 0, 0, 0); } else { [NSApp sendEvent: event]; } break; case NSScrollWheel: if (grab) { int dz = [event deltaY]; kbd_mouse_event(0, 0, -dz, 0); } break; default: [NSApp sendEvent:event]; } } } while(event != nil);}/* ------------------------------------------------------ cocoa_cleanup ------------------------------------------------------*/static void cocoa_cleanup(void) {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -