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.
Files changed (198) hide show
  1. {tilemap_editor-3.3.0/src/tilemap_editor.egg-info → tilemap_editor-3.3.2}/PKG-INFO +1 -1
  2. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/pyproject.toml +1 -1
  3. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/editor.py +71 -7
  4. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2/src/tilemap_editor.egg-info}/PKG-INFO +1 -1
  5. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/widgets/autotiler.py +3 -1
  6. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/widgets/mapsetup.py +25 -6
  7. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/widgets/regex_automap_designer.py +4 -0
  8. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/widgets/tile_grid.py +5 -4
  9. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/widgets/ui/menubar.py +5 -0
  10. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/widgets/ui/tileset_type_dialog.py +2 -2
  11. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/LICENSE +0 -0
  12. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/MANIFEST.in +0 -0
  13. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/README.md +0 -0
  14. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/assets/fonts/jetbrain-fonts/JetBrainsMono-Bold.ttf +0 -0
  15. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/assets/fonts/jetbrain-fonts/JetBrainsMono-BoldItalic.ttf +0 -0
  16. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/assets/fonts/jetbrain-fonts/JetBrainsMono-Italic.ttf +0 -0
  17. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/assets/fonts/jetbrain-fonts/JetBrainsMono-Regular.ttf +0 -0
  18. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/assets/fonts/noto/NotoSans-Bold.ttf +0 -0
  19. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/assets/fonts/noto/NotoSans-BoldItalic.ttf +0 -0
  20. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/assets/fonts/noto/NotoSans-Italic.ttf +0 -0
  21. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/assets/fonts/noto/NotoSans-Regular.ttf +0 -0
  22. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/assets/icons/arrow-down.svg +0 -0
  23. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/assets/icons/check.svg +0 -0
  24. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/assets/icons/checked.svg +0 -0
  25. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/assets/icons/close.svg +0 -0
  26. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/assets/icons/duplicate.svg +0 -0
  27. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/assets/icons/error.svg +0 -0
  28. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/assets/icons/file.svg +0 -0
  29. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/assets/icons/filedead.svg +0 -0
  30. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/assets/icons/fit.svg +0 -0
  31. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/assets/icons/folder.svg +0 -0
  32. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/assets/icons/grid.svg +0 -0
  33. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/assets/icons/image.svg +0 -0
  34. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/assets/icons/info.svg +0 -0
  35. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/assets/icons/load.svg +0 -0
  36. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/assets/icons/loop.svg +0 -0
  37. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/assets/icons/pan.svg +0 -0
  38. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/assets/icons/pause.svg +0 -0
  39. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/assets/icons/pencil.svg +0 -0
  40. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/assets/icons/play.svg +0 -0
  41. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/assets/icons/plus.svg +0 -0
  42. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/assets/icons/radio.svg +0 -0
  43. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/assets/icons/reset.svg +0 -0
  44. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/assets/icons/save.svg +0 -0
  45. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/assets/icons/stop.svg +0 -0
  46. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/assets/icons/tilemap.svg +0 -0
  47. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/assets/icons/tileset.svg +0 -0
  48. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/assets/icons/unchecked.svg +0 -0
  49. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/assets/icons/warning.svg +0 -0
  50. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/assets/icons/zoomin.svg +0 -0
  51. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/assets/icons/zoomout.svg +0 -0
  52. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/setup.cfg +0 -0
  53. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/configs/themes.py +0 -0
  54. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/constants.py +0 -0
  55. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/event_map.py +0 -0
  56. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/layers.py +0 -0
  57. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/main.py +0 -0
  58. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/node_manager.py +0 -0
  59. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/nodes.py +0 -0
  60. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/plugins/__init__.py +0 -0
  61. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/plugins/character_collision/__init__.py +0 -0
  62. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/plugins/character_collision/editor.py +0 -0
  63. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/plugins/character_collision/models.py +0 -0
  64. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/plugins/character_collision/protocols.py +0 -0
  65. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/plugins/character_collision/shape_editor.py +0 -0
  66. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/plugins/character_collision/standalone.py +0 -0
  67. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/plugins/object_tileset_collision/__init__.py +0 -0
  68. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/plugins/object_tileset_collision/editor.py +0 -0
  69. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/plugins/object_tileset_collision/models.py +0 -0
  70. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/plugins/object_tileset_collision/protocols.py +0 -0
  71. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/plugins/object_tileset_collision/standalone.py +0 -0
  72. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/plugins/sprite_animation/__init__.py +0 -0
  73. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/plugins/sprite_animation/__main__.py +0 -0
  74. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/plugins/sprite_animation/clipboard_util.py +0 -0
  75. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/plugins/sprite_animation/editor.py +0 -0
  76. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/plugins/sprite_animation/frame_picker.py +0 -0
  77. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/plugins/sprite_animation/models.py +0 -0
  78. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/plugins/sprite_animation/preview.py +0 -0
  79. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/plugins/sprite_animation/protocols.py +0 -0
  80. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/plugins/sprite_animation/runtime_load.py +0 -0
  81. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/plugins/sprite_animation/standalone.py +0 -0
  82. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/plugins/sprite_animation/timeline.py +0 -0
  83. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/plugins/sprite_animation/validation.py +0 -0
  84. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/plugins/sprite_editor/__init__.py +0 -0
  85. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/plugins/sprite_editor/editor.py +0 -0
  86. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/plugins/sprite_editor/standalone.py +0 -0
  87. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/plugins/tileset_collision/__init__.py +0 -0
  88. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/plugins/tileset_collision/collision_painter.py +0 -0
  89. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/plugins/tileset_collision/editor.py +0 -0
  90. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/plugins/tileset_collision/models.py +0 -0
  91. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/plugins/tileset_collision/protocols.py +0 -0
  92. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/plugins/tileset_collision/standalone.py +0 -0
  93. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/standalone_automap.py +0 -0
  94. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/standalone_error_console.py +0 -0
  95. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/standalone_filemanager.py +0 -0
  96. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/standalone_image_viewer.py +0 -0
  97. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/tilemap.py +0 -0
  98. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/tilemap_editor/__init__.py +0 -0
  99. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/tilemap_editor/__main__.py +0 -0
  100. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/tilemap_editor/assets/__init__.py +0 -0
  101. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/tilemap_editor/assets/fonts/jetbrain-fonts/JetBrainsMono-Bold.ttf +0 -0
  102. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/tilemap_editor/assets/fonts/jetbrain-fonts/JetBrainsMono-BoldItalic.ttf +0 -0
  103. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/tilemap_editor/assets/fonts/jetbrain-fonts/JetBrainsMono-Italic.ttf +0 -0
  104. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/tilemap_editor/assets/fonts/jetbrain-fonts/JetBrainsMono-Regular.ttf +0 -0
  105. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/tilemap_editor/assets/fonts/noto/NotoSans-Bold.ttf +0 -0
  106. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/tilemap_editor/assets/fonts/noto/NotoSans-BoldItalic.ttf +0 -0
  107. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/tilemap_editor/assets/fonts/noto/NotoSans-Italic.ttf +0 -0
  108. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/tilemap_editor/assets/fonts/noto/NotoSans-Regular.ttf +0 -0
  109. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/tilemap_editor/assets/icons/ToolMove.svg +0 -0
  110. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/tilemap_editor/assets/icons/arrow-down.svg +0 -0
  111. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/tilemap_editor/assets/icons/check.svg +0 -0
  112. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/tilemap_editor/assets/icons/checked.svg +0 -0
  113. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/tilemap_editor/assets/icons/close.svg +0 -0
  114. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/tilemap_editor/assets/icons/duplicate.svg +0 -0
  115. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/tilemap_editor/assets/icons/error.svg +0 -0
  116. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/tilemap_editor/assets/icons/file.svg +0 -0
  117. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/tilemap_editor/assets/icons/filedead.svg +0 -0
  118. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/tilemap_editor/assets/icons/fit.svg +0 -0
  119. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/tilemap_editor/assets/icons/folder.svg +0 -0
  120. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/tilemap_editor/assets/icons/grid.svg +0 -0
  121. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/tilemap_editor/assets/icons/image.svg +0 -0
  122. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/tilemap_editor/assets/icons/info.svg +0 -0
  123. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/tilemap_editor/assets/icons/load.svg +0 -0
  124. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/tilemap_editor/assets/icons/loop.svg +0 -0
  125. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/tilemap_editor/assets/icons/pan.svg +0 -0
  126. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/tilemap_editor/assets/icons/pause.svg +0 -0
  127. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/tilemap_editor/assets/icons/pencil.svg +0 -0
  128. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/tilemap_editor/assets/icons/play.svg +0 -0
  129. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/tilemap_editor/assets/icons/plus.svg +0 -0
  130. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/tilemap_editor/assets/icons/radio.svg +0 -0
  131. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/tilemap_editor/assets/icons/reset.svg +0 -0
  132. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/tilemap_editor/assets/icons/save.svg +0 -0
  133. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/tilemap_editor/assets/icons/stop.svg +0 -0
  134. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/tilemap_editor/assets/icons/tilemap.svg +0 -0
  135. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/tilemap_editor/assets/icons/tileset.svg +0 -0
  136. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/tilemap_editor/assets/icons/unchecked.svg +0 -0
  137. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/tilemap_editor/assets/icons/warning.svg +0 -0
  138. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/tilemap_editor/assets/icons/zoomin.svg +0 -0
  139. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/tilemap_editor/assets/icons/zoomout.svg +0 -0
  140. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/tilemap_editor/cli.py +0 -0
  141. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/tilemap_editor/main.py +0 -0
  142. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/tilemap_editor/settings.py +0 -0
  143. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/tilemap_editor.egg-info/SOURCES.txt +0 -0
  144. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/tilemap_editor.egg-info/dependency_links.txt +0 -0
  145. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/tilemap_editor.egg-info/entry_points.txt +0 -0
  146. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/tilemap_editor.egg-info/requires.txt +0 -0
  147. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/tilemap_editor.egg-info/top_level.txt +0 -0
  148. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/ttypes/__init__.py +0 -0
  149. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/ttypes/tilemap.py +0 -0
  150. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/utils/__init__.py +0 -0
  151. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/utils/editor_preference.py +0 -0
  152. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/utils/error_handler.py +0 -0
  153. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/utils/font_manager.py +0 -0
  154. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/utils/history.py +0 -0
  155. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/utils/icon_manager.py +0 -0
  156. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/utils/icons_cache.py +0 -0
  157. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/utils/log_capture.py +0 -0
  158. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/utils/project_paths.py +0 -0
  159. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/utils/serialization.py +0 -0
  160. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/utils/standalone.py +0 -0
  161. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/utils/validation.py +0 -0
  162. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/widgets/__init__.py +0 -0
  163. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/widgets/automap_models.py +0 -0
  164. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/widgets/autotile_template.py +0 -0
  165. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/widgets/filemanager.py +0 -0
  166. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/widgets/input.py +0 -0
  167. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/widgets/layer_selector.py +0 -0
  168. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/widgets/map_properties.py +0 -0
  169. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/widgets/spritesheet_grid.py +0 -0
  170. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/widgets/tile_selector.py +0 -0
  171. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/widgets/ui/collision_layer_mask.py +0 -0
  172. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/widgets/ui/collision_layer_sidebar.py +0 -0
  173. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/widgets/ui/confirm_dialog.py +0 -0
  174. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/widgets/ui/draw_utils.py +0 -0
  175. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/widgets/ui/fileinput.py +0 -0
  176. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/widgets/ui/layer_type_dialog.py +0 -0
  177. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/widgets/ui/mode_indicator.py +0 -0
  178. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/widgets/ui/node_editor.py +0 -0
  179. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/widgets/ui/node_selector.py +0 -0
  180. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/widgets/ui/notification.py +0 -0
  181. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/widgets/ui/property_editor.py +0 -0
  182. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/widgets/ui/region_selector.py +0 -0
  183. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/widgets/ui/status_bar.py +0 -0
  184. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/widgets/ui/theme.py +0 -0
  185. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/widgets/ui/toolbar.py +0 -0
  186. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/src/widgets/ui/tooltip.py +0 -0
  187. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/tests/test_animation_library_grid_offset.py +0 -0
  188. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/tests/test_collision_layer_mask.py +0 -0
  189. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/tests/test_collision_layer_sidebar.py +0 -0
  190. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/tests/test_editor_pan_mode.py +0 -0
  191. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/tests/test_project_paths.py +0 -0
  192. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/tests/test_render_scale.py +0 -0
  193. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/tests/test_sprite_animation_editor_grid.py +0 -0
  194. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/tests/test_tile_grid_selection.py +0 -0
  195. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/tests/test_tile_selector_pick.py +0 -0
  196. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/tests/test_tilemap_save.py +0 -0
  197. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/tests/test_timeline_invalidate_cache.py +0 -0
  198. {tilemap_editor-3.3.0 → tilemap_editor-3.3.2}/tests/test_toolbar_tools.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: tilemap-editor
