tilemap-editor 3.3.0__tar.gz → 3.3.2__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.3.0/src/tilemap_editor.egg-info → tilemap_editor-3.3.2}/PKG-INFO +1 -1
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/pyproject.toml +1 -1
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/editor.py +71 -7
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2/src/tilemap_editor.egg-info}/PKG-INFO +1 -1
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/widgets/autotiler.py +3 -1
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/widgets/mapsetup.py +25 -6
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/widgets/regex_automap_designer.py +4 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/widgets/tile_grid.py +5 -4
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/widgets/ui/menubar.py +5 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/widgets/ui/tileset_type_dialog.py +2 -2
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/LICENSE +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/MANIFEST.in +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/README.md +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/assets/fonts/jetbrain-fonts/JetBrainsMono-Bold.ttf +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/assets/fonts/jetbrain-fonts/JetBrainsMono-BoldItalic.ttf +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/assets/fonts/jetbrain-fonts/JetBrainsMono-Italic.ttf +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/assets/fonts/jetbrain-fonts/JetBrainsMono-Regular.ttf +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/assets/fonts/noto/NotoSans-Bold.ttf +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/assets/fonts/noto/NotoSans-BoldItalic.ttf +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/assets/fonts/noto/NotoSans-Italic.ttf +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/assets/fonts/noto/NotoSans-Regular.ttf +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/assets/icons/arrow-down.svg +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/assets/icons/check.svg +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/assets/icons/checked.svg +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/assets/icons/close.svg +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/assets/icons/duplicate.svg +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/assets/icons/error.svg +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/assets/icons/file.svg +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/assets/icons/filedead.svg +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/assets/icons/fit.svg +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/assets/icons/folder.svg +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/assets/icons/grid.svg +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/assets/icons/image.svg +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/assets/icons/info.svg +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/assets/icons/load.svg +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/assets/icons/loop.svg +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/assets/icons/pan.svg +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/assets/icons/pause.svg +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/assets/icons/pencil.svg +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/assets/icons/play.svg +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/assets/icons/plus.svg +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/assets/icons/radio.svg +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/assets/icons/reset.svg +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/assets/icons/save.svg +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/assets/icons/stop.svg +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/assets/icons/tilemap.svg +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/assets/icons/tileset.svg +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/assets/icons/unchecked.svg +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/assets/icons/warning.svg +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/assets/icons/zoomin.svg +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/assets/icons/zoomout.svg +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/setup.cfg +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/configs/themes.py +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/constants.py +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/event_map.py +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/layers.py +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/main.py +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/node_manager.py +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/nodes.py +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/plugins/__init__.py +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/plugins/character_collision/__init__.py +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/plugins/character_collision/editor.py +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/plugins/character_collision/models.py +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/plugins/character_collision/protocols.py +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/plugins/character_collision/shape_editor.py +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/plugins/character_collision/standalone.py +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/plugins/object_tileset_collision/__init__.py +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/plugins/object_tileset_collision/editor.py +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/plugins/object_tileset_collision/models.py +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/plugins/object_tileset_collision/protocols.py +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/plugins/object_tileset_collision/standalone.py +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/plugins/sprite_animation/__init__.py +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/plugins/sprite_animation/__main__.py +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/plugins/sprite_animation/clipboard_util.py +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/plugins/sprite_animation/editor.py +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/plugins/sprite_animation/frame_picker.py +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/plugins/sprite_animation/models.py +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/plugins/sprite_animation/preview.py +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/plugins/sprite_animation/protocols.py +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/plugins/sprite_animation/runtime_load.py +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/plugins/sprite_animation/standalone.py +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/plugins/sprite_animation/timeline.py +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/plugins/sprite_animation/validation.py +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/plugins/sprite_editor/__init__.py +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/plugins/sprite_editor/editor.py +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/plugins/sprite_editor/standalone.py +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/plugins/tileset_collision/__init__.py +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/plugins/tileset_collision/collision_painter.py +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/plugins/tileset_collision/editor.py +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/plugins/tileset_collision/models.py +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/plugins/tileset_collision/protocols.py +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/plugins/tileset_collision/standalone.py +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/standalone_automap.py +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/standalone_error_console.py +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/standalone_filemanager.py +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/standalone_image_viewer.py +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/tilemap.py +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/tilemap_editor/__init__.py +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/tilemap_editor/__main__.py +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/tilemap_editor/assets/__init__.py +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/tilemap_editor/assets/fonts/jetbrain-fonts/JetBrainsMono-Bold.ttf +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/tilemap_editor/assets/fonts/jetbrain-fonts/JetBrainsMono-BoldItalic.ttf +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/tilemap_editor/assets/fonts/jetbrain-fonts/JetBrainsMono-Italic.ttf +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/tilemap_editor/assets/fonts/jetbrain-fonts/JetBrainsMono-Regular.ttf +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/tilemap_editor/assets/fonts/noto/NotoSans-Bold.ttf +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/tilemap_editor/assets/fonts/noto/NotoSans-BoldItalic.ttf +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/tilemap_editor/assets/fonts/noto/NotoSans-Italic.ttf +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/tilemap_editor/assets/fonts/noto/NotoSans-Regular.ttf +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/tilemap_editor/assets/icons/ToolMove.svg +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/tilemap_editor/assets/icons/arrow-down.svg +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/tilemap_editor/assets/icons/check.svg +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/tilemap_editor/assets/icons/checked.svg +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/tilemap_editor/assets/icons/close.svg +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/tilemap_editor/assets/icons/duplicate.svg +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/tilemap_editor/assets/icons/error.svg +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/tilemap_editor/assets/icons/file.svg +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/tilemap_editor/assets/icons/filedead.svg +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/tilemap_editor/assets/icons/fit.svg +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/tilemap_editor/assets/icons/folder.svg +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/tilemap_editor/assets/icons/grid.svg +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/tilemap_editor/assets/icons/image.svg +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/tilemap_editor/assets/icons/info.svg +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/tilemap_editor/assets/icons/load.svg +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/tilemap_editor/assets/icons/loop.svg +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/tilemap_editor/assets/icons/pan.svg +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/tilemap_editor/assets/icons/pause.svg +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/tilemap_editor/assets/icons/pencil.svg +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/tilemap_editor/assets/icons/play.svg +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/tilemap_editor/assets/icons/plus.svg +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/tilemap_editor/assets/icons/radio.svg +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/tilemap_editor/assets/icons/reset.svg +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/tilemap_editor/assets/icons/save.svg +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/tilemap_editor/assets/icons/stop.svg +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/tilemap_editor/assets/icons/tilemap.svg +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/tilemap_editor/assets/icons/tileset.svg +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/tilemap_editor/assets/icons/unchecked.svg +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/tilemap_editor/assets/icons/warning.svg +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/tilemap_editor/assets/icons/zoomin.svg +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/tilemap_editor/assets/icons/zoomout.svg +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/tilemap_editor/cli.py +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/tilemap_editor/main.py +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/tilemap_editor/settings.py +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/tilemap_editor.egg-info/SOURCES.txt +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/tilemap_editor.egg-info/dependency_links.txt +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/tilemap_editor.egg-info/entry_points.txt +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/tilemap_editor.egg-info/requires.txt +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/tilemap_editor.egg-info/top_level.txt +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/ttypes/__init__.py +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/ttypes/tilemap.py +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/utils/__init__.py +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/utils/editor_preference.py +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/utils/error_handler.py +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/utils/font_manager.py +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/utils/history.py +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/utils/icon_manager.py +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/utils/icons_cache.py +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/utils/log_capture.py +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/utils/project_paths.py +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/utils/serialization.py +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/utils/standalone.py +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/utils/validation.py +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/widgets/__init__.py +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/widgets/automap_models.py +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/widgets/autotile_template.py +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/widgets/filemanager.py +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/widgets/input.py +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/widgets/layer_selector.py +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/widgets/map_properties.py +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/widgets/spritesheet_grid.py +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/widgets/tile_selector.py +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/widgets/ui/collision_layer_mask.py +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/widgets/ui/collision_layer_sidebar.py +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/widgets/ui/confirm_dialog.py +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/widgets/ui/draw_utils.py +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/widgets/ui/fileinput.py +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/widgets/ui/layer_type_dialog.py +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/widgets/ui/mode_indicator.py +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/widgets/ui/node_editor.py +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/widgets/ui/node_selector.py +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/widgets/ui/notification.py +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/widgets/ui/property_editor.py +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/widgets/ui/region_selector.py +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/widgets/ui/status_bar.py +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/widgets/ui/theme.py +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/widgets/ui/toolbar.py +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/widgets/ui/tooltip.py +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/tests/test_animation_library_grid_offset.py +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/tests/test_collision_layer_mask.py +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/tests/test_collision_layer_sidebar.py +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/tests/test_editor_pan_mode.py +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/tests/test_project_paths.py +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/tests/test_render_scale.py +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/tests/test_sprite_animation_editor_grid.py +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/tests/test_tile_grid_selection.py +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/tests/test_tile_selector_pick.py +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/tests/test_tilemap_save.py +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/tests/test_timeline_invalidate_cache.py +0 -0
- {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/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.3.
|
|
7
|
+
version = "3.3.2"
|
|
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"
|
|
@@ -242,7 +242,7 @@ class Editor:
|
|
|
242
242
|
center_x = (self.width - 400) // 2
|
|
243
243
|
center_y = (self.height - 400) // 2
|
|
244
244
|
self.map_setup_widget = MapSetup(self, Rect(center_x, center_y, 400, 400))
|
|
245
|
-
self.map_setup_widget.visible =
|
|
245
|
+
self.map_setup_widget.visible = True
|
|
246
246
|
self.map_properties_dialog = MapPropertiesDialog(self, Rect(center_x, center_y, 400, 260))
|
|
247
247
|
self.node_manager = NodeManager(self)
|
|
248
248
|
self.node_selector = NodeSelector(self, 0, 65, 260, 240)
|
|
@@ -442,6 +442,67 @@ class Editor:
|
|
|
442
442
|
except Exception as e:
|
|
443
443
|
error_handler.capture(e, context="save_map_selected")
|
|
444
444
|
|
|
445
|
+
def export_selection_as_png(self):
|
|
446
|
+
rect = self.tile_grid_widget.selection_rect
|
|
447
|
+
if rect is None:
|
|
448
|
+
self.notifications.notify("No region selected", duration=2.0)
|
|
449
|
+
return
|
|
450
|
+
self.open_file_manager(
|
|
451
|
+
on_save=self._on_export_selection_png,
|
|
452
|
+
allowed_exts=[".png"],
|
|
453
|
+
mode="save",
|
|
454
|
+
default_name="selection.png",
|
|
455
|
+
)
|
|
456
|
+
|
|
457
|
+
def _on_export_selection_png(self, path: Path):
|
|
458
|
+
rect = self.tile_grid_widget.selection_rect
|
|
459
|
+
if rect is None:
|
|
460
|
+
return
|
|
461
|
+
x1, y1, x2, y2 = rect
|
|
462
|
+
tw, th = self.tilemap.tile_size
|
|
463
|
+
pw = (x2 - x1 + 1) * tw
|
|
464
|
+
ph = (y2 - y1 + 1) * th
|
|
465
|
+
if pw <= 0 or ph <= 0:
|
|
466
|
+
return
|
|
467
|
+
|
|
468
|
+
export_surf = pygame.Surface((pw, ph), pygame.SRCALPHA)
|
|
469
|
+
layers = self.tilemap.layer_manager.get_rendered_layers()
|
|
470
|
+
tileset_map = self.tileset_widget.tileset_map
|
|
471
|
+
|
|
472
|
+
for layer in layers:
|
|
473
|
+
if layer.layer_type != "tile":
|
|
474
|
+
continue
|
|
475
|
+
if layer.opacity < 1.0:
|
|
476
|
+
layer_surf = pygame.Surface((pw, ph), pygame.SRCALPHA)
|
|
477
|
+
else:
|
|
478
|
+
layer_surf = export_surf
|
|
479
|
+
|
|
480
|
+
for (gx, gy), tile in layer.tiles.items():
|
|
481
|
+
if not (x1 <= gx <= x2 and y1 <= gy <= y2):
|
|
482
|
+
continue
|
|
483
|
+
dx = (gx - x1) * tw
|
|
484
|
+
dy = (gy - y1) * th
|
|
485
|
+
ttype = int(tile["ttype"])
|
|
486
|
+
if ttype not in tileset_map:
|
|
487
|
+
continue
|
|
488
|
+
ts = tileset_map[ttype]
|
|
489
|
+
variant_id = tile["variant"]
|
|
490
|
+
sheet_w = ts.surface.get_width()
|
|
491
|
+
sheet_cols = sheet_w // tw
|
|
492
|
+
src_x = (variant_id % sheet_cols) * tw
|
|
493
|
+
src_y = (variant_id // sheet_cols) * th
|
|
494
|
+
src_rect = Rect(src_x, src_y, tw, th)
|
|
495
|
+
if not ts.surface.get_rect().contains(src_rect):
|
|
496
|
+
continue
|
|
497
|
+
layer_surf.blit(ts.surface, (dx, dy), src_rect)
|
|
498
|
+
|
|
499
|
+
if layer.opacity < 1.0:
|
|
500
|
+
layer_surf.set_alpha(int(layer.opacity * 255))
|
|
501
|
+
export_surf.blit(layer_surf, (0, 0))
|
|
502
|
+
|
|
503
|
+
pygame.image.save(export_surf, str(path))
|
|
504
|
+
self.notifications.notify(f"Exported selection to {path.name}", duration=2.0)
|
|
505
|
+
|
|
445
506
|
def perform_load(self):
|
|
446
507
|
self.open_file_manager(
|
|
447
508
|
on_select=self.on_map_file_selected,
|
|
@@ -1106,7 +1167,7 @@ class Editor:
|
|
|
1106
1167
|
else:
|
|
1107
1168
|
self.perform_quick_save()
|
|
1108
1169
|
continue
|
|
1109
|
-
elif event.key == pygame.K_BACKQUOTE and ctrl_held:
|
|
1170
|
+
elif event.key == pygame.K_BACKQUOTE and (ctrl_held or meta_held):
|
|
1110
1171
|
self.launch_error_console()
|
|
1111
1172
|
continue
|
|
1112
1173
|
elif event.key == pygame.K_z and (ctrl_held or meta_held):
|
|
@@ -1149,9 +1210,12 @@ class Editor:
|
|
|
1149
1210
|
self.eraser_mode = False
|
|
1150
1211
|
self.node_editing_mode = False
|
|
1151
1212
|
continue
|
|
1152
|
-
elif event.
|
|
1213
|
+
elif event.key == pygame.K_g and (ctrl_held or meta_held):
|
|
1153
1214
|
self.toggle_grid()
|
|
1154
1215
|
continue
|
|
1216
|
+
elif event.key == pygame.K_e and (ctrl_held or meta_held) and shift_held:
|
|
1217
|
+
self.export_selection_as_png()
|
|
1218
|
+
continue
|
|
1155
1219
|
elif event.key == pygame.K_t and (ctrl_held or meta_held):
|
|
1156
1220
|
self.cycle_theme()
|
|
1157
1221
|
continue
|
|
@@ -1181,14 +1245,14 @@ class Editor:
|
|
|
1181
1245
|
if self.animation_panel.handle_event(event):
|
|
1182
1246
|
continue
|
|
1183
1247
|
|
|
1184
|
-
# Priority 7: Side panels (
|
|
1248
|
+
# Priority 7: Side panels (layer widget first so rename captures keys)
|
|
1185
1249
|
consumed = False
|
|
1186
|
-
if self.
|
|
1250
|
+
if self.layer_widget and self.layer_widget.handle_event(event):
|
|
1187
1251
|
consumed = True
|
|
1188
1252
|
if (
|
|
1189
1253
|
not consumed
|
|
1190
|
-
and self.
|
|
1191
|
-
and self.
|
|
1254
|
+
and self.tileset_widget
|
|
1255
|
+
and self.tileset_widget.handle_event(event)
|
|
1192
1256
|
):
|
|
1193
1257
|
consumed = True
|
|
1194
1258
|
|
|
@@ -271,7 +271,9 @@ class AutotileRuleDesigner:
|
|
|
271
271
|
self._update_preview_from_selector()
|
|
272
272
|
|
|
273
273
|
if event.type == pygame.KEYDOWN:
|
|
274
|
-
|
|
274
|
+
if event.key == pygame.K_ESCAPE:
|
|
275
|
+
self.hide()
|
|
276
|
+
return True
|
|
275
277
|
|
|
276
278
|
if event.type == pygame.MOUSEBUTTONDOWN:
|
|
277
279
|
if event.button == 1:
|
|
@@ -14,6 +14,7 @@ COLOR_BORDER = (80, 80, 80)
|
|
|
14
14
|
COLOR_ACCENT = (60, 100, 160)
|
|
15
15
|
COLOR_TEXT = (220, 220, 220)
|
|
16
16
|
COLOR_ERROR = (200, 60, 60)
|
|
17
|
+
COLOR_DIM = (140, 140, 140)
|
|
17
18
|
|
|
18
19
|
|
|
19
20
|
class MapSetup:
|
|
@@ -42,8 +43,10 @@ class MapSetup:
|
|
|
42
43
|
r = Rect(start_x + col * cell_w, start_y + row * cell_h, cell_w - 10, 60)
|
|
43
44
|
self.inputs.append(DigitInput(r, lbl, key, default, tab_index=i))
|
|
44
45
|
|
|
45
|
-
self.btn_rect = Rect(self.rect.centerx - 60, self.rect.bottom -
|
|
46
|
+
self.btn_rect = Rect(self.rect.centerx - 60, self.rect.bottom - 105, 120, 35)
|
|
47
|
+
self.btn_open_rect = Rect(self.rect.centerx - 60, self.rect.bottom - 50, 120, 35)
|
|
46
48
|
self.font = pygame.font.SysFont("Arial", 20, bold=True)
|
|
49
|
+
self.font_sm = pygame.font.SysFont("Arial", 13)
|
|
47
50
|
|
|
48
51
|
def resize(self, center_rect: Rect):
|
|
49
52
|
self.rect = center_rect
|
|
@@ -59,18 +62,26 @@ class MapSetup:
|
|
|
59
62
|
inp.rect_area = r
|
|
60
63
|
inp.rect_input = Rect(r.x, r.y + 20, r.width, 30)
|
|
61
64
|
|
|
62
|
-
self.btn_rect = Rect(self.rect.centerx - 60, self.rect.bottom -
|
|
65
|
+
self.btn_rect = Rect(self.rect.centerx - 60, self.rect.bottom - 105, 120, 35)
|
|
66
|
+
self.btn_open_rect = Rect(self.rect.centerx - 60, self.rect.bottom - 50, 120, 35)
|
|
63
67
|
|
|
64
68
|
def handle_event(self, event: pygame.event.Event) -> bool:
|
|
65
69
|
if not self.visible:
|
|
66
70
|
return False
|
|
67
71
|
|
|
68
|
-
if event.type == pygame.
|
|
69
|
-
|
|
70
|
-
):
|
|
71
|
-
self.submit()
|
|
72
|
+
if event.type == pygame.KEYDOWN and event.key == pygame.K_ESCAPE:
|
|
73
|
+
self.visible = False
|
|
72
74
|
return True
|
|
73
75
|
|
|
76
|
+
if event.type == pygame.MOUSEBUTTONDOWN:
|
|
77
|
+
if self.btn_rect.collidepoint(event.pos):
|
|
78
|
+
self.submit()
|
|
79
|
+
return True
|
|
80
|
+
if self.btn_open_rect.collidepoint(event.pos):
|
|
81
|
+
self.visible = False
|
|
82
|
+
self.editor.perform_load()
|
|
83
|
+
return True
|
|
84
|
+
|
|
74
85
|
if event.type == pygame.KEYDOWN and event.key == pygame.K_TAB:
|
|
75
86
|
focused = [i for i in self.inputs if i.is_focused]
|
|
76
87
|
shift_held = pygame.key.get_mods() & pygame.KMOD_SHIFT
|
|
@@ -134,6 +145,14 @@ class MapSetup:
|
|
|
134
145
|
btn_txt = self.font.render("Create", True, COLOR_TEXT)
|
|
135
146
|
screen.blit(btn_txt, btn_txt.get_rect(center=self.btn_rect.center))
|
|
136
147
|
|
|
148
|
+
or_surf = self.font_sm.render("─ OR ─", True, COLOR_DIM)
|
|
149
|
+
or_rect = or_surf.get_rect(center=(self.rect.centerx, self.btn_rect.bottom + 10))
|
|
150
|
+
screen.blit(or_surf, or_rect)
|
|
151
|
+
|
|
152
|
+
pygame.draw.rect(screen, COLOR_ACCENT, self.btn_open_rect)
|
|
153
|
+
open_txt = self.font_sm.render("Open map", True, COLOR_TEXT)
|
|
154
|
+
screen.blit(open_txt, open_txt.get_rect(center=self.btn_open_rect.center))
|
|
155
|
+
|
|
137
156
|
if self.error_message:
|
|
138
157
|
err = pygame.font.SysFont("Arial", 12).render(
|
|
139
158
|
self.error_message, True, COLOR_ERROR
|
|
@@ -287,6 +287,10 @@ class RegexAutomapDesigner:
|
|
|
287
287
|
mouse_pos = pygame.mouse.get_pos()
|
|
288
288
|
self._update_preview_from_selector()
|
|
289
289
|
|
|
290
|
+
if event.type == pygame.KEYDOWN and event.key == pygame.K_ESCAPE:
|
|
291
|
+
self.hide()
|
|
292
|
+
return True
|
|
293
|
+
|
|
290
294
|
if event.type == pygame.MOUSEBUTTONDOWN:
|
|
291
295
|
if event.button == 1: # Left click
|
|
292
296
|
# Header dragging
|
|
@@ -1449,10 +1449,11 @@ class TileGrid:
|
|
|
1449
1449
|
|
|
1450
1450
|
sel_rect = Rect(int(sx), int(sy), int(sw), int(sh))
|
|
1451
1451
|
|
|
1452
|
-
# Semi-transparent fill
|
|
1453
|
-
|
|
1454
|
-
|
|
1455
|
-
|
|
1452
|
+
# Semi-transparent fill (skip during drag to avoid visual noise)
|
|
1453
|
+
if not self.is_selecting:
|
|
1454
|
+
fill_surf = pygame.Surface((int(sw), int(sh)), pygame.SRCALPHA)
|
|
1455
|
+
fill_surf.fill((100, 180, 255, 40))
|
|
1456
|
+
screen.blit(fill_surf, (int(sx), int(sy)))
|
|
1456
1457
|
|
|
1457
1458
|
# Dashed border (draw segments)
|
|
1458
1459
|
border_color = (100, 180, 255) if not self.is_moving else (255, 200, 50)
|
|
@@ -76,6 +76,11 @@ class MenuBar:
|
|
|
76
76
|
MenuAction(
|
|
77
77
|
"Toggle Auto-Autotile", self.editor.toggle_auto_autotile
|
|
78
78
|
),
|
|
79
|
+
MenuAction(
|
|
80
|
+
"Export Selection as PNG",
|
|
81
|
+
self.editor.export_selection_as_png,
|
|
82
|
+
"Ctrl+Shift+E",
|
|
83
|
+
),
|
|
79
84
|
MenuAction(
|
|
80
85
|
"Launch External Viewer", self.editor.launch_external_automap
|
|
81
86
|
),
|
|
@@ -71,7 +71,7 @@ class TilesetTypeDialog:
|
|
|
71
71
|
"""Position child controls from the current dialog rect."""
|
|
72
72
|
self.rect.center = self.editor_rect.center
|
|
73
73
|
|
|
74
|
-
h =
|
|
74
|
+
h = 260
|
|
75
75
|
if self.animated or self._editing_field is not None:
|
|
76
76
|
h = 420
|
|
77
77
|
self.rect.h = h
|
|
@@ -97,7 +97,7 @@ class TilesetTypeDialog:
|
|
|
97
97
|
)
|
|
98
98
|
|
|
99
99
|
# Animated checkbox
|
|
100
|
-
anim_y = first_y + (row_h + gap) * 2 +
|
|
100
|
+
anim_y = first_y + (row_h + gap) * 2 + 16
|
|
101
101
|
self.anim_check_rect = Rect(radio_x, anim_y, 16, 16)
|
|
102
102
|
|
|
103
103
|
# Animation fields (collapsible)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/assets/fonts/jetbrain-fonts/JetBrainsMono-Bold.ttf
RENAMED
|
File without changes
|
|
File without changes
|
{tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/assets/fonts/jetbrain-fonts/JetBrainsMono-Italic.ttf
RENAMED
|
File without changes
|
{tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/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.3.0 → tilemap_editor-3.3.2}/src/plugins/character_collision/shape_editor.py
RENAMED
|
File without changes
|
|
File without changes
|
{tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/plugins/object_tileset_collision/__init__.py
RENAMED
|
File without changes
|
{tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/plugins/object_tileset_collision/editor.py
RENAMED
|
File without changes
|
{tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/plugins/object_tileset_collision/models.py
RENAMED
|
File without changes
|
{tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/plugins/object_tileset_collision/protocols.py
RENAMED
|
File without changes
|
{tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/plugins/object_tileset_collision/standalone.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/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
|
|
File without changes
|
|
File without changes
|
{tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/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.3.0 → tilemap_editor-3.3.2}/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.3.0 → tilemap_editor-3.3.2}/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.3.0 → tilemap_editor-3.3.2}/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
|