mirror of
https://gitee.com/zlgopen/awtk.git
synced 2024-11-30 02:58:26 +08:00
improve lcd mono
This commit is contained in:
parent
ca0520c76d
commit
b70bba6fbd
@ -43,7 +43,7 @@ else:
|
||||
#NANOVG_BACKEND='GLES2'
|
||||
#NANOVG_BACKEND='GLES3'
|
||||
#NANOVG_BACKEND='AGG'
|
||||
#NANOVG_BACKEND='AGGE'
|
||||
NANOVG_BACKEND='AGGE'
|
||||
#NANOVG_BACKEND='BGFX'
|
||||
|
||||
FRAME_BUFFER_FORMAT=''
|
||||
@ -77,6 +77,7 @@ COMMON_CFLAGS=''
|
||||
if LCD == 'SDL_GPU':
|
||||
COMMON_CCFLAGS = COMMON_CCFLAGS + ' -DWITH_NANOVG_GPU -DWITH_VGCANVAS_LCD'
|
||||
elif LCD == 'SDL_FB_MONO':
|
||||
NANOVG_BACKEND='AGGE'
|
||||
COMMON_CCFLAGS = COMMON_CCFLAGS + ' -DWITH_LCD_MONO -DWITH_NANOVG_SOFT '
|
||||
else:
|
||||
COMMON_CCFLAGS = COMMON_CCFLAGS + ' -DWITH_BITMAP_BGRA -DWITH_NANOVG_SOFT '
|
||||
|
@ -40,6 +40,7 @@
|
||||
* [如何实现"back"键和"home"键](how_to_impl_back_and_home_key.md)
|
||||
* [如何实现自定义的软键盘](how_to_impl_custom_soft_keyboard.md)
|
||||
* [如何编译Windows 32位版本](how_to_build_windows_32bit_version.md)
|
||||
* [如何支持单色LCD](how_to_support_mono_lcd.md)
|
||||
|
||||
### 3.内部原理
|
||||
* [AWTK脚本绑定原理](script_binding.md)
|
||||
|
@ -1,101 +1,102 @@
|
||||
# 最新动态
|
||||
* 2019/08/15
|
||||
* 修改cairo/pixman config.h冲突的问题(感谢陈谭提供补丁)
|
||||
* 由于生成单色字体需要freetype,而且freetype的效果比stb稍微好一点,所以PC版本采用freetype作为字体引擎。
|
||||
* 修改 cairo/pixman config.h 冲突的问题(感谢陈谭提供补丁)
|
||||
* 由于生成单色字体需要 freetype,而且 freetype 的效果比 stb 稍微好一点,所以 PC 版本采用 freetype 作为字体引擎。
|
||||
* 增加单色 LCD 的文档。
|
||||
|
||||
* 2019/08/14
|
||||
* 完善文档。
|
||||
* 增加宏TK\_XML\_MAX\_ATTRS用于控制XML属性的最大个数(缺省24)。
|
||||
* 通过widget factory触发EVT\_WIDGET\_CREATED事件。
|
||||
* 修改在stm32f103上的问题。
|
||||
* 完善window\_animator(感谢智明提供补丁)
|
||||
* 增加宏 TK\_XML\_MAX\_ATTRS 用于控制 XML 属性的最大个数(缺省 24)。
|
||||
* 通过 widget factory 触发 EVT\_WIDGET\_CREATED 事件。
|
||||
* 修改在 stm32f103 上的问题。
|
||||
* 完善 window\_animator(感谢智明提供补丁)
|
||||
|
||||
* 2019/08/13
|
||||
* 模拟器支持单色屏。
|
||||
* 修复native window初始化顺序的BUG(感谢智明提供补丁)
|
||||
* 修复 native window 初始化顺序的 BUG(感谢智明提供补丁)
|
||||
|
||||
* 2019/08/12
|
||||
* 增加mono图片生成工具。
|
||||
* 增加 mono 图片生成工具。
|
||||
|
||||
* 2019/08/11
|
||||
* 增加mono字体生成工具。
|
||||
* 增加 mono 字体生成工具。
|
||||
|
||||
* 2019/08/10
|
||||
* edit/mledit set\_text 触发EVT\_VALUE\_CHANGED。
|
||||
* 增加lcd mono。
|
||||
* edit/mledit set\_text 触发 EVT\_VALUE\_CHANGED。
|
||||
* 增加 lcd mono。
|
||||
|
||||
* 2019/08/09
|
||||
* 重构窗口管理器。
|
||||
* 完善缺省输入法。
|
||||
* 当前窗口为keyboard时,不触发TO\_BACKGROUND/TO\_FOREGROUND。
|
||||
* 修改slider资源加载的问题(感谢朝泽提供补丁)
|
||||
* 修改fill rect坐标的问题(感谢智明提供补丁)
|
||||
* 修改color tile边框颜色的问题(感谢智明提供补丁)
|
||||
* 当前窗口为 keyboard 时,不触发 TO\_BACKGROUND/TO\_FOREGROUND。
|
||||
* 修改 slider 资源加载的问题(感谢朝泽提供补丁)
|
||||
* 修改 fill rect 坐标的问题(感谢智明提供补丁)
|
||||
* 修改 color tile 边框颜色的问题(感谢智明提供补丁)
|
||||
|
||||
* 2019/08/08
|
||||
* 重构
|
||||
* 完善mutable image(感谢智明提供补丁)
|
||||
* 完善expr eval,支持十六进制数。
|
||||
* mledit支持value changing事件。
|
||||
* 完善slider拖动效果。
|
||||
* 完善 mutable image(感谢智明提供补丁)
|
||||
* 完善 expr eval,支持十六进制数。
|
||||
* mledit 支持 value changing 事件。
|
||||
* 完善 slider 拖动效果。
|
||||
|
||||
* 2019/08/07
|
||||
* 修改valgrind发现的问题。
|
||||
* 修改shortcut的BUG。
|
||||
* 完善SDL事件处理(感谢朝泽提供补丁)
|
||||
* 完善pages控件(感谢朝泽提供补丁)
|
||||
* 修改event文档的BUG(感谢朝泽提供补丁)
|
||||
* 修改 valgrind 发现的问题。
|
||||
* 修改 shortcut 的 BUG。
|
||||
* 完善 SDL 事件处理(感谢朝泽提供补丁)
|
||||
* 完善 pages 控件(感谢朝泽提供补丁)
|
||||
* 修改 event 文档的 BUG(感谢朝泽提供补丁)
|
||||
|
||||
* 2019/08/06
|
||||
* 优化nanovg GL fragment shader(draw text)。
|
||||
* 禁用点击scrollview中控件时自动滚动到可视区的功能。
|
||||
* 完善slider拖动效果。
|
||||
* 优化 nanovg GL fragment shader(draw text)。
|
||||
* 禁用点击 scrollview 中控件时自动滚动到可视区的功能。
|
||||
* 完善 slider 拖动效果。
|
||||
|
||||
* 2019/08/05
|
||||
* 修改uiloader/window base/style mutable/layouter等BUG(感谢尧燊提供补丁)。
|
||||
* 修改 uiloader/window base/style mutable/layouter 等 BUG(感谢尧燊提供补丁)。
|
||||
|
||||
* 2019/08/04-05
|
||||
* 优化nanovg GL fragment shader。
|
||||
* 完善Android移植。
|
||||
* 完善slide view控件(感谢朝泽提供补丁)
|
||||
* 优化 nanovg GL fragment shader。
|
||||
* 完善 Android 移植。
|
||||
* 完善 slide view 控件(感谢朝泽提供补丁)
|
||||
|
||||
* 2019/08/03
|
||||
* 完善Android移植。
|
||||
* 完善 Android 移植。
|
||||
|
||||
* 2019/07/20-8/1
|
||||
* window manager抽象成接口。
|
||||
* 引入native\_window接口。
|
||||
* window manager 抽象成接口。
|
||||
* 引入 native\_window 接口。
|
||||
|
||||
* 2019/08/02
|
||||
* 禁用label/button/image/hscroll\_label的缓存。
|
||||
* 禁用 label/button/image/hscroll\_label 的缓存。
|
||||
|
||||
* 2019/07/29
|
||||
* fix edit clone的问题。
|
||||
* fix edit clone 的问题。
|
||||
|
||||
* 2019/07/26
|
||||
* 完善text edit(感谢智明提供补丁)
|
||||
* 完善 text edit(感谢智明提供补丁)
|
||||
|
||||
* 2019/07/24
|
||||
* 完善preview\_ui(感谢俊杰提供补丁)
|
||||
* 完善 preview\_ui(感谢俊杰提供补丁)
|
||||
|
||||
* 2019/07/20
|
||||
* 完善list\_view\_h。
|
||||
* 完善 list\_view\_h。
|
||||
|
||||
* 2019/07/19
|
||||
* Slider的图标用ICON方式绘制。
|
||||
* 增加属性with\_focus\_state,如果希望控件具有焦点状态,有不希望焦点停留,可以用本属性代替focusable属性。
|
||||
* Slider 的图标用 ICON 方式绘制。
|
||||
* 增加属性 with\_focus\_state,如果希望控件具有焦点状态,有不希望焦点停留,可以用本属性代替 focusable 属性。
|
||||
* 完善控件动画。
|
||||
|
||||
* 2019/07/18
|
||||
* gles的canvas画直线和画矩形边框的线宽问题,gles统一和agge一样为1线宽(感谢智明提供补丁)。
|
||||
* gles 的 canvas 画直线和画矩形边框的线宽问题,gles 统一和 agge 一样为 1 线宽(感谢智明提供补丁)。
|
||||
|
||||
* 2019/07/17
|
||||
* 完善switch控件(感谢朝泽提供补丁)
|
||||
* 完善 switch 控件(感谢朝泽提供补丁)
|
||||
|
||||
* 2019/07/15
|
||||
* 完善agge后端(感谢智明提供补丁)
|
||||
* 完善cairo后端(感谢智明提供补丁)
|
||||
* 完善demoui。
|
||||
* 完善 agge 后端(感谢智明提供补丁)
|
||||
* 完善 cairo 后端(感谢智明提供补丁)
|
||||
* 完善 demoui。
|
||||
|
||||
* 2019/07/12
|
||||
* 改进 widget\_get\_type 通过属性获取。
|
||||
|
49
docs/how_to_support_mono_lcd.md
Normal file
49
docs/how_to_support_mono_lcd.md
Normal file
@ -0,0 +1,49 @@
|
||||
# 支持单色 LCD
|
||||
|
||||
## lcd_mono 实现
|
||||
|
||||
src/lcd/lcd_mono.c 提供单色 LCD 的 framebuffer(每个像素占用一个比特),实现了 LCD 的基本绘制函数,在使用时调用者需要提供 flush 函数,负责把脏矩形内的像素提交到 LCD 硬件。
|
||||
|
||||
## 模拟器
|
||||
|
||||
在 awtk_config.py 中可以打开单色 LCD 的配置。
|
||||
|
||||
```
|
||||
LCD='SDL_FB_MONO'
|
||||
```
|
||||
|
||||
## 单色字体生成
|
||||
|
||||
字体生成工具 fontgen 支持生成单色字体,加上可选参数 mono 即可。
|
||||
|
||||
```
|
||||
fontgen.exe ttf_filename str_filename out_filename font_size [mono]
|
||||
```
|
||||
|
||||
## 单色图片生成
|
||||
|
||||
图片生成工具 imagegen 支持生成单色图片,加上可选参数 mono 即可。
|
||||
|
||||
```
|
||||
imagegen.exe in_filename out_filename (bgra|bgr565|mono)
|
||||
```
|
||||
|
||||
> 由于单色图片只有两种颜色,所以在设计图片上只能使用白色 (#ffffff) 和黑色 (#000000),否则转换出来的效果不是期望的。
|
||||
|
||||
## 主题配置
|
||||
|
||||
主题中只能使用白色 (#ffffff) 和黑色 (#000000) 两种颜色。
|
||||
|
||||
## 资源生成
|
||||
|
||||
生成资源时需要加上 mono 参数,该参数会被传递给 fontgen 和 imagegen。
|
||||
|
||||
```
|
||||
python scripts/update_res.py all mono
|
||||
w_to_support_mono_lcd
|
||||
|
||||
## 应用程序
|
||||
|
||||
应用程序 UI 设计请考虑单色 LCD 的特殊性。
|
||||
|
||||
> demoui 没有考虑单色 LCD,在单色 LCD 上运行效果不佳。
|
@ -156,7 +156,7 @@ static ret_t lcd_mono_destroy(lcd_t* lcd) {
|
||||
}
|
||||
|
||||
lcd_t* lcd_mono_create(wh_t w, wh_t h, lcd_flush_t flush, lcd_destroy_t on_destroy,
|
||||
void* on_destroy_ctx) {
|
||||
void* ctx) {
|
||||
lcd_mono_t* mono = TKMEM_ZALLOC(lcd_mono_t);
|
||||
system_info_t* info = system_info();
|
||||
lcd_t* lcd = (lcd_t*)mono;
|
||||
@ -168,7 +168,7 @@ lcd_t* lcd_mono_create(wh_t w, wh_t h, lcd_flush_t flush, lcd_destroy_t on_destr
|
||||
lcd->type = LCD_MONO;
|
||||
mono->data = bitmap_mono_create_data(w, h);
|
||||
mono->on_destroy = on_destroy;
|
||||
mono->on_destroy_ctx = on_destroy_ctx;
|
||||
mono->ctx = ctx;
|
||||
|
||||
ENSURE(mono->data != NULL);
|
||||
|
||||
|
@ -49,11 +49,11 @@ typedef struct _lcd_mono_t {
|
||||
uint8_t* data;
|
||||
|
||||
/**
|
||||
* @property {void*} on_destroy_ctx
|
||||
* @property {void*} ctx
|
||||
* @annotation ["private"]
|
||||
* on_destroy回调函数的上下文信息。
|
||||
* flush/on_destroy回调函数的上下文信息。
|
||||
*/
|
||||
void* on_destroy_ctx;
|
||||
void* ctx;
|
||||
|
||||
/**
|
||||
* @property {lcd_destroy_t} on_destroy
|
||||
@ -72,12 +72,12 @@ typedef struct _lcd_mono_t {
|
||||
* @param {wh_t} h 高度。
|
||||
* @param {lcd_flush_t} flush 用于刷新数据到硬件的回调函数。
|
||||
* @param {lcd_destroy_t} on_destroy 销毁lcd时的回调函数。
|
||||
* @param {void*} on_destroy_ctx 销毁lcd时的回调函数的上下文。
|
||||
* @param {void*} ctx flush/on_destroy回调函数的上下文。
|
||||
*
|
||||
* @return {lcd_t*} lcd对象。
|
||||
*/
|
||||
lcd_t* lcd_mono_create(wh_t w, wh_t h, lcd_flush_t flush, lcd_destroy_t on_destroy,
|
||||
void* on_destroy_ctx);
|
||||
void* ctx);
|
||||
|
||||
END_C_DECLS
|
||||
|
||||
|
@ -23,13 +23,13 @@
|
||||
#include "lcd/lcd_mono.h"
|
||||
#include "lcd/lcd_sdl2_mono.h"
|
||||
|
||||
typedef struct _special_info_t {
|
||||
typedef struct _mono_info_t {
|
||||
SDL_Renderer* render;
|
||||
SDL_Texture* texture;
|
||||
} special_info_t;
|
||||
} mono_info_t;
|
||||
|
||||
static special_info_t* special_info_create(SDL_Renderer* render) {
|
||||
special_info_t* info = TKMEM_ZALLOC(special_info_t);
|
||||
static mono_info_t* mono_info_create(SDL_Renderer* render) {
|
||||
mono_info_t* info = TKMEM_ZALLOC(mono_info_t);
|
||||
return_value_if_fail(info != NULL, NULL);
|
||||
|
||||
info->render = render;
|
||||
@ -37,7 +37,7 @@ static special_info_t* special_info_create(SDL_Renderer* render) {
|
||||
return info;
|
||||
}
|
||||
|
||||
static ret_t special_info_create_texture(special_info_t* info, wh_t w, wh_t h) {
|
||||
static ret_t mono_info_create_texture(mono_info_t* info, wh_t w, wh_t h) {
|
||||
int flags = SDL_TEXTUREACCESS_STREAMING;
|
||||
|
||||
/*SDL ABGR is rgba from low address to high address*/
|
||||
@ -47,7 +47,7 @@ static ret_t special_info_create_texture(special_info_t* info, wh_t w, wh_t h) {
|
||||
return info->texture != NULL ? RET_OK : RET_FAIL;
|
||||
}
|
||||
|
||||
static ret_t special_info_destroy(special_info_t* info) {
|
||||
static ret_t mono_info_destroy(mono_info_t* info) {
|
||||
return_value_if_fail(info != NULL, RET_BAD_PARAMS);
|
||||
|
||||
SDL_DestroyTexture(info->texture);
|
||||
@ -64,8 +64,7 @@ static ret_t lcd_sdl2_mono_flush(lcd_t* lcd) {
|
||||
lcd_mono_t* mono = (lcd_mono_t*)(lcd);
|
||||
rect_t* dr = &(lcd->dirty_rect);
|
||||
rect_t* fps_r = &(lcd->fps_rect);
|
||||
lcd_mono_t* special = (lcd_mono_t*)lcd;
|
||||
special_info_t* info = (special_info_t*)(special->ctx);
|
||||
mono_info_t* info = (mono_info_t*)(mono->ctx);
|
||||
|
||||
memset(&src, 0x00, sizeof(src));
|
||||
memset(&dst, 0x00, sizeof(dst));
|
||||
@ -110,10 +109,10 @@ static ret_t lcd_sdl2_mono_flush(lcd_t* lcd) {
|
||||
}
|
||||
|
||||
static ret_t lcd_sdl2_mono_destroy(lcd_t* lcd) {
|
||||
lcd_mono_t* special = (lcd_mono_t*)lcd;
|
||||
lcd_mono_t* mono = (lcd_mono_t*)lcd;
|
||||
|
||||
special_info_destroy((special_info_t*)(special->ctx));
|
||||
special->ctx = NULL;
|
||||
mono_info_destroy((mono_info_t*)(mono->ctx));
|
||||
mono->ctx = NULL;
|
||||
|
||||
return RET_OK;
|
||||
}
|
||||
@ -121,14 +120,14 @@ static ret_t lcd_sdl2_mono_destroy(lcd_t* lcd) {
|
||||
lcd_t* lcd_sdl2_mono_init(SDL_Renderer* render) {
|
||||
int w = 0;
|
||||
int h = 0;
|
||||
special_info_t* info = NULL;
|
||||
mono_info_t* info = NULL;
|
||||
return_value_if_fail(render != NULL, NULL);
|
||||
|
||||
SDL_GetRendererOutputSize(render, &w, &h);
|
||||
info = special_info_create(render);
|
||||
info = mono_info_create(render);
|
||||
return_value_if_fail(info != NULL, NULL);
|
||||
|
||||
ENSURE(special_info_create_texture(info, w, h) == RET_OK);
|
||||
ENSURE(mono_info_create_texture(info, w, h) == RET_OK);
|
||||
|
||||
return lcd_mono_create(w, h, lcd_sdl2_mono_flush, lcd_sdl2_mono_destroy, info);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user