Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
qemu
提交
e58d12ed
Q
qemu
项目概览
openeuler
/
qemu
通知
10
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
Q
qemu
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
e58d12ed
编写于
7月 05, 2004
作者:
B
bellard
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Darwin patch
git-svn-id:
svn://svn.savannah.nongnu.org/qemu/trunk@982
c046a42c-6fe2-441c-8c8c-71466251a162
上级
d549f7d9
变更
1
显示空白变更内容
内联
并排
Showing
1 changed file
with
146 addition
and
16 deletion
+146
-16
sdl.c
sdl.c
+146
-16
未找到文件。
sdl.c
浏览文件 @
e58d12ed
...
...
@@ -29,6 +29,10 @@
#include <signal.h>
#endif
#if defined(__APPLE__)
#define CONFIG_SDL_GENERIC_KBD
#endif
static
SDL_Surface
*
screen
;
static
int
gui_grab
;
/* if true, all keyboard/mouse events are grabbed */
static
int
last_vm_running
;
...
...
@@ -63,6 +67,126 @@ static void sdl_resize(DisplayState *ds, int w, int h)
ds
->
depth
=
screen
->
format
->
BitsPerPixel
;
}
#ifdef CONFIG_SDL_GENERIC_KBD
/* XXX: use keymap tables defined in the VNC patch because the
following code suppose you have a US keyboard. */
static
const
uint8_t
scancodes
[
SDLK_LAST
]
=
{
[
SDLK_ESCAPE
]
=
0x01
,
[
SDLK_1
]
=
0x02
,
[
SDLK_2
]
=
0x03
,
[
SDLK_3
]
=
0x04
,
[
SDLK_4
]
=
0x05
,
[
SDLK_5
]
=
0x06
,
[
SDLK_6
]
=
0x07
,
[
SDLK_7
]
=
0x08
,
[
SDLK_8
]
=
0x09
,
[
SDLK_9
]
=
0x0a
,
[
SDLK_0
]
=
0x0b
,
[
SDLK_MINUS
]
=
0x0c
,
[
SDLK_EQUALS
]
=
0x0d
,
[
SDLK_BACKSPACE
]
=
0x0e
,
[
SDLK_TAB
]
=
0x0f
,
[
SDLK_q
]
=
0x10
,
[
SDLK_w
]
=
0x11
,
[
SDLK_e
]
=
0x12
,
[
SDLK_r
]
=
0x13
,
[
SDLK_t
]
=
0x14
,
[
SDLK_y
]
=
0x15
,
[
SDLK_u
]
=
0x16
,
[
SDLK_i
]
=
0x17
,
[
SDLK_o
]
=
0x18
,
[
SDLK_p
]
=
0x19
,
[
SDLK_LEFTBRACKET
]
=
0x1a
,
[
SDLK_RIGHTBRACKET
]
=
0x1b
,
[
SDLK_RETURN
]
=
0x1c
,
[
SDLK_LCTRL
]
=
0x1d
,
[
SDLK_a
]
=
0x1e
,
[
SDLK_s
]
=
0x1f
,
[
SDLK_d
]
=
0x20
,
[
SDLK_f
]
=
0x21
,
[
SDLK_g
]
=
0x22
,
[
SDLK_h
]
=
0x23
,
[
SDLK_j
]
=
0x24
,
[
SDLK_k
]
=
0x25
,
[
SDLK_l
]
=
0x26
,
[
SDLK_SEMICOLON
]
=
0x27
,
[
SDLK_QUOTE
]
=
0x28
,
[
SDLK_BACKQUOTE
]
=
0x29
,
[
SDLK_LSHIFT
]
=
0x2a
,
[
SDLK_BACKSLASH
]
=
0x2b
,
[
SDLK_z
]
=
0x2c
,
[
SDLK_x
]
=
0x2d
,
[
SDLK_c
]
=
0x2e
,
[
SDLK_v
]
=
0x2f
,
[
SDLK_b
]
=
0x30
,
[
SDLK_n
]
=
0x31
,
[
SDLK_m
]
=
0x32
,
[
SDLK_COMMA
]
=
0x33
,
[
SDLK_PERIOD
]
=
0x34
,
[
SDLK_SLASH
]
=
0x35
,
[
SDLK_KP_MULTIPLY
]
=
0x37
,
[
SDLK_LALT
]
=
0x38
,
[
SDLK_SPACE
]
=
0x39
,
[
SDLK_CAPSLOCK
]
=
0x3a
,
[
SDLK_F1
]
=
0x3b
,
[
SDLK_F2
]
=
0x3c
,
[
SDLK_F3
]
=
0x3d
,
[
SDLK_F4
]
=
0x3e
,
[
SDLK_F5
]
=
0x3f
,
[
SDLK_F6
]
=
0x40
,
[
SDLK_F7
]
=
0x41
,
[
SDLK_F8
]
=
0x42
,
[
SDLK_F9
]
=
0x43
,
[
SDLK_F10
]
=
0x44
,
[
SDLK_NUMLOCK
]
=
0x45
,
[
SDLK_SCROLLOCK
]
=
0x46
,
[
SDLK_KP7
]
=
0x47
,
[
SDLK_KP8
]
=
0x48
,
[
SDLK_KP9
]
=
0x49
,
[
SDLK_KP_MINUS
]
=
0x4a
,
[
SDLK_KP4
]
=
0x4b
,
[
SDLK_KP5
]
=
0x4c
,
[
SDLK_KP6
]
=
0x4d
,
[
SDLK_KP_PLUS
]
=
0x4e
,
[
SDLK_KP1
]
=
0x4f
,
[
SDLK_KP2
]
=
0x50
,
[
SDLK_KP3
]
=
0x51
,
[
SDLK_KP0
]
=
0x52
,
[
SDLK_KP_PERIOD
]
=
0x53
,
[
SDLK_PRINT
]
=
0x54
,
[
SDLK_LMETA
]
=
0x56
,
[
SDLK_KP_ENTER
]
=
0x9c
,
[
SDLK_KP_DIVIDE
]
=
0xb5
,
[
SDLK_UP
]
=
0xc8
,
[
SDLK_DOWN
]
=
0xd0
,
[
SDLK_RIGHT
]
=
0xcd
,
[
SDLK_LEFT
]
=
0xcb
,
[
SDLK_INSERT
]
=
0xd2
,
[
SDLK_HOME
]
=
0xc7
,
[
SDLK_END
]
=
0xcf
,
[
SDLK_PAGEUP
]
=
0xc9
,
[
SDLK_PAGEDOWN
]
=
0xd1
,
[
SDLK_DELETE
]
=
0xd3
,
};
static
uint8_t
sdl_keyevent_to_keycode
(
const
SDL_KeyboardEvent
*
ev
)
{
return
scancodes
[
ev
->
keysym
.
sym
];
}
#elif defined(_WIN32)
static
uint8_t
sdl_keyevent_to_keycode
(
const
SDL_KeyboardEvent
*
ev
)
{
return
ev
->
keysym
.
scancode
;
}
#else
static
const
uint8_t
x_keycode_to_pc_keycode
[
61
]
=
{
0xc7
,
/* 97 Home */
0xc8
,
/* 98 Up */
...
...
@@ -127,6 +251,27 @@ static const uint8_t x_keycode_to_pc_keycode[61] = {
0x53
,
/* 157 KP_Del */
};
static
uint8_t
sdl_keyevent_to_keycode
(
const
SDL_KeyboardEvent
*
ev
)
{
int
keycode
;
keycode
=
ev
->
keysym
.
scancode
;
if
(
keycode
<
9
)
{
keycode
=
0
;
}
else
if
(
keycode
<
97
)
{
keycode
-=
8
;
/* just an offset */
}
else
if
(
keycode
<
158
)
{
/* use conversion table */
keycode
=
x_keycode_to_pc_keycode
[
keycode
-
97
];
}
else
{
keycode
=
0
;
}
return
keycode
;
}
#endif
static
void
sdl_process_key
(
SDL_KeyboardEvent
*
ev
)
{
int
keycode
,
v
,
i
;
...
...
@@ -144,22 +289,7 @@ static void sdl_process_key(SDL_KeyboardEvent *ev)
}
/* XXX: not portable, but avoids complicated mappings */
keycode
=
ev
->
keysym
.
scancode
;
/* XXX: windows version may not work: 0xe0/0xe1 should be trapped
? */
#ifndef _WIN32
if
(
keycode
<
9
)
{
keycode
=
0
;
}
else
if
(
keycode
<
97
)
{
keycode
-=
8
;
/* just an offset */
}
else
if
(
keycode
<
158
)
{
/* use conversion table */
keycode
=
x_keycode_to_pc_keycode
[
keycode
-
97
];
}
else
{
keycode
=
0
;
}
#endif
keycode
=
sdl_keyevent_to_keycode
(
ev
);
switch
(
keycode
)
{
case
0x00
:
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录