godot-cli-control 0.2.16__tar.gz → 0.2.17__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 (78) hide show
  1. {godot_cli_control-0.2.16 → godot_cli_control-0.2.17}/PKG-INFO +1 -1
  2. {godot_cli_control-0.2.16 → godot_cli_control-0.2.17}/addons/godot_cli_control/bridge/render_api.gd +11 -4
  3. {godot_cli_control-0.2.16 → godot_cli_control-0.2.17}/addons/godot_cli_control/tests/gut/test_render_api.gd +19 -0
  4. {godot_cli_control-0.2.16 → godot_cli_control-0.2.17}/python/godot_cli_control/_version.py +2 -2
  5. {godot_cli_control-0.2.16 → godot_cli_control-0.2.17}/.gitignore +0 -0
  6. {godot_cli_control-0.2.16 → godot_cli_control-0.2.17}/LICENSE +0 -0
  7. {godot_cli_control-0.2.16 → godot_cli_control-0.2.17}/addons/godot_cli_control/CHANGELOG.md +0 -0
  8. {godot_cli_control-0.2.16 → godot_cli_control-0.2.17}/addons/godot_cli_control/LICENSE +0 -0
  9. {godot_cli_control-0.2.16 → godot_cli_control-0.2.17}/addons/godot_cli_control/README.md +0 -0
  10. {godot_cli_control-0.2.16 → godot_cli_control-0.2.17}/addons/godot_cli_control/bin/run_cli_control.ps1 +0 -0
  11. {godot_cli_control-0.2.16 → godot_cli_control-0.2.17}/addons/godot_cli_control/bin/run_cli_control.sh +0 -0
  12. {godot_cli_control-0.2.16 → godot_cli_control-0.2.17}/addons/godot_cli_control/bridge/capture_logger.gd +0 -0
  13. {godot_cli_control-0.2.16 → godot_cli_control-0.2.17}/addons/godot_cli_control/bridge/diagnostics_api.gd +0 -0
  14. {godot_cli_control-0.2.16 → godot_cli_control-0.2.17}/addons/godot_cli_control/bridge/error_codes.gd +0 -0
  15. {godot_cli_control-0.2.16 → godot_cli_control-0.2.17}/addons/godot_cli_control/bridge/game_bridge.gd +0 -0
  16. {godot_cli_control-0.2.16 → godot_cli_control-0.2.17}/addons/godot_cli_control/bridge/game_bridge.gd.uid +0 -0
  17. {godot_cli_control-0.2.16 → godot_cli_control-0.2.17}/addons/godot_cli_control/bridge/input_simulation_api.gd +0 -0
  18. {godot_cli_control-0.2.16 → godot_cli_control-0.2.17}/addons/godot_cli_control/bridge/input_simulation_api.gd.uid +0 -0
  19. {godot_cli_control-0.2.16 → godot_cli_control-0.2.17}/addons/godot_cli_control/bridge/low_level_api.gd +0 -0
  20. {godot_cli_control-0.2.16 → godot_cli_control-0.2.17}/addons/godot_cli_control/bridge/low_level_api.gd.uid +0 -0
  21. {godot_cli_control-0.2.16 → godot_cli_control-0.2.17}/addons/godot_cli_control/bridge/scene_api.gd +0 -0
  22. {godot_cli_control-0.2.16 → godot_cli_control-0.2.17}/addons/godot_cli_control/bridge/time_api.gd +0 -0
  23. {godot_cli_control-0.2.16 → godot_cli_control-0.2.17}/addons/godot_cli_control/bridge/variant_codec.gd +0 -0
  24. {godot_cli_control-0.2.16 → godot_cli_control-0.2.17}/addons/godot_cli_control/bridge/wait_api.gd +0 -0
  25. {godot_cli_control-0.2.16 → godot_cli_control-0.2.17}/addons/godot_cli_control/plugin.cfg +0 -0
  26. {godot_cli_control-0.2.16 → godot_cli_control-0.2.17}/addons/godot_cli_control/plugin.gd +0 -0
  27. {godot_cli_control-0.2.16 → godot_cli_control-0.2.17}/addons/godot_cli_control/plugin.gd.uid +0 -0
  28. {godot_cli_control-0.2.16 → godot_cli_control-0.2.17}/addons/godot_cli_control/tests/gut/test_diagnostics_api.gd +0 -0
  29. {godot_cli_control-0.2.16 → godot_cli_control-0.2.17}/addons/godot_cli_control/tests/gut/test_game_bridge.gd +0 -0
  30. {godot_cli_control-0.2.16 → godot_cli_control-0.2.17}/addons/godot_cli_control/tests/gut/test_input_simulation_api.gd +0 -0
  31. {godot_cli_control-0.2.16 → godot_cli_control-0.2.17}/addons/godot_cli_control/tests/gut/test_low_level_api.gd +0 -0
  32. {godot_cli_control-0.2.16 → godot_cli_control-0.2.17}/addons/godot_cli_control/tests/gut/test_scene_api.gd +0 -0
  33. {godot_cli_control-0.2.16 → godot_cli_control-0.2.17}/addons/godot_cli_control/tests/gut/test_time_api.gd +0 -0
  34. {godot_cli_control-0.2.16 → godot_cli_control-0.2.17}/addons/godot_cli_control/tests/gut/test_variant_codec.gd +0 -0
  35. {godot_cli_control-0.2.16 → godot_cli_control-0.2.17}/addons/godot_cli_control/tests/gut/test_wait_api.gd +0 -0
  36. {godot_cli_control-0.2.16 → godot_cli_control-0.2.17}/addons/godot_cli_control/tests/run_gut.py +0 -0
  37. {godot_cli_control-0.2.16 → godot_cli_control-0.2.17}/addons/godot_cli_control/tests/run_gut.sh +0 -0
  38. {godot_cli_control-0.2.16 → godot_cli_control-0.2.17}/addons/godot_cli_control/tests/test_init_walkthrough.py +0 -0
  39. {godot_cli_control-0.2.16 → godot_cli_control-0.2.17}/addons/godot_cli_control/tests/test_walkthrough.sh +0 -0
  40. {godot_cli_control-0.2.16 → godot_cli_control-0.2.17}/pyproject.toml +0 -0
  41. {godot_cli_control-0.2.16 → godot_cli_control-0.2.17}/python/README.md +0 -0
  42. {godot_cli_control-0.2.16 → godot_cli_control-0.2.17}/python/godot_cli_control/__init__.py +0 -0
  43. {godot_cli_control-0.2.16 → godot_cli_control-0.2.17}/python/godot_cli_control/__main__.py +0 -0
  44. {godot_cli_control-0.2.16 → godot_cli_control-0.2.17}/python/godot_cli_control/_duration.py +0 -0
  45. {godot_cli_control-0.2.16 → godot_cli_control-0.2.17}/python/godot_cli_control/bridge.py +0 -0
  46. {godot_cli_control-0.2.16 → godot_cli_control-0.2.17}/python/godot_cli_control/cli.py +0 -0
  47. {godot_cli_control-0.2.16 → godot_cli_control-0.2.17}/python/godot_cli_control/client.py +0 -0
  48. {godot_cli_control-0.2.16 → godot_cli_control-0.2.17}/python/godot_cli_control/daemon.py +0 -0
  49. {godot_cli_control-0.2.16 → godot_cli_control-0.2.17}/python/godot_cli_control/init_cmd.py +0 -0
  50. {godot_cli_control-0.2.16 → godot_cli_control-0.2.17}/python/godot_cli_control/pytest_plugin.py +0 -0
  51. {godot_cli_control-0.2.16 → godot_cli_control-0.2.17}/python/godot_cli_control/registry.py +0 -0
  52. {godot_cli_control-0.2.16 → godot_cli_control-0.2.17}/python/godot_cli_control/runner.py +0 -0
  53. {godot_cli_control-0.2.16 → godot_cli_control-0.2.17}/python/godot_cli_control/skills_install.py +0 -0
  54. {godot_cli_control-0.2.16 → godot_cli_control-0.2.17}/python/godot_cli_control/templates/__init__.py +0 -0
  55. {godot_cli_control-0.2.16 → godot_cli_control-0.2.17}/python/godot_cli_control/templates/skill/SKILL.md +0 -0
  56. {godot_cli_control-0.2.16 → godot_cli_control-0.2.17}/python/godot_cli_control/templates/skill/__init__.py +0 -0
  57. {godot_cli_control-0.2.16 → godot_cli_control-0.2.17}/python/tests/__init__.py +0 -0
  58. {godot_cli_control-0.2.16 → godot_cli_control-0.2.17}/python/tests/test_bridge.py +0 -0
  59. {godot_cli_control-0.2.16 → godot_cli_control-0.2.17}/python/tests/test_cli.py +0 -0
  60. {godot_cli_control-0.2.16 → godot_cli_control-0.2.17}/python/tests/test_cli_helpers.py +0 -0
  61. {godot_cli_control-0.2.16 → godot_cli_control-0.2.17}/python/tests/test_client.py +0 -0
  62. {godot_cli_control-0.2.16 → godot_cli_control-0.2.17}/python/tests/test_daemon.py +0 -0
  63. {godot_cli_control-0.2.16 → godot_cli_control-0.2.17}/python/tests/test_duration.py +0 -0
  64. {godot_cli_control-0.2.16 → godot_cli_control-0.2.17}/python/tests/test_e2e_client_direct.py +0 -0
  65. {godot_cli_control-0.2.16 → godot_cli_control-0.2.17}/python/tests/test_e2e_diag.py +0 -0
  66. {godot_cli_control-0.2.16 → godot_cli_control-0.2.17}/python/tests/test_e2e_example.py +0 -0
  67. {godot_cli_control-0.2.16 → godot_cli_control-0.2.17}/python/tests/test_e2e_input.py +0 -0
  68. {godot_cli_control-0.2.16 → godot_cli_control-0.2.17}/python/tests/test_e2e_record.py +0 -0
  69. {godot_cli_control-0.2.16 → godot_cli_control-0.2.17}/python/tests/test_e2e_render.py +0 -0
  70. {godot_cli_control-0.2.16 → godot_cli_control-0.2.17}/python/tests/test_e2e_scene.py +0 -0
  71. {godot_cli_control-0.2.16 → godot_cli_control-0.2.17}/python/tests/test_e2e_screenshot_gui.py +0 -0
  72. {godot_cli_control-0.2.16 → godot_cli_control-0.2.17}/python/tests/test_e2e_time.py +0 -0
  73. {godot_cli_control-0.2.16 → godot_cli_control-0.2.17}/python/tests/test_init.py +0 -0
  74. {godot_cli_control-0.2.16 → godot_cli_control-0.2.17}/python/tests/test_issue_fixes.py +0 -0
  75. {godot_cli_control-0.2.16 → godot_cli_control-0.2.17}/python/tests/test_pytest_plugin.py +0 -0
  76. {godot_cli_control-0.2.16 → godot_cli_control-0.2.17}/python/tests/test_registry.py +0 -0
  77. {godot_cli_control-0.2.16 → godot_cli_control-0.2.17}/python/tests/test_runner.py +0 -0
  78. {godot_cli_control-0.2.16 → godot_cli_control-0.2.17}/python/tests/test_skills_install.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: godot-cli-control
