Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
weixin_46254178
rt-thread
提交
c4e8c922
R
rt-thread
项目概览
weixin_46254178
/
rt-thread
与 Fork 源项目一致
Fork自
RT-Thread / rt-thread
通知
1
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
rt-thread
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
c4e8c922
编写于
1月 02, 2018
作者:
Y
yangfasheng
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
gui 引擎已知问题优化修复;
上级
2c145743
变更
10
隐藏空白更改
内联
并排
Showing
10 changed file
with
142 addition
and
56 deletion
+142
-56
components/gui/include/rtgui/event.h
components/gui/include/rtgui/event.h
+7
-1
components/gui/include/rtgui/rtgui_app.h
components/gui/include/rtgui/rtgui_app.h
+5
-0
components/gui/include/rtgui/widgets/window.h
components/gui/include/rtgui/widgets/window.h
+10
-7
components/gui/src/dc.c
components/gui/src/dc.c
+18
-4
components/gui/src/dc_hw.c
components/gui/src/dc_hw.c
+0
-10
components/gui/src/font_bmp.c
components/gui/src/font_bmp.c
+1
-1
components/gui/src/rtgui_app.c
components/gui/src/rtgui_app.c
+76
-26
components/gui/src/topwin.c
components/gui/src/topwin.c
+19
-4
components/gui/src/topwin.h
components/gui/src/topwin.h
+3
-0
components/gui/src/window.c
components/gui/src/window.c
+3
-3
未找到文件。
components/gui/include/rtgui/event.h
浏览文件 @
c4e8c922
...
...
@@ -329,7 +329,7 @@ enum rtgui_gesture_type
RTGUI_GESTURE_PINCH
=
0x0002
,
RTGUI_GESTURE_DRAG
=
0x0004
,
RTGUI_GESTURE_LONGPRESS
=
0x0008
,
RTGUI_GESTURE_DRAGGED
=
0x0001
|
0x0004
|
0x0008
,
RTGUI_GESTURE_DRAGGED
=
0x0001
|
0x0004
|
0x0008
,
/* PINCH, DRAG finished. */
RTGUI_GESTURE_FINISH
=
0x8000
,
/* The corresponding gesture should be canceled. */
...
...
@@ -342,6 +342,8 @@ struct rtgui_event_gesture
_RTGUI_EVENT_WIN_ELEMENTS
enum
rtgui_gesture_type
type
;
rt_uint32_t
win_acti_cnt
;
/* win id */
};
/*
...
...
@@ -359,6 +361,8 @@ struct rtgui_event_mouse
/* id of touch session(from down to up). Different session should have
* different id. id should never be 0. */
rt_uint32_t
id
;
rt_uint32_t
win_acti_cnt
;
/* win id */
};
#define RTGUI_MOUSE_BUTTON_LEFT 0x01
#define RTGUI_MOUSE_BUTTON_RIGHT 0x02
...
...
@@ -379,6 +383,8 @@ struct rtgui_event_kbd
{
_RTGUI_EVENT_WIN_ELEMENTS
rt_uint32_t
win_acti_cnt
;
/* win id */
rt_uint16_t
type
;
/* key down or up */
rt_uint16_t
key
;
/* current key */
rt_uint16_t
mod
;
/* current key modifiers */
...
...
components/gui/include/rtgui/rtgui_app.h
浏览文件 @
c4e8c922
...
...
@@ -81,6 +81,8 @@ struct rtgui_app
rtgui_idle_func_t
on_idle
;
unsigned
int
window_cnt
;
/* window activate count */
unsigned
int
win_acti_cnt
;
void
*
user_data
;
};
...
...
@@ -115,6 +117,9 @@ rt_err_t rtgui_app_set_as_wm(struct rtgui_app *app);
void
rtgui_app_set_main_win
(
struct
rtgui_app
*
app
,
struct
rtgui_win
*
win
);
struct
rtgui_win
*
rtgui_app_get_main_win
(
struct
rtgui_app
*
app
);
/* get the topwin belong app window activate count */
unsigned
int
rtgui_app_get_win_acti_cnt
(
void
);
#ifdef __cplusplus
}
#endif
...
...
components/gui/include/rtgui/widgets/window.h
浏览文件 @
c4e8c922
...
...
@@ -54,6 +54,8 @@ DECLARE_CLASS_TYPE(win);
#define RTGUI_WIN_STYLE_ONBTM 0x0080
/* window is in the bottom layer */
#define RTGUI_WIN_STYLE_MAINWIN 0x0106
/* window is a main window */
#define RTGUI_WIN_MAGIC 0xA5A55A5A
/* win magic flag */
#define RTGUI_WIN_STYLE_DEFAULT (RTGUI_WIN_STYLE_CLOSEBOX | RTGUI_WIN_STYLE_MINIBOX)
#define WINTITLE_HEIGHT 20
...
...
@@ -88,8 +90,8 @@ struct rtgui_win
/* inherit from container */
rtgui_container_t
parent
;
/* update count */
rt_base_t
update
;
/* update count */
rt_base_t
update
;
/* drawing count */
rt_base_t
drawing
;
...
...
@@ -140,11 +142,12 @@ struct rtgui_win
/* Private data. */
rt_base_t
(
*
_do_show
)(
struct
rtgui_win
*
win
);
/* app ref_count */
rt_uint16_t
app_ref_count
;
/* win magic flag, magic value is 0xA5A55A5A */
rt_uint32_t
magic
;
/* app ref_count */
rt_uint16_t
app_ref_count
;
/* win magic flag, magic value is 0xA5A55A5A */
rt_uint32_t
magic
;
};
rtgui_win_t
*
rtgui_win_create
(
struct
rtgui_win
*
parent_window
,
const
char
*
title
,
...
...
components/gui/src/dc.c
浏览文件 @
c4e8c922
...
...
@@ -324,9 +324,9 @@ void rtgui_dc_draw_text(struct rtgui_dc *dc, const char *text, struct rtgui_rect
}
len
=
strlen
((
const
char
*
)
text
);
if
(
len
==
0
)
return
;
if
(
len
==
0
)
return
;
rtgui_font_draw
(
font
,
dc
,
text
,
len
,
rect
);
}
RTM_EXPORT
(
rtgui_dc_draw_text
);
...
...
@@ -1689,6 +1689,13 @@ void rtgui_dc_get_rect(struct rtgui_dc *dc, rtgui_rect_t *rect)
dc_hw
=
(
struct
rtgui_dc_hw
*
)
dc
;
owner
=
dc_hw
->
owner
;
rtgui_widget_get_rect
(
owner
,
rect
);
if
(
owner
->
extent
.
x1
+
rect
->
x2
>
dc_hw
->
hw_driver
->
width
)
rect
->
x2
=
dc_hw
->
hw_driver
->
width
-
owner
->
extent
.
x1
;
if
(
owner
->
extent
.
y1
+
rect
->
y2
>
dc_hw
->
hw_driver
->
height
)
rect
->
y2
=
dc_hw
->
hw_driver
->
height
-
owner
->
extent
.
y1
;
break
;
}
case
RTGUI_DC_BUFFER
:
...
...
@@ -1806,7 +1813,7 @@ extern void rtgui_mouse_hide_cursor(void);
struct
rtgui_dc
*
rtgui_dc_begin_drawing
(
rtgui_widget_t
*
owner
)
{
struct
rtgui_dc
*
dc
;
struct
rtgui_widget
*
widget
;
struct
rtgui_widget
*
widget
,
*
parent
;
struct
rtgui_win
*
win
;
RT_ASSERT
(
owner
!=
RT_NULL
);
...
...
@@ -1815,11 +1822,18 @@ struct rtgui_dc *rtgui_dc_begin_drawing(rtgui_widget_t *owner)
if
(
win
==
RT_NULL
)
return
RT_NULL
;
parent
=
(
struct
rtgui_widget
*
)
win
;
if
(
!
(
win
->
flag
&
RTGUI_WIN_FLAG_ACTIVATE
)
&&
(
win
->
outer_clip
.
extents
.
x1
==
win
->
outer_clip
.
extents
.
x2
||
win
->
outer_clip
.
extents
.
y1
==
win
->
outer_clip
.
extents
.
y2
))
return
RT_NULL
;
if
(
!
(
win
->
flag
&
RTGUI_WIN_FLAG_ACTIVATE
)
&&
(
parent
->
clip
.
extents
.
x1
==
parent
->
clip
.
extents
.
x2
||
parent
->
clip
.
extents
.
y1
==
parent
->
clip
.
extents
.
y2
))
return
RT_NULL
;
/* increase drawing count */
if
(
win
->
drawing
==
0
)
{
...
...
components/gui/src/dc_hw.c
浏览文件 @
c4e8c922
...
...
@@ -216,32 +216,22 @@ static void rtgui_dc_hw_fill_rect(struct rtgui_dc *self, struct rtgui_rect *rect
return
;
if
(
x1
<
dc
->
owner
->
extent
.
x1
)
x1
=
dc
->
owner
->
extent
.
x1
;
if
(
x1
<
0
)
x1
=
0
;
x2
=
rect
->
x2
+
dc
->
owner
->
extent
.
x1
;
if
(
x2
<
dc
->
owner
->
extent
.
x1
)
return
;
if
(
x2
>
dc
->
owner
->
extent
.
x2
)
x2
=
dc
->
owner
->
extent
.
x2
;
if
(
x2
>
dc
->
hw_driver
->
width
)
x2
=
dc
->
hw_driver
->
width
;
y1
=
rect
->
y1
+
dc
->
owner
->
extent
.
y1
;
if
(
y1
>
dc
->
owner
->
extent
.
y2
)
return
;
if
(
y1
<
dc
->
owner
->
extent
.
y1
)
y1
=
dc
->
owner
->
extent
.
y1
;
if
(
y1
<
0
)
y1
=
0
;
y2
=
rect
->
y2
+
dc
->
owner
->
extent
.
y1
;
if
(
y2
<
dc
->
owner
->
extent
.
y1
)
return
;
if
(
y2
>
dc
->
owner
->
extent
.
y2
)
y2
=
dc
->
owner
->
extent
.
y2
;
if
(
y2
>
dc
->
hw_driver
->
height
)
y2
=
dc
->
hw_driver
->
height
;
/* fill rect */
for
(;
y1
<
y2
;
y1
++
)
...
...
components/gui/src/font_bmp.c
浏览文件 @
c4e8c922
...
...
@@ -103,7 +103,7 @@ static void rtgui_bitmap_font_draw_text(struct rtgui_font *font, struct rtgui_dc
RT_ASSERT
(
bmp_font
!=
RT_NULL
);
rtgui_font_get_metrics
(
rtgui_dc_get_gc
(
dc
)
->
font
,
text
,
&
text_rect
);
rtgui_font_get_metrics
(
font
,
text
,
&
text_rect
);
rtgui_rect_move_to_align
(
rect
,
&
text_rect
,
RTGUI_DC_TEXTALIGN
(
dc
));
/* parameter check */
...
...
components/gui/src/rtgui_app.c
浏览文件 @
c4e8c922
...
...
@@ -29,7 +29,7 @@
#include <rtgui/rtgui_system.h>
#include <rtgui/rtgui_app.h>
#include <rtgui/widgets/window.h>
#include
"topwin.h"
#include
<topwin.h>
static
void
_rtgui_app_constructor
(
struct
rtgui_app
*
app
)
{
...
...
@@ -43,6 +43,7 @@ static void _rtgui_app_constructor(struct rtgui_app *app)
app
->
state_flag
=
RTGUI_APP_FLAG_EXITED
;
app
->
ref_count
=
0
;
app
->
window_cnt
=
0
;
app
->
win_acti_cnt
=
0
;
app
->
exit_code
=
0
;
app
->
tid
=
RT_NULL
;
app
->
mq
=
RT_NULL
;
...
...
@@ -203,11 +204,11 @@ rt_inline rt_bool_t _rtgui_application_dest_handle(
if
(
wevent
->
wid
==
RT_NULL
)
return
RT_FALSE
;
if
(
wevent
->
wid
->
magic
!=
0xA5A55A5A
)
{
return
RT_FALSE
;
}
if
(
wevent
->
wid
->
magic
!=
RTGUI_WIN_MAGIC
)
{
return
RT_FALSE
;
}
/* this window has been closed. */
if
(
wevent
->
wid
!=
RT_NULL
&&
wevent
->
wid
->
flag
&
RTGUI_WIN_FLAG_CLOSED
)
...
...
@@ -249,19 +250,55 @@ rt_bool_t rtgui_app_event_handler(struct rtgui_object *object, rtgui_event_t *ev
switch
(
event
->
type
)
{
case
RTGUI_EVENT_PAINT
:
case
RTGUI_EVENT_VPAINT_REQ
:
case
RTGUI_EVENT_KBD
:
{
struct
rtgui_event_kbd
*
kbd
=
(
struct
rtgui_event_kbd
*
)
event
;
if
(
kbd
->
win_acti_cnt
!=
app
->
win_acti_cnt
)
break
;
_rtgui_application_dest_handle
(
app
,
event
);
}
break
;
case
RTGUI_EVENT_MOUSE_BUTTON
:
case
RTGUI_EVENT_MOUSE_MOTION
:
case
RTGUI_EVENT_CLIP_INFO
:
{
struct
rtgui_event_mouse
*
wevent
=
(
struct
rtgui_event_mouse
*
)
event
;
if
(
wevent
->
win_acti_cnt
!=
app
->
win_acti_cnt
)
break
;
_rtgui_application_dest_handle
(
app
,
event
);
}
break
;
case
RTGUI_EVENT_GESTURE
:
{
struct
rtgui_event_gesture
*
wevent
=
(
struct
rtgui_event_gesture
*
)
event
;
if
(
wevent
->
win_acti_cnt
!=
app
->
win_acti_cnt
)
break
;
_rtgui_application_dest_handle
(
app
,
event
);
}
break
;
case
RTGUI_EVENT_WIN_ACTIVATE
:
{
app
->
win_acti_cnt
++
;
_rtgui_application_dest_handle
(
app
,
event
);
}
break
;
case
RTGUI_EVENT_PAINT
:
case
RTGUI_EVENT_VPAINT_REQ
:
case
RTGUI_EVENT_CLIP_INFO
:
case
RTGUI_EVENT_WIN_DEACTIVATE
:
case
RTGUI_EVENT_WIN_CLOSE
:
case
RTGUI_EVENT_WIN_MOVE
:
case
RTGUI_EVENT_WIN_SHOW
:
case
RTGUI_EVENT_WIN_HIDE
:
case
RTGUI_EVENT_KBD
:
case
RTGUI_EVENT_GESTURE
:
_rtgui_application_dest_handle
(
app
,
event
);
break
;
...
...
@@ -284,14 +321,14 @@ rt_bool_t rtgui_app_event_handler(struct rtgui_object *object, rtgui_event_t *ev
case
RTGUI_EVENT_TIMER
:
{
rt_base_t
level
;
rt_base_t
level
;
struct
rtgui_timer
*
timer
;
struct
rtgui_event_timer
*
etimer
=
(
struct
rtgui_event_timer
*
)
event
;
timer
=
etimer
->
timer
;
level
=
rt_hw_interrupt_disable
();
level
=
rt_hw_interrupt_disable
();
timer
->
pending_cnt
--
;
rt_hw_interrupt_enable
(
level
);
rt_hw_interrupt_enable
(
level
);
RT_ASSERT
(
timer
->
pending_cnt
>=
0
);
if
(
timer
->
state
==
RTGUI_TIMER_ST_DESTROY_PENDING
)
{
...
...
@@ -320,21 +357,21 @@ rt_bool_t rtgui_app_event_handler(struct rtgui_object *object, rtgui_event_t *ev
if
(
ecmd
->
wid
!=
RT_NULL
)
return
_rtgui_application_dest_handle
(
app
,
event
);
else
{
struct
rtgui_topwin
*
wnd
;
else
{
struct
rtgui_topwin
*
wnd
;
wnd
=
rtgui_topwin_get_focus
();
if
(
wnd
!=
RT_NULL
)
{
RT_ASSERT
(
wnd
->
flag
&
WINTITLE_ACTIVATE
)
wnd
=
rtgui_topwin_get_focus
();
if
(
wnd
!=
RT_NULL
)
{
RT_ASSERT
(
wnd
->
flag
&
WINTITLE_ACTIVATE
)
/* send to focus window */
ecmd
->
wid
=
wnd
->
wid
;
/* send to focus window */
ecmd
->
wid
=
wnd
->
wid
;
return
_rtgui_application_dest_handle
(
app
,
event
);
}
}
return
_rtgui_application_dest_handle
(
app
,
event
);
}
}
}
default:
return
rtgui_object_event_handler
(
object
,
event
);
...
...
@@ -507,3 +544,16 @@ struct rtgui_win *rtgui_app_get_main_win(struct rtgui_app *app)
}
RTM_EXPORT
(
rtgui_app_get_main_win
);
unsigned
int
rtgui_app_get_win_acti_cnt
(
void
)
{
struct
rtgui_app
*
app
=
rtgui_topwin_app_get_focus
();
if
(
app
)
{
return
app
->
win_acti_cnt
;
}
return
0
;
}
RTM_EXPORT
(
rtgui_app_get_win_acti_cnt
);
components/gui/src/topwin.c
浏览文件 @
c4e8c922
...
...
@@ -764,7 +764,7 @@ rt_err_t rtgui_topwin_move(struct rtgui_event_win_move *event)
old_rect
=
topwin
->
extent
;
/* move window rect */
rtgui_rect_move
(
&
(
topwin
->
extent
),
dx
,
dy
);
rtgui_rect_move
(
&
(
topwin
->
extent
),
dx
,
dy
);
/* move the monitor rect list */
rtgui_list_foreach
(
node
,
&
(
topwin
->
monitor_list
))
...
...
@@ -772,7 +772,7 @@ rt_err_t rtgui_topwin_move(struct rtgui_event_win_move *event)
struct
rtgui_mouse_monitor
*
monitor
=
rtgui_list_entry
(
node
,
struct
rtgui_mouse_monitor
,
list
);
rtgui_rect_move
(
&
(
monitor
->
rect
),
dx
,
dy
);
rtgui_rect_move
(
&
(
monitor
->
rect
),
dx
,
dy
);
}
/* update windows clip info */
...
...
@@ -853,6 +853,19 @@ struct rtgui_topwin *rtgui_topwin_get_focus(void)
return
_rtgui_topwin_get_focus_from_list
(
&
_rtgui_topwin_list
);
}
struct
rtgui_app
*
rtgui_topwin_app_get_focus
(
void
)
{
struct
rtgui_app
*
topwin_app
=
RT_NULL
;
struct
rtgui_topwin
*
topwin
=
rtgui_topwin_get_focus
();
if
(
topwin
)
{
topwin_app
=
topwin
->
app
;
}
return
topwin_app
;
}
static
struct
rtgui_topwin
*
_rtgui_topwin_get_wnd_from_tree
(
struct
rt_list_node
*
list
,
int
x
,
int
y
,
rt_bool_t
exclude_modaled
)
...
...
@@ -978,7 +991,8 @@ static void _rtgui_topwin_redraw_tree(struct rt_list_node *list,
if
(
rtgui_rect_is_intersect
(
rect
,
&
(
topwin
->
extent
))
==
RT_EOK
)
{
epaint
->
wid
=
topwin
->
wid
;
rtgui_send
(
topwin
->
app
,
&
(
epaint
->
parent
),
sizeof
(
*
epaint
));
// < XY do !!! >
//rtgui_send(topwin->app, &(epaint->parent), sizeof(*epaint));
}
_rtgui_topwin_redraw_tree
(
&
topwin
->
child_list
,
rect
,
epaint
);
...
...
@@ -1026,7 +1040,8 @@ rt_err_t rtgui_topwin_modal_enter(struct rtgui_event_win_modal_enter *event)
parent_top
->
flag
|=
WINTITLE_MODALED
;
parent_top
->
wid
->
flag
|=
RTGUI_WIN_FLAG_UNDER_MODAL
;
parent_top
=
parent_top
->
parent
;
}
while
(
parent_top
);
}
while
(
parent_top
);
topwin
->
flag
&=
~
WINTITLE_MODALED
;
topwin
->
wid
->
flag
&=
~
RTGUI_WIN_FLAG_UNDER_MODAL
;
...
...
components/gui/src/topwin.h
浏览文件 @
c4e8c922
...
...
@@ -64,6 +64,9 @@ void rtgui_topwin_remove_monitor_rect(struct rtgui_win *wid, rtgui_rect_t *rect)
/* get the topwin that is currently focused */
struct
rtgui_topwin
*
rtgui_topwin_get_focus
(
void
);
/* get the topwin which app I belong */
struct
rtgui_app
*
rtgui_topwin_app_get_focus
(
void
);
struct
rtgui_topwin
*
rtgui_topwin_get_topmost_window_shown_all
(
void
);
#endif
...
...
components/gui/src/window.c
浏览文件 @
c4e8c922
...
...
@@ -41,7 +41,7 @@ static void _rtgui_win_constructor(rtgui_win_t *win)
RTGUI_WIDGET
(
win
)
->
toplevel
=
win
;
/* init win property */
win
->
update
=
0
;
win
->
update
=
0
;
win
->
drawing
=
0
;
RTGUI_WIDGET
(
win
)
->
flag
|=
RTGUI_WIDGET_FLAG_FOCUSABLE
;
...
...
@@ -440,7 +440,7 @@ rt_base_t rtgui_win_show(struct rtgui_win *win, rt_bool_t is_modal)
{
RTGUI_WIDGET_UNHIDE
(
win
);
win
->
magic
=
0xA5A55A5A
;
win
->
magic
=
RTGUI_WIN_MAGIC
;
if
(
is_modal
)
win
->
flag
|=
RTGUI_WIN_FLAG_MODAL
;
...
...
@@ -548,7 +548,7 @@ void rtgui_win_move(struct rtgui_win *win, int x, int y)
dy
=
y
-
wgt
->
extent
.
y1
;
rtgui_widget_move_to_logic
(
wgt
,
dx
,
dy
);
}
rtgui_rect_move
(
&
win
->
outer_extent
,
dx
,
dy
);
rtgui_rect_move
(
&
win
->
outer_extent
,
dx
,
dy
);
if
(
win
->
flag
&
RTGUI_WIN_FLAG_CONNECTED
)
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录