3333hide_bar_animation_start_value = show_bar_animation_end_value
3434hide_bar_animation_end_value = show_bar_animation_start_value
3535
36+ down_start_x = 0
3637back_start_y = 0
3738
3839# Widgets:
3940notification_bar = None
41+ downbutton = None
4042backbutton = None
4143
4244foreground_app_name = None
@@ -585,7 +587,7 @@ def back_swipe_cb(event):
585587
586588global backbutton ,back_start_y
587589event_code = event .get_code ()
588- name = mpos .ui .get_event_name (event_code )
590+ # name = mpos.ui.get_event_name(event_code)
589591indev = lv .indev_active ()
590592if indev :
591593point = lv .point_t ()
@@ -640,37 +642,34 @@ def handle_back_swipe():
640642
641643# Would be better to somehow save other events, like clicks, and pass them down to the layers below if released with x < 60
642644def top_swipe_cb (event ):
643- #global rect
645+ if drawer_open :
646+ print ("ignoring top swipe gesture because drawer is open" )
647+ return
644648
649+ global downbutton ,down_start_x
645650event_code = event .get_code ()
646651name = mpos .ui .get_event_name (event_code )
647- print (f"top_swipe_cb{ event_code } and{ name } " )
648-
649- #xa = rect.get_x_aligned()
650- #ya = rect.get_y_aligned()
651- #print(f"xa, ya: {xa},{ya}")
652-
653- #obj = e.get_target()
654- #lvobj = lv.obj(obj)
655- #pos = lvobj.get_pos() # Get current position
656- #print(f"pos: {lvobj.get_x()}, {lvobj.get_y()}")
657-
658652indev = lv .indev_active ()
659653if indev :
660654point = lv .point_t ()
661655indev .get_point (point )
662656x = point .x
663657y = point .y
664- print (f"pos:{ x } ,{ y } " )
665- #rect.set_pos(x, 0)
666- if event_code == lv .EVENT .RELEASED and y > 60 :# TODO: use display_height / 3 here, or better: an animation for more feedback
667- mpos .ui .open_drawer ()
668- #rect.set_pos(0,0)
669- #rect.set_pos(xa + point.x, ya + point.y)
670- #rect.set_pos(point.x, point.y)
658+ print (f"visual_back_swipe_cb event_code={ event_code } and event_name={ name } and pos:{ x } ,{ y } " )
659+ if event_code == lv .EVENT .PRESSED :
660+ mpos .ui .anim .smooth_show (downbutton )
661+ down_start_x = x
662+ elif event_code == lv .EVENT .PRESSING :
663+ magnetic_y = round (y / 10 )
664+ downbutton .set_pos (down_start_x ,magnetic_y )
665+ elif event_code == lv .EVENT .RELEASED :
666+ mpos .ui .anim .smooth_hide (downbutton )
667+ if y > min (80 ,vertical_resolution / 3 ):
668+ mpos .ui .open_drawer ()
671669
672670
673671def handle_top_swipe ():
672+ global downbutton
674673rect = lv .obj (lv .layer_top ())
675674rect .set_size (lv .pct (100 ),round (NOTIFICATION_BAR_HEIGHT * 2 / 3 ))
676675rect .set_pos (0 ,0 )
@@ -686,8 +685,18 @@ def handle_top_swipe():
686685rect .add_style (style ,0 )
687686#rect.add_flag(lv.obj.FLAG.CLICKABLE) # Make the object clickable
688687#rect.add_flag(lv.obj.FLAG.GESTURE_BUBBLE) # Allow dragging
689- #rect.add_event_cb(drag_event_cb, lv.EVENT.PRESSING, None)
688+ rect .add_event_cb (top_swipe_cb ,lv .EVENT .PRESSED ,None )
689+ rect .add_event_cb (top_swipe_cb ,lv .EVENT .PRESSING ,None )
690690rect .add_event_cb (top_swipe_cb ,lv .EVENT .RELEASED ,None )
691+ # button with label that shows up during the dragging:
692+ downbutton = lv .button (lv .layer_top ())
693+ downbutton .set_pos (0 ,round (lv .layer_top ().get_height ()/ 2 ))
694+ downbutton .add_flag (lv .obj .FLAG .HIDDEN )
695+ downbutton .add_state (lv .STATE .DISABLED )
696+ downlabel = lv .label (downbutton )
697+ downlabel .set_text (lv .SYMBOL .DOWN )
698+ downlabel .set_style_text_font (lv .font_montserrat_18 ,0 )
699+ downlabel .center ()
691700
692701
693702def pct_of_display_width (percent ):