pygamestudio 1.0.0.dev2__tar.gz → 1.0.0.dev4__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 (153) hide show
  1. {pygamestudio-1.0.0.dev2 → pygamestudio-1.0.0.dev4}/PKG-INFO +2 -2
  2. {pygamestudio-1.0.0.dev2 → pygamestudio-1.0.0.dev4}/README.md +1 -1
  3. {pygamestudio-1.0.0.dev2 → pygamestudio-1.0.0.dev4}/README_zh-CN.md +1 -1
  4. {pygamestudio-1.0.0.dev2 → pygamestudio-1.0.0.dev4}/pyproject.toml +1 -1
  5. {pygamestudio-1.0.0.dev2 → pygamestudio-1.0.0.dev4}/src/pygamestudio/api/runtime/config.py +3 -2
  6. {pygamestudio-1.0.0.dev2 → pygamestudio-1.0.0.dev4}/src/pygamestudio/api/runtime/scene.py +13 -6
  7. {pygamestudio-1.0.0.dev2 → pygamestudio-1.0.0.dev4}/src/pygamestudio/common/i18n/languages/en.json +26 -3
  8. {pygamestudio-1.0.0.dev2 → pygamestudio-1.0.0.dev4}/src/pygamestudio/common/i18n/languages/zh_CN.json +26 -3
  9. {pygamestudio-1.0.0.dev2 → pygamestudio-1.0.0.dev4}/src/pygamestudio/common/i18n/translator.py +3 -4
  10. pygamestudio-1.0.0.dev4/src/pygamestudio/common/res/fonts/SIMHEI.ttf +0 -0
  11. pygamestudio-1.0.0.dev4/src/pygamestudio/common/res/images/image.png +0 -0
  12. {pygamestudio-1.0.0.dev2 → pygamestudio-1.0.0.dev4}/src/pygamestudio/common/res/qss/dark.qss +18 -1
  13. pygamestudio-1.0.0.dev4/src/pygamestudio/common/res/qss/light.qss +563 -0
  14. {pygamestudio-1.0.0.dev2 → pygamestudio-1.0.0.dev4}/src/pygamestudio/common/res/resources.qrc +1 -0
  15. {pygamestudio-1.0.0.dev2 → pygamestudio-1.0.0.dev4}/src/pygamestudio/common/res/resources_rc.py +71 -2
  16. pygamestudio-1.0.0.dev4/src/pygamestudio/common/res/templates/editor_template.pygs +4 -0
  17. {pygamestudio-1.0.0.dev2 → pygamestudio-1.0.0.dev4}/src/pygamestudio/common/utils/config.py +1 -0
  18. pygamestudio-1.0.0.dev4/src/pygamestudio/common/utils/constant.py +1 -0
  19. pygamestudio-1.0.0.dev4/src/pygamestudio/common/utils/path.py +16 -0
  20. pygamestudio-1.0.0.dev4/src/pygamestudio/common/utils/theme.py +18 -0
  21. {pygamestudio-1.0.0.dev2 → pygamestudio-1.0.0.dev4}/src/pygamestudio/game/core/manager.py +21 -2
  22. {pygamestudio-1.0.0.dev2 → pygamestudio-1.0.0.dev4}/src/pygamestudio/game/object/base.py +3 -0
  23. {pygamestudio-1.0.0.dev2 → pygamestudio-1.0.0.dev4}/src/pygamestudio/game/object/ellipse.py +3 -3
  24. pygamestudio-1.0.0.dev4/src/pygamestudio/game/object/image.py +119 -0
  25. {pygamestudio-1.0.0.dev2 → pygamestudio-1.0.0.dev4}/src/pygamestudio/game/object/line.py +6 -6
  26. {pygamestudio-1.0.0.dev2 → pygamestudio-1.0.0.dev4}/src/pygamestudio/game/object/rect.py +4 -6
  27. {pygamestudio-1.0.0.dev2 → pygamestudio-1.0.0.dev4}/src/pygamestudio/game/object/text.py +31 -6
  28. {pygamestudio-1.0.0.dev2 → pygamestudio-1.0.0.dev4}/src/pygamestudio/game/object/type.py +2 -1
  29. {pygamestudio-1.0.0.dev2 → pygamestudio-1.0.0.dev4}/src/pygamestudio/gui/asset/search.py +2 -0
  30. {pygamestudio-1.0.0.dev2 → pygamestudio-1.0.0.dev4}/src/pygamestudio/gui/base/window.py +2 -13
  31. {pygamestudio-1.0.0.dev2 → pygamestudio-1.0.0.dev4}/src/pygamestudio/gui/build/desktop.py +1 -1
  32. {pygamestudio-1.0.0.dev2 → pygamestudio-1.0.0.dev4}/src/pygamestudio/gui/console/browser.py +47 -8
  33. {pygamestudio-1.0.0.dev2 → pygamestudio-1.0.0.dev4}/src/pygamestudio/gui/console/search.py +2 -0
  34. {pygamestudio-1.0.0.dev2 → pygamestudio-1.0.0.dev4}/src/pygamestudio/gui/console/window.py +4 -1
  35. {pygamestudio-1.0.0.dev2 → pygamestudio-1.0.0.dev4}/src/pygamestudio/gui/dashboard/delegate.py +15 -3
  36. {pygamestudio-1.0.0.dev2 → pygamestudio-1.0.0.dev4}/src/pygamestudio/gui/dashboard/dialog.py +3 -0
  37. {pygamestudio-1.0.0.dev2 → pygamestudio-1.0.0.dev4}/src/pygamestudio/gui/dashboard/search.py +2 -0
  38. {pygamestudio-1.0.0.dev2 → pygamestudio-1.0.0.dev4}/src/pygamestudio/gui/hierarchy/menu.py +3 -0
  39. {pygamestudio-1.0.0.dev2 → pygamestudio-1.0.0.dev4}/src/pygamestudio/gui/hierarchy/search.py +2 -0
  40. {pygamestudio-1.0.0.dev2 → pygamestudio-1.0.0.dev4}/src/pygamestudio/gui/hierarchy/tree.py +2 -1
  41. {pygamestudio-1.0.0.dev2 → pygamestudio-1.0.0.dev4}/src/pygamestudio/gui/hierarchy/widget.py +3 -0
  42. pygamestudio-1.0.0.dev4/src/pygamestudio/gui/inspector/component/lineedit.py +188 -0
  43. {pygamestudio-1.0.0.dev2 → pygamestudio-1.0.0.dev4}/src/pygamestudio/gui/inspector/container.py +41 -12
  44. pygamestudio-1.0.0.dev4/src/pygamestudio/gui/inspector/layout/image.py +108 -0
  45. {pygamestudio-1.0.0.dev2 → pygamestudio-1.0.0.dev4}/src/pygamestudio/gui/inspector/layout/text.py +17 -6
  46. {pygamestudio-1.0.0.dev2 → pygamestudio-1.0.0.dev4}/src/pygamestudio/gui/scene/gizmo.py +9 -2
  47. {pygamestudio-1.0.0.dev2 → pygamestudio-1.0.0.dev4}/src/pygamestudio/gui/scene/grid.py +86 -23
  48. {pygamestudio-1.0.0.dev2 → pygamestudio-1.0.0.dev4}/src/pygamestudio/gui/scene/screen.py +34 -4
  49. {pygamestudio-1.0.0.dev2 → pygamestudio-1.0.0.dev4}/src/pygamestudio/gui/scene/window.py +8 -5
  50. {pygamestudio-1.0.0.dev2 → pygamestudio-1.0.0.dev4}/src/pygamestudio/gui/settings/editor.py +47 -2
  51. {pygamestudio-1.0.0.dev2 → pygamestudio-1.0.0.dev4}/src/pygamestudio/gui/settings/project.py +12 -2
  52. {pygamestudio-1.0.0.dev2 → pygamestudio-1.0.0.dev4}/src/pygamestudio/gui/window.py +10 -4
  53. {pygamestudio-1.0.0.dev2 → pygamestudio-1.0.0.dev4}/src/pygamestudio/main.py +5 -0
  54. pygamestudio-1.0.0.dev2/src/pygamestudio/common/res/templates/editor_template.pygs +0 -3
  55. pygamestudio-1.0.0.dev2/src/pygamestudio/common/utils/constant.py +0 -1
  56. pygamestudio-1.0.0.dev2/src/pygamestudio/common/utils/path.py +0 -4
  57. pygamestudio-1.0.0.dev2/src/pygamestudio/gui/inspector/component/lineedit.py +0 -19
  58. {pygamestudio-1.0.0.dev2 → pygamestudio-1.0.0.dev4}/.github/FUNDING.yml +0 -0
  59. {pygamestudio-1.0.0.dev2 → pygamestudio-1.0.0.dev4}/.gitignore +0 -0
  60. {pygamestudio-1.0.0.dev2 → pygamestudio-1.0.0.dev4}/LICENSE +0 -0
  61. {pygamestudio-1.0.0.dev2 → pygamestudio-1.0.0.dev4}/src/pygamestudio/__init__.py +0 -0
  62. {pygamestudio-1.0.0.dev2 → pygamestudio-1.0.0.dev4}/src/pygamestudio/api/runtime/__init__.py +0 -0
  63. {pygamestudio-1.0.0.dev2 → pygamestudio-1.0.0.dev4}/src/pygamestudio/common/__init__.py +0 -0
  64. {pygamestudio-1.0.0.dev2 → pygamestudio-1.0.0.dev4}/src/pygamestudio/common/i18n/__init__.py +0 -0
  65. {pygamestudio-1.0.0.dev2 → pygamestudio-1.0.0.dev4}/src/pygamestudio/common/res/images/add.png +0 -0
  66. {pygamestudio-1.0.0.dev2 → pygamestudio-1.0.0.dev4}/src/pygamestudio/common/res/images/add_item.png +0 -0
  67. {pygamestudio-1.0.0.dev2 → pygamestudio-1.0.0.dev4}/src/pygamestudio/common/res/images/browse.png +0 -0
  68. {pygamestudio-1.0.0.dev2 → pygamestudio-1.0.0.dev4}/src/pygamestudio/common/res/images/canvas.png +0 -0
  69. {pygamestudio-1.0.0.dev2 → pygamestudio-1.0.0.dev4}/src/pygamestudio/common/res/images/check.png +0 -0
  70. {pygamestudio-1.0.0.dev2 → pygamestudio-1.0.0.dev4}/src/pygamestudio/common/res/images/clear.png +0 -0
  71. {pygamestudio-1.0.0.dev2 → pygamestudio-1.0.0.dev4}/src/pygamestudio/common/res/images/close.png +0 -0
  72. {pygamestudio-1.0.0.dev2 → pygamestudio-1.0.0.dev4}/src/pygamestudio/common/res/images/create_project.png +0 -0
  73. {pygamestudio-1.0.0.dev2 → pygamestudio-1.0.0.dev4}/src/pygamestudio/common/res/images/down_arrow.png +0 -0
  74. {pygamestudio-1.0.0.dev2 → pygamestudio-1.0.0.dev4}/src/pygamestudio/common/res/images/ellipse.png +0 -0
  75. {pygamestudio-1.0.0.dev2 → pygamestudio-1.0.0.dev4}/src/pygamestudio/common/res/images/error.png +0 -0
  76. {pygamestudio-1.0.0.dev2 → pygamestudio-1.0.0.dev4}/src/pygamestudio/common/res/images/expand_or_collapse_all.png +0 -0
  77. {pygamestudio-1.0.0.dev2 → pygamestudio-1.0.0.dev4}/src/pygamestudio/common/res/images/eye_closed.png +0 -0
  78. {pygamestudio-1.0.0.dev2 → pygamestudio-1.0.0.dev4}/src/pygamestudio/common/res/images/eye_off.png +0 -0
  79. {pygamestudio-1.0.0.dev2 → pygamestudio-1.0.0.dev4}/src/pygamestudio/common/res/images/eye_open.png +0 -0
  80. {pygamestudio-1.0.0.dev2 → pygamestudio-1.0.0.dev4}/src/pygamestudio/common/res/images/heart.png +0 -0
  81. {pygamestudio-1.0.0.dev2 → pygamestudio-1.0.0.dev4}/src/pygamestudio/common/res/images/import_project.png +0 -0
  82. {pygamestudio-1.0.0.dev2 → pygamestudio-1.0.0.dev4}/src/pygamestudio/common/res/images/info.png +0 -0
  83. {pygamestudio-1.0.0.dev2 → pygamestudio-1.0.0.dev4}/src/pygamestudio/common/res/images/left_arrow.png +0 -0
  84. {pygamestudio-1.0.0.dev2 → pygamestudio-1.0.0.dev4}/src/pygamestudio/common/res/images/line.png +0 -0
  85. {pygamestudio-1.0.0.dev2 → pygamestudio-1.0.0.dev4}/src/pygamestudio/common/res/images/logo.png +0 -0
  86. {pygamestudio-1.0.0.dev2 → pygamestudio-1.0.0.dev4}/src/pygamestudio/common/res/images/maximize.png +0 -0
  87. {pygamestudio-1.0.0.dev2 → pygamestudio-1.0.0.dev4}/src/pygamestudio/common/res/images/maximize_disabled.png +0 -0
  88. {pygamestudio-1.0.0.dev2 → pygamestudio-1.0.0.dev4}/src/pygamestudio/common/res/images/minimize.png +0 -0
  89. {pygamestudio-1.0.0.dev2 → pygamestudio-1.0.0.dev4}/src/pygamestudio/common/res/images/normalize.png +0 -0
  90. {pygamestudio-1.0.0.dev2 → pygamestudio-1.0.0.dev4}/src/pygamestudio/common/res/images/project_icon.png +0 -0
  91. {pygamestudio-1.0.0.dev2 → pygamestudio-1.0.0.dev4}/src/pygamestudio/common/res/images/rect.png +0 -0
  92. {pygamestudio-1.0.0.dev2 → pygamestudio-1.0.0.dev4}/src/pygamestudio/common/res/images/refresh_asset.png +0 -0
  93. {pygamestudio-1.0.0.dev2 → pygamestudio-1.0.0.dev4}/src/pygamestudio/common/res/images/right_arrow.png +0 -0
  94. {pygamestudio-1.0.0.dev2 → pygamestudio-1.0.0.dev4}/src/pygamestudio/common/res/images/run.png +0 -0
  95. {pygamestudio-1.0.0.dev2 → pygamestudio-1.0.0.dev4}/src/pygamestudio/common/res/images/search.png +0 -0
  96. {pygamestudio-1.0.0.dev2 → pygamestudio-1.0.0.dev4}/src/pygamestudio/common/res/images/sort.png +0 -0
  97. {pygamestudio-1.0.0.dev2 → pygamestudio-1.0.0.dev4}/src/pygamestudio/common/res/images/text.png +0 -0
  98. {pygamestudio-1.0.0.dev2 → pygamestudio-1.0.0.dev4}/src/pygamestudio/common/res/images/tree_arrow_down.png +0 -0
  99. {pygamestudio-1.0.0.dev2 → pygamestudio-1.0.0.dev4}/src/pygamestudio/common/res/images/tree_arrow_right.png +0 -0
  100. {pygamestudio-1.0.0.dev2 → pygamestudio-1.0.0.dev4}/src/pygamestudio/common/res/images/up_arrow.png +0 -0
  101. {pygamestudio-1.0.0.dev2 → pygamestudio-1.0.0.dev4}/src/pygamestudio/common/res/images/warning.png +0 -0
  102. {pygamestudio-1.0.0.dev2 → pygamestudio-1.0.0.dev4}/src/pygamestudio/common/res/templates/main_template.py +0 -0
  103. {pygamestudio-1.0.0.dev2 → pygamestudio-1.0.0.dev4}/src/pygamestudio/common/res/templates/project_template.pygs +0 -0
  104. {pygamestudio-1.0.0.dev2 → pygamestudio-1.0.0.dev4}/src/pygamestudio/game/__init__.py +0 -0
  105. {pygamestudio-1.0.0.dev2 → pygamestudio-1.0.0.dev4}/src/pygamestudio/game/core/__init__.py +0 -0
  106. {pygamestudio-1.0.0.dev2 → pygamestudio-1.0.0.dev4}/src/pygamestudio/game/object/button.py +0 -0
  107. {pygamestudio-1.0.0.dev2 → pygamestudio-1.0.0.dev4}/src/pygamestudio/game/object/canvas.py +0 -0
  108. {pygamestudio-1.0.0.dev2 → pygamestudio-1.0.0.dev4}/src/pygamestudio/gui/__init__.py +0 -0
  109. {pygamestudio-1.0.0.dev2 → pygamestudio-1.0.0.dev4}/src/pygamestudio/gui/about/__init__.py +0 -0
  110. {pygamestudio-1.0.0.dev2 → pygamestudio-1.0.0.dev4}/src/pygamestudio/gui/about/window.py +0 -0
  111. {pygamestudio-1.0.0.dev2 → pygamestudio-1.0.0.dev4}/src/pygamestudio/gui/asset/delegate.py +0 -0
  112. {pygamestudio-1.0.0.dev2 → pygamestudio-1.0.0.dev4}/src/pygamestudio/gui/asset/menu.py +0 -0
  113. {pygamestudio-1.0.0.dev2 → pygamestudio-1.0.0.dev4}/src/pygamestudio/gui/asset/model.py +0 -0
  114. {pygamestudio-1.0.0.dev2 → pygamestudio-1.0.0.dev4}/src/pygamestudio/gui/asset/tree.py +0 -0
  115. {pygamestudio-1.0.0.dev2 → pygamestudio-1.0.0.dev4}/src/pygamestudio/gui/asset/type.py +0 -0
  116. {pygamestudio-1.0.0.dev2 → pygamestudio-1.0.0.dev4}/src/pygamestudio/gui/asset/widget.py +0 -0
  117. {pygamestudio-1.0.0.dev2 → pygamestudio-1.0.0.dev4}/src/pygamestudio/gui/asset/window.py +0 -0
  118. {pygamestudio-1.0.0.dev2 → pygamestudio-1.0.0.dev4}/src/pygamestudio/gui/build/__init__.py +0 -0
  119. {pygamestudio-1.0.0.dev2 → pygamestudio-1.0.0.dev4}/src/pygamestudio/gui/build/window.py +0 -0
  120. {pygamestudio-1.0.0.dev2 → pygamestudio-1.0.0.dev4}/src/pygamestudio/gui/console/__init__.py +0 -0
  121. {pygamestudio-1.0.0.dev2 → pygamestudio-1.0.0.dev4}/src/pygamestudio/gui/console/logger.py +0 -0
  122. {pygamestudio-1.0.0.dev2 → pygamestudio-1.0.0.dev4}/src/pygamestudio/gui/console/menu.py +0 -0
  123. {pygamestudio-1.0.0.dev2 → pygamestudio-1.0.0.dev4}/src/pygamestudio/gui/console/type.py +0 -0
  124. {pygamestudio-1.0.0.dev2 → pygamestudio-1.0.0.dev4}/src/pygamestudio/gui/console/widget.py +0 -0
  125. {pygamestudio-1.0.0.dev2 → pygamestudio-1.0.0.dev4}/src/pygamestudio/gui/dashboard/__init__.py +0 -0
  126. {pygamestudio-1.0.0.dev2 → pygamestudio-1.0.0.dev4}/src/pygamestudio/gui/dashboard/config.py +0 -0
  127. {pygamestudio-1.0.0.dev2 → pygamestudio-1.0.0.dev4}/src/pygamestudio/gui/dashboard/list.py +0 -0
  128. {pygamestudio-1.0.0.dev2 → pygamestudio-1.0.0.dev4}/src/pygamestudio/gui/dashboard/menu.py +0 -0
  129. {pygamestudio-1.0.0.dev2 → pygamestudio-1.0.0.dev4}/src/pygamestudio/gui/dashboard/model.py +0 -0
  130. {pygamestudio-1.0.0.dev2 → pygamestudio-1.0.0.dev4}/src/pygamestudio/gui/dashboard/type.py +0 -0
  131. {pygamestudio-1.0.0.dev2 → pygamestudio-1.0.0.dev4}/src/pygamestudio/gui/dashboard/widget.py +0 -0
  132. {pygamestudio-1.0.0.dev2 → pygamestudio-1.0.0.dev4}/src/pygamestudio/gui/dashboard/window.py +0 -0
  133. {pygamestudio-1.0.0.dev2 → pygamestudio-1.0.0.dev4}/src/pygamestudio/gui/hierarchy/__init__.py +0 -0
  134. {pygamestudio-1.0.0.dev2 → pygamestudio-1.0.0.dev4}/src/pygamestudio/gui/hierarchy/delegate.py +0 -0
  135. {pygamestudio-1.0.0.dev2 → pygamestudio-1.0.0.dev4}/src/pygamestudio/gui/hierarchy/window.py +0 -0
  136. {pygamestudio-1.0.0.dev2 → pygamestudio-1.0.0.dev4}/src/pygamestudio/gui/inspector/__init__.py +0 -0
  137. {pygamestudio-1.0.0.dev2 → pygamestudio-1.0.0.dev4}/src/pygamestudio/gui/inspector/component/button.py +0 -0
  138. {pygamestudio-1.0.0.dev2 → pygamestudio-1.0.0.dev4}/src/pygamestudio/gui/inspector/component/checkbox.py +0 -0
  139. {pygamestudio-1.0.0.dev2 → pygamestudio-1.0.0.dev4}/src/pygamestudio/gui/inspector/component/combobox.py +0 -0
  140. {pygamestudio-1.0.0.dev2 → pygamestudio-1.0.0.dev4}/src/pygamestudio/gui/inspector/component/label.py +0 -0
  141. {pygamestudio-1.0.0.dev2 → pygamestudio-1.0.0.dev4}/src/pygamestudio/gui/inspector/component/picker.py +0 -0
  142. {pygamestudio-1.0.0.dev2 → pygamestudio-1.0.0.dev4}/src/pygamestudio/gui/inspector/component/spinbox.py +0 -0
  143. {pygamestudio-1.0.0.dev2 → pygamestudio-1.0.0.dev4}/src/pygamestudio/gui/inspector/component/textedit.py +0 -0
  144. {pygamestudio-1.0.0.dev2 → pygamestudio-1.0.0.dev4}/src/pygamestudio/gui/inspector/layout/canvas.py +0 -0
  145. {pygamestudio-1.0.0.dev2 → pygamestudio-1.0.0.dev4}/src/pygamestudio/gui/inspector/layout/ellipse.py +0 -0
  146. {pygamestudio-1.0.0.dev2 → pygamestudio-1.0.0.dev4}/src/pygamestudio/gui/inspector/layout/line.py +0 -0
  147. {pygamestudio-1.0.0.dev2 → pygamestudio-1.0.0.dev4}/src/pygamestudio/gui/inspector/layout/rect.py +0 -0
  148. {pygamestudio-1.0.0.dev2 → pygamestudio-1.0.0.dev4}/src/pygamestudio/gui/inspector/widget.py +0 -0
  149. {pygamestudio-1.0.0.dev2 → pygamestudio-1.0.0.dev4}/src/pygamestudio/gui/inspector/window.py +0 -0
  150. {pygamestudio-1.0.0.dev2 → pygamestudio-1.0.0.dev4}/src/pygamestudio/gui/main.py +0 -0
  151. {pygamestudio-1.0.0.dev2 → pygamestudio-1.0.0.dev4}/src/pygamestudio/gui/scene/__init__.py +0 -0
  152. {pygamestudio-1.0.0.dev2 → pygamestudio-1.0.0.dev4}/src/pygamestudio/gui/scene/widget.py +0 -0
  153. {pygamestudio-1.0.0.dev2 → pygamestudio-1.0.0.dev4}/src/pygamestudio/gui/settings/__init__.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pygamestudio
