You've already forked godot
mirror of
https://github.com/godotengine/godot.git
synced 2025-11-07 12:30:27 +00:00
Fixes snapping and replaces the _draw_canvas by forward_canvas_draw
This commit is contained in:
@@ -54,16 +54,10 @@ void Line2DEditor::_notification(int p_what) {
|
||||
}
|
||||
}
|
||||
|
||||
Vector2 Line2DEditor::mouse_to_local_pos(Vector2 gpos, bool alt) {
|
||||
Transform2D xform = canvas_item_editor->get_canvas_transform() * node->get_global_transform();
|
||||
return !alt ? canvas_item_editor->snap_point(xform.affine_inverse().xform(gpos)) : node->get_global_transform().affine_inverse().xform(canvas_item_editor->snap_point(canvas_item_editor->get_canvas_transform().affine_inverse().xform(gpos)));
|
||||
}
|
||||
|
||||
int Line2DEditor::get_point_index_at(Vector2 gpos) {
|
||||
int Line2DEditor::get_point_index_at(const Transform2D &xform, Vector2 gpos) {
|
||||
ERR_FAIL_COND_V(node == 0, -1);
|
||||
|
||||
real_t grab_threshold = EDITOR_DEF("editors/poly_editor/point_grab_radius", 8);
|
||||
Transform2D xform = canvas_item_editor->get_canvas_transform() * node->get_global_transform();
|
||||
|
||||
for (int i = 0; i < node->get_point_count(); ++i) {
|
||||
Point2 p = xform.xform(node->get_point_position(i));
|
||||
@@ -75,7 +69,7 @@ int Line2DEditor::get_point_index_at(Vector2 gpos) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
bool Line2DEditor::forward_gui_input(const Ref<InputEvent> &p_event) {
|
||||
bool Line2DEditor::forward_canvas_gui_input(const Ref<InputEvent> &p_event) {
|
||||
|
||||
if (!node)
|
||||
return false;
|
||||
@@ -88,10 +82,10 @@ bool Line2DEditor::forward_gui_input(const Ref<InputEvent> &p_event) {
|
||||
if (mb.is_valid()) {
|
||||
|
||||
Vector2 gpoint = mb->get_position();
|
||||
Vector2 cpoint = mouse_to_local_pos(gpoint, mb->get_alt());
|
||||
Vector2 cpoint = node->get_global_transform().affine_inverse().xform(canvas_item_editor->snap_point(canvas_item_editor->get_canvas_transform().affine_inverse().xform(mb->get_position())));
|
||||
|
||||
if (mb->is_pressed() && _dragging == false) {
|
||||
int i = get_point_index_at(gpoint);
|
||||
int i = get_point_index_at(canvas_item_editor->get_canvas_transform() * node->get_global_transform(), gpoint);
|
||||
if (i != -1) {
|
||||
if (mb->get_button_index() == BUTTON_LEFT && !mb->get_shift() && mode == MODE_EDIT) {
|
||||
_dragging = true;
|
||||
@@ -146,7 +140,8 @@ bool Line2DEditor::forward_gui_input(const Ref<InputEvent> &p_event) {
|
||||
if (mm.is_valid()) {
|
||||
|
||||
if (_dragging) {
|
||||
Vector2 cpoint = mouse_to_local_pos(mm->get_position(), mm->get_alt());
|
||||
Vector2 gpoint = mm->get_position();
|
||||
Vector2 cpoint = node->get_global_transform().affine_inverse().xform(canvas_item_editor->snap_point(canvas_item_editor->get_canvas_transform().affine_inverse().xform(mm->get_position())));
|
||||
node->set_point_position(action_point, cpoint);
|
||||
canvas_item_editor->get_viewport_control()->update();
|
||||
return true;
|
||||
@@ -156,7 +151,7 @@ bool Line2DEditor::forward_gui_input(const Ref<InputEvent> &p_event) {
|
||||
return false;
|
||||
}
|
||||
|
||||
void Line2DEditor::_canvas_draw() {
|
||||
void Line2DEditor::forward_draw_over_canvas(Control *p_canvas) {
|
||||
|
||||
if (!node)
|
||||
return;
|
||||
@@ -190,13 +185,9 @@ void Line2DEditor::edit(Node *p_line2d) {
|
||||
|
||||
if (p_line2d) {
|
||||
node = Object::cast_to<Line2D>(p_line2d);
|
||||
if (!canvas_item_editor->get_viewport_control()->is_connected("draw", this, "_canvas_draw"))
|
||||
canvas_item_editor->get_viewport_control()->connect("draw", this, "_canvas_draw");
|
||||
if (!node->is_connected("visibility_changed", this, "_node_visibility_changed"))
|
||||
node->connect("visibility_changed", this, "_node_visibility_changed");
|
||||
} else {
|
||||
if (canvas_item_editor->get_viewport_control()->is_connected("draw", this, "_canvas_draw"))
|
||||
canvas_item_editor->get_viewport_control()->disconnect("draw", this, "_canvas_draw");
|
||||
// node may have been deleted at this point
|
||||
if (node && node->is_connected("visibility_changed", this, "_node_visibility_changed"))
|
||||
node->disconnect("visibility_changed", this, "_node_visibility_changed");
|
||||
@@ -205,7 +196,6 @@ void Line2DEditor::edit(Node *p_line2d) {
|
||||
}
|
||||
|
||||
void Line2DEditor::_bind_methods() {
|
||||
ClassDB::bind_method(D_METHOD("_canvas_draw"), &Line2DEditor::_canvas_draw);
|
||||
ClassDB::bind_method(D_METHOD("_node_visibility_changed"), &Line2DEditor::_node_visibility_changed);
|
||||
ClassDB::bind_method(D_METHOD("_mode_selected"), &Line2DEditor::_mode_selected);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user