Added options to disable movement/scaling handles in 2D
This commit is contained in:
parent
b32b439c00
commit
a4a105d4ee
@ -1844,14 +1844,16 @@ bool CanvasItemEditor::_gui_input_scale(const Ref<InputEvent> &p_event) {
|
|||||||
|
|
||||||
drag_type = DRAG_SCALE_BOTH;
|
drag_type = DRAG_SCALE_BOTH;
|
||||||
|
|
||||||
Size2 scale_factor = Size2(SCALE_HANDLE_DISTANCE, SCALE_HANDLE_DISTANCE);
|
if (show_transformation_gizmos) {
|
||||||
Rect2 x_handle_rect = Rect2(scale_factor.x * EDSCALE, -5 * EDSCALE, 10 * EDSCALE, 10 * EDSCALE);
|
Size2 scale_factor = Size2(SCALE_HANDLE_DISTANCE, SCALE_HANDLE_DISTANCE);
|
||||||
if (x_handle_rect.has_point(simple_xform.affine_inverse().xform(b->get_position()))) {
|
Rect2 x_handle_rect = Rect2(scale_factor.x * EDSCALE, -5 * EDSCALE, 10 * EDSCALE, 10 * EDSCALE);
|
||||||
drag_type = DRAG_SCALE_X;
|
if (x_handle_rect.has_point(simple_xform.affine_inverse().xform(b->get_position()))) {
|
||||||
}
|
drag_type = DRAG_SCALE_X;
|
||||||
Rect2 y_handle_rect = Rect2(-5 * EDSCALE, -(scale_factor.y + 10) * EDSCALE, 10 * EDSCALE, 10 * EDSCALE);
|
}
|
||||||
if (y_handle_rect.has_point(simple_xform.affine_inverse().xform(b->get_position()))) {
|
Rect2 y_handle_rect = Rect2(-5 * EDSCALE, -(scale_factor.y + 10) * EDSCALE, 10 * EDSCALE, 10 * EDSCALE);
|
||||||
drag_type = DRAG_SCALE_Y;
|
if (y_handle_rect.has_point(simple_xform.affine_inverse().xform(b->get_position()))) {
|
||||||
|
drag_type = DRAG_SCALE_Y;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
drag_from = transform.affine_inverse().xform(b->get_position());
|
drag_from = transform.affine_inverse().xform(b->get_position());
|
||||||
@ -1967,14 +1969,16 @@ bool CanvasItemEditor::_gui_input_move(const Ref<InputEvent> &p_event) {
|
|||||||
Transform2D unscaled_transform = (transform * parent_xform * canvas_item->_edit_get_transform()).orthonormalized();
|
Transform2D unscaled_transform = (transform * parent_xform * canvas_item->_edit_get_transform()).orthonormalized();
|
||||||
Transform2D simple_xform = viewport->get_transform() * unscaled_transform;
|
Transform2D simple_xform = viewport->get_transform() * unscaled_transform;
|
||||||
|
|
||||||
Size2 move_factor = Size2(MOVE_HANDLE_DISTANCE, MOVE_HANDLE_DISTANCE);
|
if (show_transformation_gizmos) {
|
||||||
Rect2 x_handle_rect = Rect2(move_factor.x * EDSCALE, -5 * EDSCALE, 10 * EDSCALE, 10 * EDSCALE);
|
Size2 move_factor = Size2(MOVE_HANDLE_DISTANCE, MOVE_HANDLE_DISTANCE);
|
||||||
if (x_handle_rect.has_point(simple_xform.affine_inverse().xform(b->get_position()))) {
|
Rect2 x_handle_rect = Rect2(move_factor.x * EDSCALE, -5 * EDSCALE, 10 * EDSCALE, 10 * EDSCALE);
|
||||||
drag_type = DRAG_MOVE_X;
|
if (x_handle_rect.has_point(simple_xform.affine_inverse().xform(b->get_position()))) {
|
||||||
}
|
drag_type = DRAG_MOVE_X;
|
||||||
Rect2 y_handle_rect = Rect2(-5 * EDSCALE, -(move_factor.y + 10) * EDSCALE, 10 * EDSCALE, 10 * EDSCALE);
|
}
|
||||||
if (y_handle_rect.has_point(simple_xform.affine_inverse().xform(b->get_position()))) {
|
Rect2 y_handle_rect = Rect2(-5 * EDSCALE, -(move_factor.y + 10) * EDSCALE, 10 * EDSCALE, 10 * EDSCALE);
|
||||||
drag_type = DRAG_MOVE_Y;
|
if (y_handle_rect.has_point(simple_xform.affine_inverse().xform(b->get_position()))) {
|
||||||
|
drag_type = DRAG_MOVE_Y;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
drag_from = transform.affine_inverse().xform(b->get_position());
|
drag_from = transform.affine_inverse().xform(b->get_position());
|
||||||
@ -3239,7 +3243,7 @@ void CanvasItemEditor::_draw_selection() {
|
|||||||
// Draw the move handles
|
// Draw the move handles
|
||||||
bool is_ctrl = Input::get_singleton()->is_key_pressed(KEY_CONTROL);
|
bool is_ctrl = Input::get_singleton()->is_key_pressed(KEY_CONTROL);
|
||||||
bool is_alt = Input::get_singleton()->is_key_pressed(KEY_ALT);
|
bool is_alt = Input::get_singleton()->is_key_pressed(KEY_ALT);
|
||||||
if (tool == TOOL_MOVE) {
|
if (tool == TOOL_MOVE && show_transformation_gizmos) {
|
||||||
if (_is_node_movable(canvas_item)) {
|
if (_is_node_movable(canvas_item)) {
|
||||||
Transform2D unscaled_transform = (xform * canvas_item->get_transform().affine_inverse() * canvas_item->_edit_get_transform()).orthonormalized();
|
Transform2D unscaled_transform = (xform * canvas_item->get_transform().affine_inverse() * canvas_item->_edit_get_transform()).orthonormalized();
|
||||||
Transform2D simple_xform = viewport->get_transform() * unscaled_transform;
|
Transform2D simple_xform = viewport->get_transform() * unscaled_transform;
|
||||||
@ -3278,7 +3282,7 @@ void CanvasItemEditor::_draw_selection() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Draw the rescale handles
|
// Draw the rescale handles
|
||||||
if ((is_alt && is_ctrl) || tool == TOOL_SCALE || drag_type == DRAG_SCALE_X || drag_type == DRAG_SCALE_Y) {
|
if (show_transformation_gizmos && ((is_alt && is_ctrl) || tool == TOOL_SCALE || drag_type == DRAG_SCALE_X || drag_type == DRAG_SCALE_Y)) {
|
||||||
if (_is_node_movable(canvas_item)) {
|
if (_is_node_movable(canvas_item)) {
|
||||||
Transform2D unscaled_transform = (xform * canvas_item->get_transform().affine_inverse() * canvas_item->_edit_get_transform()).orthonormalized();
|
Transform2D unscaled_transform = (xform * canvas_item->get_transform().affine_inverse() * canvas_item->_edit_get_transform()).orthonormalized();
|
||||||
Transform2D simple_xform = viewport->get_transform() * unscaled_transform;
|
Transform2D simple_xform = viewport->get_transform() * unscaled_transform;
|
||||||
@ -4413,10 +4417,8 @@ void CanvasItemEditor::_update_override_camera_button(bool p_game_running) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void CanvasItemEditor::_popup_callback(int p_op) {
|
void CanvasItemEditor::_popup_callback(int p_op) {
|
||||||
|
|
||||||
last_option = MenuOption(p_op);
|
last_option = MenuOption(p_op);
|
||||||
switch (p_op) {
|
switch (p_op) {
|
||||||
|
|
||||||
case SHOW_GRID: {
|
case SHOW_GRID: {
|
||||||
show_grid = !show_grid;
|
show_grid = !show_grid;
|
||||||
int idx = view_menu->get_popup()->get_item_index(SHOW_GRID);
|
int idx = view_menu->get_popup()->get_item_index(SHOW_GRID);
|
||||||
@ -4441,6 +4443,12 @@ void CanvasItemEditor::_popup_callback(int p_op) {
|
|||||||
view_menu->get_popup()->set_item_checked(idx, show_edit_locks);
|
view_menu->get_popup()->set_item_checked(idx, show_edit_locks);
|
||||||
viewport->update();
|
viewport->update();
|
||||||
} break;
|
} break;
|
||||||
|
case SHOW_TRANSFORMATION_GIZMOS: {
|
||||||
|
show_transformation_gizmos = !show_transformation_gizmos;
|
||||||
|
int idx = view_menu->get_popup()->get_item_index(SHOW_TRANSFORMATION_GIZMOS);
|
||||||
|
view_menu->get_popup()->set_item_checked(idx, show_transformation_gizmos);
|
||||||
|
viewport->update();
|
||||||
|
} break;
|
||||||
case SNAP_USE_NODE_PARENT: {
|
case SNAP_USE_NODE_PARENT: {
|
||||||
snap_node_parent = !snap_node_parent;
|
snap_node_parent = !snap_node_parent;
|
||||||
int idx = smartsnap_config_popup->get_item_index(SNAP_USE_NODE_PARENT);
|
int idx = smartsnap_config_popup->get_item_index(SNAP_USE_NODE_PARENT);
|
||||||
@ -5063,6 +5071,7 @@ Dictionary CanvasItemEditor::get_state() const {
|
|||||||
state["show_helpers"] = show_helpers;
|
state["show_helpers"] = show_helpers;
|
||||||
state["show_zoom_control"] = zoom_hb->is_visible();
|
state["show_zoom_control"] = zoom_hb->is_visible();
|
||||||
state["show_edit_locks"] = show_edit_locks;
|
state["show_edit_locks"] = show_edit_locks;
|
||||||
|
state["show_transformation_gizmos"] = show_transformation_gizmos;
|
||||||
state["snap_rotation"] = snap_rotation;
|
state["snap_rotation"] = snap_rotation;
|
||||||
state["snap_scale"] = snap_scale;
|
state["snap_scale"] = snap_scale;
|
||||||
state["snap_relative"] = snap_relative;
|
state["snap_relative"] = snap_relative;
|
||||||
@ -5199,6 +5208,12 @@ void CanvasItemEditor::set_state(const Dictionary &p_state) {
|
|||||||
view_menu->get_popup()->set_item_checked(idx, show_edit_locks);
|
view_menu->get_popup()->set_item_checked(idx, show_edit_locks);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (state.has("show_transformation_gizmos")) {
|
||||||
|
show_transformation_gizmos = state["show_transformation_gizmos"];
|
||||||
|
int idx = view_menu->get_popup()->get_item_index(SHOW_TRANSFORMATION_GIZMOS);
|
||||||
|
view_menu->get_popup()->set_item_checked(idx, show_transformation_gizmos);
|
||||||
|
}
|
||||||
|
|
||||||
if (state.has("show_zoom_control")) {
|
if (state.has("show_zoom_control")) {
|
||||||
// This one is not user-controllable, but instrumentable
|
// This one is not user-controllable, but instrumentable
|
||||||
zoom_hb->set_visible(state["show_zoom_control"]);
|
zoom_hb->set_visible(state["show_zoom_control"]);
|
||||||
@ -5292,6 +5307,7 @@ CanvasItemEditor::CanvasItemEditor(EditorNode *p_editor) {
|
|||||||
show_rulers = true;
|
show_rulers = true;
|
||||||
show_guides = true;
|
show_guides = true;
|
||||||
show_edit_locks = true;
|
show_edit_locks = true;
|
||||||
|
show_transformation_gizmos = true;
|
||||||
zoom = 1;
|
zoom = 1;
|
||||||
view_offset = Point2(-150 - RULER_WIDTH, -95 - RULER_WIDTH);
|
view_offset = Point2(-150 - RULER_WIDTH, -95 - RULER_WIDTH);
|
||||||
previous_update_view_offset = view_offset; // Moves the view a little bit to the left so that (0,0) is visible. The values a relative to a 16/10 screen
|
previous_update_view_offset = view_offset; // Moves the view a little bit to the left so that (0,0) is visible. The values a relative to a 16/10 screen
|
||||||
@ -5614,6 +5630,7 @@ CanvasItemEditor::CanvasItemEditor(EditorNode *p_editor) {
|
|||||||
p->add_check_shortcut(ED_SHORTCUT("canvas_item_editor/show_origin", TTR("Show Origin")), SHOW_ORIGIN);
|
p->add_check_shortcut(ED_SHORTCUT("canvas_item_editor/show_origin", TTR("Show Origin")), SHOW_ORIGIN);
|
||||||
p->add_check_shortcut(ED_SHORTCUT("canvas_item_editor/show_viewport", TTR("Show Viewport")), SHOW_VIEWPORT);
|
p->add_check_shortcut(ED_SHORTCUT("canvas_item_editor/show_viewport", TTR("Show Viewport")), SHOW_VIEWPORT);
|
||||||
p->add_check_shortcut(ED_SHORTCUT("canvas_item_editor/show_edit_locks", TTR("Show Group And Lock Icons")), SHOW_EDIT_LOCKS);
|
p->add_check_shortcut(ED_SHORTCUT("canvas_item_editor/show_edit_locks", TTR("Show Group And Lock Icons")), SHOW_EDIT_LOCKS);
|
||||||
|
p->add_check_shortcut(ED_SHORTCUT("canvas_item_editor/show_transformation_gizmos", TTR("Show Transformation Gizmos")), SHOW_TRANSFORMATION_GIZMOS);
|
||||||
|
|
||||||
p->add_separator();
|
p->add_separator();
|
||||||
p->add_shortcut(ED_SHORTCUT("canvas_item_editor/center_selection", TTR("Center Selection"), KEY_F), VIEW_CENTER_TO_SELECTION);
|
p->add_shortcut(ED_SHORTCUT("canvas_item_editor/center_selection", TTR("Center Selection"), KEY_F), VIEW_CENTER_TO_SELECTION);
|
||||||
|
@ -119,6 +119,7 @@ private:
|
|||||||
SHOW_ORIGIN,
|
SHOW_ORIGIN,
|
||||||
SHOW_VIEWPORT,
|
SHOW_VIEWPORT,
|
||||||
SHOW_EDIT_LOCKS,
|
SHOW_EDIT_LOCKS,
|
||||||
|
SHOW_TRANSFORMATION_GIZMOS,
|
||||||
LOCK_SELECTED,
|
LOCK_SELECTED,
|
||||||
UNLOCK_SELECTED,
|
UNLOCK_SELECTED,
|
||||||
GROUP_SELECTED,
|
GROUP_SELECTED,
|
||||||
@ -189,7 +190,6 @@ private:
|
|||||||
SKELETON_SHOW_BONES,
|
SKELETON_SHOW_BONES,
|
||||||
SKELETON_SET_IK_CHAIN,
|
SKELETON_SET_IK_CHAIN,
|
||||||
SKELETON_CLEAR_IK_CHAIN
|
SKELETON_CLEAR_IK_CHAIN
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
enum DragType {
|
enum DragType {
|
||||||
@ -250,6 +250,8 @@ private:
|
|||||||
bool show_viewport;
|
bool show_viewport;
|
||||||
bool show_helpers;
|
bool show_helpers;
|
||||||
bool show_edit_locks;
|
bool show_edit_locks;
|
||||||
|
bool show_transformation_gizmos;
|
||||||
|
|
||||||
float zoom;
|
float zoom;
|
||||||
Point2 view_offset;
|
Point2 view_offset;
|
||||||
Point2 previous_update_view_offset;
|
Point2 previous_update_view_offset;
|
||||||
|
Loading…
Reference in New Issue
Block a user