Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
qemu
提交
3ab193e6
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看板
体验新版 GitCode,发现更多精彩内容 >>
提交
3ab193e6
编写于
11月 28, 2013
作者:
G
Gerd Hoffmann
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
input: mouse: switch sdl ui to new core
Signed-off-by:
N
Gerd Hoffmann
<
kraxel@redhat.com
>
上级
192f81bf
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
39 addition
and
45 deletion
+39
-45
ui/sdl.c
ui/sdl.c
+39
-45
未找到文件。
ui/sdl.c
浏览文件 @
3ab193e6
...
...
@@ -351,7 +351,7 @@ static void sdl_hide_cursor(void)
if
(
!
cursor_hide
)
return
;
if
(
kbd_mouse
_is_absolute
())
{
if
(
qemu_input
_is_absolute
())
{
SDL_ShowCursor
(
1
);
SDL_SetCursor
(
sdl_cursor_hidden
);
}
else
{
...
...
@@ -364,10 +364,10 @@ static void sdl_show_cursor(void)
if
(
!
cursor_hide
)
return
;
if
(
!
kbd_mouse
_is_absolute
()
||
!
qemu_console_is_graphic
(
NULL
))
{
if
(
!
qemu_input
_is_absolute
()
||
!
qemu_console_is_graphic
(
NULL
))
{
SDL_ShowCursor
(
1
);
if
(
guest_cursor
&&
(
gui_grab
||
kbd_mouse
_is_absolute
()
||
absolute_enabled
))
(
gui_grab
||
qemu_input
_is_absolute
()
||
absolute_enabled
))
SDL_SetCursor
(
guest_sprite
);
else
SDL_SetCursor
(
sdl_cursor_normal
);
...
...
@@ -386,8 +386,9 @@ static void sdl_grab_start(void)
}
if
(
guest_cursor
)
{
SDL_SetCursor
(
guest_sprite
);
if
(
!
kbd_mouse_is_absolute
()
&&
!
absolute_enabled
)
if
(
!
qemu_input_is_absolute
()
&&
!
absolute_enabled
)
{
SDL_WarpMouse
(
guest_x
,
guest_y
);
}
}
else
sdl_hide_cursor
();
SDL_WM_GrabInput
(
SDL_GRAB_ON
);
...
...
@@ -416,7 +417,7 @@ static void absolute_mouse_grab(void)
static
void
sdl_mouse_mode_change
(
Notifier
*
notify
,
void
*
data
)
{
if
(
kbd_mouse
_is_absolute
())
{
if
(
qemu_input
_is_absolute
())
{
if
(
!
absolute_enabled
)
{
absolute_enabled
=
1
;
if
(
qemu_console_is_graphic
(
NULL
))
{
...
...
@@ -431,33 +432,36 @@ static void sdl_mouse_mode_change(Notifier *notify, void *data)
}
}
static
void
sdl_send_mouse_event
(
int
dx
,
int
dy
,
int
dz
,
int
x
,
int
y
,
int
state
)
static
void
sdl_send_mouse_event
(
int
dx
,
int
dy
,
int
x
,
int
y
,
int
state
)
{
int
buttons
=
0
;
if
(
state
&
SDL_BUTTON
(
SDL_BUTTON_LEFT
))
{
buttons
|=
MOUSE_EVENT_LBUTTON
;
}
if
(
state
&
SDL_BUTTON
(
SDL_BUTTON_RIGHT
))
{
buttons
|=
MOUSE_EVENT_RBUTTON
;
}
if
(
state
&
SDL_BUTTON
(
SDL_BUTTON_MIDDLE
))
{
buttons
|=
MOUSE_EVENT_MBUTTON
;
}
if
(
kbd_mouse_is_absolute
())
{
dx
=
x
*
0x7FFF
/
(
real_screen
->
w
-
1
);
dy
=
y
*
0x7FFF
/
(
real_screen
->
h
-
1
);
static
uint32_t
bmap
[
INPUT_BUTTON_MAX
]
=
{
[
INPUT_BUTTON_LEFT
]
=
SDL_BUTTON
(
SDL_BUTTON_LEFT
),
[
INPUT_BUTTON_MIDDLE
]
=
SDL_BUTTON
(
SDL_BUTTON_MIDDLE
),
[
INPUT_BUTTON_RIGHT
]
=
SDL_BUTTON
(
SDL_BUTTON_RIGHT
),
[
INPUT_BUTTON_WHEEL_UP
]
=
SDL_BUTTON
(
SDL_BUTTON_WHEELUP
),
[
INPUT_BUTTON_WHEEL_DOWN
]
=
SDL_BUTTON
(
SDL_BUTTON_WHEELDOWN
),
};
static
uint32_t
prev_state
;
if
(
prev_state
!=
state
)
{
qemu_input_update_buttons
(
dcl
->
con
,
bmap
,
prev_state
,
state
);
prev_state
=
state
;
}
if
(
qemu_input_is_absolute
())
{
qemu_input_queue_abs
(
dcl
->
con
,
INPUT_AXIS_X
,
x
,
real_screen
->
w
);
qemu_input_queue_abs
(
dcl
->
con
,
INPUT_AXIS_Y
,
y
,
real_screen
->
h
);
}
else
if
(
guest_cursor
)
{
x
-=
guest_x
;
y
-=
guest_y
;
guest_x
+=
x
;
guest_y
+=
y
;
dx
=
x
;
dy
=
y
;
qemu_input_queue_rel
(
dcl
->
con
,
INPUT_AXIS_X
,
x
)
;
qemu_input_queue_rel
(
dcl
->
con
,
INPUT_AXIS_Y
,
y
)
;
}
kbd_mouse_event
(
dx
,
dy
,
dz
,
buttons
);
qemu_input_event_sync
();
}
static
void
sdl_scale
(
int
width
,
int
height
)
...
...
@@ -685,7 +689,7 @@ static void handle_mousemotion(SDL_Event *ev)
int
max_x
,
max_y
;
if
(
qemu_console_is_graphic
(
NULL
)
&&
(
kbd_mouse
_is_absolute
()
||
absolute_enabled
))
{
(
qemu_input
_is_absolute
()
||
absolute_enabled
))
{
max_x
=
real_screen
->
w
-
1
;
max_y
=
real_screen
->
h
-
1
;
if
(
gui_grab
&&
(
ev
->
motion
.
x
==
0
||
ev
->
motion
.
y
==
0
||
...
...
@@ -698,8 +702,8 @@ static void handle_mousemotion(SDL_Event *ev)
sdl_grab_start
();
}
}
if
(
gui_grab
||
kbd_mouse
_is_absolute
()
||
absolute_enabled
)
{
sdl_send_mouse_event
(
ev
->
motion
.
xrel
,
ev
->
motion
.
yrel
,
0
,
if
(
gui_grab
||
qemu_input
_is_absolute
()
||
absolute_enabled
)
{
sdl_send_mouse_event
(
ev
->
motion
.
xrel
,
ev
->
motion
.
yrel
,
ev
->
motion
.
x
,
ev
->
motion
.
y
,
ev
->
motion
.
state
);
}
}
...
...
@@ -708,35 +712,24 @@ static void handle_mousebutton(SDL_Event *ev)
{
int
buttonstate
=
SDL_GetMouseState
(
NULL
,
NULL
);
SDL_MouseButtonEvent
*
bev
;
int
dz
;
if
(
!
qemu_console_is_graphic
(
NULL
))
{
return
;
}
bev
=
&
ev
->
button
;
if
(
!
gui_grab
&&
!
kbd_mouse
_is_absolute
())
{
if
(
!
gui_grab
&&
!
qemu_input
_is_absolute
())
{
if
(
ev
->
type
==
SDL_MOUSEBUTTONUP
&&
bev
->
button
==
SDL_BUTTON_LEFT
)
{
/* start grabbing all events */
sdl_grab_start
();
}
}
else
{
dz
=
0
;
if
(
ev
->
type
==
SDL_MOUSEBUTTONDOWN
)
{
buttonstate
|=
SDL_BUTTON
(
bev
->
button
);
}
else
{
buttonstate
&=
~
SDL_BUTTON
(
bev
->
button
);
}
#ifdef SDL_BUTTON_WHEELUP
if
(
bev
->
button
==
SDL_BUTTON_WHEELUP
&&
ev
->
type
==
SDL_MOUSEBUTTONDOWN
)
{
dz
=
-
1
;
}
else
if
(
bev
->
button
==
SDL_BUTTON_WHEELDOWN
&&
ev
->
type
==
SDL_MOUSEBUTTONDOWN
)
{
dz
=
1
;
}
#endif
sdl_send_mouse_event
(
0
,
0
,
dz
,
bev
->
x
,
bev
->
y
,
buttonstate
);
sdl_send_mouse_event
(
0
,
0
,
bev
->
x
,
bev
->
y
,
buttonstate
);
}
}
...
...
@@ -751,7 +744,7 @@ static void handle_activation(SDL_Event *ev)
}
#endif
if
(
!
gui_grab
&&
ev
->
active
.
gain
&&
qemu_console_is_graphic
(
NULL
)
&&
(
kbd_mouse
_is_absolute
()
||
absolute_enabled
))
{
(
qemu_input
_is_absolute
()
||
absolute_enabled
))
{
absolute_mouse_grab
();
}
if
(
ev
->
active
.
state
&
SDL_APPACTIVE
)
{
...
...
@@ -823,10 +816,11 @@ static void sdl_mouse_warp(DisplayChangeListener *dcl,
if
(
on
)
{
if
(
!
guest_cursor
)
sdl_show_cursor
();
if
(
gui_grab
||
kbd_mouse
_is_absolute
()
||
absolute_enabled
)
{
if
(
gui_grab
||
qemu_input
_is_absolute
()
||
absolute_enabled
)
{
SDL_SetCursor
(
guest_sprite
);
if
(
!
kbd_mouse_is_absolute
()
&&
!
absolute_enabled
)
if
(
!
qemu_input_is_absolute
()
&&
!
absolute_enabled
)
{
SDL_WarpMouse
(
x
,
y
);
}
}
}
else
if
(
gui_grab
)
sdl_hide_cursor
();
...
...
@@ -854,7 +848,7 @@ static void sdl_mouse_define(DisplayChangeListener *dcl,
g_free
(
mask
);
if
(
guest_cursor
&&
(
gui_grab
||
kbd_mouse
_is_absolute
()
||
absolute_enabled
))
(
gui_grab
||
qemu_input
_is_absolute
()
||
absolute_enabled
))
SDL_SetCursor
(
guest_sprite
);
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录