3
- Version: 1.0.0.dev2
3
+ Version: 1.0.0.dev4
4
4
  Summary: Let's create pygame visually!
5
5
  Project-URL: Documentation, https://pygamestudio.com/tutorial/installation
6
6
  Project-URL: Homepage, https://pygamestudio.com
@@ -39,7 +39,7 @@ Description-Content-Type: text/markdown
39
39
  <br>
40
40
  <br>
41
41
 
42
- [README (简体中文)](https://github.com/pygamestudio/pygamestudio/blob/main/README_zh-CN.md)
42
+ English&nbsp; | &nbsp;[简体中文](https://github.com/pygamestudio/pygamestudio/blob/main/README_zh-CN.md)
43
43
  </div>
44
44
 
45
45
  **Pygame Studio** is a visual editor built specifically for **pygame-ce**, designed to help users create pygame-ce projects visually, making it easier for beginners, students, and hobby developers to get started with pygame development.
@@ -10,7 +10,7 @@
10
10
  <br>
11
11
  <br>
12
12
 
13
- [README (简体中文)](https://github.com/pygamestudio/pygamestudio/blob/main/README_zh-CN.md)
13
+ English&nbsp; | &nbsp;[简体中文](https://github.com/pygamestudio/pygamestudio/blob/main/README_zh-CN.md)
14
14
  </div>
15
15
 
16
16
  **Pygame Studio** is a visual editor built specifically for **pygame-ce**, designed to help users create pygame-ce projects visually, making it easier for beginners, students, and hobby developers to get started with pygame development.
@@ -10,7 +10,7 @@
10
10
  <br>
11
11
  <br>
12
12
 
13
- [README (English)](https://github.com/pygamestudio/pygamestudio)
13
+ [English](https://github.com/pygamestudio/pygamestudio) &nbsp;|&nbsp; 简体中文
14
14
  </div>
15
15
 
16
16
  **Pygame Studio** 是专为 **pygame-ce** 打造的可视化编辑器,支持以可视化方式制作 pygame-ce 项目,让编程新手、在校学生以及业余开发者都能更轻松地入门 Pygame 游戏开发。
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "pygamestudio"
7
- version = "1.0.0.dev2"
7
+ version = "1.0.0.dev4"
8
8
  authors = [{ name="Louis Ren", email="louis@pygamestudio.com" }]
9
9
  description = "Let's create pygame visually!"
10
10
  readme = "README.md"
@@ -1,6 +1,7 @@
1
1
  import os
2
2
  import json
3
3
  from pathlib import Path
4
+ from pygamestudio.common.i18n.translator import Translator as T
4
5
 
5
6
 
6
7
  def get_project_config():
@@ -8,11 +9,11 @@ def get_project_config():
8
9
  project_config_file_path = project_path / 'project.pygs'
9
10
 
10
11
  if not project_config_file_path.exists():
11
- raise RuntimeError('没有在项目根目录下找到project.pygs配置文件')
12
+ raise RuntimeError(T.tr('api.no_project_pygs', 'Failed to find config file project.pygs in the project root directory.'))
12
13
 
13
14
  try:
14
15
  with open(project_config_file_path, 'r', encoding='utf-8') as f:
15
16
  project_config = json.load(f)
16
17
  return project_config
17
18
  except Exception as e:
18
- raise RuntimeError(f'project.pygs配置加载失败:{e}')
19
+ raise RuntimeError(T.tr('api.fail_to_load_project_pygs', 'Failed to load config file project.pygs: {}').format(str(e)))
@@ -3,13 +3,15 @@ import re
3
3
  import json
4
4
  import pygame
5
5
  from pathlib import Path
6
- from pygamestudio.api.runtime.config import get_project_config
7
-
8
6
  from pygamestudio.game.object.type import *
9
7
  from pygamestudio.game.object.rect import *
10
8
  from pygamestudio.game.object.canvas import *
11
9
  from pygamestudio.game.object.text import *
12
10
  from pygamestudio.game.object.ellipse import *
11
+ from pygamestudio.game.object.line import *
12
+ from pygamestudio.game.object.image import *
13
+ from pygamestudio.api.runtime.config import get_project_config
14
+ from pygamestudio.common.i18n.translator import Translator as T
13
15
 
14
16
 
15
17
  class SceneLoader:
@@ -30,7 +32,7 @@ class SceneLoader:
30
32
  scene_path = Path(os.environ.get('PROJECT_PATH')) / project_config['asset']['current_scene']
31
33
 
32
34
  if not Path(scene_path).exists():
33
- raise RuntimeError(f'没有在scene文件夹下找到名为{scene_path}的场景文件')
35
+ raise RuntimeError(T.tr('api.no_scene_path', 'The scene path {} does not exist.').format(scene_path))
34
36
 
35
37
  self._all_object_tree_struct = {}
36
38
  self._current_scene_path = scene_path
@@ -75,7 +77,10 @@ class SceneLoader:
75
77
  obj = ObjectText(self, object_data, is_for_api=True)
76
78
  elif object_type == OBJECT_ELLIPSE:
77
79
  obj = ObjectEllipse(self, object_data, is_for_api=True)
78
-
80
+ elif object_type == OBJECT_LINE:
81
+ obj = ObjectLine(self, object_data, is_for_api=True)
82
+ elif object_type == OBJECT_IMAGE:
83
+ obj = ObjectImage(self, object_data, is_for_api=True)
79
84
  return obj
80
85
 
81
86
  def _add_object_tree_struct(self, parent_uuid, object_tree_struct_to_add):
@@ -124,7 +129,9 @@ class SceneLoader:
124
129
  if part_number < recursion_time:
125
130
  return None
126
131
  elif part_number == recursion_time:
127
- if name == value['object'].name and target_item_index == current_item_index:
132
+ if target_item_index == current_item_index and name == value['object'].name:
133
+ return {key: value}
134
+ elif target_item_index is None and name == value['object'].name:
128
135
  return {key: value}
129
136
  else:
130
137
  return None
@@ -148,7 +155,7 @@ class SceneLoader:
148
155
 
149
156
  recursion_time = 0
150
157
  name = match.group(1)
151
- target_item_index = int(match.group(2)) if match.group(2) is not None else 0
158
+ target_item_index = int(match.group(2)) if match.group(2) is not None else None
152
159
  object_tree_struct = _get(name, target_item_index, 0, recursion_time, i, self._all_object_tree_struct)
153
160
 
154
161
  if i < len(path_parts)-1:
@@ -87,7 +87,8 @@
87
87
  "line": "Line",
88
88
  "rect": "Rect",
89
89
  "ellipse": "Ellipse",
90
- "text": "Text"
90
+ "text": "Text",
91
+ "image": "Image"
91
92
  },
92
93
 
93
94
  "gm": {
@@ -112,6 +113,7 @@
112
113
 
113
114
  "scene": {
114
115
  "scene": "Scene",
116
+ "scene_saved": "Scene saved",
115
117
  "run_project": "Run Project {}",
116
118
  "failed_to_run_project": "Failed to Run Project {}: {}"
117
119
  },
@@ -149,7 +151,11 @@
149
151
  "italic": "Italic",
150
152
  "underline": "Underline",
151
153
  "strikethrough": "Strikethrough",
152
- "select_color": "Select Color"
154
+ "select_color": "Select Color",
155
+ "image_path": "Image Path",
156
+ "select_image": "Select Image",
157
+ "font_path": "Font Path",
158
+ "format": "Format"
153
159
  },
154
160
 
155
161
  "dashboard": {
@@ -181,7 +187,8 @@
181
187
  "screen_width": "Screen Width",
182
188
  "screen_height": "Screen Height",
183
189
  "general": "General",
184
- "language": "Language"
190
+ "language": "Language",
191
+ "theme": "Theme"
185
192
  },
186
193
 
187
194
  "about": {
@@ -202,5 +209,21 @@
202
209
  "stop": "Stop",
203
210
  "select_app_icon": "Select App Icon",
204
211
  "select_output_dir": "Select Output Dir"
212
+ },
213
+
214
+ "theme": {
215
+ "dark": "Dark",
216
+ "light": "Light"
217
+ },
218
+
219
+ "api": {
220
+ "no_scene_path": "The scene path {} does not exist.",
221
+ "no_project_pygs": "Failed to find config file project.pygs in the project root directory.",
222
+ "fail_to_load_project_pygs": "Failed to load config file project.pygs: {}"
223
+ },
224
+
225
+ "translator": {
226
+ "no_lang_code_json": "Couldn't find {}.json",
227
+ "fail_to_load_lang_code_json": "Failed to load {}.json: {}"
205
228
  }
206
229
  }
@@ -87,7 +87,8 @@
87
87
  "line": "线条",
88
88
  "rect": "矩形",
89
89
  "ellipse": "椭圆",
90
- "text": "文本"
90
+ "text": "文本",
91
+ "image": "图片"
91
92
  },
92
93
 
93
94
  "gm": {
@@ -112,6 +113,7 @@
112
113
 
113
114
  "scene": {
114
115
  "scene": "场景编辑器",
116
+ "scene_saved": "场景已保存",
115
117
  "run_project": "运行项目{}",
116
118
  "failed_to_run_project": "项目{}运行失败:{}"
117
119
  },
@@ -149,7 +151,11 @@
149
151
  "italic": "斜体",
150
152
  "underline": "下划线",
151
153
  "strikethrough": "删除线",
152
- "select_color": "选择颜色"
154
+ "select_color": "选择颜色",
155
+ "image_path": "图片路径",
156
+ "font_path": "字体路径",
157
+ "select_image": "选择图片",
158
+ "format": "格式"
153
159
  },
154
160
 
155
161
  "dashboard": {
@@ -181,7 +187,8 @@
181
187
  "screen_width": "窗口宽度",
182
188
  "screen_height": "窗口高度",
183
189
  "general": "通用",
184
- "language": "语言"
190
+ "language": "语言",
191
+ "theme": "主题"
185
192
  },
186
193
 
187
194
  "about": {
@@ -202,5 +209,21 @@
202
209
  "stop": "停止",
203
210
  "select_app_icon": "选择应用图标",
204
211
  "select_output_dir": "选择输出目录"
212
+ },
213
+
214
+ "theme": {
215
+ "dark": "深色",
216
+ "light": "浅色"
217
+ },
218
+
219
+ "api": {
220
+ "no_scene_path": "场景路径{}不存在。",
221
+ "no_project_pygs": "没有在项目根目录下找到project.pygs配置文件",
222
+ "fail_to_load_project_pygs": "配置文件project.pygs加载失败:{}"
223
+ },
224
+
225
+ "translator": {
226
+ "no_lang_code_json": "无法找到文件{}.json",
227
+ "fail_to_load_lang_code_json": "无法加载{}.json:{}"
205
228
  }
206
229
  }
@@ -23,20 +23,19 @@ class Translator:
23
23
 
24
24
  @staticmethod
25
25
  def load_language(lang_code):
26
+ instance = Translator.get_instance()
26
27
  lang_file = LANG_PATH / f'{lang_code}.json'
27
28
 
28
29
  if not lang_file.exists():
29
- Logger.error(f"Couldn't find {lang_code}.json")
30
+ Logger.error(instance.tr('translator.no_lang_code_json', "Couldn't find {}.json").format(lang_code))
30
31
  return
31
-
32
- instance = Translator.get_instance()
33
32
 
34
33
  try:
35
34
  with open(lang_file, 'r', encoding='utf-8') as f:
36
35
  instance.lang_dict = json.load(f)
37
36
  instance.current_language = lang_code
38
37
  except Exception as e:
39
- Logger.error(f'Failed to load {lang_code}.json: {e}')
38
+ Logger.error(instance.tr('translator.fail_to_load_lang_code_json', 'Failed to load {}.json: {}').format(lang_code, e))
40
39
 
41
40
  @staticmethod
42
41
  def toggle_language(lang_code):
@@ -24,6 +24,7 @@ QPushButton {
24
24
  background-color: #2e2f30;
25
25
  border-radius: 5px;
26
26
  padding: 5px;
27
+ outline: none;
27
28
  }
28
29
 
29
30
  QPushButton:disabled {
@@ -100,15 +101,27 @@ QSpinBox QLabel, QDoubleSpinBox QLabel {
100
101
 
101
102
  QComboBox {
102
103
  border-radius: 5px;
103
- padding: 3px 6px;
104
+ padding: 0px 6px;
104
105
  padding-right: 2px;
105
106
  border: 1px solid #3c3c3c;
107
+ min-height: 26px;
106
108
  }
107
109
 
108
110
  QComboBox:hover {
109
111
  border: 1px solid #007acc;
110
112
  }
111
113
 
114
+ QComboBox::item {
115
+ width: 20px;
116
+ height: 26px;
117
+ padding-left: -20px;
118
+ }
119
+
120
+ QComboBox::item:hover, QComboBox::item:selected {
121
+ background-color: #007acc;
122
+ padding-left: -20px;
123
+ }
124
+
112
125
  QComboBox::drop-down {
113
126
  width: 15px;
114
127
  border: 0px;
@@ -533,6 +546,10 @@ QWidget#inspectorContainer QCheckBox::indicator:hover {
533
546
  border: 1px solid #007acc;
534
547
  }
535
548
 
549
+ QWidget#inspectorContainer QSpinBox:disabled, QWidget#inspectorContainer QDoubleSpinBox:disabled {
550
+ color: gray;
551
+ }
552
+
536
553
  /* ----- About ----- */
537
554
  QLabel#aboutCopyrightLabel {
538
555
  font-size: 10px;