summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNorton Corbett <breakfastb13@gmail.com>2019-11-30 13:44:59 +0000
committerNorton Corbett <breakfastb13@gmail.com>2019-12-01 11:33:24 +0000
commit5329ae00300f5564aea11960067a1a142f257937 (patch)
tree1dd979b15f2605ae3d80ebb13028427ba879496c
parentcde6775e1197e67242c143b7885703a196e31cb2 (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.cpp10
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));