3
- Version: 0.2.16
3
+ Version: 0.2.17
4
4
  Summary: WebSocket bridge for headless / scripted control of Godot scenes.
5
5
  Project-URL: Homepage, https://github.com/ClaymanTwinkle/godot-cli-control
6
6
  Project-URL: Repository, https://github.com/ClaymanTwinkle/godot-cli-control
@@ -30,8 +30,8 @@ func handle_sprite_info(params: Dictionary) -> Dictionary:
30
30
  )
31
31
 
32
32
 
33
- ## screenshot --node 的边界计算:节点 local rect → 经 canvas/camera 变换的
34
- ## 视口像素坐标 AABB。返回 Rect2,失败返回 error Dictionary(1010)。
33
+ ## screenshot --node 的边界计算:节点 local rect → 经 canvas/camera + content
34
+ ## scale 变换的物理像素坐标 AABB。返回 Rect2,失败返回 error Dictionary(1010)。
35
35
  ## static:只依赖传入节点自身的变换链,便于 GUT 直接单测(无需真渲染)。
36
36
  static func compute_node_screen_rect(node: Node) -> Variant:
37
37
  if not (node is CanvasItem):
@@ -51,9 +51,16 @@ static func compute_node_screen_rect(node: Node) -> Variant:
51
51
  % node.get_class(),
