tilemap-editor 3.2.6__tar.gz → 3.2.7__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {tilemap_editor-3.2.6/src/tilemap_editor.egg-info → tilemap_editor-3.2.7}/PKG-INFO +1 -1
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/pyproject.toml +1 -1
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/src/plugins/character_collision/shape_editor.py +3 -3
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/src/plugins/sprite_animation/editor.py +7 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/src/plugins/sprite_animation/preview.py +9 -2
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7/src/tilemap_editor.egg-info}/PKG-INFO +1 -1
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/src/widgets/tile_grid.py +14 -11
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/src/widgets/tile_selector.py +43 -1
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/LICENSE +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/MANIFEST.in +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/README.md +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/assets/fonts/jetbrain-fonts/JetBrainsMono-Bold.ttf +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/assets/fonts/jetbrain-fonts/JetBrainsMono-BoldItalic.ttf +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/assets/fonts/jetbrain-fonts/JetBrainsMono-Italic.ttf +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/assets/fonts/jetbrain-fonts/JetBrainsMono-Regular.ttf +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/assets/fonts/noto/NotoSans-Bold.ttf +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/assets/fonts/noto/NotoSans-BoldItalic.ttf +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/assets/fonts/noto/NotoSans-Italic.ttf +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/assets/fonts/noto/NotoSans-Regular.ttf +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/assets/icons/arrow-down.svg +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/assets/icons/check.svg +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/assets/icons/checked.svg +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/assets/icons/close.svg +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/assets/icons/duplicate.svg +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/assets/icons/error.svg +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/assets/icons/file.svg +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/assets/icons/filedead.svg +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/assets/icons/fit.svg +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/assets/icons/folder.svg +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/assets/icons/grid.svg +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/assets/icons/image.svg +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/assets/icons/info.svg +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/assets/icons/load.svg +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/assets/icons/loop.svg +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/assets/icons/pan.svg +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/assets/icons/pause.svg +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/assets/icons/pencil.svg +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/assets/icons/play.svg +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/assets/icons/plus.svg +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/assets/icons/radio.svg +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/assets/icons/reset.svg +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/assets/icons/save.svg +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/assets/icons/stop.svg +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/assets/icons/tilemap.svg +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/assets/icons/tileset.svg +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/assets/icons/unchecked.svg +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/assets/icons/warning.svg +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/assets/icons/zoomin.svg +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/assets/icons/zoomout.svg +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/setup.cfg +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/src/configs/themes.py +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/src/constants.py +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/src/editor.py +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/src/event_map.py +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/src/layers.py +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/src/main.py +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/src/plugins/__init__.py +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/src/plugins/character_collision/__init__.py +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/src/plugins/character_collision/editor.py +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/src/plugins/character_collision/models.py +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/src/plugins/character_collision/protocols.py +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/src/plugins/character_collision/standalone.py +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/src/plugins/object_tileset_collision/__init__.py +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/src/plugins/object_tileset_collision/editor.py +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/src/plugins/object_tileset_collision/models.py +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/src/plugins/object_tileset_collision/protocols.py +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/src/plugins/object_tileset_collision/standalone.py +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/src/plugins/sprite_animation/__init__.py +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/src/plugins/sprite_animation/__main__.py +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/src/plugins/sprite_animation/clipboard_util.py +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/src/plugins/sprite_animation/frame_picker.py +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/src/plugins/sprite_animation/models.py +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/src/plugins/sprite_animation/protocols.py +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/src/plugins/sprite_animation/runtime_load.py +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/src/plugins/sprite_animation/standalone.py +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/src/plugins/sprite_animation/timeline.py +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/src/plugins/sprite_animation/validation.py +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/src/plugins/sprite_editor/__init__.py +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/src/plugins/sprite_editor/editor.py +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/src/plugins/sprite_editor/standalone.py +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/src/plugins/tileset_collision/__init__.py +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/src/plugins/tileset_collision/collision_painter.py +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/src/plugins/tileset_collision/editor.py +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/src/plugins/tileset_collision/models.py +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/src/plugins/tileset_collision/protocols.py +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/src/plugins/tileset_collision/standalone.py +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/src/standalone_automap.py +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/src/standalone_error_console.py +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/src/standalone_filemanager.py +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/src/standalone_image_viewer.py +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/src/tilemap.py +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/src/tilemap_editor/__init__.py +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/src/tilemap_editor/__main__.py +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/src/tilemap_editor/assets/__init__.py +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/src/tilemap_editor/assets/fonts/jetbrain-fonts/JetBrainsMono-Bold.ttf +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/src/tilemap_editor/assets/fonts/jetbrain-fonts/JetBrainsMono-BoldItalic.ttf +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/src/tilemap_editor/assets/fonts/jetbrain-fonts/JetBrainsMono-Italic.ttf +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/src/tilemap_editor/assets/fonts/jetbrain-fonts/JetBrainsMono-Regular.ttf +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/src/tilemap_editor/assets/fonts/noto/NotoSans-Bold.ttf +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/src/tilemap_editor/assets/fonts/noto/NotoSans-BoldItalic.ttf +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/src/tilemap_editor/assets/fonts/noto/NotoSans-Italic.ttf +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/src/tilemap_editor/assets/fonts/noto/NotoSans-Regular.ttf +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/src/tilemap_editor/assets/icons/ToolMove.svg +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/src/tilemap_editor/assets/icons/arrow-down.svg +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/src/tilemap_editor/assets/icons/check.svg +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/src/tilemap_editor/assets/icons/checked.svg +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/src/tilemap_editor/assets/icons/close.svg +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/src/tilemap_editor/assets/icons/duplicate.svg +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/src/tilemap_editor/assets/icons/error.svg +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/src/tilemap_editor/assets/icons/file.svg +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/src/tilemap_editor/assets/icons/filedead.svg +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/src/tilemap_editor/assets/icons/fit.svg +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/src/tilemap_editor/assets/icons/folder.svg +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/src/tilemap_editor/assets/icons/grid.svg +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/src/tilemap_editor/assets/icons/image.svg +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/src/tilemap_editor/assets/icons/info.svg +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/src/tilemap_editor/assets/icons/load.svg +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/src/tilemap_editor/assets/icons/loop.svg +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/src/tilemap_editor/assets/icons/pan.svg +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/src/tilemap_editor/assets/icons/pause.svg +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/src/tilemap_editor/assets/icons/pencil.svg +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/src/tilemap_editor/assets/icons/play.svg +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/src/tilemap_editor/assets/icons/plus.svg +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/src/tilemap_editor/assets/icons/radio.svg +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/src/tilemap_editor/assets/icons/reset.svg +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/src/tilemap_editor/assets/icons/save.svg +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/src/tilemap_editor/assets/icons/stop.svg +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/src/tilemap_editor/assets/icons/tilemap.svg +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/src/tilemap_editor/assets/icons/tileset.svg +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/src/tilemap_editor/assets/icons/unchecked.svg +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/src/tilemap_editor/assets/icons/warning.svg +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/src/tilemap_editor/assets/icons/zoomin.svg +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/src/tilemap_editor/assets/icons/zoomout.svg +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/src/tilemap_editor/cli.py +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/src/tilemap_editor/main.py +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/src/tilemap_editor/settings.py +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/src/tilemap_editor.egg-info/SOURCES.txt +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/src/tilemap_editor.egg-info/dependency_links.txt +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/src/tilemap_editor.egg-info/entry_points.txt +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/src/tilemap_editor.egg-info/requires.txt +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/src/tilemap_editor.egg-info/top_level.txt +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/src/ttypes/__init__.py +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/src/ttypes/tilemap.py +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/src/utils/__init__.py +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/src/utils/editor_preference.py +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/src/utils/error_handler.py +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/src/utils/font_manager.py +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/src/utils/history.py +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/src/utils/icon_manager.py +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/src/utils/icons_cache.py +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/src/utils/log_capture.py +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/src/utils/project_paths.py +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/src/utils/serialization.py +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/src/utils/standalone.py +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/src/utils/validation.py +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/src/widgets/__init__.py +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/src/widgets/automap_models.py +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/src/widgets/autotile_template.py +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/src/widgets/autotiler.py +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/src/widgets/filemanager.py +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/src/widgets/input.py +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/src/widgets/layer_selector.py +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/src/widgets/map_properties.py +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/src/widgets/mapsetup.py +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/src/widgets/regex_automap_designer.py +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/src/widgets/spritesheet_grid.py +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/src/widgets/ui/collision_layer_mask.py +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/src/widgets/ui/collision_layer_sidebar.py +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/src/widgets/ui/confirm_dialog.py +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/src/widgets/ui/draw_utils.py +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/src/widgets/ui/fileinput.py +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/src/widgets/ui/layer_type_dialog.py +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/src/widgets/ui/menubar.py +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/src/widgets/ui/mode_indicator.py +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/src/widgets/ui/notification.py +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/src/widgets/ui/property_editor.py +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/src/widgets/ui/region_selector.py +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/src/widgets/ui/status_bar.py +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/src/widgets/ui/theme.py +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/src/widgets/ui/tileset_type_dialog.py +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/src/widgets/ui/toolbar.py +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/src/widgets/ui/tooltip.py +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/tests/test_animation_library_grid_offset.py +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/tests/test_collision_layer_mask.py +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/tests/test_collision_layer_sidebar.py +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/tests/test_editor_pan_mode.py +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/tests/test_project_paths.py +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/tests/test_render_scale.py +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/tests/test_sprite_animation_editor_grid.py +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/tests/test_tile_grid_selection.py +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/tests/test_tile_selector_pick.py +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/tests/test_tilemap_save.py +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/tests/test_timeline_invalidate_cache.py +0 -0
- {tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/tests/test_toolbar_tools.py +0 -0
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "tilemap-editor"
|
|
7
|
-
version = "3.2.
|
|
7
|
+
version = "3.2.7"
|
|
8
8
|
description = "Pygame tilemap editor with SVG icons, professional UI, and sprite animation tools"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.10"
|
{tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/src/plugins/character_collision/shape_editor.py
RENAMED
|
@@ -294,8 +294,8 @@ class ShapeEditor:
|
|
|
294
294
|
self._dragging_shape = False
|
|
295
295
|
return True
|
|
296
296
|
|
|
297
|
-
# Check if clicking on
|
|
298
|
-
if self.
|
|
297
|
+
# Check if clicking inside the shape body (but not on a handle)
|
|
298
|
+
if self._is_inside_shape(mouse) and not self._pan_mode:
|
|
299
299
|
self._dragging_shape = True
|
|
300
300
|
self._drag_start = mouse
|
|
301
301
|
self._save_shape_positions()
|
|
@@ -462,7 +462,7 @@ class ShapeEditor:
|
|
|
462
462
|
elif self.shape_type == "circle":
|
|
463
463
|
return self._sprite_to_screen((self.circle_x, self.circle_y - self.circle_radius))
|
|
464
464
|
elif self.shape_type == "capsule":
|
|
465
|
-
return self._sprite_to_screen((self.capsule_x, self.capsule_y))
|
|
465
|
+
return self._sprite_to_screen((self.capsule_x, self.capsule_y + self.capsule_height / 2))
|
|
466
466
|
elif self.shape_type == "polygon" and len(self.polygon_vertices) >= 3:
|
|
467
467
|
# Top-center of polygon bounding box
|
|
468
468
|
min_y = min(v[1] for v in self.polygon_vertices)
|
|
@@ -168,6 +168,7 @@ class SpriteAnimationEditor:
|
|
|
168
168
|
self.timeline.on_frames_changed = self._on_frames_changed
|
|
169
169
|
self.timeline.on_markers_changed = self._on_markers_changed
|
|
170
170
|
self.preview.on_playback_fps_changed = self._on_preview_fps_changed
|
|
171
|
+
self.preview.on_loop_changed = self._on_preview_loop_changed
|
|
171
172
|
|
|
172
173
|
# Create a default animation (now safe — widgets exist)
|
|
173
174
|
self._create_new_animation("idle")
|
|
@@ -1566,6 +1567,12 @@ class SpriteAnimationEditor:
|
|
|
1566
1567
|
self.preview.authoring_fps = float(fps)
|
|
1567
1568
|
self._notify_animation_modified()
|
|
1568
1569
|
|
|
1570
|
+
def _on_preview_loop_changed(self, loop: bool) -> None:
|
|
1571
|
+
anim = self._get_active()
|
|
1572
|
+
if anim:
|
|
1573
|
+
anim.loop = loop
|
|
1574
|
+
self._notify_animation_modified()
|
|
1575
|
+
|
|
1569
1576
|
def _metadata_apply_add(self, anim: Animation) -> None:
|
|
1570
1577
|
key = self._meta_key_input.strip()
|
|
1571
1578
|
if not key:
|
|
@@ -58,10 +58,13 @@ class AnimationPreview:
|
|
|
58
58
|
self.frames: List[AnimationFrame] = []
|
|
59
59
|
self.playing = False
|
|
60
60
|
self.loop = True
|
|
61
|
+
self.grid_offset_x: int = 0
|
|
62
|
+
self.grid_offset_y: int = 0
|
|
61
63
|
self.playback_fps: float = 60.0
|
|
62
64
|
self.show_onion = False
|
|
63
65
|
|
|
64
66
|
self.on_playback_fps_changed: Optional[Callable[[float], None]] = None
|
|
67
|
+
self.on_loop_changed: Optional[Callable[[bool], None]] = None
|
|
65
68
|
self.authoring_fps: float = 60.0
|
|
66
69
|
|
|
67
70
|
self.current_frame: int = 0
|
|
@@ -221,6 +224,8 @@ class AnimationPreview:
|
|
|
221
224
|
return True
|
|
222
225
|
if self._btn_loop.collidepoint(mouse):
|
|
223
226
|
self.loop = not self.loop
|
|
227
|
+
if self.on_loop_changed:
|
|
228
|
+
self.on_loop_changed(self.loop)
|
|
224
229
|
return True
|
|
225
230
|
if self._btn_onion.collidepoint(mouse):
|
|
226
231
|
self.show_onion = not self.show_onion
|
|
@@ -411,10 +416,12 @@ class AnimationPreview:
|
|
|
411
416
|
|
|
412
417
|
def _extract_tile(self, variant_id: int) -> Optional[pygame.Surface]:
|
|
413
418
|
tw, th = self.tile_size
|
|
414
|
-
|
|
419
|
+
ox, oy = self.grid_offset_x, self.grid_offset_y
|
|
420
|
+
available_w = self.surface.get_width() - ox
|
|
421
|
+
cols = max(1, available_w // tw)
|
|
415
422
|
col = variant_id % cols
|
|
416
423
|
row = variant_id // cols
|
|
417
|
-
src = Rect(col * tw, row * th, tw, th)
|
|
424
|
+
src = Rect(ox + col * tw, oy + row * th, tw, th)
|
|
418
425
|
if self.surface.get_rect().contains(src):
|
|
419
426
|
return self.surface.subsurface(src).copy()
|
|
420
427
|
return None
|
|
@@ -499,8 +499,10 @@ class TileGrid:
|
|
|
499
499
|
start_sy = src_rect[1] // tile_h
|
|
500
500
|
|
|
501
501
|
if active_layer.layer_type == "object":
|
|
502
|
-
|
|
503
|
-
|
|
502
|
+
mouse_pos = pygame.mouse.get_pos()
|
|
503
|
+
world_x, world_y = self.screen_to_world(mouse_pos)
|
|
504
|
+
pixel_x = world_x
|
|
505
|
+
pixel_y = world_y
|
|
504
506
|
pixel_w = sel_w_tiles * tile_w
|
|
505
507
|
pixel_h = sel_h_tiles * tile_h
|
|
506
508
|
|
|
@@ -1040,13 +1042,14 @@ class TileGrid:
|
|
|
1040
1042
|
|
|
1041
1043
|
if active_layer.layer_type == "object":
|
|
1042
1044
|
mouse_pos = pygame.mouse.get_pos()
|
|
1043
|
-
self.screen_to_world(mouse_pos)
|
|
1045
|
+
world_x, world_y = self.screen_to_world(mouse_pos)
|
|
1046
|
+
rs = self.editor.tilemap.render_scale
|
|
1044
1047
|
|
|
1045
|
-
sel_width = int(src_rect[2] * self.zoom_level)
|
|
1046
|
-
sel_height = int(src_rect[3] * self.zoom_level)
|
|
1048
|
+
sel_width = int(src_rect[2] * rs * self.zoom_level)
|
|
1049
|
+
sel_height = int(src_rect[3] * rs * self.zoom_level)
|
|
1047
1050
|
|
|
1048
|
-
screen_x =
|
|
1049
|
-
screen_y =
|
|
1051
|
+
screen_x = (world_x - self.scroll_x) * self.zoom_level + self.rect.x
|
|
1052
|
+
screen_y = (world_y - self.scroll_y) * self.zoom_level + self.rect.y
|
|
1050
1053
|
|
|
1051
1054
|
dest_rect = Rect(screen_x, screen_y, sel_width, sel_height)
|
|
1052
1055
|
pygame.draw.rect(screen, (255, 255, 0), dest_rect, 2)
|
|
@@ -1336,12 +1339,12 @@ class TileGrid:
|
|
|
1336
1339
|
src_rect = Rect(src_x, src_y, obj_w, obj_h)
|
|
1337
1340
|
|
|
1338
1341
|
dest_x = (
|
|
1339
|
-
(obj_x
|
|
1342
|
+
(obj_x - self.scroll_x) * self.zoom_level
|
|
1340
1343
|
+ self.rect.x
|
|
1341
1344
|
+ draw_offset_x
|
|
1342
1345
|
)
|
|
1343
1346
|
dest_y = (
|
|
1344
|
-
(obj_y
|
|
1347
|
+
(obj_y - self.scroll_y) * self.zoom_level
|
|
1345
1348
|
+ self.rect.y
|
|
1346
1349
|
+ draw_offset_y
|
|
1347
1350
|
)
|
|
@@ -1565,11 +1568,11 @@ class TileGrid:
|
|
|
1565
1568
|
new_x = area["x"] + dx
|
|
1566
1569
|
new_y = area["y"] + dy
|
|
1567
1570
|
dest_x = (
|
|
1568
|
-
(new_x
|
|
1571
|
+
(new_x - self.scroll_x) * self.zoom_level
|
|
1569
1572
|
+ self.rect.x
|
|
1570
1573
|
)
|
|
1571
1574
|
dest_y = (
|
|
1572
|
-
(new_y
|
|
1575
|
+
(new_y - self.scroll_y) * self.zoom_level
|
|
1573
1576
|
+ self.rect.y
|
|
1574
1577
|
)
|
|
1575
1578
|
|
|
@@ -61,6 +61,7 @@ class TileSelector:
|
|
|
61
61
|
self.zoom: float = 1.0
|
|
62
62
|
|
|
63
63
|
btn_y = y + h - 35
|
|
64
|
+
self.btn_export = Rect(x + w - 140, btn_y, 30, 30)
|
|
64
65
|
self.btn_collision = Rect(x + w - 105, btn_y, 30, 30)
|
|
65
66
|
self.btn_add = Rect(x + w - 70, btn_y, 30, 30)
|
|
66
67
|
self.btn_rem = Rect(x + w - 35, btn_y, 30, 30)
|
|
@@ -80,6 +81,7 @@ class TileSelector:
|
|
|
80
81
|
x, y + self.top_bar_h, w, h - self.top_bar_h - self.btm_bar_h
|
|
81
82
|
)
|
|
82
83
|
btn_y = y + h - 35
|
|
84
|
+
self.btn_export = Rect(x + w - 140, btn_y, 30, 30)
|
|
83
85
|
self.btn_collision = Rect(x + w - 105, btn_y, 30, 30)
|
|
84
86
|
self.btn_add = Rect(x + w - 70, btn_y, 30, 30)
|
|
85
87
|
self.btn_rem = Rect(x + w - 35, btn_y, 30, 30)
|
|
@@ -162,6 +164,9 @@ class TileSelector:
|
|
|
162
164
|
return True
|
|
163
165
|
|
|
164
166
|
if event.type == pygame.MOUSEBUTTONDOWN and event.button == 1:
|
|
167
|
+
if self.btn_export.collidepoint(mouse_pos):
|
|
168
|
+
self._export_selected_as_png_dialog()
|
|
169
|
+
return True
|
|
165
170
|
if self.btn_collision.collidepoint(mouse_pos):
|
|
166
171
|
self.open_collision_editor()
|
|
167
172
|
return True
|
|
@@ -246,6 +251,11 @@ class TileSelector:
|
|
|
246
251
|
ts.offset[1] += event.y * 20
|
|
247
252
|
return True
|
|
248
253
|
|
|
254
|
+
elif event.type == pygame.KEYDOWN and event.key == pygame.K_e:
|
|
255
|
+
if self.selected_tile and self.active_idx != -1:
|
|
256
|
+
self._export_selected_as_png_dialog()
|
|
257
|
+
return True
|
|
258
|
+
|
|
249
259
|
return False
|
|
250
260
|
|
|
251
261
|
def update_selection_rect(self, current_grid: Tuple[int, int]):
|
|
@@ -615,6 +625,27 @@ class TileSelector:
|
|
|
615
625
|
self.selected_tile = (col * tw, row * th, tw, th)
|
|
616
626
|
return True
|
|
617
627
|
|
|
628
|
+
def _export_selected_as_png_dialog(self):
|
|
629
|
+
if not self.selected_tile or self.active_idx == -1:
|
|
630
|
+
return
|
|
631
|
+
ts = self.tilesets[self.active_idx]
|
|
632
|
+
default = Path(ts.name).stem + "_extracted.png"
|
|
633
|
+
self.editor.open_file_manager(
|
|
634
|
+
on_save=self._on_export_selected_path,
|
|
635
|
+
allowed_exts=[".png"],
|
|
636
|
+
mode="save",
|
|
637
|
+
default_name=default,
|
|
638
|
+
)
|
|
639
|
+
|
|
640
|
+
def _on_export_selected_path(self, path: Path):
|
|
641
|
+
try:
|
|
642
|
+
sx, sy, sw, sh = self.selected_tile
|
|
643
|
+
ts = self.tilesets[self.active_idx]
|
|
644
|
+
extracted = ts.surface.subsurface(Rect(sx, sy, sw, sh)).copy()
|
|
645
|
+
pygame.image.save(extracted, str(path))
|
|
646
|
+
except Exception as e:
|
|
647
|
+
error_handler.capture(e, context="export_selected_png")
|
|
648
|
+
|
|
618
649
|
def draw(self, screen: pygame.Surface):
|
|
619
650
|
self.draw_background(screen)
|
|
620
651
|
self.draw_view_area(screen)
|
|
@@ -775,6 +806,15 @@ class TileSelector:
|
|
|
775
806
|
screen.blit(name_surf, (self.rect.x + 5, self.rect.bottom - 30))
|
|
776
807
|
|
|
777
808
|
def draw_buttons(self, screen):
|
|
809
|
+
# Export selection as PNG button
|
|
810
|
+
pygame.draw.rect(
|
|
811
|
+
screen, COLORS.header, self.btn_export, border_radius=SHAPE.radius_sm
|
|
812
|
+
)
|
|
813
|
+
screen.blit(
|
|
814
|
+
self.font.render("E", True, COLORS.text),
|
|
815
|
+
(self.btn_export.x + 9, self.btn_export.y + 5),
|
|
816
|
+
)
|
|
817
|
+
|
|
778
818
|
# Collision editor button
|
|
779
819
|
pygame.draw.rect(
|
|
780
820
|
screen, COLORS.header, self.btn_collision, border_radius=SHAPE.radius_sm
|
|
@@ -799,7 +839,9 @@ class TileSelector:
|
|
|
799
839
|
(self.btn_rem.x + 10, self.btn_rem.y + 5),
|
|
800
840
|
)
|
|
801
841
|
mx, my = pygame.mouse.get_pos()
|
|
802
|
-
if self.
|
|
842
|
+
if self.btn_export.collidepoint(mx, my):
|
|
843
|
+
self.editor.tooltip.show("E: Export selection as PNG", (mx + 10, my + 10))
|
|
844
|
+
elif self.btn_collision.collidepoint(mx, my):
|
|
803
845
|
self.editor.tooltip.show("Edit Collision Shapes", (mx + 10, my + 10))
|
|
804
846
|
elif self.btn_add.collidepoint(mx, my):
|
|
805
847
|
self.editor.tooltip.show("Add Tileset", (mx + 10, my + 10))
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/assets/fonts/jetbrain-fonts/JetBrainsMono-Bold.ttf
RENAMED
|
File without changes
|
|
File without changes
|
{tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/assets/fonts/jetbrain-fonts/JetBrainsMono-Italic.ttf
RENAMED
|
File without changes
|
{tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/assets/fonts/jetbrain-fonts/JetBrainsMono-Regular.ttf
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/src/plugins/object_tileset_collision/__init__.py
RENAMED
|
File without changes
|
{tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/src/plugins/object_tileset_collision/editor.py
RENAMED
|
File without changes
|
{tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/src/plugins/object_tileset_collision/models.py
RENAMED
|
File without changes
|
{tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/src/plugins/object_tileset_collision/protocols.py
RENAMED
|
File without changes
|
{tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/src/plugins/object_tileset_collision/standalone.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/src/plugins/sprite_animation/clipboard_util.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/src/plugins/tileset_collision/collision_painter.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/src/tilemap_editor/assets/fonts/noto/NotoSans-Bold.ttf
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/src/tilemap_editor/assets/icons/arrow-down.svg
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{tilemap_editor-3.2.6 → tilemap_editor-3.2.7}/src/tilemap_editor.egg-info/dependency_links.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|