1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015 |
- #ifndef __VIEW_MANGER_H__
- #define __VIEW_MANGER_H__
- #include <ui_region.h>
- #include <sys/slist.h>
- #include <input_manager.h>
- #include <ui_surface.h>
- #define TRANSMIT_ALL_KEY_EVENT 0xFFFFFFFF
- #define UI_VIEW_ANIM_SHIFT (10)
- #define UI_VIEW_ANIM_RANGE (1 << UI_VIEW_ANIM_SHIFT)
- #define VIEW_INVALID_ID VIEW_ID_ALL
- #define MSGBOX_INVALID_ID MSGBOX_ID_ALL
- #define TRANSFORM_BUFFER_NUM_MAX 2
- enum UI_MSG_ID {
- MSG_VIEW_NULL = 0,
- MSG_VIEW_CREATE,
- MSG_VIEW_PRELOAD,
- MSG_VIEW_LAYOUT,
- MSG_VIEW_DELETE,
- MSG_VIEW_PAINT,
- MSG_VIEW_REFRESH,
- MSG_VIEW_FOCUS,
- MSG_VIEW_DEFOCUS,
- MSG_VIEW_PAUSE,
- MSG_VIEW_RESUME,
- MSG_VIEW_UPDATE,
- MSG_VIEW_RESUME_DISPLAY,
- MSG_VIEW_KEY,
- MSG_VIEW_SET_HIDDEN,
- MSG_VIEW_SET_ORDER,
- MSG_VIEW_SET_POS,
- MSG_VIEW_SET_DRAG_ATTRIBUTE,
- MSG_VIEW_SET_CALLBACK,
- MSG_VIEW_SCROLL_BEGIN,
- MSG_VIEW_SCROLL_END,
- MSG_VIEW_SET_BUF_COUNT,
- MSG_DISPLAY_POST,
- MSG_DISPLAY_RESUME,
- MSG_DISPLAY_LOCK,
-
- MSG_MSGBOX_POPUP,
- MSG_MSGBOX_CLOSE,
- MSG_MSGBOX_CANCEL,
- MSG_MSGBOX_PAINT,
- MSG_MSGBOX_KEY,
-
- MSG_GESTURE_SET_SCROLL_DIR,
- MSG_GESTURE_LOCK_SCROLL,
- MSG_GESTURE_WAIT_RELEASE,
- MSG_VIEW_TRANSFORM,
- MSG_VIEW_TRANSFORM_START,
- MSG_VIEW_TRANSFORM_END,
-
- MSG_VIEW_USER_OFFSET = 128,
- };
- enum UI_CALLBACK_ID {
- UI_CB_MSGBOX,
- UI_CB_SCROLL,
- UI_CB_MONITOR,
- UI_CB_KEYEVENT,
- UI_CB_TRANSFORM_SWITCH,
- UI_CB_TRANSFORM_SCROLL,
- UI_NUM_CBS,
- };
- enum UI_VIEW_ID {
- VIEW_ID_ALL = 0,
- VIEW_ID_USER_OFFSET = 1,
- };
- enum UI_MSGBOX_ID {
- MSGBOX_ID_ALL = 0,
- MSGBOX_ID_USER_OFFSET = 1,
- };
- enum UI_VIEW_TYPE {
- UI_VIEW_Unknown = 0,
- UI_VIEW_LVGL,
- UI_VIEW_USER,
- NUM_VIEW_TYPES,
- };
- enum UI_VIEW_CREATE_FLAGS {
- UI_CREATE_FLAG_NO_PRELOAD = (1 << 0),
- UI_CREATE_FLAG_SHOW = (1 << 1),
- UI_CREATE_FLAG_TRANSPARENT = (1 << 2),
- UI_CREATE_FLAG_FLOATING = (1 << 3),
- UI_CREATE_FLAG_NO_FB = (1 << 4),
- UI_CREATE_FLAG_POST_ON_PAINT = (1 << 5),
- };
- enum UI_VIEW_FLAGS {
- UI_FLAG_HIDDEN = (1 << 0),
- UI_FLAG_FOCUSED = (1 << 1),
- UI_FLAG_PAUSED = (1 << 2),
- UI_FLAG_INFLATED = (1 << 3),
- UI_FLAG_PAINTED = (1 << 4),
- UI_FLAG_UPDATED = (1 << 5),
- UI_FLAG_DELETING = (1 << 7),
- };
- enum UI_VIEW_REFRESH_FLAGS {
-
- UI_REFR_FLAG_MOVED = (1 << 0),
- UI_REFR_FLAG_CHANGED = (1 << 1),
- UI_REFR_FLAG_FIRST_CHANGED = (1 << 2),
- UI_REFR_FLAG_LAST_CHANGED = (1 << 3),
- };
- enum UI_VIEW_DRAG_ATTRIBUTE {
- UI_DRAG_NONE = 0,
- UI_DRAG_DROPDOWN = (1 << 0),
- UI_DRAG_DROPUP = (1 << 1),
- UI_DRAG_DROPLEFT = (1 << 2),
- UI_DRAG_DROPRIGHT = (1 << 3),
- UI_DRAG_MOVEDOWN = (1 << 4),
- UI_DRAG_MOVEUP = (1 << 5),
- UI_DRAG_MOVELEFT = (1 << 6),
- UI_DRAG_MOVERIGHT = (1 << 7),
- };
- enum UI_VIEW_ANIMATION_STATE {
- UI_ANIM_NONE,
- UI_ANIM_START,
- UI_ANIM_RUNNING,
- UI_ANIM_STOP,
- };
- enum UI_VIEW_SLIDE_ANIMATION_TYPE {
- UI_ANIM_SLIDE_IN_DOWN = 1,
- UI_ANIM_SLIDE_IN_UP,
- UI_ANIM_SLIDE_IN_RIGHT,
- UI_ANIM_SLIDE_IN_LEFT,
- UI_ANIM_SLIDE_OUT_UP,
- UI_ANIM_SLIDE_OUT_DOWN,
- UI_ANIM_SLIDE_OUT_LEFT,
- UI_ANIM_SLIDE_OUT_RIGHT,
- };
- struct ui_view_anim_cfg;
- struct view_data;
- typedef struct msg_view_transform_param {
- graphic_buffer_t* dst;
- graphic_buffer_t* src_old;
- graphic_buffer_t* src_new;
- ui_region_t region_old;
- ui_region_t region_new;
- ui_region_t crop_old;
- ui_region_t crop_new;
- uint16_t rotation;
- uint8_t first_frame : 1;
- uint8_t round_screen : 1;
- } ui_transform_param_t;
- typedef int (*ui_view_proc_t)(uint16_t view_id, uint8_t msg_id, void *msg_data);
- typedef int (*ui_view_proc2_t)(uint16_t view_id, struct view_data *view_data, uint8_t msg_id, void *msg_data);
- typedef int (*ui_get_state_t)(void);
- typedef bool (*ui_state_match_t)(uint32_t current_state, uint32_t match_state);
- typedef void (*ui_msgbox_popup_cb_t)(uint16_t msgbox_id, uint8_t msg_id, void *msg_data, void *user_data);
- typedef void (*ui_scroll_cb_t)(uint16_t view_id, uint8_t msg_id);
- typedef void (*ui_monitor_cb_t)(uint16_t view_id, uint8_t msg_id, void *msg_data);
- typedef void (*ui_keyevent_cb_t)(uint16_t view_id, uint32_t event);
- typedef void (*ui_transform_cb_t)(const ui_transform_param_t *param, int *trans_end);
- typedef void (*ui_view_drag_anim_cb_t)(uint16_t view_id,
- const ui_point_t *scroll_throw_vect, struct ui_view_anim_cfg *cfg);
- typedef int32_t (*ui_view_anim_path_cb_t)(int32_t elaps);
- typedef void (*ui_view_anim_stop_cb_t)(uint16_t view_id, const ui_point_t *pos);
- typedef struct ui_key_msg_data {
- uint32_t event;
- bool done;
- } ui_key_msg_data_t;
- typedef ui_key_msg_data_t msg_view_key_data_t;
- typedef struct view_user_msg_data {
- uint16_t id;
- union {
- void * data;
- uintptr_t value;
- };
- } view_user_msg_data_t;
- typedef struct {
-
- uint32_t key_val;
-
- uint32_t key_type;
-
- uint32_t app_state;
-
- uint32_t app_msg;
-
- uint32_t key_policy;
- } ui_key_map_t;
- typedef struct view_data {
-
-
- void *display;
- struct surface *surface;
-
- const void *presenter;
- void *user_data;
- } view_data_t;
- typedef struct {
- ui_region_t region;
- ui_view_proc_t view_proc;
- ui_get_state_t view_get_state;
-
- ui_state_match_t view_state_match;
- const ui_key_map_t *view_key_map;
- void *app_id;
- uint16_t flags;
- uint16_t order;
- } ui_view_info_t;
- typedef struct view_entry {
-
- const char *app_id;
-
- ui_view_proc_t proc;
- ui_view_proc2_t proc2;
-
- uint16_t id;
-
- uint8_t default_order;
-
- uint8_t type;
-
- uint16_t width;
-
- uint16_t height;
- } view_entry_t;
- typedef struct {
- sys_snode_t node;
- #ifdef CONFIG_UI_SERVICE
- const view_entry_t *entry;
- ui_region_t region;
- uint8_t flags;
- uint8_t refr_flags;
- uint8_t create_flags;
- uint8_t order;
- uint8_t drag_attr;
-
- uint8_t focused;
- ui_view_drag_anim_cb_t drag_anim_cb;
- view_data_t data;
- #else
- void *app_id;
- ui_view_info_t info;
- uint16_t view_id;
- #endif
- } ui_view_context_t;
- typedef struct ui_view_anim_cfg {
- ui_point_t start;
- ui_point_t stop;
- uint16_t duration;
- ui_view_anim_path_cb_t path_cb;
- ui_view_anim_stop_cb_t stop_cb;
- } ui_view_anim_cfg_t;
- typedef struct {
- uint8_t state;
- uint8_t is_slide : 1;
- uint16_t view_id;
- uint16_t last_view_id;
- ui_point_t last_view_offset;
- uint32_t start_time;
- uint16_t elapsed;
- ui_view_anim_cfg_t cfg;
- } ui_view_animation_t;
- #ifdef CONFIG_SIMULATOR
- # define VIEW_ENTRY_ATTR
- #else
- # define VIEW_ENTRY_ATTR __attribute__((__section__(".view_entry")))
- #endif
- #define VIEW_DEFINE(app_name, view_proc, view_get_state, view_key_map,\
- view_id, order, view_type, view_w, view_h) \
- const struct view_entry __view_entry_##app_name##view_id \
- VIEW_ENTRY_ATTR = { \
- .app_id = #app_name, \
- .proc = view_proc, \
- .id = view_id, \
- .default_order = order, \
- .type = view_type, \
- .width = view_w, \
- .height = view_h, \
- }
- #define VIEW_DEFINE2(app_name, view_proc, view_get_state, view_key_map,\
- view_id, order, view_type, view_w, view_h) \
- const struct view_entry __view_entry_##app_name##view_id \
- VIEW_ENTRY_ATTR = { \
- .app_id = #app_name, \
- .proc2 = view_proc, \
- .id = view_id, \
- .default_order = order, \
- .type = view_type, \
- .width = view_w, \
- .height = view_h, \
- }
- #ifdef __cplusplus
- #define EXTERN extern "C"
- extern "C"
- {
- #else
- #define EXTERN extern
- #endif
- view_data_t *view_get_data(uint16_t view_id);
- static inline void *view_get_display(view_data_t *data)
- {
- return data->display;
- }
- static inline void *view_get_surface(view_data_t *data)
- {
- return data->surface;
- }
- static inline const void *view_get_presenter(view_data_t *data)
- {
- return data->presenter;
- }
- uint8_t view_set_refresh_rate(uint16_t view_id, uint8_t rate_hz);
- int view_wait_for_refresh(uint16_t view_id, int timeout);
- int view_set_refresh_en(uint16_t view_id, bool enabled);
- bool view_is_hidden(uint16_t view_id);
- bool view_is_visible(uint16_t view_id);
- bool view_is_focused(uint16_t view_id);
- bool view_is_paused(uint16_t view_id);
- bool view_is_inflated(uint16_t view_id);
- bool view_is_scrolling(uint16_t view_id);
- int16_t view_get_x(uint16_t view_id);
- int16_t view_get_y(uint16_t view_id);
- int view_get_pos(uint16_t view_id, int16_t *x, int16_t *y);
- int16_t view_get_width(uint16_t view_id);
- int16_t view_get_height(uint16_t view_id);
- int view_get_region(uint16_t view_id, ui_region_t *region);
- int view_set_pos(uint16_t view_id, int16_t x, int16_t y);
- int view_set_drag_pos(uint16_t view_id, int16_t x, int16_t y);
- int view_set_drag_attribute(uint16_t view_id, uint8_t drag_attribute, bool keep_pos);
- uint8_t view_get_drag_attribute(uint16_t view_id);
- bool view_has_move_attribute(uint16_t view_id);
- int view_set_drag_anim_cb(uint16_t view_id, ui_view_drag_anim_cb_t drag_cb);
- int16_t view_manager_get_disp_xres(void);
- int16_t view_manager_get_disp_yres(void);
- uint16_t view_manager_get_disp_rotation(void);
- uint16_t view_manager_get_draggable_view(uint8_t gesture, bool *towards_screen);
- uint16_t view_manager_get_focused_view(void);
- void view_manager_dump(void);
- void view_manager_pre_anim_refocus(uint16_t view_id);
- void view_manager_post_anim_refocus(void);
- int view_manager_get_slide_animation_config(uint16_t view_id,
- ui_view_anim_cfg_t *cfg, uint8_t animation_type);
- int view_manager_slide_animation_start(uint16_t view_id,
- uint16_t last_view_id, uint8_t animation_type, ui_view_anim_cfg_t *cfg);
- int view_manager_get_drag_animation_config(uint16_t view_id,
- ui_view_anim_cfg_t *cfg, input_dev_runtime_t *runtime);
- int view_manager_drag_animation_start(uint16_t view_id, ui_view_anim_cfg_t *cfg);
- uint16_t view_manager_get_current_view_id(void);
- view_entry_t * view_manager_get_view_entry(uint16_t view_id);
- void view_manager_transform_views(int abort);
- bool view_manager_is_scrolling(void);
- int view_manager_set_callback(uint8_t id, void * callback);
- #undef EXTERN
- #ifdef __cplusplus
- }
- #endif
- #endif
|