mirror of
https://gitee.com/zlgopen/awtk.git
synced 2024-11-29 18:48:09 +08:00
impl bitmap_create_ex with bitmap_init_ex
This commit is contained in:
parent
f310109da3
commit
8f3e1c9773
@ -1,20 +1,21 @@
|
|||||||
# 最新动态
|
# 最新动态
|
||||||
|
|
||||||
2024/11/28
|
2024/11/28
|
||||||
* 增加函数 bitmap_set_dirty/bitmap_is_dirty
|
* 增加函数 bitmap\_set\_dirty/bitmap\_is\_dirty
|
||||||
|
* 重构bitmap,用bitmap\_init\_ex 实现bitmap\_create\_ex
|
||||||
|
|
||||||
2024/11/26
|
2024/11/26
|
||||||
* 增加tab_button_group删除tab_button和对应page的函数(感谢智明提供补丁)
|
* 增加tab\_button\_group删除tab\_button和对应page的函数(感谢智明提供补丁)
|
||||||
|
|
||||||
2024/11/22
|
2024/11/22
|
||||||
* 修复 mledit编译警告(感谢泽武提供补丁)
|
* 修复 mledit编译警告(感谢泽武提供补丁)
|
||||||
|
|
||||||
2024/11/21
|
2024/11/21
|
||||||
* 完善conf_json(感谢兆坤提供补丁)
|
* 完善conf\_json(感谢兆坤提供补丁)
|
||||||
|
|
||||||
2024/11/19
|
2024/11/19
|
||||||
* 增加函数 str_append_format_padding
|
* 增加函数 str\_append\_format\_padding
|
||||||
* 增加 atomic_compare_exchange(感谢兆坤提供补丁)
|
* 增加 atomic\_compare\_exchange(感谢兆坤提供补丁)
|
||||||
* 完善 atomic(感谢兆坤提供补丁)
|
* 完善 atomic(感谢兆坤提供补丁)
|
||||||
|
|
||||||
2024/11/18
|
2024/11/18
|
||||||
@ -23,7 +24,7 @@
|
|||||||
* fix memory error whene change theme.
|
* fix memory error whene change theme.
|
||||||
|
|
||||||
2024/11/17
|
2024/11/17
|
||||||
* 完善 TK_STRINGIZE(感谢兆坤提供补丁)
|
* 完善 TK\_STRINGIZE(感谢兆坤提供补丁)
|
||||||
* value完善调试log(感谢兆坤提供补丁)
|
* value完善调试log(感谢兆坤提供补丁)
|
||||||
* 修复拼写错误(感谢兆坤提供补丁)
|
* 修复拼写错误(感谢兆坤提供补丁)
|
||||||
* 增加原子操作(感谢兆坤提供补丁)
|
* 增加原子操作(感谢兆坤提供补丁)
|
||||||
@ -31,8 +32,8 @@
|
|||||||
2024/11/15
|
2024/11/15
|
||||||
* 修复拼写错误(感谢兆坤提供补丁)
|
* 修复拼写错误(感谢兆坤提供补丁)
|
||||||
* 修复 demoui dialog(感谢兆坤提供补丁)
|
* 修复 demoui dialog(感谢兆坤提供补丁)
|
||||||
* 增加tk_strs_bsearch
|
* 增加tk\_strs\_bsearch
|
||||||
* 修复text_selector测试用例报错问题(感谢颖健提供补丁)
|
* 修复text\_selector测试用例报错问题(感谢颖健提供补丁)
|
||||||
* 修复控件有offset时更新指针icon没更新的问题(感谢颖健提供补丁)
|
* 修复控件有offset时更新指针icon没更新的问题(感谢颖健提供补丁)
|
||||||
|
|
||||||
2024/11/14
|
2024/11/14
|
||||||
|
@ -124,41 +124,35 @@ static ret_t bitmap_web_destroy(bitmap_t* bitmap) {
|
|||||||
return RET_OK;
|
return RET_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static ret_t bitmap_platform_create(bitmap_t* bitmap) {
|
||||||
|
uint32_t w = bitmap->w;
|
||||||
|
uint32_t h = bitmap->h;
|
||||||
|
uint32_t line_length = bitmap_get_physical_line_length(bitmap);
|
||||||
|
bitmap_format_t format = bitmap->format;
|
||||||
|
|
||||||
|
uint8_t* data = bitmap_lock_buffer_for_write(bitmap);
|
||||||
|
return_value_if_fail(format == BITMAP_FMT_RGBA8888, NULL);
|
||||||
|
int32_t id = EM_ASM_INT(
|
||||||
|
{ return VGCanvas.createMutableImage($0, $1, $2, $3, $4); }, data, w, h, line_length, format);
|
||||||
|
bitmap->specific = tk_pointer_from_int(id);
|
||||||
|
bitmap->specific_destroy = bitmap_web_destroy;
|
||||||
|
bitmap_unlock_buffer(bitmap);
|
||||||
|
|
||||||
|
return RET_OK;
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
static ret_t bitmap_platform_create(bitmap_t* bitmap) {
|
||||||
|
return RET_OK;
|
||||||
|
}
|
||||||
#endif /*AWTK_WEB*/
|
#endif /*AWTK_WEB*/
|
||||||
|
|
||||||
bitmap_t* bitmap_create_ex(uint32_t w, uint32_t h, uint32_t line_length, bitmap_format_t format) {
|
bitmap_t* bitmap_create_ex(uint32_t w, uint32_t h, uint32_t line_length, bitmap_format_t format) {
|
||||||
bitmap_t* bitmap = TKMEM_ZALLOC(bitmap_t);
|
bitmap_t* bitmap = TKMEM_ZALLOC(bitmap_t);
|
||||||
uint32_t bpp = bitmap_get_bpp_of_format(format);
|
|
||||||
|
|
||||||
return_value_if_fail(bitmap != NULL, NULL);
|
return_value_if_fail(bitmap != NULL, NULL);
|
||||||
|
|
||||||
bitmap->w = w;
|
bitmap_init_ex(bitmap, w, h, line_length, format, NULL);
|
||||||
bitmap->h = h;
|
|
||||||
bitmap->format = format;
|
|
||||||
bitmap->should_free_handle = TRUE;
|
bitmap->should_free_handle = TRUE;
|
||||||
|
|
||||||
if (bpp < 4) {
|
|
||||||
bitmap->flags = BITMAP_FLAG_OPAQUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
bitmap_set_line_length(bitmap, line_length);
|
|
||||||
|
|
||||||
bitmap_alloc_data(bitmap);
|
|
||||||
if (bitmap->buffer == NULL) {
|
|
||||||
TKMEM_FREE(bitmap);
|
|
||||||
bitmap = NULL;
|
|
||||||
} else {
|
|
||||||
#ifdef AWTK_WEB
|
|
||||||
uint8_t* data = bitmap_lock_buffer_for_write(bitmap);
|
|
||||||
return_value_if_fail(format == BITMAP_FMT_RGBA8888, NULL);
|
|
||||||
int32_t id = EM_ASM_INT({ return VGCanvas.createMutableImage($0, $1, $2, $3, $4); }, data, w, h,
|
|
||||||
line_length, format);
|
|
||||||
bitmap->specific = tk_pointer_from_int(id);
|
|
||||||
bitmap->specific_destroy = bitmap_web_destroy;
|
|
||||||
bitmap_unlock_buffer(bitmap);
|
|
||||||
#endif /*AWTK_WEB*/
|
|
||||||
}
|
|
||||||
|
|
||||||
return bitmap;
|
return bitmap;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -587,6 +581,7 @@ ret_t bitmap_init(bitmap_t* bitmap, uint32_t w, uint32_t h, bitmap_format_t form
|
|||||||
uint32_t bpp = bitmap_get_bpp_of_format(format);
|
uint32_t bpp = bitmap_get_bpp_of_format(format);
|
||||||
line_length = tk_max(w * bpp, line_length);
|
line_length = tk_max(w * bpp, line_length);
|
||||||
}
|
}
|
||||||
|
|
||||||
return bitmap_init_ex(bitmap, w, h, line_length, format, data);
|
return bitmap_init_ex(bitmap, w, h, line_length, format, data);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -612,6 +607,10 @@ ret_t bitmap_init_ex(bitmap_t* bitmap, uint32_t w, uint32_t h, uint32_t line_len
|
|||||||
bitmap->should_free_data = TRUE;
|
bitmap->should_free_data = TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (bitmap->buffer == NULL) {
|
||||||
|
bitmap_platform_create(bitmap);
|
||||||
|
}
|
||||||
|
|
||||||
return bitmap->buffer != NULL ? RET_OK : RET_OOM;
|
return bitmap->buffer != NULL ? RET_OK : RET_OOM;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
#include "base/bitmap.h"
|
#include "base/bitmap.h"
|
||||||
#include "gtest/gtest.h"
|
#include "gtest/gtest.h"
|
||||||
|
|
||||||
TEST(Bitmap, basic) {
|
TEST(Bitmap, basic1) {
|
||||||
uint32_t n = 100;
|
uint32_t n = 100;
|
||||||
uint32_t i = 0;
|
uint32_t i = 0;
|
||||||
for (i = 0; i < n; i++) {
|
for (i = 0; i < n; i++) {
|
||||||
@ -10,10 +10,10 @@ TEST(Bitmap, basic) {
|
|||||||
uint8_t* bdata = bitmap_lock_buffer_for_write(b);
|
uint8_t* bdata = bitmap_lock_buffer_for_write(b);
|
||||||
ASSERT_EQ(((intptr_t)(bdata)) % BITMAP_ALIGN_SIZE, (intptr_t)0);
|
ASSERT_EQ(((intptr_t)(bdata)) % BITMAP_ALIGN_SIZE, (intptr_t)0);
|
||||||
ASSERT_EQ(bitmap_get_line_length(b), b->w * 4u);
|
ASSERT_EQ(bitmap_get_line_length(b), b->w * 4u);
|
||||||
ASSERT_EQ(bitmap_is_dirty(b), TRUE);
|
|
||||||
bitmap_unlock_buffer(b);
|
|
||||||
ASSERT_EQ(bitmap_is_dirty(b), FALSE);
|
ASSERT_EQ(bitmap_is_dirty(b), FALSE);
|
||||||
|
bitmap_unlock_buffer(b);
|
||||||
|
ASSERT_EQ(bitmap_is_dirty(b), TRUE);
|
||||||
|
ASSERT_EQ(b->should_free_handle, TRUE);
|
||||||
bitmap_destroy(b);
|
bitmap_destroy(b);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -23,10 +23,38 @@ TEST(Bitmap, basic) {
|
|||||||
ASSERT_EQ(((intptr_t)(bdata)) % BITMAP_ALIGN_SIZE, (intptr_t)0);
|
ASSERT_EQ(((intptr_t)(bdata)) % BITMAP_ALIGN_SIZE, (intptr_t)0);
|
||||||
ASSERT_EQ(bitmap_get_line_length(b), b->w * 2u);
|
ASSERT_EQ(bitmap_get_line_length(b), b->w * 2u);
|
||||||
bitmap_unlock_buffer(b);
|
bitmap_unlock_buffer(b);
|
||||||
|
ASSERT_EQ(b->should_free_handle, TRUE);
|
||||||
bitmap_destroy(b);
|
bitmap_destroy(b);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST(Bitmap, basic2) {
|
||||||
|
bitmap_t bitmap;
|
||||||
|
uint32_t n = 100;
|
||||||
|
uint32_t i = 0;
|
||||||
|
bitmap_t* b = &bitmap;
|
||||||
|
|
||||||
|
for (i = 0; i < n; i++) {
|
||||||
|
bitmap_init_ex(b, i + 1, i + 1, 0, BITMAP_FMT_BGRA8888, NULL);
|
||||||
|
uint8_t* bdata = bitmap_lock_buffer_for_write(b);
|
||||||
|
ASSERT_EQ(((intptr_t)(bdata)) % BITMAP_ALIGN_SIZE, (intptr_t)0);
|
||||||
|
ASSERT_EQ(bitmap_get_line_length(b), b->w * 4u);
|
||||||
|
ASSERT_EQ(bitmap_is_dirty(b), FALSE);
|
||||||
|
bitmap_unlock_buffer(b);
|
||||||
|
ASSERT_EQ(bitmap_is_dirty(b), TRUE);
|
||||||
|
ASSERT_EQ(b->should_free_handle, FALSE);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i = 0; i < n; i++) {
|
||||||
|
bitmap_init_ex(b, i + 1, i + 1, 0, BITMAP_FMT_BGR565, NULL);
|
||||||
|
uint8_t* bdata = bitmap_lock_buffer_for_write(b);
|
||||||
|
ASSERT_EQ(((intptr_t)(bdata)) % BITMAP_ALIGN_SIZE, (intptr_t)0);
|
||||||
|
ASSERT_EQ(bitmap_get_line_length(b), b->w * 2u);
|
||||||
|
bitmap_unlock_buffer(b);
|
||||||
|
ASSERT_EQ(b->should_free_handle, FALSE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
TEST(Bitmap, row_size) {
|
TEST(Bitmap, row_size) {
|
||||||
ASSERT_EQ(TK_BITMAP_MONO_LINE_LENGTH(8), 2);
|
ASSERT_EQ(TK_BITMAP_MONO_LINE_LENGTH(8), 2);
|
||||||
ASSERT_EQ(TK_BITMAP_MONO_LINE_LENGTH(9), 2);
|
ASSERT_EQ(TK_BITMAP_MONO_LINE_LENGTH(9), 2);
|
||||||
|
Loading…
Reference in New Issue
Block a user