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):
1516 image_nr = None
1617 image_timer = None
1718 image = None
19+ fullscreen = False
1820
1921 def onCreate (self ):
2022 screen = lv .obj ()
2123 self .image = lv .image (screen )
22- self .image .set_size (128 , 128 )
2324 self .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 )
2428 self .label = lv .label (screen )
25- self .label .set_text ('Hello Images! ' )
29+ self .label .set_text ('Loading images from \n {self.imagedir} ' )
2630 self .label .align (lv .ALIGN .TOP_MID ,0 ,0 )
2731 self .prev_button = lv .button (screen )
2832 self .prev_button .align (lv .ALIGN .BOTTOM_LEFT ,0 ,0 )
2933 self .prev_button .add_event_cb (lambda e : self .show_prev_image (),lv .EVENT .CLICKED ,None )
3034 prev_label = lv .label (self .prev_button )
3135 prev_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)
3741 self .next_button = lv .button (screen )
3842 self .next_button .align (lv .ALIGN .BOTTOM_RIGHT ,0 ,0 )
3943 self .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 )
4145 next_label = lv .label (self .next_button )
4246 next_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)
4448 self .setContentView (screen )
4549
4650 def onResume (self , screen ):
@@ -64,7 +68,7 @@ def onStop(self, screen):
6468 print ("ImageView: deleting image_timer" )
6569 self .image_timer .delete ()
6670
67- def touch_cb (self , event ):
71+ def print_events (self , event ):
6872 global canvas
6973 event_code = event .get_code ()
7074 #print(f"got event {event_code}")
@@ -99,6 +103,21 @@ def show_prev_image(self, event=None):
99103
100104 def play (self , event = None ):
101105 print ("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
103122 def show_next_image (self , event = None ):
104123 print ("showing next image..." )
@@ -116,12 +135,26 @@ def show_image(self, name):
116135 try :
117136 self .label .set_text (name )
118137 self .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 ()
126139 except Exception as e :
127140 print (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 ()} " )
0 commit comments