mirror of
https://gitee.com/Lyon1998/pikapython.git
synced 2025-01-29 17:22:56 +08:00
support event for lvgl
This commit is contained in:
parent
baf68767e0
commit
af2d677e32
24
examples/lvgl/lv_callback1.py
Normal file
24
examples/lvgl/lv_callback1.py
Normal file
@ -0,0 +1,24 @@
|
||||
import pika_lvgl as lv
|
||||
import PikaStdLib
|
||||
mem = PikaStdLib.MemChecker()
|
||||
|
||||
|
||||
def event_cb_1(evt):
|
||||
print('in evt1')
|
||||
print('mem used now: %0.2f kB' % (mem.getNow()))
|
||||
|
||||
|
||||
def event_cb_2(evt):
|
||||
print('in evt2')
|
||||
print('mem used now: %0.2f kB' % (mem.getNow()))
|
||||
|
||||
|
||||
btn1 = lv.btn(lv.scr_act())
|
||||
btn1.align(lv.ALIGN.TOP_MID, 0, 10)
|
||||
btn2 = lv.btn(lv.scr_act())
|
||||
btn2.align(lv.ALIGN.TOP_MID, 0, 50)
|
||||
btn1.add_event_cb(event_cb_1, lv.EVENT.CLICKED, 0)
|
||||
btn2.add_event_cb(event_cb_2, lv.EVENT.CLICKED, 0)
|
||||
|
||||
print('mem used max: %0.2f kB' % (mem.getMax()))
|
||||
print('mem used now: %0.2f kB' % (mem.getNow()))
|
@ -4,6 +4,8 @@
|
||||
#include "pika_lvgl_arc.h"
|
||||
#include "pika_lvgl_lv_obj.h"
|
||||
|
||||
PikaObj* pika_lv_event_listener_g;
|
||||
|
||||
PikaObj* pika_lvgl_scr_act(PikaObj* self) {
|
||||
PikaObj* new_obj = newNormalObj(New_TinyObj);
|
||||
lv_obj_t* lv_obj = lv_scr_act();
|
||||
@ -12,6 +14,8 @@ PikaObj* pika_lvgl_scr_act(PikaObj* self) {
|
||||
}
|
||||
|
||||
void pika_lvgl___init__(PikaObj* self) {
|
||||
obj_newDirectObj(self, "lv_event_listener", New_TinyObj);
|
||||
pika_lv_event_listener_g = obj_getObj(self, "lv_event_listener");
|
||||
obj_newDirectObj(self, "ALIGN", New_TinyObj);
|
||||
obj_setInt(self, "ALIGN.CENTER", LV_ALIGN_CENTER);
|
||||
obj_setInt(self, "ALIGN.DEFAULT", LV_ALIGN_DEFAULT);
|
||||
@ -77,6 +81,54 @@ void pika_lvgl___init__(PikaObj* self) {
|
||||
obj_setInt(self, "STATE.USER_3", LV_STATE_USER_3);
|
||||
obj_setInt(self, "STATE.USER_4", LV_STATE_USER_4);
|
||||
obj_setInt(self, "STATE.ANY", LV_STATE_ANY);
|
||||
|
||||
obj_newDirectObj(self, "EVENT", New_TinyObj);
|
||||
obj_setInt(self, "EVENT.ALL", LV_EVENT_ALL);
|
||||
obj_setInt(self, "EVENT.PRESSED", LV_EVENT_PRESSED);
|
||||
obj_setInt(self, "EVENT.PRESSING", LV_EVENT_PRESSING);
|
||||
obj_setInt(self, "EVENT.PRESS_LOST", LV_EVENT_PRESS_LOST);
|
||||
obj_setInt(self, "EVENT.SHORT_CLICKED", LV_EVENT_SHORT_CLICKED);
|
||||
obj_setInt(self, "EVENT.LONG_PRESSED", LV_EVENT_LONG_PRESSED);
|
||||
obj_setInt(self, "EVENT.LONG_PRESSED_REPEAT", LV_EVENT_LONG_PRESSED_REPEAT);
|
||||
obj_setInt(self, "EVENT.CLICKED", LV_EVENT_CLICKED);
|
||||
obj_setInt(self, "EVENT.RELEASED", LV_EVENT_RELEASED);
|
||||
obj_setInt(self, "EVENT.SCROLL_BEGIN", LV_EVENT_SCROLL_BEGIN);
|
||||
obj_setInt(self, "EVENT.SCROLL_END", LV_EVENT_SCROLL_END);
|
||||
obj_setInt(self, "EVENT.SCROLL", LV_EVENT_SCROLL);
|
||||
obj_setInt(self, "EVENT.GESTURE", LV_EVENT_GESTURE);
|
||||
obj_setInt(self, "EVENT.KEY", LV_EVENT_KEY);
|
||||
obj_setInt(self, "EVENT.FOCUSED", LV_EVENT_FOCUSED);
|
||||
obj_setInt(self, "EVENT.DEFOCUSED", LV_EVENT_DEFOCUSED);
|
||||
obj_setInt(self, "EVENT.LEAVE", LV_EVENT_LEAVE);
|
||||
obj_setInt(self, "EVENT.HIT_TEST", LV_EVENT_HIT_TEST);
|
||||
obj_setInt(self, "EVENT.COVER_CHECK", LV_EVENT_COVER_CHECK);
|
||||
obj_setInt(self, "EVENT.REFR_EXT_DRAW_SIZE", LV_EVENT_REFR_EXT_DRAW_SIZE);
|
||||
obj_setInt(self, "EVENT.DRAW_MAIN_BEGIN", LV_EVENT_DRAW_MAIN_BEGIN);
|
||||
obj_setInt(self, "EVENT.DRAW_MAIN", LV_EVENT_DRAW_MAIN);
|
||||
obj_setInt(self, "EVENT.DRAW_MAIN_END", LV_EVENT_DRAW_MAIN_END);
|
||||
obj_setInt(self, "EVENT.DRAW_POST_BEGIN", LV_EVENT_DRAW_POST_BEGIN);
|
||||
obj_setInt(self, "EVENT.DRAW_POST", LV_EVENT_DRAW_POST);
|
||||
obj_setInt(self, "EVENT.DRAW_POST_END", LV_EVENT_DRAW_POST_END);
|
||||
obj_setInt(self, "EVENT.DRAW_PART_BEGIN", LV_EVENT_DRAW_PART_BEGIN);
|
||||
obj_setInt(self, "EVENT.DRAW_PART_END", LV_EVENT_DRAW_PART_END);
|
||||
obj_setInt(self, "EVENT.VALUE_CHANGED", LV_EVENT_VALUE_CHANGED);
|
||||
obj_setInt(self, "EVENT.INSERT", LV_EVENT_INSERT);
|
||||
obj_setInt(self, "EVENT.REFRESH", LV_EVENT_REFRESH);
|
||||
obj_setInt(self, "EVENT.READY", LV_EVENT_READY);
|
||||
obj_setInt(self, "EVENT.CANCEL", LV_EVENT_CANCEL);
|
||||
obj_setInt(self, "EVENT.DELETE", LV_EVENT_DELETE);
|
||||
obj_setInt(self, "EVENT.CHILD_CHANGED", LV_EVENT_CHILD_CHANGED);
|
||||
obj_setInt(self, "EVENT.CHILD_CREATED", LV_EVENT_CHILD_CREATED);
|
||||
obj_setInt(self, "EVENT.CHILD_DELETED", LV_EVENT_CHILD_DELETED);
|
||||
obj_setInt(self, "EVENT.SCREEN_UNLOAD_START", LV_EVENT_SCREEN_UNLOAD_START);
|
||||
obj_setInt(self, "EVENT.SCREEN_LOAD_START", LV_EVENT_SCREEN_LOAD_START);
|
||||
obj_setInt(self, "EVENT.SCREEN_LOADED", LV_EVENT_SCREEN_LOADED);
|
||||
obj_setInt(self, "EVENT.SCREEN_UNLOADED", LV_EVENT_SCREEN_UNLOADED);
|
||||
obj_setInt(self, "EVENT.SIZE_CHANGED", LV_EVENT_SIZE_CHANGED);
|
||||
obj_setInt(self, "EVENT.STYLE_CHANGED", LV_EVENT_STYLE_CHANGED);
|
||||
obj_setInt(self, "EVENT.LAYOUT_CHANGED", LV_EVENT_LAYOUT_CHANGED);
|
||||
obj_setInt(self, "EVENT.GET_SELF_SIZE", LV_EVENT_GET_SELF_SIZE);
|
||||
obj_setInt(self, "EVENT.PREPROCESS", LV_EVENT_PREPROCESS);
|
||||
}
|
||||
|
||||
PikaObj* pika_lvgl_obj(PikaObj* self, PikaObj* parent) {
|
||||
|
@ -4,6 +4,55 @@ from PikaObj import *
|
||||
def __init__(): ...
|
||||
|
||||
|
||||
class EVENT:
|
||||
ALL: int
|
||||
PRESSED: int
|
||||
PRESSING: int
|
||||
PRESS_LOST: int
|
||||
SHORT_CLICKED: int
|
||||
LONG_PRESSED: int
|
||||
LONG_PRESSED_REPEAT: int
|
||||
CLICKED: int
|
||||
RELEASED: int
|
||||
SCROLL_BEGIN: int
|
||||
SCROLL_END: int
|
||||
SCROLL: int
|
||||
GESTURE: int
|
||||
KEY: int
|
||||
FOCUSED: int
|
||||
DEFOCUSED: int
|
||||
LEAVE: int
|
||||
HIT_TEST: int
|
||||
COVER_CHECK: int
|
||||
REFR_EXT_DRAW_SIZE: int
|
||||
DRAW_MAIN_BEGIN: int
|
||||
DRAW_MAIN: int
|
||||
DRAW_MAIN_END: int
|
||||
DRAW_POST_BEGIN: int
|
||||
DRAW_POST: int
|
||||
DRAW_POST_END: int
|
||||
DRAW_PART_BEGIN: int
|
||||
DRAW_PART_END: int
|
||||
VALUE_CHANGED: int
|
||||
INSERT: int
|
||||
REFRESH: int
|
||||
READY: int
|
||||
CANCEL: int
|
||||
DELETE: int
|
||||
CHILD_CHANGED: int
|
||||
CHILD_CREATED: int
|
||||
CHILD_DELETED: int
|
||||
SCREEN_UNLOAD_START: int
|
||||
SCREEN_LOAD_START: int
|
||||
SCREEN_LOADED: int
|
||||
SCREEN_UNLOADED: int
|
||||
SIZE_CHANGED: int
|
||||
STYLE_CHANGED: int
|
||||
LAYOUT_CHANGED: int
|
||||
GET_SELF_SIZE: int
|
||||
PREPROCESS: int
|
||||
|
||||
|
||||
class ALIGN:
|
||||
DEFAULT: int
|
||||
TOP_LEFT: int
|
||||
@ -57,6 +106,10 @@ class ANIM:
|
||||
ON: int
|
||||
|
||||
|
||||
class lv_event(TinyObj):
|
||||
def get_code(self) -> int: ...
|
||||
|
||||
|
||||
class lv_obj(TinyObj):
|
||||
def center(self): ...
|
||||
def set_size(self, size_x: int, size_y: int): ...
|
||||
@ -65,6 +118,7 @@ class lv_obj(TinyObj):
|
||||
def update_layout(self): ...
|
||||
def set_width(self, w: int): ...
|
||||
def add_state(self, state: int): ...
|
||||
def add_event_cb(self, event_cb: any, filter: int, user_data: pointer): ...
|
||||
|
||||
|
||||
def obj(parent: lv_obj) -> lv_obj: ...
|
||||
|
8
package/pika_lvgl/pika_lvgl_lv_event.c
Normal file
8
package/pika_lvgl/pika_lvgl_lv_event.c
Normal file
@ -0,0 +1,8 @@
|
||||
#include "lvgl.h"
|
||||
#include "pika_lvgl_lv_event.h"
|
||||
|
||||
int pika_lvgl_lv_event_get_code(PikaObj *self){
|
||||
lv_event_t *lv_event = obj_getPtr(self, "lv_event");
|
||||
return lv_event_get_code(lv_event);
|
||||
}
|
||||
|
@ -1,8 +1,12 @@
|
||||
#include "pika_lvgl_lv_obj.h"
|
||||
#include "BaseObj.h"
|
||||
#include "dataStrs.h"
|
||||
#include "lvgl.h"
|
||||
#include "pika_lvgl.h"
|
||||
#include "pika_lvgl_arc.h"
|
||||
#include "pika_lvgl_lv_event.h"
|
||||
|
||||
extern PikaObj* pika_lv_event_listener_g;
|
||||
|
||||
void pika_lvgl_lv_obj_center(PikaObj* self) {
|
||||
lv_obj_t* lv_obj = obj_getPtr(self, "lv_obj");
|
||||
@ -38,3 +42,52 @@ void pika_lvgl_lv_obj_add_state(PikaObj* self, int state) {
|
||||
lv_obj_t* lv_obj = obj_getPtr(self, "lv_obj");
|
||||
lv_obj_add_state(lv_obj, state);
|
||||
}
|
||||
|
||||
PikaObj* eventLisener_getHandler(PikaObj* self, uintptr_t event_id) {
|
||||
Args buffs = {0};
|
||||
char* event_name =
|
||||
strsFormat(&buffs, PIKA_SPRINTF_BUFF_SIZE, "%d", event_id);
|
||||
PikaObj* event_item = obj_getObj(self, event_name);
|
||||
PikaObj* event_handler = obj_getPtr(event_item, "handler");
|
||||
strsDeinit(&buffs);
|
||||
return event_handler;
|
||||
}
|
||||
|
||||
extern PikaObj* __pikaMain;
|
||||
static void __pika_event_cb(lv_event_t* e) {
|
||||
lv_obj_t* target = lv_event_get_target(e);
|
||||
PikaObj* event_handler =
|
||||
eventLisener_getHandler(pika_lv_event_listener_g, (uintptr_t)target);
|
||||
PikaObj* evt = obj_getObj(event_handler, "_event_evt");
|
||||
obj_setPtr(evt, "lv_event", e);
|
||||
obj_setArg(__pikaMain, "_event_cb", obj_getArg(event_handler, "_event_cb"));
|
||||
obj_setArg(__pikaMain, "_event_evt",
|
||||
obj_getArg(event_handler, "_event_evt"));
|
||||
obj_run(__pikaMain, "_event_cb(_event_evt)");
|
||||
obj_removeArg(__pikaMain, "_event_cb");
|
||||
obj_removeArg(__pikaMain, "_event_evt");
|
||||
}
|
||||
|
||||
void eventLicener_registEvent(PikaObj* self,
|
||||
uintptr_t event_id,
|
||||
PikaObj* event_handler) {
|
||||
Args buffs = {0};
|
||||
char* event_name =
|
||||
strsFormat(&buffs, PIKA_SPRINTF_BUFF_SIZE, "%d", event_id);
|
||||
obj_newDirectObj(self, event_name, New_TinyObj);
|
||||
PikaObj* event_item = obj_getObj(self, event_name);
|
||||
obj_setRef(event_item, "handler", event_handler);
|
||||
strsDeinit(&buffs);
|
||||
}
|
||||
|
||||
void pika_lvgl_lv_obj_add_event_cb(PikaObj* self,
|
||||
Arg* event_cb,
|
||||
int filter,
|
||||
void* user_data) {
|
||||
lv_obj_t* lv_obj = obj_getPtr(self, "lv_obj");
|
||||
lv_obj_add_event_cb(lv_obj, __pika_event_cb, filter, NULL);
|
||||
obj_setArg(self, "_event_cb", event_cb);
|
||||
obj_setPtr(self, "_event_user_data", user_data);
|
||||
obj_newDirectObj(self, "_event_evt", New_pika_lvgl_lv_event);
|
||||
eventLicener_registEvent(pika_lv_event_listener_g, (uintptr_t)lv_obj, self);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user