mirror of
https://github.com/DragonOS-Community/DragonOS.git
synced 2025-06-18 08:06:32 +00:00
Patch refactor scm and textui (#289)
* 重构屏幕管理器和textui框架 * 切换字体为spleen,并增加对字体的抽象 * 修正文档 --------- Co-authored-by: longjin <longjin@RinGoTek.cn>
This commit is contained in:
83
docs/kernel/libs/lib_ui/scm.md
Normal file
83
docs/kernel/libs/lib_ui/scm.md
Normal file
@ -0,0 +1,83 @@
|
||||
# 屏幕管理器(SCM)
|
||||
|
||||
:::{note}
|
||||
作者: 周瀚杰 <2625553453@qq.com>
|
||||
:::
|
||||
  屏幕管理器用来管理控制所有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框架,并将其激活
|
32
docs/kernel/libs/lib_ui/textui.md
Normal file
32
docs/kernel/libs/lib_ui/textui.md
Normal file
@ -0,0 +1,32 @@
|
||||
# 文本显示框架(textui)
|
||||
|
||||
:::{note}
|
||||
作者: 周瀚杰 <2625553453@qq.com>
|
||||
:::
|
||||
  文本框架主要用于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)已经初始化,可以进行动态内存分配,便可以使用一些复杂的结构体来处理要打印的文本信息。
|
||||
|
||||
|
Reference in New Issue
Block a user