-
-
Notifications
You must be signed in to change notification settings - Fork 137
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Patch refactor scm and textui (#289)
* 重构屏幕管理器和textui框架 * 切换字体为spleen,并增加对字体的抽象 * 修正文档 --------- Co-authored-by: longjin <[email protected]>
- Loading branch information
1 parent
5db5a56
commit abe3a6e
Showing
42 changed files
with
2,006 additions
and
1,727 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -29,6 +29,7 @@ | |
kernel/debug/index | ||
kernel/ktest/index | ||
kernel/cpu_arch/index | ||
kernel/libs/index | ||
|
||
|
||
.. toctree:: | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,12 @@ | ||
==================================== | ||
其他内核库 | ||
==================================== | ||
|
||
这里的集中了内核中的一些库的文档,这些库不属于任何子系统。 | ||
|
||
.. toctree:: | ||
:maxdepth: 1 | ||
|
||
lib_ui/scm | ||
lib_ui/textui | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,83 @@ | ||
# 屏幕管理器(SCM) | ||
|
||
:::{note} | ||
作者: 周瀚杰 <[email protected]> | ||
::: | ||
  屏幕管理器用来管理控制所有ui框架,所有框架都必须先在屏幕管理器中注册才可使用,然后scm控制当前是哪个ui框架在使用 | ||
|
||
## traits | ||
|
||
### ScmUiFramework | ||
  每个要注册到scm中的ui框架都必须实现这个trait中的方法,具体定义如下: | ||
```rust | ||
pub trait ScmUiFramework: Sync + Send + Debug { | ||
// 安装ui框架的回调函数 | ||
fn install(&self) -> Result<i32, SystemError> { | ||
return Err(SystemError::EOPNOTSUPP_OR_ENOTSUP); | ||
} | ||
// 卸载ui框架的回调函数 | ||
fn uninstall(&self) -> Result<i32, SystemError> { | ||
return Err(SystemError::EOPNOTSUPP_OR_ENOTSUP); | ||
} | ||
// 启用ui框架的回调函数 | ||
fn enable(&self) -> Result<i32, SystemError> { | ||
return Err(SystemError::EOPNOTSUPP_OR_ENOTSUP); | ||
} | ||
// 禁用ui框架的回调函数 | ||
fn disable(&self) -> Result<i32, SystemError> { | ||
return Err(SystemError::EOPNOTSUPP_OR_ENOTSUP); | ||
} | ||
// 改变ui框架的帧缓冲区的回调函数 | ||
fn change(&self, _buf: ScmBufferInfo) -> Result<i32, SystemError> { | ||
return Err(SystemError::EOPNOTSUPP_OR_ENOTSUP); | ||
} | ||
/// @brief 获取ScmUiFramework的元数据 | ||
/// @return 成功:Ok(ScmUiFramework的元数据) | ||
/// 失败:Err(错误码) | ||
fn metadata(&self) -> Result<ScmUiFrameworkMetadata, SystemError> { | ||
// 若文件系统没有实现此方法,则返回“不支持” | ||
return Err(SystemError::EOPNOTSUPP_OR_ENOTSUP); | ||
} | ||
} | ||
``` | ||
## 主要API | ||
### scm_init() -初始化屏幕管理模块 | ||
#### 原型 | ||
```rust | ||
pub extern "C" fn scm_init() | ||
``` | ||
#### 说明 | ||
  scm_init()主要是初始化一些scm中使用的全局变量,例如是否使用双缓冲区标志位,textui未初始化时使用的一些全局变量 | ||
|
||
### scm_reinit() -当内存管理单元被初始化之后,重新初始化屏幕管理模块 | ||
#### 原型 | ||
```rust | ||
pub extern "C" fn scm_reinit() -> i32 | ||
``` | ||
#### 说明 | ||
  scm_reinit()用于当内存管理单元被初始化之后,重新处理帧缓冲区问题 | ||
|
||
### scm_enable_double_buffer() -允许双缓冲区 | ||
#### 原型 | ||
```rust | ||
pub extern "C" fn scm_enable_double_buffer() -> i32 | ||
``` | ||
#### 说明 | ||
  scm_enable_double_buffer()用于启动双缓冲来往窗口输出打印信息。启用后,往窗口输出的信息会暂时放在一个缓冲区中,然后每次按一定时间将该缓冲区的信息输出到窗口帧缓冲区中,渲染显示到窗口上。 | ||
|
||
### scm_framework_enable() -启用某个ui框架,将它的帧缓冲区渲染到屏幕上 | ||
#### 原型 | ||
```rust | ||
pub fn scm_framework_enable(framework: Arc<dyn ScmUiFramework>) -> Result<i32, SystemError> | ||
``` | ||
#### 说明 | ||
  scm_framework_enable用于启用某个ui框架,将它的帧缓冲区渲染到屏幕上 | ||
|
||
|
||
### scm_register() -向屏幕管理器注册UI框架 | ||
#### 原型 | ||
```rust | ||
pub fn scm_register(framework: Arc<dyn ScmUiFramework>) -> Result<i32, SystemError> | ||
``` | ||
#### 说明 | ||
  scm_register用于将ui框架注册到scm中,主要是调用ui框架的回调函数以安装ui框架,并将其激活 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,32 @@ | ||
# 文本显示框架(textui) | ||
|
||
:::{note} | ||
作者: 周瀚杰 <[email protected]> | ||
::: | ||
  文本框架主要用于DragonOS的文本的窗口渲染显示,往屏幕窗口中输出打印文本信息,往窗口显示文本分成两种情况:一种是当内存管理单元(mm)未被初始化时,不能进行动态内存分配,限制颇多(例如不能使用vec,mpsc等),所以直接往窗口的帧缓冲区输出打印信息,不使用虚拟行等复杂结构体;另一种是当内存管理单元(mm)已经初始化,可以进行动态内存分配,便可以使用一些复杂的结构体来处理要打印的文本信息。 | ||
|
||
|
||
## 主要API | ||
### rs_textui_init() -textui框架初始化 | ||
#### 原型 | ||
```rust | ||
pub extern "C" fn rs_textui_init() -> i32 | ||
``` | ||
#### 说明 | ||
  rs_textui_init()主要是初始化一些textui框架要使用到的一些全局变量信息(例如TEXTUIFRAMEWORK,TEXTUI_PRIVATE_INFO等),以及将textui框架注册到scm中。 | ||
|
||
### textui_putchar() -往textui框架中的当前使用的窗口打印文本信息 | ||
#### 原型 | ||
```rust | ||
pub extern "C" fn rs_textui_putchar(character: u8, fr_color: u32, bk_color: u32) -> i32 | ||
|
||
pub fn textui_putchar( | ||
character: char, | ||
fr_color: FontColor, | ||
bk_color: FontColor, | ||
) -> Result<(), SystemError> | ||
``` | ||
#### 说明 | ||
  textui_putchar()要处理两种情况:一种是当内存管理单元(mm)未被初始化时,不能进行动态内存分配,限制颇多(例如不能使用vec,mpsc等),所以直接往窗口的帧缓冲区输出打印信息,不使用虚拟行等复杂结构体;另一种是当内存管理单元(mm)已经初始化,可以进行动态内存分配,便可以使用一些复杂的结构体来处理要打印的文本信息。 | ||
|
||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.