diff --git a/internal_filesystem/apps/com.example.draw/assets/draw.py b/internal_filesystem/apps/com.example.draw/assets/draw.py index edf3d1a5..f33787d6 100644 --- a/internal_filesystem/apps/com.example.draw/assets/draw.py +++ b/internal_filesystem/apps/com.example.draw/assets/draw.py @@ -1,7 +1,5 @@ import mpos.ui -appscreen = lv.screen_active() - import lvgl as lv indev_error_x = 160 @@ -45,6 +43,7 @@ def touch_cb(event): event_code=event.get_code() # Ignore: # ======= + # 19: HIT_TEST # COVER_CHECK # DRAW_MAIN # DRAW_MAIN_BEGIN @@ -53,10 +52,9 @@ def touch_cb(event): # DRAW_POST_BEGIN # DRAW_POST_END # GET_SELF_SIZE - if event_code not in [23,25,26,27,28,29,30,49]: + if event_code not in [19,23,25,26,27,28,29,30,49]: name = mpos.ui.get_event_name(event_code) - #x, y = get_xy() - #print(f"lv_event_t: code={event_code}, name={name}, x={x}, y={y}") # target={event.get_target()}, user_data={event.get_user_data()}, param={event.get_param()} + #print(f"lv_event_t: code={event_code}, name={name}") # target={event.get_target()}, user_data={event.get_user_data()}, param={event.get_param()} if event_code == lv.EVENT.PRESSING: # this is probably enough #if event_code in [lv.EVENT.PRESSED, lv.EVENT.PRESSING, lv.EVENT.LONG_PRESSED, lv.EVENT.LONG_PRESSED_REPEAT]: x, y = get_xy() @@ -81,7 +79,8 @@ def touch_cb(event): canvas.set_px(x + dx, y + dy, DARKPINK, lv.OPA.COVER) -canvas = lv.canvas(appscreen) +main_screen = lv.obj() +canvas = lv.canvas(main_screen) disp = lv.display_get_default() hor_res = disp.get_horizontal_resolution() @@ -97,3 +96,4 @@ canvas.fill_bg(lv.color_white(), lv.OPA.COVER) canvas.add_flag(lv.obj.FLAG.CLICKABLE) canvas.add_event_cb(touch_cb, lv.EVENT.ALL, None) +mpos.ui.load_screen(main_screen) diff --git a/internal_filesystem/boot_unix.py b/internal_filesystem/boot_unix.py index 99c5fe4b..2cc60dea 100644 --- a/internal_filesystem/boot_unix.py +++ b/internal_filesystem/boot_unix.py @@ -40,11 +40,22 @@ start_x = None # Store the starting X-coordinate for left-edge swipe def swipe_read_cb(indev_drv, data): global start_y, start_x + global indev + global mouse pressed = mouse.get_state() # Get mouse/touch pressed state point = lv.point_t() mouse.get_point(point) # Get current coordinates + #indev.get_point(point) # Always returns 0,0 x, y = point.x, point.y + + #indev.stop_processing() + #data.state = lv.INDEV_STATE.RELEASED # Ensure release state + #data.point.x = -1 # Move point off-screen to prevent widget interaction + #data.point.y = -1 + #indev.stop_processing() # doesn't work on unix + #return + #mouse.stop_processing() if pressed and start_y is None and start_x is None: # Mouse/touch pressed (start of potential swipe) diff --git a/internal_filesystem/lib/mpos/apps.py b/internal_filesystem/lib/mpos/apps.py index ea59427a..fa721e88 100644 --- a/internal_filesystem/lib/mpos/apps.py +++ b/internal_filesystem/lib/mpos/apps.py @@ -32,7 +32,7 @@ def execute_script(script_source, is_file, is_launcher, is_graphical): prevscreen = lv.screen_active() newscreen=lv.obj() newscreen.set_size(lv.pct(100),lv.pct(100)) - lv.screen_load(newscreen) + mpos.ui.load_screen(newscreen) script_globals = { 'lv': lv, 'th': mpos.ui.th, @@ -111,6 +111,7 @@ def start_app(app_dir, is_launcher=False): mpos.ui.close_bar() def restart_launcher(): + mpos.ui.empty_screen_stack() # No need to stop the other launcher first, because it exits after building the screen start_app_by_name("com.example.launcher", True) diff --git a/internal_filesystem/lib/mpos/ui.py b/internal_filesystem/lib/mpos/ui.py index d79f803a..744ba807 100644 --- a/internal_filesystem/lib/mpos/ui.py +++ b/internal_filesystem/lib/mpos/ui.py @@ -428,6 +428,10 @@ def clean_top_layer(): screen_stack = [] +def empty_screen_stack(): + global screen_stack + screen_stack.clear() + def load_screen(screen): global screen_stack topscreen = None @@ -447,7 +451,7 @@ def back_screen(): #print("Adding notification bar and drawer to top layer") #mpos.ui.create_notification_bar() #mpos.ui.create_drawer() - close_top_layer_msgboxes() + close_top_layer_msgboxes() # would be nicer to "cancel" all input events print("Loading previous screen") screen_stack.pop() # Remove current screen