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:
@@ -1198,14 +1198,23 @@ void CanvasItemEditor::_update_cursor() {
|
||||
viewport->set_default_cursor_shape(c);
|
||||
}
|
||||
|
||||
void CanvasItemEditor::_viewport_base_gui_input(const Ref<InputEvent> &p_event) {
|
||||
void CanvasItemEditor::_gui_input_viewport_base(const Ref<InputEvent> &p_event) {
|
||||
|
||||
Ref<InputEventMouseMotion> m = p_event;
|
||||
if (m.is_valid()) {
|
||||
if (!viewport_base->has_focus() && (!get_focus_owner() || !get_focus_owner()->is_text_field()))
|
||||
viewport_base->call_deferred("grab_focus");
|
||||
}
|
||||
}
|
||||
|
||||
void CanvasItemEditor::_gui_input_viewport(const Ref<InputEvent> &p_event) {
|
||||
|
||||
{
|
||||
EditorNode *en = editor;
|
||||
EditorPluginList *over_plugin_list = en->get_editor_plugins_over();
|
||||
|
||||
if (!over_plugin_list->empty()) {
|
||||
bool discard = over_plugin_list->forward_gui_input(transform, p_event);
|
||||
bool discard = over_plugin_list->forward_gui_input(p_event);
|
||||
if (discard) {
|
||||
accept_event();
|
||||
return;
|
||||
@@ -1224,7 +1233,7 @@ void CanvasItemEditor::_viewport_base_gui_input(const Ref<InputEvent> &p_event)
|
||||
_update_scroll(0);
|
||||
viewport->update();
|
||||
} else {
|
||||
_zoom_on_position(zoom * (1 - (0.05 * b->get_factor())), viewport_scrollable->get_transform().affine_inverse().xform(b->get_position()));
|
||||
_zoom_on_position(zoom * (1 - (0.05 * b->get_factor())), b->get_position());
|
||||
}
|
||||
|
||||
return;
|
||||
@@ -1237,7 +1246,7 @@ void CanvasItemEditor::_viewport_base_gui_input(const Ref<InputEvent> &p_event)
|
||||
_update_scroll(0);
|
||||
viewport->update();
|
||||
} else {
|
||||
_zoom_on_position(zoom * ((0.95 + (0.05 * b->get_factor())) / 0.95), viewport_scrollable->get_transform().affine_inverse().xform(b->get_position()));
|
||||
_zoom_on_position(zoom * ((0.95 + (0.05 * b->get_factor())) / 0.95), b->get_position());
|
||||
}
|
||||
|
||||
return;
|
||||
@@ -1320,7 +1329,7 @@ void CanvasItemEditor::_viewport_base_gui_input(const Ref<InputEvent> &p_event)
|
||||
if (b->get_button_index() == BUTTON_LEFT && tool == TOOL_EDIT_PIVOT) {
|
||||
if (b->is_pressed()) {
|
||||
// Set the pivot point
|
||||
Point2 mouse_pos = viewport_scrollable->get_transform().affine_inverse().xform(b->get_position());
|
||||
Point2 mouse_pos = b->get_position();
|
||||
mouse_pos = transform.affine_inverse().xform(mouse_pos);
|
||||
mouse_pos = snap_point(mouse_pos, SNAP_DEFAULT, _get_single_item());
|
||||
_edit_set_pivot(mouse_pos);
|
||||
@@ -1443,8 +1452,8 @@ void CanvasItemEditor::_viewport_base_gui_input(const Ref<InputEvent> &p_event)
|
||||
E->get().to
|
||||
};
|
||||
|
||||
Vector2 p = Geometry::get_closest_point_to_segment_2d(viewport_scrollable->get_transform().affine_inverse().xform(b->get_position()), s);
|
||||
float d = p.distance_to(viewport_scrollable->get_transform().affine_inverse().xform(b->get_position()));
|
||||
Vector2 p = Geometry::get_closest_point_to_segment_2d(b->get_position(), s);
|
||||
float d = p.distance_to(b->get_position());
|
||||
if (d < bone_width && d < closest_dist) {
|
||||
Cbone = E;
|
||||
closest_dist = d;
|
||||
@@ -1506,7 +1515,7 @@ void CanvasItemEditor::_viewport_base_gui_input(const Ref<InputEvent> &p_event)
|
||||
CanvasItemEditorSelectedItem *se = editor_selection->get_node_editor_data<CanvasItemEditorSelectedItem>(canvas_item);
|
||||
ERR_FAIL_COND(!se);
|
||||
|
||||
Point2 click = viewport_scrollable->get_transform().affine_inverse().xform(b->get_position());
|
||||
Point2 click = b->get_position();
|
||||
|
||||
// Rotation
|
||||
if ((b->get_control() && tool == TOOL_SELECT) || tool == TOOL_ROTATE) {
|
||||
@@ -1561,7 +1570,7 @@ void CanvasItemEditor::_viewport_base_gui_input(const Ref<InputEvent> &p_event)
|
||||
}
|
||||
|
||||
// Multiple selected items
|
||||
Point2 click = viewport_scrollable->get_transform().affine_inverse().xform(b->get_position());
|
||||
Point2 click = b->get_position();
|
||||
|
||||
if ((b->get_alt() || tool == TOOL_MOVE) && get_item_count()) {
|
||||
// Drag the nodes
|
||||
@@ -1621,12 +1630,9 @@ void CanvasItemEditor::_viewport_base_gui_input(const Ref<InputEvent> &p_event)
|
||||
// Mouse motion event
|
||||
_update_cursor();
|
||||
|
||||
if (!viewport_base->has_focus() && (!get_focus_owner() || !get_focus_owner()->is_text_field()))
|
||||
viewport_base->call_deferred("grab_focus");
|
||||
|
||||
if (box_selecting) {
|
||||
// Update box selection
|
||||
box_selecting_to = transform.affine_inverse().xform(viewport_scrollable->get_transform().affine_inverse().xform(m->get_position()));
|
||||
box_selecting_to = transform.affine_inverse().xform(m->get_position());
|
||||
viewport->update();
|
||||
return;
|
||||
}
|
||||
@@ -1672,7 +1678,7 @@ void CanvasItemEditor::_viewport_base_gui_input(const Ref<InputEvent> &p_event)
|
||||
}
|
||||
|
||||
Vector2 dfrom = drag_from;
|
||||
Vector2 dto = transform.affine_inverse().xform(viewport_scrollable->get_transform().affine_inverse().xform(m->get_position()));
|
||||
Vector2 dto = transform.affine_inverse().xform(m->get_position());
|
||||
if (canvas_item->has_meta("_edit_lock_"))
|
||||
continue;
|
||||
|
||||
@@ -2681,9 +2687,8 @@ void CanvasItemEditor::_draw_viewport() {
|
||||
|
||||
EditorPluginList *over_plugin_list = editor->get_editor_plugins_over();
|
||||
if (!over_plugin_list->empty()) {
|
||||
over_plugin_list->forward_draw_over_canvas(transform, viewport);
|
||||
over_plugin_list->forward_draw_over_canvas(viewport);
|
||||
}
|
||||
_draw_focus();
|
||||
_draw_bones();
|
||||
}
|
||||
|
||||
@@ -3694,7 +3699,8 @@ void CanvasItemEditor::_bind_methods() {
|
||||
ClassDB::bind_method("_unhandled_key_input", &CanvasItemEditor::_unhandled_key_input);
|
||||
ClassDB::bind_method("_draw_viewport", &CanvasItemEditor::_draw_viewport);
|
||||
ClassDB::bind_method("_draw_viewport_base", &CanvasItemEditor::_draw_viewport_base);
|
||||
ClassDB::bind_method("_viewport_base_gui_input", &CanvasItemEditor::_viewport_base_gui_input);
|
||||
ClassDB::bind_method("_gui_input_viewport", &CanvasItemEditor::_gui_input_viewport);
|
||||
ClassDB::bind_method("_gui_input_viewport_base", &CanvasItemEditor::_gui_input_viewport_base);
|
||||
ClassDB::bind_method("_snap_changed", &CanvasItemEditor::_snap_changed);
|
||||
ClassDB::bind_method(D_METHOD("_selection_result_pressed"), &CanvasItemEditor::_selection_result_pressed);
|
||||
ClassDB::bind_method(D_METHOD("_selection_menu_hide"), &CanvasItemEditor::_selection_menu_hide);
|
||||
@@ -3747,7 +3753,7 @@ CanvasItemEditor::CanvasItemEditor(EditorNode *p_editor) {
|
||||
palette_split->add_child(viewport_base);
|
||||
viewport_base->set_clip_contents(true);
|
||||
viewport_base->connect("draw", this, "_draw_viewport_base");
|
||||
viewport_base->connect("gui_input", this, "_viewport_base_gui_input");
|
||||
viewport_base->connect("gui_input", this, "_gui_input_viewport_base");
|
||||
viewport_base->set_focus_mode(FOCUS_ALL);
|
||||
viewport_base->set_v_size_flags(SIZE_EXPAND_FILL);
|
||||
viewport_base->set_h_size_flags(SIZE_EXPAND_FILL);
|
||||
@@ -3771,6 +3777,7 @@ CanvasItemEditor::CanvasItemEditor(EditorNode *p_editor) {
|
||||
viewport->set_anchors_and_margins_preset(Control::PRESET_WIDE);
|
||||
viewport->set_clip_contents(true);
|
||||
viewport->connect("draw", this, "_draw_viewport");
|
||||
viewport->connect("gui_input", this, "_gui_input_viewport");
|
||||
|
||||
h_scroll = memnew(HScrollBar);
|
||||
viewport->add_child(h_scroll);
|
||||
|
||||
Reference in New Issue
Block a user