Separate 2D grid visibility and grid snap
This commit is contained in:
parent
7a4f9dfb15
commit
95c672e1b4
@ -477,12 +477,12 @@ void CanvasItemEditor::_unhandled_key_input(const Ref<InputEvent> &p_ev) {
|
|||||||
viewport->update();
|
viewport->update();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (k->is_pressed() && !k->get_control() && !k->is_echo()) {
|
if (k->is_pressed() && !k->get_control() && !k->is_echo() && (grid_snap_active || _is_grid_visible())) {
|
||||||
if ((grid_snap_active || show_grid) && multiply_grid_step_shortcut.is_valid() && multiply_grid_step_shortcut->is_shortcut(p_ev)) {
|
if (multiply_grid_step_shortcut.is_valid() && multiply_grid_step_shortcut->is_shortcut(p_ev)) {
|
||||||
// Multiply the grid size
|
// Multiply the grid size
|
||||||
grid_step_multiplier = MIN(grid_step_multiplier + 1, 12);
|
grid_step_multiplier = MIN(grid_step_multiplier + 1, 12);
|
||||||
viewport->update();
|
viewport->update();
|
||||||
} else if ((grid_snap_active || show_grid) && divide_grid_step_shortcut.is_valid() && divide_grid_step_shortcut->is_shortcut(p_ev)) {
|
} else if (divide_grid_step_shortcut.is_valid() && divide_grid_step_shortcut->is_shortcut(p_ev)) {
|
||||||
// Divide the grid size
|
// Divide the grid size
|
||||||
Point2 new_grid_step = grid_step * Math::pow(2.0, grid_step_multiplier - 1);
|
Point2 new_grid_step = grid_step * Math::pow(2.0, grid_step_multiplier - 1);
|
||||||
if (new_grid_step.x >= 1.0 && new_grid_step.y >= 1.0) {
|
if (new_grid_step.x >= 1.0 && new_grid_step.y >= 1.0) {
|
||||||
@ -1040,6 +1040,60 @@ void CanvasItemEditor::_reset_create_position() {
|
|||||||
node_create_position = Point2();
|
node_create_position = Point2();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool CanvasItemEditor::_is_grid_visible() const {
|
||||||
|
switch (grid_visibility) {
|
||||||
|
case GRID_VISIBILITY_SHOW:
|
||||||
|
return true;
|
||||||
|
case GRID_VISIBILITY_SHOW_WHEN_SNAPPING:
|
||||||
|
return grid_snap_active;
|
||||||
|
case GRID_VISIBILITY_HIDE:
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
ERR_FAIL_V_MSG(true, "Unexpected grid_visibility value");
|
||||||
|
}
|
||||||
|
|
||||||
|
void CanvasItemEditor::_prepare_grid_menu() {
|
||||||
|
for (int i = GRID_VISIBILITY_SHOW; i <= GRID_VISIBILITY_HIDE; i++) {
|
||||||
|
grid_menu->set_item_checked(i, i == grid_visibility);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void CanvasItemEditor::_on_grid_menu_id_pressed(int p_id) {
|
||||||
|
switch (p_id) {
|
||||||
|
case GRID_VISIBILITY_SHOW:
|
||||||
|
case GRID_VISIBILITY_SHOW_WHEN_SNAPPING:
|
||||||
|
case GRID_VISIBILITY_HIDE:
|
||||||
|
grid_visibility = (GridVisibility)p_id;
|
||||||
|
viewport->update();
|
||||||
|
view_menu->get_popup()->hide();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Toggle grid: go to the least restrictive option possible.
|
||||||
|
if (grid_snap_active) {
|
||||||
|
switch (grid_visibility) {
|
||||||
|
case GRID_VISIBILITY_SHOW:
|
||||||
|
case GRID_VISIBILITY_SHOW_WHEN_SNAPPING:
|
||||||
|
grid_visibility = GRID_VISIBILITY_HIDE;
|
||||||
|
break;
|
||||||
|
case GRID_VISIBILITY_HIDE:
|
||||||
|
grid_visibility = GRID_VISIBILITY_SHOW_WHEN_SNAPPING;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
switch (grid_visibility) {
|
||||||
|
case GRID_VISIBILITY_SHOW:
|
||||||
|
grid_visibility = GRID_VISIBILITY_SHOW_WHEN_SNAPPING;
|
||||||
|
break;
|
||||||
|
case GRID_VISIBILITY_SHOW_WHEN_SNAPPING:
|
||||||
|
case GRID_VISIBILITY_HIDE:
|
||||||
|
grid_visibility = GRID_VISIBILITY_SHOW;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
viewport->update();
|
||||||
|
}
|
||||||
|
|
||||||
bool CanvasItemEditor::_gui_input_rulers_and_guides(const Ref<InputEvent> &p_event) {
|
bool CanvasItemEditor::_gui_input_rulers_and_guides(const Ref<InputEvent> &p_event) {
|
||||||
Ref<InputEventMouseButton> b = p_event;
|
Ref<InputEventMouseButton> b = p_event;
|
||||||
Ref<InputEventMouseMotion> m = p_event;
|
Ref<InputEventMouseMotion> m = p_event;
|
||||||
@ -2953,7 +3007,7 @@ void CanvasItemEditor::_draw_rulers() {
|
|||||||
|
|
||||||
// The rule transform
|
// The rule transform
|
||||||
Transform2D ruler_transform = Transform2D();
|
Transform2D ruler_transform = Transform2D();
|
||||||
if (show_grid || grid_snap_active) {
|
if (grid_snap_active || _is_grid_visible()) {
|
||||||
List<CanvasItem *> selection = _get_edited_canvas_items();
|
List<CanvasItem *> selection = _get_edited_canvas_items();
|
||||||
if (snap_relative && selection.size() > 0) {
|
if (snap_relative && selection.size() > 0) {
|
||||||
ruler_transform.translate(_get_encompassing_rect_from_list(selection).position);
|
ruler_transform.translate(_get_encompassing_rect_from_list(selection).position);
|
||||||
@ -3033,7 +3087,7 @@ void CanvasItemEditor::_draw_rulers() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void CanvasItemEditor::_draw_grid() {
|
void CanvasItemEditor::_draw_grid() {
|
||||||
if (show_grid || grid_snap_active) {
|
if (_is_grid_visible()) {
|
||||||
// Draw the grid
|
// Draw the grid
|
||||||
Vector2 real_grid_offset;
|
Vector2 real_grid_offset;
|
||||||
const List<CanvasItem *> selection = _get_edited_canvas_items();
|
const List<CanvasItem *> selection = _get_edited_canvas_items();
|
||||||
@ -4834,12 +4888,6 @@ 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: {
|
|
||||||
show_grid = !show_grid;
|
|
||||||
int idx = view_menu->get_popup()->get_item_index(SHOW_GRID);
|
|
||||||
view_menu->get_popup()->set_item_checked(idx, show_grid);
|
|
||||||
viewport->update();
|
|
||||||
} break;
|
|
||||||
case SHOW_ORIGIN: {
|
case SHOW_ORIGIN: {
|
||||||
show_origin = !show_origin;
|
show_origin = !show_origin;
|
||||||
int idx = view_menu->get_popup()->get_item_index(SHOW_ORIGIN);
|
int idx = view_menu->get_popup()->get_item_index(SHOW_ORIGIN);
|
||||||
@ -5439,6 +5487,8 @@ void CanvasItemEditor::_bind_methods() {
|
|||||||
ClassDB::bind_method("_update_scroll", &CanvasItemEditor::_update_scroll);
|
ClassDB::bind_method("_update_scroll", &CanvasItemEditor::_update_scroll);
|
||||||
ClassDB::bind_method("_update_scrollbars", &CanvasItemEditor::_update_scrollbars);
|
ClassDB::bind_method("_update_scrollbars", &CanvasItemEditor::_update_scrollbars);
|
||||||
ClassDB::bind_method("_popup_callback", &CanvasItemEditor::_popup_callback);
|
ClassDB::bind_method("_popup_callback", &CanvasItemEditor::_popup_callback);
|
||||||
|
ClassDB::bind_method("_prepare_grid_menu", &CanvasItemEditor::_prepare_grid_menu);
|
||||||
|
ClassDB::bind_method("_on_grid_menu_id_pressed", &CanvasItemEditor::_on_grid_menu_id_pressed);
|
||||||
ClassDB::bind_method("_get_editor_data", &CanvasItemEditor::_get_editor_data);
|
ClassDB::bind_method("_get_editor_data", &CanvasItemEditor::_get_editor_data);
|
||||||
ClassDB::bind_method("_button_tool_select", &CanvasItemEditor::_button_tool_select);
|
ClassDB::bind_method("_button_tool_select", &CanvasItemEditor::_button_tool_select);
|
||||||
ClassDB::bind_method("_keying_changed", &CanvasItemEditor::_keying_changed);
|
ClassDB::bind_method("_keying_changed", &CanvasItemEditor::_keying_changed);
|
||||||
@ -5484,7 +5534,7 @@ Dictionary CanvasItemEditor::get_state() const {
|
|||||||
state["snap_node_center"] = snap_node_center;
|
state["snap_node_center"] = snap_node_center;
|
||||||
state["snap_other_nodes"] = snap_other_nodes;
|
state["snap_other_nodes"] = snap_other_nodes;
|
||||||
state["snap_guides"] = snap_guides;
|
state["snap_guides"] = snap_guides;
|
||||||
state["show_grid"] = show_grid;
|
state["grid_visibility"] = grid_visibility;
|
||||||
state["show_origin"] = show_origin;
|
state["show_origin"] = show_origin;
|
||||||
state["show_viewport"] = show_viewport;
|
state["show_viewport"] = show_viewport;
|
||||||
state["show_rulers"] = show_rulers;
|
state["show_rulers"] = show_rulers;
|
||||||
@ -5586,10 +5636,8 @@ void CanvasItemEditor::set_state(const Dictionary &p_state) {
|
|||||||
smartsnap_config_popup->set_item_checked(idx, snap_guides);
|
smartsnap_config_popup->set_item_checked(idx, snap_guides);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (state.has("show_grid")) {
|
if (state.has("grid_visibility")) {
|
||||||
show_grid = state["show_grid"];
|
grid_visibility = (GridVisibility)(int)(state["grid_visibility"]);
|
||||||
int idx = view_menu->get_popup()->get_item_index(SHOW_GRID);
|
|
||||||
view_menu->get_popup()->set_item_checked(idx, show_grid);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (state.has("show_origin")) {
|
if (state.has("show_origin")) {
|
||||||
@ -5748,7 +5796,7 @@ CanvasItemEditor::CanvasItemEditor(EditorNode *p_editor) {
|
|||||||
key_rot = true;
|
key_rot = true;
|
||||||
key_scale = false;
|
key_scale = false;
|
||||||
|
|
||||||
show_grid = false;
|
grid_visibility = GRID_VISIBILITY_SHOW_WHEN_SNAPPING;
|
||||||
show_origin = true;
|
show_origin = true;
|
||||||
show_viewport = true;
|
show_viewport = true;
|
||||||
show_helpers = false;
|
show_helpers = false;
|
||||||
@ -6085,7 +6133,19 @@ CanvasItemEditor::CanvasItemEditor(EditorNode *p_editor) {
|
|||||||
|
|
||||||
p = view_menu->get_popup();
|
p = view_menu->get_popup();
|
||||||
p->set_hide_on_checkable_item_selection(false);
|
p->set_hide_on_checkable_item_selection(false);
|
||||||
p->add_check_shortcut(ED_SHORTCUT("canvas_item_editor/show_grid", TTR("Always Show Grid"), KEY_NUMBERSIGN), SHOW_GRID);
|
|
||||||
|
grid_menu = memnew(PopupMenu);
|
||||||
|
grid_menu->connect("about_to_show", this, "_prepare_grid_menu");
|
||||||
|
grid_menu->connect("id_pressed", this, "_on_grid_menu_id_pressed");
|
||||||
|
grid_menu->set_name("GridMenu");
|
||||||
|
grid_menu->add_radio_check_item(TTR("Show"), GRID_VISIBILITY_SHOW);
|
||||||
|
grid_menu->add_radio_check_item(TTR("Show When Snapping"), GRID_VISIBILITY_SHOW_WHEN_SNAPPING);
|
||||||
|
grid_menu->add_radio_check_item(TTR("Hide"), GRID_VISIBILITY_HIDE);
|
||||||
|
grid_menu->add_separator();
|
||||||
|
grid_menu->add_shortcut(ED_SHORTCUT("canvas_item_editor/toggle_grid", TTR("Toggle Grid"), KEY_MASK_CMD | KEY_APOSTROPHE));
|
||||||
|
p->add_child(grid_menu);
|
||||||
|
p->add_submenu_item(TTR("Grid"), "GridMenu");
|
||||||
|
|
||||||
p->add_check_shortcut(ED_SHORTCUT("canvas_item_editor/show_helpers", TTR("Show Helpers"), KEY_H), SHOW_HELPERS);
|
p->add_check_shortcut(ED_SHORTCUT("canvas_item_editor/show_helpers", TTR("Show Helpers"), KEY_H), SHOW_HELPERS);
|
||||||
p->add_check_shortcut(ED_SHORTCUT("canvas_item_editor/show_rulers", TTR("Show Rulers")), SHOW_RULERS);
|
p->add_check_shortcut(ED_SHORTCUT("canvas_item_editor/show_rulers", TTR("Show Rulers")), SHOW_RULERS);
|
||||||
p->add_check_shortcut(ED_SHORTCUT("canvas_item_editor/show_guides", TTR("Show Guides"), KEY_Y), SHOW_GUIDES);
|
p->add_check_shortcut(ED_SHORTCUT("canvas_item_editor/show_guides", TTR("Show Guides"), KEY_Y), SHOW_GUIDES);
|
||||||
|
@ -115,7 +115,6 @@ private:
|
|||||||
SNAP_RELATIVE,
|
SNAP_RELATIVE,
|
||||||
SNAP_CONFIGURE,
|
SNAP_CONFIGURE,
|
||||||
SNAP_USE_PIXEL,
|
SNAP_USE_PIXEL,
|
||||||
SHOW_GRID,
|
|
||||||
SHOW_HELPERS,
|
SHOW_HELPERS,
|
||||||
SHOW_RULERS,
|
SHOW_RULERS,
|
||||||
SHOW_GUIDES,
|
SHOW_GUIDES,
|
||||||
@ -224,6 +223,12 @@ private:
|
|||||||
DRAG_KEY_MOVE
|
DRAG_KEY_MOVE
|
||||||
};
|
};
|
||||||
|
|
||||||
|
enum GridVisibility {
|
||||||
|
GRID_VISIBILITY_SHOW,
|
||||||
|
GRID_VISIBILITY_SHOW_WHEN_SNAPPING,
|
||||||
|
GRID_VISIBILITY_HIDE,
|
||||||
|
};
|
||||||
|
|
||||||
EditorSelection *editor_selection;
|
EditorSelection *editor_selection;
|
||||||
bool selection_menu_additive_selection;
|
bool selection_menu_additive_selection;
|
||||||
|
|
||||||
@ -249,7 +254,7 @@ private:
|
|||||||
VBoxContainer *info_overlay;
|
VBoxContainer *info_overlay;
|
||||||
|
|
||||||
Transform2D transform;
|
Transform2D transform;
|
||||||
bool show_grid;
|
GridVisibility grid_visibility;
|
||||||
bool show_rulers;
|
bool show_rulers;
|
||||||
bool show_guides;
|
bool show_guides;
|
||||||
bool show_origin;
|
bool show_origin;
|
||||||
@ -374,6 +379,7 @@ private:
|
|||||||
MenuButton *skeleton_menu;
|
MenuButton *skeleton_menu;
|
||||||
ToolButton *override_camera_button;
|
ToolButton *override_camera_button;
|
||||||
MenuButton *view_menu;
|
MenuButton *view_menu;
|
||||||
|
PopupMenu *grid_menu;
|
||||||
HBoxContainer *animation_hb;
|
HBoxContainer *animation_hb;
|
||||||
MenuButton *animation_menu;
|
MenuButton *animation_menu;
|
||||||
|
|
||||||
@ -452,6 +458,9 @@ private:
|
|||||||
void _add_node_pressed(int p_result);
|
void _add_node_pressed(int p_result);
|
||||||
void _node_created(Node *p_node);
|
void _node_created(Node *p_node);
|
||||||
void _reset_create_position();
|
void _reset_create_position();
|
||||||
|
bool _is_grid_visible() const;
|
||||||
|
void _prepare_grid_menu();
|
||||||
|
void _on_grid_menu_id_pressed(int p_id);
|
||||||
|
|
||||||
UndoRedo *undo_redo;
|
UndoRedo *undo_redo;
|
||||||
bool _build_bones_list(Node *p_node);
|
bool _build_bones_list(Node *p_node);
|
||||||
|
Loading…
Reference in New Issue
Block a user