52
52
  }
53
53
  }
54
- # get_global_transform_with_canvas 含 CanvasLayer / Camera2D 变换,
55
- # 结果即视口像素坐标;Transform2D * Rect2 返回旋转后四角的 AABB。
54
+ # get_global_transform_with_canvas 含 CanvasLayer / Camera2D 变换,结果是画布
55
+ # (逻辑设计分辨率)坐标;再乘 viewport.get_final_transform()(content scale
56
+ # stretch 缩放 + letterbox 偏移)才与取图侧 get_image() 的物理像素系对齐——
57
+ # 漏乘时 hiDPI / 拉伸窗口下裁剪整体偏左上且偏小(#137)。平窗(物理 == 逻辑)
58
+ # 环境 final transform 为 identity,行为不变。Transform2D * Rect2 返回旋转后
59
+ # 四角的 AABB。
56
60
  var xform: Transform2D = (node as CanvasItem).get_global_transform_with_canvas()
61
+ var viewport: Viewport = (node as CanvasItem).get_viewport()
62
+ if viewport != null:
63
+ xform = viewport.get_final_transform() * xform
57
64
  return xform * (local_rect_or_null as Rect2)
58
65
 
59
66
 
@@ -184,6 +184,25 @@ func test_screen_rect_sprite2d_centered_with_scale() -> void:
184
184
  assert_eq(rect as Rect2, Rect2(92, 46, 16, 8))
