You've already forked godot
mirror of
https://github.com/godotengine/godot.git
synced 2025-11-06 12:20:30 +00:00
Fixes snapping and replaces the _draw_canvas by forward_canvas_draw
This commit is contained in:
@@ -302,7 +302,7 @@ void CollisionShape2DEditor::commit_handle(int idx, Variant &p_org) {
|
||||
undo_redo->commit_action();
|
||||
}
|
||||
|
||||
bool CollisionShape2DEditor::forward_gui_input(const Ref<InputEvent> &p_event) {
|
||||
bool CollisionShape2DEditor::forward_canvas_gui_input(const Ref<InputEvent> &p_event) {
|
||||
|
||||
if (!node) {
|
||||
return false;
|
||||
@@ -317,17 +317,17 @@ bool CollisionShape2DEditor::forward_gui_input(const Ref<InputEvent> &p_event) {
|
||||
}
|
||||
|
||||
Ref<InputEventMouseButton> mb = p_event;
|
||||
Transform2D xform = canvas_item_editor->get_canvas_transform() * node->get_global_transform();
|
||||
|
||||
if (mb.is_valid()) {
|
||||
|
||||
Transform2D gt = canvas_item_editor->get_canvas_transform() * node->get_global_transform();
|
||||
|
||||
Point2 gpoint(mb->get_position().x, mb->get_position().y);
|
||||
Vector2 gpoint = mb->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(mb->get_position())));
|
||||
|
||||
if (mb->get_button_index() == BUTTON_LEFT) {
|
||||
if (mb->is_pressed()) {
|
||||
for (int i = 0; i < handles.size(); i++) {
|
||||
if (gt.xform(handles[i]).distance_to(gpoint) < 8) {
|
||||
if (xform.xform(handles[i]).distance_to(gpoint) < 8) {
|
||||
edit_handle = i;
|
||||
|
||||
break;
|
||||
@@ -368,9 +368,7 @@ bool CollisionShape2DEditor::forward_gui_input(const Ref<InputEvent> &p_event) {
|
||||
return false;
|
||||
}
|
||||
|
||||
Point2 gpoint = mm->get_position();
|
||||
Point2 cpoint = canvas_item_editor->get_canvas_transform().affine_inverse().xform(gpoint);
|
||||
cpoint = canvas_item_editor->snap_point(cpoint);
|
||||
Vector2 cpoint = canvas_item_editor->snap_point(canvas_item_editor->get_canvas_transform().affine_inverse().xform(mm->get_position()));
|
||||
cpoint = node->get_global_transform().affine_inverse().xform(cpoint);
|
||||
|
||||
set_handle(edit_handle, cpoint);
|
||||
@@ -416,7 +414,7 @@ void CollisionShape2DEditor::_get_current_shape_type() {
|
||||
canvas_item_editor->get_viewport_control()->update();
|
||||
}
|
||||
|
||||
void CollisionShape2DEditor::_canvas_draw() {
|
||||
void CollisionShape2DEditor::forward_draw_over_canvas(Control *p_canvas) {
|
||||
|
||||
if (!node) {
|
||||
return;
|
||||
@@ -432,7 +430,6 @@ void CollisionShape2DEditor::_canvas_draw() {
|
||||
return;
|
||||
}
|
||||
|
||||
Control *c = canvas_item_editor->get_viewport_control();
|
||||
Transform2D gt = canvas_item_editor->get_canvas_transform() * node->get_global_transform();
|
||||
|
||||
Ref<Texture> h = get_icon("EditorHandle", "EditorIcons");
|
||||
@@ -451,8 +448,8 @@ void CollisionShape2DEditor::_canvas_draw() {
|
||||
handles[0] = Point2(radius, -height);
|
||||
handles[1] = Point2(0, -(height + radius));
|
||||
|
||||
c->draw_texture(h, gt.xform(handles[0]) - size);
|
||||
c->draw_texture(h, gt.xform(handles[1]) - size);
|
||||
p_canvas->draw_texture(h, gt.xform(handles[0]) - size);
|
||||
p_canvas->draw_texture(h, gt.xform(handles[1]) - size);
|
||||
|
||||
} break;
|
||||
|
||||
@@ -462,7 +459,7 @@ void CollisionShape2DEditor::_canvas_draw() {
|
||||
handles.resize(1);
|
||||
handles[0] = Point2(shape->get_radius(), 0);
|
||||
|
||||
c->draw_texture(h, gt.xform(handles[0]) - size);
|
||||
p_canvas->draw_texture(h, gt.xform(handles[0]) - size);
|
||||
|
||||
} break;
|
||||
|
||||
@@ -481,8 +478,8 @@ void CollisionShape2DEditor::_canvas_draw() {
|
||||
handles[0] = shape->get_normal() * shape->get_d();
|
||||
handles[1] = shape->get_normal() * (shape->get_d() + 30.0);
|
||||
|
||||
c->draw_texture(h, gt.xform(handles[0]) - size);
|
||||
c->draw_texture(h, gt.xform(handles[1]) - size);
|
||||
p_canvas->draw_texture(h, gt.xform(handles[0]) - size);
|
||||
p_canvas->draw_texture(h, gt.xform(handles[1]) - size);
|
||||
|
||||
} break;
|
||||
|
||||
@@ -492,7 +489,7 @@ void CollisionShape2DEditor::_canvas_draw() {
|
||||
handles.resize(1);
|
||||
handles[0] = Point2(0, shape->get_length());
|
||||
|
||||
c->draw_texture(h, gt.xform(handles[0]) - size);
|
||||
p_canvas->draw_texture(h, gt.xform(handles[0]) - size);
|
||||
|
||||
} break;
|
||||
|
||||
@@ -504,8 +501,8 @@ void CollisionShape2DEditor::_canvas_draw() {
|
||||
handles[0] = Point2(ext.x, 0);
|
||||
handles[1] = Point2(0, -ext.y);
|
||||
|
||||
c->draw_texture(h, gt.xform(handles[0]) - size);
|
||||
c->draw_texture(h, gt.xform(handles[1]) - size);
|
||||
p_canvas->draw_texture(h, gt.xform(handles[0]) - size);
|
||||
p_canvas->draw_texture(h, gt.xform(handles[1]) - size);
|
||||
|
||||
} break;
|
||||
|
||||
@@ -516,8 +513,8 @@ void CollisionShape2DEditor::_canvas_draw() {
|
||||
handles[0] = shape->get_a();
|
||||
handles[1] = shape->get_b();
|
||||
|
||||
c->draw_texture(h, gt.xform(handles[0]) - size);
|
||||
c->draw_texture(h, gt.xform(handles[1]) - size);
|
||||
p_canvas->draw_texture(h, gt.xform(handles[0]) - size);
|
||||
p_canvas->draw_texture(h, gt.xform(handles[1]) - size);
|
||||
|
||||
} break;
|
||||
}
|
||||
@@ -532,18 +529,12 @@ void CollisionShape2DEditor::edit(Node *p_node) {
|
||||
if (p_node) {
|
||||
node = Object::cast_to<CollisionShape2D>(p_node);
|
||||
|
||||
if (!canvas_item_editor->get_viewport_control()->is_connected("draw", this, "_canvas_draw"))
|
||||
canvas_item_editor->get_viewport_control()->connect("draw", this, "_canvas_draw");
|
||||
|
||||
_get_current_shape_type();
|
||||
|
||||
} else {
|
||||
edit_handle = -1;
|
||||
shape_type = -1;
|
||||
|
||||
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 = NULL;
|
||||
}
|
||||
|
||||
@@ -552,7 +543,6 @@ void CollisionShape2DEditor::edit(Node *p_node) {
|
||||
|
||||
void CollisionShape2DEditor::_bind_methods() {
|
||||
|
||||
ClassDB::bind_method("_canvas_draw", &CollisionShape2DEditor::_canvas_draw);
|
||||
ClassDB::bind_method("_get_current_shape_type", &CollisionShape2DEditor::_get_current_shape_type);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user