Skip to content

Commit 06cdf9a

Browse files
imageview: click image for fullscreen
1 parent 7ef6ca2 commit 06cdf9a

File tree

2 files changed

+53
-17
lines changed

2 files changed

+53
-17
lines changed

internal_filesystem/apps/com.micropythonos.imageview/assets/imageview.py

Lines changed: 50 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33

44
from mpos.apps import Activity
55
import mpos.ui
6+
import mpos.ui.anim
67

78
class 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()}")

internal_filesystem/lib/mpos/ui/__init__.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -632,6 +632,9 @@ def handle_top_swipe():
632632
def pct_of_display_width(percent):
633633
return round(horizontal_resolution * percent / 100)
634634

635+
def pct_of_display_height(percent):
636+
return round(vertical_resolution * percent / 100)
637+
635638
def min_resolution():
636639
return min(mpos.ui.horizontal_resolution,mpos.ui.vertical_resolution)
637640

0 commit comments

Comments
 (0)