diff options
author | Norton Corbett <breakfastb13@gmail.com> | 2019-11-30 13:44:59 +0000 |
---|---|---|
committer | Norton Corbett <breakfastb13@gmail.com> | 2019-12-01 11:33:24 +0000 |
commit | 5329ae00300f5564aea11960067a1a142f257937 (patch) | |
tree | 1dd979b15f2605ae3d80ebb13028427ba879496c | |
parent | cde6775e1197e67242c143b7885703a196e31cb2 (diff) |
Take into account the current zoom level when grabbing polygon points in the TileSet editor.
The transform of the TileSet editor workspace is now used to calculate the distance from the mouse click to the nearest polygon point.
Fixes https://github.com/godotengine/godot/issues/34001
-rw-r--r-- | editor/plugins/tile_set_editor_plugin.cpp | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/editor/plugins/tile_set_editor_plugin.cpp b/editor/plugins/tile_set_editor_plugin.cpp index a8cf5b46e1..dd61e13ae6 100644 --- a/editor/plugins/tile_set_editor_plugin.cpp +++ b/editor/plugins/tile_set_editor_plugin.cpp @@ -1529,13 +1529,15 @@ void TileSetEditor::_on_workspace_input(const Ref<InputEvent> &p_ie) { shape_anchor.y *= (size.y + spacing); } const real_t grab_threshold = EDITOR_GET("editors/poly_editor/point_grab_radius"); + Transform2D xform = workspace->get_transform(); shape_anchor += current_tile_region.position; if (tools[TOOL_SELECT]->is_pressed()) { if (mb.is_valid()) { if (mb->is_pressed() && mb->get_button_index() == BUTTON_LEFT) { if (edit_mode != EDITMODE_PRIORITY && current_shape.size() > 0) { for (int i = 0; i < current_shape.size(); i++) { - if ((current_shape[i] - mb->get_position()).length_squared() <= grab_threshold) { + const real_t distance = xform.xform(current_shape[i]).distance_to(xform.xform(mb->get_position())); + if (distance < grab_threshold) { dragging_point = i; workspace->update(); return; @@ -1634,7 +1636,8 @@ void TileSetEditor::_on_workspace_input(const Ref<InputEvent> &p_ie) { pos = snap_point(pos); if (creating_shape) { if (current_shape.size() > 0) { - if ((pos - current_shape[0]).length_squared() <= grab_threshold) { + const real_t distance = xform.xform(current_shape[0]).distance_to(xform.xform(pos)); + if (distance <= grab_threshold) { if (current_shape.size() > 2) { close_shape(shape_anchor); workspace->update(); @@ -1685,7 +1688,8 @@ void TileSetEditor::_on_workspace_input(const Ref<InputEvent> &p_ie) { } } else if (!mb->is_pressed() && mb->get_button_index() == BUTTON_LEFT) { if (creating_shape) { - if ((current_shape[0] - current_shape[1]).length_squared() <= grab_threshold) { + const real_t distance = xform.xform(current_shape[0]).distance_to(xform.xform(current_shape[1])); + if (distance <= grab_threshold) { current_shape.set(0, snap_point(shape_anchor)); current_shape.set(1, snap_point(shape_anchor + Vector2(current_tile_region.size.x, 0))); current_shape.set(2, snap_point(shape_anchor + current_tile_region.size)); |