DragonOS/kernel/lib/libUI/screen_manager.h

118 lines
2.9 KiB
C
Raw Normal View History

2022-08-03 06:11:14 +00:00
#pragma once
#include <common/sys/types.h>
#include <common/glib.h>
// 帧缓冲区标志位
#define SCM_BF_FB (1 << 0) // 当前buffer是设备显存中的帧缓冲区
#define SCM_BF_DB (1 << 1) // 当前buffer是双缓冲
#define SCM_BF_TEXT (1 << 2) // 使用文本模式
#define SCM_BF_PIXEL (1 << 3) // 使用图像模式
// ui框架类型
#define SCM_FRAMWORK_TYPE_TEXT (uint8_t)0
#define SCM_FRAMWORK_TYPE_GUI (uint8_t)1
2022-08-03 06:11:14 +00:00
/**
* @brief
*
*/
struct scm_buffer_info_t
{
uint32_t width; // 帧缓冲区宽度pixel或columns
uint32_t height; // 帧缓冲区高度pixel或lines
uint32_t size; // 帧缓冲区大小bytes
uint32_t bit_depth; // 像素点位深度
uint64_t vaddr; // 帧缓冲区的地址
uint64_t flags; // 帧缓冲区标志位
};
/**
* @brief ui框架应当实现的接口
*
*/
struct scm_ui_framework_operations_t
{
2022-08-03 09:13:46 +00:00
int (*install)(struct scm_buffer_info_t *buf); // 安装ui框架的回调函数
int (*uninstall)(void *args); // 卸载ui框架的回调函数
int (*enable)(void *args); // 启用ui框架的回调函数
int (*disable)(void *args); // 禁用ui框架的回调函数
int (*change)(struct scm_buffer_info_t *buf); // 改变ui框架的帧缓冲区的回调函数
2022-08-03 06:11:14 +00:00
};
struct scm_ui_framework_t
{
struct List list;
uint16_t id;
char name[16];
uint8_t type;
struct scm_ui_framework_operations_t *ui_ops;
struct scm_buffer_info_t *buf;
};
2022-08-03 06:11:14 +00:00
/**
* @brief
*
*/
void scm_init();
/**
2022-08-03 09:13:46 +00:00
* @brief
2022-08-03 06:11:14 +00:00
*
2022-08-03 09:13:46 +00:00
*/
void scm_reinit();
/**
* @brief UI框架
*
2022-08-03 06:11:14 +00:00
* @param name
* @param type
* @param ops
2022-08-03 09:13:46 +00:00
* @return int
2022-08-03 06:11:14 +00:00
*/
2022-08-03 09:13:46 +00:00
int scm_register_alloc(const char *name, const uint8_t type, struct scm_ui_framework_operations_t *ops);
2022-08-03 06:11:14 +00:00
/**
* @brief UI框架
2022-08-03 09:13:46 +00:00
*
2022-08-03 06:11:14 +00:00
* @param ui
* @return int
*/
2022-08-03 09:13:46 +00:00
int scm_register(struct scm_ui_framework_t *ui);
2022-08-03 06:11:14 +00:00
/**
* @brief UI框架
2022-08-03 09:13:46 +00:00
*
2022-08-03 06:11:14 +00:00
* @param ui ui框架结构体
2022-08-03 09:13:46 +00:00
* @return int
2022-08-03 06:11:14 +00:00
*/
2022-08-03 09:13:46 +00:00
int scm_unregister(struct scm_ui_framework_t *ui);
2022-08-03 06:11:14 +00:00
/**
* @brief UI框架
2022-08-03 09:13:46 +00:00
*
2022-08-03 06:11:14 +00:00
* @param ui ui框架结构体
2022-08-03 09:13:46 +00:00
* @return int
2022-08-03 06:11:14 +00:00
*/
2022-08-03 09:13:46 +00:00
int scm_unregister_alloc(struct scm_ui_framework_t *ui);
2022-08-03 06:11:14 +00:00
/**
* @brief
2022-08-03 09:13:46 +00:00
*
* @return int
2022-08-03 06:11:14 +00:00
*/
int scm_enable_alloc();
/**
* @brief
2022-08-03 09:13:46 +00:00
*
* @return int
2022-08-03 06:11:14 +00:00
*/
int scm_enable_double_buffer();
/**
* @brief ui框架
2022-08-03 09:13:46 +00:00
*
2022-08-03 06:11:14 +00:00
* @param ui ui框架
* @return int
*/
2022-08-03 09:13:46 +00:00
int scm_framework_enable(struct scm_ui_framework_t *ui);