diff --git a/doc/classes/EditorSettings.xml b/doc/classes/EditorSettings.xml index 05a3e228304..c7d05eb913d 100644 --- a/doc/classes/EditorSettings.xml +++ b/doc/classes/EditorSettings.xml @@ -250,6 +250,9 @@ The color to use when drawing smart snapping lines in the 2D editor. The smart snapping lines will automatically display when moving 2D nodes if smart snapping is enabled in the Snapping Options menu at the top of the 2D editor viewport. + + If [code]true[/code], the 2D editor will snap to integer zoom values while not holding the [kbd]Alt[/kbd] key and powers of two while holding it. If [code]false[/code], this behavior is swapped. + The color of the viewport border in the 2D editor. This border represents the viewport's size at the base resolution defined in the Project Settings. Objects placed outside this border will not be visible unless a [Camera2D] node is used, or unless the window is resized and the stretch mode is set to [code]disabled[/code]. diff --git a/editor/editor_settings.cpp b/editor/editor_settings.cpp index 537e862a51c..4ae0aa7e4a8 100644 --- a/editor/editor_settings.cpp +++ b/editor/editor_settings.cpp @@ -688,6 +688,7 @@ void EditorSettings::_load_defaults(Ref p_extra_config) { _initial_set("editors/2d/bone_outline_color", Color(0.35, 0.35, 0.35, 0.5)); _initial_set("editors/2d/bone_outline_size", 2); _initial_set("editors/2d/viewport_border_color", Color(0.4, 0.4, 1.0, 0.4)); + _initial_set("editors/2d/use_integer_zoom_by_default", false); // Panning // Enum should be in sync with ControlScheme in ViewPanner. diff --git a/editor/plugins/canvas_item_editor_plugin.cpp b/editor/plugins/canvas_item_editor_plugin.cpp index 937a0ba6ba9..d6a11f856aa 100644 --- a/editor/plugins/canvas_item_editor_plugin.cpp +++ b/editor/plugins/canvas_item_editor_plugin.cpp @@ -1290,7 +1290,13 @@ void CanvasItemEditor::_zoom_callback(float p_zoom_factor, Vector2 p_origin, Ref if (mb.is_valid()) { // Special behvior for scroll events, as the zoom_by_increment method can smartly end up on powers of two. int increment = p_zoom_factor > 1.0 ? 1 : -1; - zoom_widget->set_zoom_by_increments(increment, mb->is_alt_pressed()); + bool by_integer = mb->is_alt_pressed(); + + if (EDITOR_GET("editors/2d/use_integer_zoom_by_default")) { + by_integer = !by_integer; + } + + zoom_widget->set_zoom_by_increments(increment, by_integer); } else { zoom_widget->set_zoom(zoom_widget->get_zoom() * p_zoom_factor); }