3
- Version: 3.3.0
3
+ Version: 3.3.2
4
4
  Summary: Pygame tilemap editor with SVG icons, professional UI, and sprite animation tools
5
5
  Author: tilemap editor contributors
6
6
  License: Proprietary
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "tilemap-editor"
7
- version = "3.3.0"
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 = False
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.mod & pygame.KMOD_CTRL and event.key == pygame.K_g:
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 (tileset and layer widgets)
1248
+ # Priority 7: Side panels (layer widget first so rename captures keys)
1185
1249
  consumed = False
1186
- if self.tileset_widget and self.tileset_widget.handle_event(event):
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.layer_widget
1191
- and self.layer_widget.handle_event(event)
1254
+ and self.tileset_widget
1255
+ and self.tileset_widget.handle_event(event)
1192
1256
  ):
1193
1257
  consumed = True
1194
1258
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: tilemap-editor
3
- Version: 3.3.0
3
+ Version: 3.3.2
4
4
  Summary: Pygame tilemap editor with SVG icons, professional UI, and sprite animation tools
5
5
  Author: tilemap editor contributors
6
6
  License: Proprietary
@@ -271,7 +271,9 @@ class AutotileRuleDesigner:
271
271
  self._update_preview_from_selector()
272
272
 
273
273
  if event.type == pygame.KEYDOWN:
274
- pass
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 - 50, 120, 35)
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 - 50, 120, 35)
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.MOUSEBUTTONDOWN and self.btn_rect.collidepoint(
69
- event.pos
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
- fill_surf = pygame.Surface((int(sw), int(sh)), pygame.SRCALPHA)
1454
- fill_surf.fill((100, 180, 255, 40))
1455
- screen.blit(fill_surf, (int(sx), int(sy)))
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 = 220
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 + 6
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