Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
qemu
提交
87e487a1
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,发现更多精彩内容 >>
提交
87e487a1
编写于
6月 04, 2010
作者:
G
Gerd Hoffmann
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
console: QLIST-ify display change listeners.
Signed-off-by:
N
Gerd Hoffmann
<
kraxel@redhat.com
>
上级
286d52eb
变更
3
显示空白变更内容
内联
并排
Showing
3 changed file
with
42 addition
and
41 deletion
+42
-41
console.h
console.h
+38
-34
hw/xenfb.c
hw/xenfb.c
+1
-1
vl.c
vl.c
+3
-6
未找到文件。
console.h
浏览文件 @
87e487a1
...
...
@@ -164,7 +164,7 @@ struct DisplayChangeListener {
int
w
,
int
h
,
uint32_t
c
);
void
(
*
dpy_text_cursor
)(
struct
DisplayState
*
s
,
int
x
,
int
y
);
struct
DisplayChangeListener
*
next
;
QLIST_ENTRY
(
DisplayChangeListener
)
next
;
};
struct
DisplayAllocator
{
...
...
@@ -179,7 +179,7 @@ struct DisplayState {
struct
QEMUTimer
*
gui_timer
;
struct
DisplayAllocator
*
allocator
;
struct
DisplayChangeListener
*
listeners
;
QLIST_HEAD
(,
DisplayChangeListener
)
listeners
;
void
(
*
mouse_set
)(
int
x
,
int
y
,
int
on
);
void
(
*
cursor_define
)(
QEMUCursor
*
cursor
);
...
...
@@ -231,72 +231,76 @@ static inline int is_buffer_shared(DisplaySurface *surface)
static
inline
void
register_displaychangelistener
(
DisplayState
*
ds
,
DisplayChangeListener
*
dcl
)
{
dcl
->
next
=
ds
->
listeners
;
ds
->
listeners
=
dcl
;
QLIST_INSERT_HEAD
(
&
ds
->
listeners
,
dcl
,
next
);
}
static
inline
void
dpy_update
(
DisplayState
*
s
,
int
x
,
int
y
,
int
w
,
int
h
)
{
struct
DisplayChangeListener
*
dcl
=
s
->
listeners
;
while
(
dcl
!=
NULL
)
{
struct
DisplayChangeListener
*
dcl
;
QLIST_FOREACH
(
dcl
,
&
s
->
listeners
,
next
)
{
dcl
->
dpy_update
(
s
,
x
,
y
,
w
,
h
);
dcl
=
dcl
->
next
;
}
}
static
inline
void
dpy_resize
(
DisplayState
*
s
)
{
struct
DisplayChangeListener
*
dcl
=
s
->
listeners
;
while
(
dcl
!=
NULL
)
{
struct
DisplayChangeListener
*
dcl
;
QLIST_FOREACH
(
dcl
,
&
s
->
listeners
,
next
)
{
dcl
->
dpy_resize
(
s
);
dcl
=
dcl
->
next
;
}
}
static
inline
void
dpy_setdata
(
DisplayState
*
s
)
{
struct
DisplayChangeListener
*
dcl
=
s
->
listeners
;
while
(
dcl
!=
NULL
)
{
if
(
dcl
->
dpy_setdata
)
dcl
->
dpy_setdata
(
s
);
dcl
=
dcl
->
next
;
struct
DisplayChangeListener
*
dcl
;
QLIST_FOREACH
(
dcl
,
&
s
->
listeners
,
next
)
{
if
(
dcl
->
dpy_setdata
)
{
dcl
->
dpy_setdata
(
s
);
}
}
}
static
inline
void
dpy_refresh
(
DisplayState
*
s
)
{
struct
DisplayChangeListener
*
dcl
=
s
->
listeners
;
while
(
dcl
!=
NULL
)
{
if
(
dcl
->
dpy_refresh
)
dcl
->
dpy_refresh
(
s
);
dcl
=
dcl
->
next
;
struct
DisplayChangeListener
*
dcl
;
QLIST_FOREACH
(
dcl
,
&
s
->
listeners
,
next
)
{
if
(
dcl
->
dpy_refresh
)
{
dcl
->
dpy_refresh
(
s
);
}
}
}
static
inline
void
dpy_copy
(
struct
DisplayState
*
s
,
int
src_x
,
int
src_y
,
int
dst_x
,
int
dst_y
,
int
w
,
int
h
)
{
struct
DisplayChangeListener
*
dcl
=
s
->
listeners
;
while
(
dcl
!=
NULL
)
{
if
(
dcl
->
dpy_copy
)
int
dst_x
,
int
dst_y
,
int
w
,
int
h
)
{
struct
DisplayChangeListener
*
dcl
;
QLIST_FOREACH
(
dcl
,
&
s
->
listeners
,
next
)
{
if
(
dcl
->
dpy_copy
)
{
dcl
->
dpy_copy
(
s
,
src_x
,
src_y
,
dst_x
,
dst_y
,
w
,
h
);
else
/* TODO */
}
else
{
/* TODO */
dcl
->
dpy_update
(
s
,
dst_x
,
dst_y
,
w
,
h
);
dcl
=
dcl
->
next
;
}
}
}
static
inline
void
dpy_fill
(
struct
DisplayState
*
s
,
int
x
,
int
y
,
int
w
,
int
h
,
uint32_t
c
)
{
struct
DisplayChangeListener
*
dcl
=
s
->
listeners
;
while
(
dcl
!=
NULL
)
{
if
(
dcl
->
dpy_fill
)
dcl
->
dpy_fill
(
s
,
x
,
y
,
w
,
h
,
c
);
dcl
=
dcl
->
next
;
int
w
,
int
h
,
uint32_t
c
)
{
struct
DisplayChangeListener
*
dcl
;
QLIST_FOREACH
(
dcl
,
&
s
->
listeners
,
next
)
{
if
(
dcl
->
dpy_fill
)
{
dcl
->
dpy_fill
(
s
,
x
,
y
,
w
,
h
,
c
);
}
}
}
static
inline
void
dpy_cursor
(
struct
DisplayState
*
s
,
int
x
,
int
y
)
{
struct
DisplayChangeListener
*
dcl
=
s
->
listeners
;
while
(
dcl
!=
NULL
)
{
if
(
dcl
->
dpy_text_cursor
)
dcl
->
dpy_text_cursor
(
s
,
x
,
y
);
dcl
=
dcl
->
next
;
static
inline
void
dpy_cursor
(
struct
DisplayState
*
s
,
int
x
,
int
y
)
{
struct
DisplayChangeListener
*
dcl
;
QLIST_FOREACH
(
dcl
,
&
s
->
listeners
,
next
)
{
if
(
dcl
->
dpy_text_cursor
)
{
dcl
->
dpy_text_cursor
(
s
,
x
,
y
);
}
}
}
...
...
hw/xenfb.c
浏览文件 @
87e487a1
...
...
@@ -717,7 +717,7 @@ static void xenfb_update(void *opaque)
if
(
xenfb_queue_full
(
xenfb
))
return
;
for
(
l
=
xenfb
->
c
.
ds
->
listeners
;
l
!=
NULL
;
l
=
l
->
next
)
{
QLIST_FOREACH
(
l
,
&
xenfb
->
c
.
ds
->
listeners
,
next
)
{
if
(
l
->
idle
)
continue
;
idle
=
0
;
...
...
vl.c
浏览文件 @
87e487a1
...
...
@@ -1359,15 +1359,14 @@ static void gui_update(void *opaque)
{
uint64_t
interval
=
GUI_REFRESH_INTERVAL
;
DisplayState
*
ds
=
opaque
;
DisplayChangeListener
*
dcl
=
ds
->
listeners
;
DisplayChangeListener
*
dcl
;
dpy_refresh
(
ds
);
while
(
dcl
!=
NULL
)
{
QLIST_FOREACH
(
dcl
,
&
ds
->
listeners
,
next
)
{
if
(
dcl
->
gui_timer_interval
&&
dcl
->
gui_timer_interval
<
interval
)
interval
=
dcl
->
gui_timer_interval
;
dcl
=
dcl
->
next
;
}
qemu_mod_timer
(
ds
->
gui_timer
,
interval
+
qemu_get_clock_ms
(
rt_clock
));
}
...
...
@@ -3846,14 +3845,12 @@ int main(int argc, char **argv, char **envp)
/* display setup */
dpy_resize
(
ds
);
dcl
=
ds
->
listeners
;
while
(
dcl
!=
NULL
)
{
QLIST_FOREACH
(
dcl
,
&
ds
->
listeners
,
next
)
{
if
(
dcl
->
dpy_refresh
!=
NULL
)
{
ds
->
gui_timer
=
qemu_new_timer_ms
(
rt_clock
,
gui_update
,
ds
);
qemu_mod_timer
(
ds
->
gui_timer
,
qemu_get_clock_ms
(
rt_clock
));
break
;
}
dcl
=
dcl
->
next
;
}
text_consoles_set_display
(
ds
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录