@@ -24,7 +24,7 @@ def onCreate(self):
2424self .image .center ()
2525self .image .add_flag (lv .obj .FLAG .CLICKABLE )
2626#self.image.add_event_cb(self.print_events, lv.EVENT.ALL, None)
27- self .image .add_event_cb (lambda e :self .play (),lv .EVENT .CLICKED ,None )
27+ # self.image.add_event_cb(lambda e: self.toggle_fullscreen (),lv.EVENT.CLICKED,None)
2828self .label = lv .label (screen )
2929self .label .set_text ('Loading images from\n {self.imagedir}' )
3030self .label .align (lv .ALIGN .TOP_MID ,0 ,0 )
@@ -36,8 +36,8 @@ def onCreate(self):
3636prev_label .set_text (lv .SYMBOL .LEFT )
3737self .play_button = lv .button (screen )
3838self .play_button .align (lv .ALIGN .BOTTOM_MID ,0 ,0 )
39- self .play_button .add_flag (lv .obj .FLAG .HIDDEN )
4039self .play_button .set_style_opa (lv .OPA .TRANSP ,0 )
40+ #self.play_button.add_flag(lv.obj.FLAG.HIDDEN)
4141#self.play_button.add_event_cb(lambda e: self.unfocus_if_not_fullscreen(),lv.EVENT.FOCUSED,None)
4242#self.play_button.set_style_shadow_opa(lv.OPA.TRANSP, 0)
4343#self.play_button.add_event_cb(lambda e: self.play(),lv.EVENT.CLICKED,None)
@@ -67,6 +67,7 @@ def onResume(self, screen):
6767self .images .append (fullname )
6868# Begin with one image:
6969self .show_next_image ()
70+ self .stop_fullscreen ()
7071#self.image_timer = lv.timer_create(self.show_next_image, 1000, None)
7172
7273def onStop (self ,screen ):
@@ -107,49 +108,60 @@ def show_prev_image(self, event=None):
107108print (f"show_prev_image showing{ name } " )
108109self .show_image (name )
109110
110- def play (self ,event = None ):
111+ def toggle_fullscreen (self ,event = None ):
111112print ("playing..." )
112113if self .fullscreen :
113- print ("stopping fullscreen" )
114114self .fullscreen = False
115- mpos .ui .anim .smooth_show (self .label )
116- mpos .ui .anim .smooth_show (self .prev_button )
117- #mpos.ui.anim.smooth_show(self.play_button)
118- self .play_button .add_flag (lv .obj .FLAG .HIDDEN )
119- mpos .ui .anim .smooth_show (self .next_button )
115+ self .stop_fullscreen ()
120116else :
121- print ("starting fullscreen" )
122117self .fullscreen = True
123- mpos .ui .anim .smooth_hide (self .label )
124- mpos .ui .anim .smooth_hide (self .prev_button ,hide = False )
125- #mpos.ui.anim.smooth_hide(self.play_button, hide=False)
126- self .play_button .remove_flag (lv .obj .FLAG .HIDDEN )
127- mpos .ui .anim .smooth_hide (self .next_button ,hide = False )
118+ self .start_fullscreen ()
128119self .scale_image ()
129120
121+ def stop_fullscreen (self ):
122+ print ("stopping fullscreen" )
123+ mpos .ui .anim .smooth_show (self .label )
124+ mpos .ui .anim .smooth_show (self .prev_button )
125+ #mpos.ui.anim.smooth_show(self.play_button)
126+ self .play_button .add_flag (lv .obj .FLAG .HIDDEN )# make it not accepting focus
127+ mpos .ui .anim .smooth_show (self .next_button )
128+
129+ def start_fullscreen (self ):
130+ print ("starting fullscreen" )
131+ mpos .ui .anim .smooth_hide (self .label )
132+ mpos .ui .anim .smooth_hide (self .prev_button ,hide = False )
133+ #mpos.ui.anim.smooth_hide(self.play_button, hide=False)
134+ self .play_button .remove_flag (lv .obj .FLAG .HIDDEN )# make it accepting focus
135+ mpos .ui .anim .smooth_hide (self .next_button ,hide = False )
136+ self .unfocus ()# focus on the invisible center button, not previous or next
137+
130138def show_prev_image_if_fullscreen (self ,event = None ):
131139if self .fullscreen :
132- self .unfocus (True )
140+ self .unfocus ()
133141self .show_prev_image ()
134142
135143def show_next_image_if_fullscreen (self ,event = None ):
136144if self .fullscreen :
137- self .unfocus (False )
145+ self .unfocus ()
138146self .show_next_image ()
139147
140- def unfocus_if_not_fullscreen (self ,event = None ):
141- if not self .fullscreen :
142- self .unfocus (False )
143-
144- def unfocus (self ,next ):
148+ def unfocus (self ):
145149group = lv .group_get_default ()
146- # This doesn't work, and group.focus_obj() is missing, so need to do this hack:
147- #b = group.get_focused()
148- #b.remove_state(lv.STATE.FOCUSED)
149- if next :
150- group .focus_next ()
151- else :
152- group .focus_prev ()
150+ print ("got focus group" )
151+ # group.focus_obj(self.play_button) would be better but appears missing?!
152+ b = group .get_focused ()
153+ print ("got focus button" )
154+ #b.remove_state(lv.STATE.FOCUSED) # this doesn't seem to work to remove focus
155+ if b :
156+ print ("checking which button is focused" )
157+ if b == self .next_button :
158+ print ("next is focused" )
159+ group .focus_prev ()
160+ elif b == self .prev_button :
161+ print ("prev is focused" )
162+ group .focus_next ()
163+ else :
164+ print ("focus isn't on next or previous, leaving it..." )
153165
154166def show_next_image (self ,event = None ):
155167print ("showing next image..." )
@@ -188,5 +200,6 @@ def scale_image(self):
188200scale_factor_h = round (lvgl_h * 256 / image_h )
189201print (f"scale_factors:{ scale_factor_w } ,{ scale_factor_h } " )
190202self .image .set_size (lvgl_w ,lvgl_h )
191- self .image .set_scale (max (scale_factor_w ,scale_factor_h ))
203+ #self.image.set_scale(max(scale_factor_w,scale_factor_h)) # fills the entire screen but cuts off borders
204+ self .image .set_scale (min (scale_factor_w ,scale_factor_h ))
192205print (f"after set_scale, the LVGL image has size:{ self .image .get_width ()} x{ self .image .get_height ()} " )