185
185
 
186
186
 
187
+ func test_screen_rect_applies_viewport_final_transform() -> void:
188
+ # content scale(hiDPI / stretch 窗口)回归(#137):rect 必须落在取图侧
189
+ # get_image() 的物理像素系。SubViewport size(200,100) + size_2d_override(100,50)
190
+ # + stretch 构造 final transform = scale 2:Control (10,20,30,40) → (20,40,60,80)。
191
+ # 漏乘 final transform 时返回画布坐标 (10,20,30,40),hiDPI 下裁剪整体错位。
192
+ var viewport := SubViewport.new()
193
+ viewport.size = Vector2i(200, 100)
194
+ viewport.size_2d_override = Vector2i(100, 50)
195
+ viewport.size_2d_override_stretch = true
196
+ add_child_autofree(viewport)
197
+ var ctl := Control.new()
198
+ ctl.position = Vector2(10, 20)
199
+ ctl.size = Vector2(30, 40)
200
+ viewport.add_child(ctl)
201
+ var rect: Variant = RenderApiScript.compute_node_screen_rect(ctl)
202
+ assert_true(rect is Rect2, "stretch viewport 内 Control 应能算出 Rect2,实际: %s" % [rect])
203
+ assert_eq(rect as Rect2, Rect2(20, 40, 60, 80))
204
+
205
+
187
206
  func test_screen_rect_non_canvas_item_returns_1010() -> void:
188
207
  var plain := Node.new()
189
208
  plain.name = "PlainNode"
@@ -18,7 +18,7 @@ version_tuple: tuple[int | str, ...]
18
18
  commit_id: str | None
19
19
  __commit_id__: str | None
20
20
 
21
- __version__ = version = '0.2.16'
22
- __version_tuple__ = version_tuple = (0, 2, 16)
21
+ __version__ = version = '0.2.17'
22
+ __version_tuple__ = version_tuple = (0, 2, 17)
23
23
 
24
24
  __commit_id__ = commit_id = None