Resize images asynchronously in the edit dialog

This commit is contained in:
kramo
2023-05-06 10:07:35 +02:00
parent f8c06a9e4d
commit bd0386bcba
3 changed files with 50 additions and 31 deletions

View File

@@ -35,10 +35,12 @@ from .steamgriddb import SGDBSave
class DetailsWindow(Adw.Window):
__gtype_name__ = "DetailsWindow"
cover_overlay = Gtk.Template.Child()
cover = Gtk.Template.Child()
cover_button_edit = Gtk.Template.Child()
cover_button_delete_revealer = Gtk.Template.Child()
cover_button_delete = Gtk.Template.Child()
spinner = Gtk.Template.Child()
name = Gtk.Template.Child()
developer = Gtk.Template.Child()
@@ -222,6 +224,11 @@ class DetailsWindow(Adw.Window):
def focus_executable(self, *_args):
self.set_focus(self.executable)
def toggle_loading(self):
self.apply_button.set_sensitive(not self.apply_button.get_sensitive())
self.spinner.set_spinning(not self.spinner.get_spinning())
self.cover_overlay.set_opacity(not self.cover_overlay.get_opacity())
def set_cover(self, _source, result, *_args):
try:
path = self.file_dialog.open_finish(result).get_path()
@@ -231,7 +238,12 @@ class DetailsWindow(Adw.Window):
self.cover_button_delete_revealer.set_reveal_child(True)
self.cover_changed = True
self.game_cover.new_cover(resize_cover(self.win, path))
def resize():
self.game_cover.new_cover(resize_cover(self.win, path))
self.toggle_loading()
self.toggle_loading()
GLib.Thread.new(None, resize)
def choose_cover(self, *_args):
self.file_dialog.open(self, None, self.set_cover)

View File

@@ -36,8 +36,7 @@ def resize_cover(win, cover_path=None, pixbuf=None):
with Image.open(cover_path) as image:
if getattr(image, "is_animated", False):
frames = tuple(
frame.copy().resize((200, 300))
for frame in ImageSequence.Iterator(image)
frame.resize((200, 300)) for frame in ImageSequence.Iterator(image)
)
tmp_path = Path(Gio.File.new_tmp("XXXXXX.gif")[0].get_path())