Skip to content

Commit 056ada8

Browse files
imageview: fix double button bug
1 parent d2457e5 commit 056ada8

File tree

1 file changed

+43
-30
lines changed
  • internal_filesystem/apps/com.micropythonos.imageview/assets

1 file changed

+43
-30
lines changed

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

Lines changed: 43 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ def onCreate(self):
2424
self.image.center()
2525
self.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)
2828
self.label = lv.label(screen)
2929
self.label.set_text('Loading images from\n{self.imagedir}')
3030
self.label.align(lv.ALIGN.TOP_MID,0,0)
@@ -36,8 +36,8 @@ def onCreate(self):
3636
prev_label.set_text(lv.SYMBOL.LEFT)
3737
self.play_button = lv.button(screen)
3838
self.play_button.align(lv.ALIGN.BOTTOM_MID,0,0)
39-
self.play_button.add_flag(lv.obj.FLAG.HIDDEN)
4039
self.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):
6767
self.images.append(fullname)
6868
# Begin with one image:
6969
self.show_next_image()
70+
self.stop_fullscreen()
7071
#self.image_timer = lv.timer_create(self.show_next_image, 1000, None)
7172

7273
def onStop(self, screen):
@@ -107,49 +108,60 @@ def show_prev_image(self, event=None):
107108
print(f"show_prev_image showing {name}")
108109
self.show_image(name)
109110

110-
def play(self, event=None):
111+
def toggle_fullscreen(self, event=None):
111112
print("playing...")
112113
if self.fullscreen:
113-
print("stopping fullscreen")
114114
self.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()
120116
else:
121-
print("starting fullscreen")
122117
self.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()
128119
self.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+
130138
def show_prev_image_if_fullscreen(self, event=None):
131139
if self.fullscreen:
132-
self.unfocus(True)
140+
self.unfocus()
133141
self.show_prev_image()
134142

135143
def show_next_image_if_fullscreen(self, event=None):
136144
if self.fullscreen:
137-
self.unfocus(False)
145+
self.unfocus()
138146
self.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):
145149
group = 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

154166
def show_next_image(self, event=None):
155167
print("showing next image...")
@@ -188,5 +200,6 @@ def scale_image(self):
188200
scale_factor_h = round(lvgl_h * 256 / image_h)
189201
print(f"scale_factors: {scale_factor_w},{scale_factor_h}")
190202
self.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))
192205
print(f"after set_scale, the LVGL image has size: {self.image.get_width()}x{self.image.get_height()}")

0 commit comments

Comments
 (0)