33
44from mpos .apps import Activity
55import mpos .ui
6+ import mpos .ui .anim
67
78class ImageView (Activity ):
89
@@ -15,32 +16,35 @@ class ImageView(Activity):
1516image_nr = None
1617image_timer = None
1718image = None
19+ fullscreen = False
1820
1921def onCreate (self ):
2022screen = lv .obj ()
2123self .image = lv .image (screen )
22- self .image .set_size (128 ,128 )
2324self .image .center ()
25+ self .image .add_flag (lv .obj .FLAG .CLICKABLE )
26+ #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 )
2428self .label = lv .label (screen )
25- self .label .set_text ('Hello Images! ' )
29+ self .label .set_text ('Loading images from \n {self.imagedir} ' )
2630self .label .align (lv .ALIGN .TOP_MID ,0 ,0 )
2731self .prev_button = lv .button (screen )
2832self .prev_button .align (lv .ALIGN .BOTTOM_LEFT ,0 ,0 )
2933self .prev_button .add_event_cb (lambda e :self .show_prev_image (),lv .EVENT .CLICKED ,None )
3034prev_label = lv .label (self .prev_button )
3135prev_label .set_text (lv .SYMBOL .LEFT )
32- self .play_button = lv .button (screen )
33- self .play_button .align (lv .ALIGN .BOTTOM_MID ,0 ,0 )
34- self .play_button .add_event_cb (lambda e :self .play (),lv .EVENT .CLICKED ,None )
35- play_label = lv .label (self .play_button )
36- play_label .set_text (lv .SYMBOL .PLAY )
36+ # self.play_button = lv.button(screen)
37+ # self.play_button.align(lv.ALIGN.BOTTOM_MID,0,0)
38+ # self.play_button.add_event_cb(lambda e: self.play(),lv.EVENT.CLICKED,None)
39+ # play_label = lv.label(self.play_button)
40+ # play_label.set_text(lv.SYMBOL.PLAY)
3741self .next_button = lv .button (screen )
3842self .next_button .align (lv .ALIGN .BOTTOM_RIGHT ,0 ,0 )
3943self .next_button .add_event_cb (lambda e :self .show_next_image (),lv .EVENT .CLICKED ,None )
40- # self.next_button.add_event_cb(self.touch_cb , lv.EVENT.ALL, None)
44+ self .next_button .add_event_cb (self .print_events ,lv .EVENT .ALL ,None )
4145next_label = lv .label (self .next_button )
4246next_label .set_text (lv .SYMBOL .RIGHT )
43- #screen.add_event_cb(self.touch_cb , lv.EVENT.ALL, None)
47+ #screen.add_event_cb(self.print_events , lv.EVENT.ALL, None)
4448self .setContentView (screen )
4549
4650def onResume (self ,screen ):
@@ -64,7 +68,7 @@ def onStop(self, screen):
6468print ("ImageView: deleting image_timer" )
6569self .image_timer .delete ()
6670
67- def touch_cb (self ,event ):
71+ def print_events (self ,event ):
6872global canvas
6973event_code = event .get_code ()
7074#print(f"got event {event_code}")
@@ -99,6 +103,21 @@ def show_prev_image(self, event=None):
99103
100104def play (self ,event = None ):
101105print ("playing..." )
106+ if self .fullscreen :
107+ print ("stopping fullscreen" )
108+ self .fullscreen = False
109+ mpos .ui .anim .smooth_show (self .label )
110+ mpos .ui .anim .smooth_show (self .prev_button )
111+ #mpos.ui.anim.smooth_show(self.play_button)
112+ mpos .ui .anim .smooth_show (self .next_button )
113+ else :
114+ print ("starting fullscreen" )
115+ self .fullscreen = True
116+ mpos .ui .anim .smooth_hide (self .label )
117+ mpos .ui .anim .smooth_hide (self .prev_button )
118+ #mpos.ui.anim.smooth_hide(self.play_button)
119+ mpos .ui .anim .smooth_hide (self .next_button )
120+ self .scale_image ()
102121
103122def show_next_image (self ,event = None ):
104123print ("showing next image..." )
@@ -116,12 +135,26 @@ def show_image(self, name):
116135try :
117136self .label .set_text (name )
118137self .image .set_src (f"M:{ name } " )
119- print (f"the LVGL image has size:{ self .image .get_width ()} x{ self .image .get_height ()} " )
120- header = lv .image_header_t ()
121- self .image .decoder_get_info (self .image .get_src (),header )
122- print (f"the real image has size:{ header .w } x{ header .h } " )
123- #image.set_size(128, 128)
124- #self.image.set_scale(512)
125- print (f"after set_scale, the LVGL image has size:{ self .image .get_width ()} x{ self .image .get_height ()} " )
138+ self .scale_image ()
126139except Exception as e :
127140print (f"show_image got exception:{ e } " )
141+
142+ def scale_image (self ):
143+ if self .fullscreen :
144+ pct = 100
145+ else :
146+ pct = 90
147+ lvgl_w = mpos .ui .pct_of_display_width (pct )
148+ lvgl_h = mpos .ui .pct_of_display_height (pct )
149+ print (f"scaling to size:{ lvgl_w } x{ lvgl_h } " )
150+ header = lv .image_header_t ()
151+ self .image .decoder_get_info (self .image .get_src (),header )
152+ image_w = header .w
153+ image_h = header .h
154+ print (f"the real image has size:{ header .w } x{ header .h } " )
155+ scale_factor_w = round (lvgl_w * 256 / image_w )
156+ scale_factor_h = round (lvgl_h * 256 / image_h )
157+ print (f"scale_factors:{ scale_factor_w } ,{ scale_factor_h } " )
158+ self .image .set_size (lvgl_w ,lvgl_h )
159+ self .image .set_scale (max (scale_factor_w ,scale_factor_h ))
160+ print (f"after set_scale, the LVGL image has size:{ self .image .get_width ()} x{ self .image .get_height ()} " )