初版
This commit is contained in:
@@ -0,0 +1,146 @@
|
||||
#ifndef __BUFFER_MANAGER_H__
|
||||
#define __BUFFER_MANAGER_H__
|
||||
|
||||
|
||||
|
||||
// 缓存buf的状态定义
|
||||
typedef enum buffer_status_def {
|
||||
BUFFER_STATUS_INIT, // 初始
|
||||
BUFFER_STATUS_IDLE, // 空闲
|
||||
BUFFER_STATUS_LOCK, // 锁定
|
||||
BUFFER_STATUS_PEND, // 等待
|
||||
BUFFER_STATUS_USED, // 使用
|
||||
} BUFFER_STATUS;
|
||||
|
||||
|
||||
|
||||
// buffer管理原生API,不建议直接调用原生API,
|
||||
// 防止后续库升级导致调用方法改变,使用时请调用重封装的快捷调用
|
||||
int buffer_manager_set_default_handler(void *buffer_hdl);
|
||||
|
||||
void buffer_manager_set_memory_callback(void *(*malloc)(int size, u32 ram_type, u32 module_type), void (*free)(void *p, u32 ram_type, u32 module_type));
|
||||
|
||||
void *buffer_manager_init_handler(u32 buf_list[], int buf_num);
|
||||
|
||||
void buffer_manager_free_handler(void *buffer_hdl);
|
||||
|
||||
int buffer_manager_set_buf_status(void *buffer_hdl, void *buf, int status);
|
||||
|
||||
int buffer_manager_get_buf_status(void *buffer_hdl, void *buf);
|
||||
|
||||
void *buffer_manager_get_buf_by_status(void *buffer_hdl, int status);
|
||||
|
||||
void *buffer_manager_change_buf_status(void *buffer_hdl, int target, int result);
|
||||
|
||||
void *buffer_manager_status_dump(void *buffer_hdl);
|
||||
|
||||
/* buffer管理API快捷调用 */
|
||||
// 注册buffer管理模块的回调
|
||||
#define buffer_manager_callback(malloc, free) \
|
||||
buffer_manager_set_memory_callback(malloc, free)
|
||||
|
||||
// 初始化buffer管理,创建buffer管理句柄
|
||||
#define buffer_manager_init(hdl, buf, size, block_num) \
|
||||
{ \
|
||||
int BM_i = 0; \
|
||||
int BM_buf_size = (size) / (block_num); \
|
||||
u32 BM_buf_list[3] = {0}; \
|
||||
for (BM_i = 0; BM_i < (block_num); BM_i++) { \
|
||||
BM_buf_list[BM_i] = (u32)((buf) + (BM_buf_size * BM_i)); \
|
||||
} \
|
||||
(hdl) = buffer_manager_init_handler(BM_buf_list, (block_num)); \
|
||||
}
|
||||
|
||||
// 释放buffer管理资源和句柄
|
||||
#define buffer_manager_free(buffer_handler) \
|
||||
buffer_manager_free_handler(buffer_handler)
|
||||
|
||||
// 设置指定buffer的状态
|
||||
#define set_buffer_status(buffer_handler, buf_addr, status) \
|
||||
buffer_manager_set_buf_status(buffer_handler, buf_addr, status)
|
||||
|
||||
// 获取指定buffer的状态
|
||||
#define get_buffer_status(buffer_handler, buf_addr) \
|
||||
buffer_manager_get_buf_status(buffer_handler, buf_addr)
|
||||
|
||||
// 获取指定状态的buffer
|
||||
#define get_buffer_by_status(buffer_handler, status) \
|
||||
buffer_manager_get_buf_by_status(buffer_handler, status)
|
||||
|
||||
// 获取目标状态的buffer,并修改为结果状态
|
||||
#define change_buffer_status(buffer_handler, target, result) \
|
||||
buffer_manager_change_buf_status(buffer_handler, target, result)
|
||||
|
||||
|
||||
// 设置默认句柄,可以设置一个默认句柄,该句柄将作为buffer管理的静态变量,外部无需每次操作都传入该句柄
|
||||
// 需要注意的时,buffer_manager_free时,可以传入NULL来释放默认句柄,但大buffer还需外面主动释放
|
||||
// 即:buffer管理只做状态管理,和自身资源的申请、释放,不管被管理的buffer申请和释放
|
||||
#define set_default_buffer_handler(buffer_handler) \
|
||||
buffer_manager_set_default_handler(buffer_handler)
|
||||
|
||||
|
||||
|
||||
|
||||
/* 快捷获取指定状态的buffer */
|
||||
// 获取空闲状态的buffer
|
||||
#define get_idle_buffer(buffer_handler) \
|
||||
get_buffer_by_status(buffer_handler, BUFFER_STATUS_IDLE)
|
||||
|
||||
// 获取锁定状态的buffer
|
||||
#define get_lock_buffer(buffer_handler) \
|
||||
get_buffer_by_status(buffer_handler, BUFFER_STATUS_LOCK)
|
||||
|
||||
// 获取等待状态的buffer
|
||||
#define get_pend_buffer(buffer_handler) \
|
||||
get_buffer_by_status(buffer_handler, BUFFER_STATUS_PEND)
|
||||
|
||||
// 获取使用状态的buffer
|
||||
#define get_used_buffer(buffer_handler) \
|
||||
get_buffer_by_status(buffer_handler, BUFFER_STATUS_USED)
|
||||
|
||||
|
||||
|
||||
|
||||
/* 快捷获取指定状态的buffer,并修改buffer状态 */
|
||||
// 获取空闲状态的buffer,并修改为锁定状态
|
||||
#define get_idle_buffer_to_lock(buffer_handler) \
|
||||
change_buffer_status(buffer_handler, BUFFER_STATUS_IDLE, BUFFER_STATUS_LOCK)
|
||||
|
||||
// 获取锁定状态的buffer,并修改为等待状态
|
||||
#define get_lock_buffer_to_pend(buffer_handler) \
|
||||
change_buffer_status(buffer_handler, BUFFER_STATUS_LOCK, BUFFER_STATUS_PEND)
|
||||
|
||||
// 获取等待状态的buffer,并修改为使用状态
|
||||
#define get_pend_buffer_to_used(buffer_handler) \
|
||||
change_buffer_status(buffer_handler, BUFFER_STATUS_PEND, BUFFER_STATUS_USED)
|
||||
|
||||
// 获取使用状态的buffer,并修改为空闲状态
|
||||
#define get_used_buffer_to_idle(buffer_handler) \
|
||||
change_buffer_status(buffer_handler, BUFFER_STATUS_USED, BUFFER_STATUS_IDLE)
|
||||
|
||||
|
||||
|
||||
|
||||
/* 快捷设置指定buffer的状态 */
|
||||
// 设置buffer状态为空闲
|
||||
#define set_buffer_idle(buffer_handler, buf) \
|
||||
set_buffer_status(buffer_handler, buf, BUFFER_STATUS_IDLE)
|
||||
|
||||
// 设置buffer状态为锁定
|
||||
#define set_buffer_lock(buffer_handler, buf) \
|
||||
set_buffer_status(buffer_handler, buf, BUFFER_STATUS_LOCK)
|
||||
|
||||
// 设置buffer状态为等待
|
||||
#define set_buffer_pend(buffer_handler, buf) \
|
||||
set_buffer_status(buffer_handler, buf, BUFFER_STATUS_PEND)
|
||||
|
||||
// 设置buffer状态为使用
|
||||
#define set_buffer_used(buffer_handler, buf) \
|
||||
set_buffer_status(buffer_handler, buf, BUFFER_STATUS_USED)
|
||||
|
||||
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
@@ -0,0 +1,81 @@
|
||||
/* ------------------------------------------------------------------------------------*/
|
||||
/**
|
||||
* @file time_count.h
|
||||
*
|
||||
* @brief 时间探针,用于粗略记录程序执行时间
|
||||
*
|
||||
* 使用方法:
|
||||
* 1. 在程序开始执行的位置调用 time_count_start;
|
||||
* 2. 在程序结束执行的位置调用 time_count_end;
|
||||
* 3. 保证 start 和 end 时传入的 id 一致、模块会自动在程序结束位置打印出执行时间,单位 us;
|
||||
* 4. 若打印出 Error 信息,说明 start 和 end 时传入的 id 不一致;
|
||||
* 5. 此方法仅用于粗略统计程序执行时间,非精确时间。可用于性能调试参考。
|
||||
* 注意:
|
||||
* 本模块接口仅应用层可以调用,库里调用会导致宏开关无法关闭,造成资源浪费。
|
||||
* 每start一个时间,会malloc 20byte空间占用,end时会释放
|
||||
*
|
||||
* @author
|
||||
*
|
||||
* @version V1.0.0
|
||||
*
|
||||
* @date 2025-03-18
|
||||
*
|
||||
* Copyright(C) 2010- , JIELI TECHNOLOGY, Inc.
|
||||
* All right reserved.
|
||||
*/
|
||||
/* ------------------------------------------------------------------------------------*/
|
||||
|
||||
#ifndef __TIME_COUNT_H__
|
||||
#define __TIME_COUNT_H__
|
||||
|
||||
// 程序计数功能使能
|
||||
#define TIME_COUNT_ENABLE 0
|
||||
|
||||
|
||||
#if (defined TIME_COUNT_ENABLE && TIME_COUNT_ENABLE)
|
||||
|
||||
#define time_count_start(id) \
|
||||
time_count_pushing(id)
|
||||
|
||||
#define time_count_end(id) \
|
||||
{ \
|
||||
printf("%s(), %d, time count id: %d, time: %llu us\n", __func__, __LINE__, id, time_count_popping(id)); \
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
#define time_count_start(id)
|
||||
|
||||
#define time_count_end(id)
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
/* ------------------------------------------------------------------------------------*/
|
||||
/**
|
||||
* @brief time_count_pushing 将当前时间压入计时栈中
|
||||
*
|
||||
* @Params id 为当前时间命名的id,用于计时出栈时计算运行时间
|
||||
*
|
||||
* @return 当前时间
|
||||
*/
|
||||
/* ------------------------------------------------------------------------------------*/
|
||||
u64 time_count_pushing(u32 id);
|
||||
|
||||
|
||||
/* ------------------------------------------------------------------------------------*/
|
||||
/**
|
||||
* @brief time_count_popping 统计指定ID的程序段运行时间,并将该时间出栈
|
||||
*
|
||||
* @Params id 需要统计时间的ID号,与计时入栈时传入的ID一致
|
||||
*
|
||||
* @return 指定ID的程序段运行时间,如果指定ID没有入栈,则返回当前时间,并打印错误提示
|
||||
*/
|
||||
/* ------------------------------------------------------------------------------------*/
|
||||
u64 time_count_popping(u32 id);
|
||||
|
||||
|
||||
#endif // !__TIME_COUNT_H__
|
||||
|
||||
|
||||
@@ -0,0 +1,55 @@
|
||||
/* Copyright(C) 2010- , JIELI TECHNOLOGY, Inc.
|
||||
* All right reserved.
|
||||
*/
|
||||
|
||||
#ifndef __UI_ADDR_H__
|
||||
#define __UI_ADDR_H__
|
||||
|
||||
#include "system/malloc.h"
|
||||
#include "asm/psram_api.h"
|
||||
|
||||
|
||||
/* ================================= FLASH 地址处理 ================================= */
|
||||
|
||||
/* 判断地址是否在 flash 范围内 */
|
||||
#define UI_ADDR_IN_FLASH(addr) (memory_in_flash((const void *)(addr)))
|
||||
|
||||
/* 判断地址是否在 flash cache 范围内 */
|
||||
#define UI_ADDR_IN_FLASH_CACHE(addr) (memory_in_flash_cache((const void *)(addr)))
|
||||
|
||||
/* 判断地址是否在 flash nocache 范围内 */
|
||||
#define UI_ADDR_IN_FLASH_NOCACHE(addr) (memory_in_flash_nocache((const void *)(addr)))
|
||||
|
||||
|
||||
/* ================================= SRAM 地址处理 ================================= */
|
||||
|
||||
/* 判断地址是否在物理 RAM 范围内 */
|
||||
#define UI_ADDR_IN_PHY_RAM(addr) (memory_in_phy((const void *)(addr)))
|
||||
|
||||
/* 判断地址是否在虚拟 RAM 范围内 */
|
||||
#define UI_ADDR_IN_VLT_RAM(addr) (memory_in_vtl((const void *)(addr)))
|
||||
|
||||
/* 判断地址是否为 RAM 地址 */
|
||||
#define UI_ADDR_IN_RAM(addr) (UI_ADDR_IN_PHY_RAM(addr) || UI_ADDR_IN_VLT_RAM(addr))
|
||||
|
||||
|
||||
|
||||
/* ================================= PSRAM 地址处理 ================================= */
|
||||
|
||||
/* 判断地址是否在 PSRAM 范围 */
|
||||
#define UI_ADDR_IN_PSRAM(addr) (UI_ADDR_IN_PSRAM_NOCACHE(addr) || UI_ADDR_IN_PSRAM_CACHE(addr))
|
||||
|
||||
/* 判断地址是否在 PSRAM nocache 范围*/
|
||||
#define UI_ADDR_IN_PSRAM_NOCACHE(addr) (psram_no_cache_check((void *)(addr)))
|
||||
|
||||
/* 判断地址是否在 PSRAM cache 范围 */
|
||||
#define UI_ADDR_IN_PSRAM_CACHE(addr) (psram_cache_check((void *)(addr)))
|
||||
|
||||
/* PSRAM cache 地址转 nocache*/
|
||||
#define UI_PSRAM_CACHE_TO_NOCACHE(addr) (UI_ADDR_IN_PSRAM_CACHE(addr) ? ((void *)psram_cache_2_no_cache((void *)(addr))) : (void *)(addr))
|
||||
|
||||
/* PSRAM nocache 地址转 cache */
|
||||
#define UI_PSRAM_NOCACHE_TO_CACHE(addr) (UI_ADDR_IN_PSRAM_NOCACHE(addr) ? ((void *)psram_no_cache_2_cache((void *)(addr))) : (void *)(addr))
|
||||
|
||||
#endif
|
||||
|
||||
@@ -0,0 +1,72 @@
|
||||
|
||||
#ifndef __UI_COLOR_H__
|
||||
#define __UI_COLOR_H__
|
||||
|
||||
|
||||
// RGB555
|
||||
#define TO_RGB555(R,G,B) (((((u8)(R))>>3)<<10) | ((((u8)(G))>>3)<<5) | (((u8)(B))>>3))
|
||||
#define TO_ARGB8555(A,R,G,B) ((((u8)(A))<<16) | TO_RGB555(R,G,B))
|
||||
|
||||
#define RGB555_R(C) ((u8)((((C)>>10)&0x1f)<<3)|0x7)
|
||||
#define RGB555_G(C) ((u8)((((C)>>5)&0x1f)<<3)|0x7)
|
||||
#define RGB555_B(C) ((u8)(((C)&0x1f)<<3)|0x7)
|
||||
|
||||
#define ARGB8555_A(C) ((u8)((C)>>16))
|
||||
#define ARGB8555_R(C) RGB555_R(C)
|
||||
#define ARGB8555_G(C) RGB555_G(C)
|
||||
#define ARGB8555_B(C) RGB555_B(C)
|
||||
|
||||
|
||||
// RGB565
|
||||
#define TO_RGB565(R,G,B) (((((u8)(R))>>3)<<11) | ((((u8)(G))>>2)<<5) | (((u8)(B))>>3))
|
||||
#define TO_ARGB8565(A,R,G,B) ((((u8)(A))<<16) | TO_RGB565(R,G,B))
|
||||
|
||||
#define RGB565_R(C) ((u8)(((((C)>>11)&0x1f)<<3)|0x7))
|
||||
#define RGB565_G(C) ((u8)(((((C)>>5)&0x3f)<<2)|0x3))
|
||||
#define RGB565_B(C) ((u8)((((C)&0x1f)<<3)|0x7))
|
||||
|
||||
#define ARGB8565_A(C) ((u8)((C)>>16))
|
||||
#define ARGB8565_R(C) RGB565_R(C)
|
||||
#define ARGB8565_G(C) RGB565_G(C)
|
||||
#define ARGB8565_B(C) RGB565_B(C)
|
||||
|
||||
|
||||
// RGB888
|
||||
#define TO_RGB888(R,G,B) ((((u8)(R))<<16) | (((u8)(G))<<8) | (((u8)(B))))
|
||||
#define TO_ARGB8888(A,R,G,B) ((((u8)(A))<<24) | TO_RGB888(R,G,B))
|
||||
|
||||
#define RGB888_R(C) ((u8)((C)>>16))
|
||||
#define RGB888_G(C) ((u8)((C)>>8))
|
||||
#define RGB888_B(C) ((u8)((C)&0xff))
|
||||
|
||||
#define ARGB8888_A(C) ((u8)((C)>>24))
|
||||
#define ARGB8888_R(C) RGB888_R(C)
|
||||
#define ARGB8888_G(C) RGB888_G(C)
|
||||
#define ARGB8888_B(C) RGB888_B(C)
|
||||
|
||||
|
||||
// 555转565、888
|
||||
#define RGB555_TO_RGB565(C) TO_RGB565(RGB555_R(C),RGB555_G(C),RGB555_B(C))
|
||||
#define RGB555_TO_RGB888(C) TO_RGB888(RGB555_R(C),RGB555_G(C),RGB555_B(C))
|
||||
#define ARGB8555_TO_ARGB8565(C) TO_ARGB8565(ARGB8555_A(C),ARGB8555_R(C),ARGB8555_G(C),ARGB8555_B(C))
|
||||
#define ARGB8555_TO_ARGB8888(C) TO_ARGB8888(ARGB8555_A(C),ARGB8555_R(C),ARGB8555_G(C),ARGB8555_B(C))
|
||||
|
||||
// 565转555、888
|
||||
#define RGB565_TO_RGB555(C) TO_RGB555(RGB565_R(C),RGB565_G(C),RGB565_B(C))
|
||||
#define RGB565_TO_RGB888(C) TO_RGB888(RGB565_R(C),RGB565_G(C),RGB565_B(C))
|
||||
#define ARGB8565_TO_ARGB8555(C) TO_ARGB8555(ARGB8565_A(C),ARGB8565_R(C),ARGB8565_G(C),ARGB8565_B(C))
|
||||
#define ARGB8565_TO_ARGB8888(C) TO_ARGB8888(ARGB8565_A(C),ARGB8565_R(C),ARGB8565_G(C),ARGB8565_B(C))
|
||||
|
||||
// 888转555、565
|
||||
#define RGB888_TO_RGB555(C) TO_RGB555(RGB888_R(C),RGB888_G(C),RGB888_B(C))
|
||||
#define RGB888_TO_RGB565(C) TO_RGB565(RGB888_R(C),RGB888_G(C),RGB888_B(C))
|
||||
#define ARGB8888_TO_ARGB8555(C) TO_ARGB8555(ARGB8888_A(C),ARGB8888_R(C),ARGB8888_G(C),ARGB8888_B(C))
|
||||
#define ARGB8888_TO_ARGB8565(C) TO_ARGB8565(ARGB8888_A(C),ARGB8888_R(C),ARGB8888_G(C),ARGB8888_B(C))
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
@@ -0,0 +1,97 @@
|
||||
#ifndef __PUBLIC_UI_EXPAND_H__
|
||||
#define __PUBLIC_UI_EXPAND_H__
|
||||
|
||||
|
||||
#ifndef ABS
|
||||
#define ABS(x) (((x) > 0) ? (x) : (-(x))) // 整形绝对值
|
||||
#endif
|
||||
|
||||
#ifndef INV
|
||||
#define INV(x) (((x) > 0) ? (-(x)) : (x)) // 取反向值
|
||||
#endif
|
||||
|
||||
#ifndef ASS
|
||||
#define ASS(a, x) (((a) > 0) ? ABS(x) : INV(x)) // 取a同号
|
||||
#endif
|
||||
|
||||
#ifndef OPE
|
||||
#define OPE(x) (((x) > 0) ? 1 : (-1)) // 取x符号
|
||||
#endif
|
||||
|
||||
#ifndef FABS
|
||||
#define FABS(x) (((x) < 0.0f) ? (-(x)) : (x)) // 浮点绝对值
|
||||
#endif
|
||||
|
||||
#ifndef MAX
|
||||
#define MAX(a, b) (((a) > (b)) ? (a) : (b)) // 取较大值
|
||||
#endif
|
||||
|
||||
#ifndef MIN
|
||||
#define MIN(a, b) (((a) < (b)) ? (a) : (b)) // 取较小值
|
||||
#endif
|
||||
|
||||
|
||||
#ifndef UI_PI
|
||||
#define UI_PI 3.14159265f // 定义PI
|
||||
#endif
|
||||
|
||||
|
||||
#ifndef ANGLE_TO_RADIAN
|
||||
#define ANGLE_TO_RADIAN(a) (((a) * (UI_PI)) / 180.0f) // 角度转弧度
|
||||
#endif
|
||||
|
||||
|
||||
#ifndef RADIAN_TO_ANGLE
|
||||
#define RADIAN_TO_ANGLE(r) (((r) * 180.0f) / (UI_PI)) // 弧度转角度
|
||||
#endif
|
||||
|
||||
|
||||
#ifndef INT_MAX
|
||||
#define INT_MAX (0x7FFFFFFF) // 2147483647
|
||||
#endif
|
||||
|
||||
|
||||
#ifndef INT_MIN
|
||||
#define INT_MIN (-INT_MAX - 1)
|
||||
#endif
|
||||
|
||||
|
||||
#ifndef U16_MAX
|
||||
#define U16_MAX (65535) // u16 最大值
|
||||
#endif
|
||||
|
||||
|
||||
// 字符串HASH化,djb2
|
||||
#ifndef HASH_STRING
|
||||
#define HASH_STRING(str) ({ \
|
||||
unsigned int hash = 5381; \
|
||||
const char *s = str; \
|
||||
while (*s) { \
|
||||
hash = ((hash << 5) + hash) + (*s++); \
|
||||
} \
|
||||
hash; \
|
||||
})
|
||||
#endif
|
||||
|
||||
|
||||
// 计算数组长度
|
||||
#ifndef ARRAY_LEN
|
||||
#define ARRAY_LEN(array) (sizeof(array)/sizeof(array[0]))
|
||||
#endif
|
||||
|
||||
|
||||
#define DUMP_RECT(func, line, name, rect) \
|
||||
printf("[RECT] %s() %d, %s [%d, %d, %d, %d]\n", func, line, name, (rect)->left, (rect)->top, (rect)->width, (rect)->height)
|
||||
|
||||
#define JLUI_RECT_TO_CSS(x, X) (x)//((x) * 10000 / (X)) // 绝对坐标转相对坐标
|
||||
#define JLUI_CSS_TO_RECT(c, C) ((c) * (C) / 10000) // 相对坐标转绝对坐标
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
@@ -0,0 +1,55 @@
|
||||
|
||||
#ifndef __UI_SCROLL_VIEW_H__
|
||||
#define __UI_SCROLL_VIEW_H__
|
||||
|
||||
|
||||
|
||||
typedef struct ui_scrollview_t {
|
||||
u16 timer_id; // 定时器ID
|
||||
u16 interval; // 定时器中断间隔
|
||||
void *priv; // 私有参数
|
||||
|
||||
int pos;
|
||||
|
||||
int record;
|
||||
int cursor;
|
||||
int target;
|
||||
|
||||
int min_pos;
|
||||
int max_pos;
|
||||
int bounces;
|
||||
|
||||
int velocity;
|
||||
int distance;
|
||||
|
||||
int scroll_mode;
|
||||
int align_mode;
|
||||
|
||||
int align_gap;
|
||||
int align_dir; // 对齐方向
|
||||
|
||||
|
||||
int (*cb)(struct ui_scrollview_t *s, void *priv, int pos);
|
||||
} ui_scrollview_t, *pui_scrollview_t;
|
||||
|
||||
|
||||
int ui_scrollview_init(ui_scrollview_t *s, void *priv, int pos, int (*cb)(ui_scrollview_t *s, void *priv, int pos));
|
||||
int ui_scrollview_free(ui_scrollview_t *s);
|
||||
int ui_scrollview_stop(ui_scrollview_t *s);
|
||||
|
||||
int ui_scrollview_set_bounces(ui_scrollview_t *s, int bounces);
|
||||
int ui_scrollview_set_scroll_area(ui_scrollview_t *s, int min, int max);
|
||||
int ui_scrollview_set_align_by_gap(ui_scrollview_t *s, int gap);
|
||||
int ui_scrollview_set_align_by_tab(ui_scrollview_t *s, int *tab, int size);
|
||||
|
||||
int ui_scrollview_auto_align(ui_scrollview_t *s);
|
||||
int ui_scrollview_move_offset(ui_scrollview_t *s, int offset);
|
||||
int ui_scrollview_move_accrue(ui_scrollview_t *s, int offset);
|
||||
int ui_scrollview_move_velocity(ui_scrollview_t *s, int v);
|
||||
int ui_scrollview_move_distance(ui_scrollview_t *s, int dist);
|
||||
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
Reference in New Issue
Block a user