Skip to content

Commit ad69e97

Browse files
committed
Override settings window overhaul + allow WebP to be previewed
Spritesheet/Animation settings override windows should now be much cleaner and easier to use. Now also allowing overriding some additional settings. GIF preview is now "Animation prevew" as we support WebP to be previewed now as well. APNG preview is not available due to it acting extremely weird when I tried doing it.
1 parent da27ab3 commit ad69e97

File tree

4 files changed

+612
-153
lines changed

4 files changed

+612
-153
lines changed

src/Main.py

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
from gui.help_window import HelpWindow
2626
from gui.find_replace_window import FindReplaceWindow
2727
from gui.override_settings_window import OverrideSettingsWindow
28-
from gui.gif_preview_window import GifPreviewWindow
28+
from gui.animation_preview_window import AnimationPreviewWindow
2929
from gui.settings_window import SettingsWindow
3030
from gui.tooltip import Tooltip
3131
from gui.unknown_atlas_warning_window import UnknownAtlasWarningWindow
@@ -136,8 +136,8 @@ class TextureAtlasExtractorApp:
136136
on_double_click_animation(evt): Handles the event when an animation is double-clicked in the listbox.
137137
show_listbox_png_menu(event): Shows the context menu for the PNG listbox.
138138
delete_selected_spritesheet(): Deletes the selected spritesheet and related settings.
139-
preview_gif_window(...): Generates and displays a preview GIF.
140-
show_gif_preview_window(gif_path, settings): Displays the preview GIF in a new window.
139+
preview_animation_window(...): Generates and displays a preview animation.
140+
show_animation_preview_window(animation_path, settings): Displays the preview animation in a new window.
141141
store_input(...): Stores the input from the override settings window.
142142
update_global_settings(): Updates the global settings from the GUI.
143143
on_closing(): Handles the event when the application is closing.
@@ -681,10 +681,11 @@ def delete_selected_spritesheet(self):
681681
for anim in anims_to_delete:
682682
self.settings_manager.delete_animation_settings(anim)
683683

684-
def preview_gif_window(
684+
def preview_animation_window(
685685
self,
686686
name,
687687
settings_type,
688+
animation_format_entry,
688689
fps_entry,
689690
delay_entry,
690691
period_entry,
@@ -693,10 +694,11 @@ def preview_gif_window(
693694
indices_entry,
694695
frames_entry,
695696
):
696-
GifPreviewWindow.preview(
697+
AnimationPreviewWindow.preview(
697698
self,
698699
name,
699700
settings_type,
701+
animation_format_entry,
700702
fps_entry,
701703
delay_entry,
702704
period_entry,
@@ -706,14 +708,15 @@ def preview_gif_window(
706708
frames_entry,
707709
)
708710

709-
def show_gif_preview_window(self, gif_path, settings):
710-
GifPreviewWindow.show(gif_path, settings)
711+
def show_animation_preview_window(self, animation_path, settings):
712+
AnimationPreviewWindow.show(animation_path, settings)
711713

712714
def store_input(
713715
self,
714716
window,
715717
name,
716718
settings_type,
719+
animation_format_entry,
717720
fps_entry,
718721
delay_entry,
719722
period_entry,
@@ -727,6 +730,8 @@ def store_input(
727730
):
728731
settings = {}
729732
try:
733+
if animation_format_entry and animation_format_entry.get() != "":
734+
settings["animation_format"] = animation_format_entry.get()
730735
if fps_entry.get() != "":
731736
settings["fps"] = float(fps_entry.get())
732737
if delay_entry.get() != "":

src/core/extractor.py

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -36,10 +36,8 @@ class Extractor:
3636
Returns early without processing if the user cancels background color detection dialogs.
3737
extract_sprites(atlas_path, metadata_path, output_dir, settings):
3838
Extracts sprites from a given atlas and metadata file, and processes the animations.
39-
extract_preview_gif_frames(atlas_path, metadata_path, settings, animation_name=None):
40-
Extracts frames for a single animation for preview purposes.
41-
generate_temp_gif_for_preview(atlas_path, metadata_path, settings, animation_name=None, temp_dir=None):
42-
Generates a temporary GIF file using the actual AnimationExporter.save_gif logic.
39+
generate_temp_animation_for_preview(atlas_path, metadata_path, settings, animation_name=None, temp_dir=None):
40+
Generates a temporary animated image file for preview purposes.
4341
"""
4442

4543
def __init__(self, progress_bar, current_version, settings_manager, app_config=None):
@@ -181,7 +179,7 @@ def extract_sprites(self, atlas_path, metadata_path, output_dir, settings, paren
181179
except Exception as e:
182180
ExceptionHandler.handle_exception(e, metadata_path if metadata_path else atlas_path, sprites_failed)
183181

184-
def generate_temp_gif_for_preview(self, atlas_path, metadata_path, settings, animation_name=None, temp_dir=None):
182+
def generate_temp_animation_for_preview(self, atlas_path, metadata_path, settings, animation_name=None, temp_dir=None):
185183
try:
186184
atlas_processor = AtlasProcessor(atlas_path, metadata_path)
187185
sprite_processor = SpriteProcessor(atlas_processor.atlas, atlas_processor.sprites)
@@ -215,7 +213,11 @@ def generate_temp_gif_for_preview(self, atlas_path, metadata_path, settings, ani
215213
spritesheet_name, f"{spritesheet_name}/{anim_name}"
216214
)
217215
merged_settings = {**preview_settings, **settings}
218-
merged_settings["animation_format"] = "GIF"
216+
217+
animation_format = merged_settings.get("animation_format", "GIF")
218+
if animation_format == "None":
219+
animation_format = "GIF"
220+
merged_settings["animation_format"] = animation_format
219221

220222
indices = merged_settings.get("indices")
221223
if indices:
@@ -236,13 +238,20 @@ def generate_temp_gif_for_preview(self, atlas_path, metadata_path, settings, ani
236238
image_tuples, spritesheet_name, anim_name, merged_settings
237239
)
238240

241+
file_extensions = {
242+
"GIF": ".gif",
243+
"WebP": ".webp",
244+
"APNG": ".png"
245+
}
246+
target_extension = file_extensions.get(animation_format, ".gif")
247+
239248
for file in os.listdir(temp_dir):
240-
if file.endswith(".gif"):
249+
if file.endswith(target_extension):
241250
return os.path.join(temp_dir, file)
242251
return None
243252

244253
except Exception as e:
245-
print(f"Preview GIF generation error: {e}")
254+
print(f"Preview animation generation error: {e}")
246255
return None
247256

248257
def _handle_unknown_spritesheets_background_detection(self, input_dir, spritesheet_list, tk_root):

0 commit comments

Comments
 (0)