mirror of
https://github.com/Relintai/pandemonium_engine.git
synced 2025-01-03 09:29:38 +01:00
Backported min and max zoom setting to the EditorZoomWidget from godot 4.
This commit is contained in:
parent
840a804a5c
commit
6e90a74706
@ -73,12 +73,50 @@ float EditorZoomWidget::get_zoom() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void EditorZoomWidget::set_zoom(float p_zoom) {
|
void EditorZoomWidget::set_zoom(float p_zoom) {
|
||||||
if (p_zoom > 0 && p_zoom != zoom) {
|
if (zoom_limits_enabled) {
|
||||||
zoom = p_zoom;
|
float new_zoom = CLAMP(p_zoom, min_zoom, max_zoom);
|
||||||
_update_zoom_label();
|
|
||||||
|
if (new_zoom != zoom) {
|
||||||
|
zoom = new_zoom;
|
||||||
|
_update_zoom_label();
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (p_zoom > 0 && p_zoom != zoom) {
|
||||||
|
zoom = p_zoom;
|
||||||
|
_update_zoom_label();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
float EditorZoomWidget::get_min_zoom() {
|
||||||
|
return min_zoom;
|
||||||
|
}
|
||||||
|
|
||||||
|
float EditorZoomWidget::get_max_zoom() {
|
||||||
|
return max_zoom;
|
||||||
|
}
|
||||||
|
|
||||||
|
void EditorZoomWidget::setup_zoom_limits(float p_min, float p_max) {
|
||||||
|
ERR_FAIL_COND(p_min < 0 || p_min > p_max);
|
||||||
|
|
||||||
|
zoom_limits_enabled = true;
|
||||||
|
|
||||||
|
min_zoom = p_min;
|
||||||
|
max_zoom = p_max;
|
||||||
|
|
||||||
|
if (zoom > max_zoom) {
|
||||||
|
set_zoom(max_zoom);
|
||||||
|
emit_signal("zoom_changed", zoom);
|
||||||
|
} else if (zoom < min_zoom) {
|
||||||
|
set_zoom(min_zoom);
|
||||||
|
emit_signal("zoom_changed", zoom);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void EditorZoomWidget::set_enable_zoom_limits(bool p_enabled) {
|
||||||
|
zoom_limits_enabled = p_enabled;
|
||||||
|
}
|
||||||
|
|
||||||
void EditorZoomWidget::set_zoom_by_increments(int p_increment_count, bool p_integer_only) {
|
void EditorZoomWidget::set_zoom_by_increments(int p_increment_count, bool p_integer_only) {
|
||||||
// Remove editor scale from the index computation.
|
// Remove editor scale from the index computation.
|
||||||
const float zoom_noscale = zoom / MAX(1, EDSCALE);
|
const float zoom_noscale = zoom / MAX(1, EDSCALE);
|
||||||
@ -168,6 +206,12 @@ void EditorZoomWidget::_bind_methods() {
|
|||||||
ADD_SIGNAL(MethodInfo("zoom_changed", PropertyInfo(Variant::REAL, "zoom")));
|
ADD_SIGNAL(MethodInfo("zoom_changed", PropertyInfo(Variant::REAL, "zoom")));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void EditorZoomWidget::set_shortcut_context(Node *p_node) const {
|
||||||
|
zoom_minus->set_shortcut_context(p_node);
|
||||||
|
zoom_plus->set_shortcut_context(p_node);
|
||||||
|
zoom_reset->set_shortcut_context(p_node);
|
||||||
|
}
|
||||||
|
|
||||||
EditorZoomWidget::EditorZoomWidget() {
|
EditorZoomWidget::EditorZoomWidget() {
|
||||||
// Zoom buttons
|
// Zoom buttons
|
||||||
zoom_minus = memnew(Button);
|
zoom_minus = memnew(Button);
|
||||||
@ -175,7 +219,7 @@ EditorZoomWidget::EditorZoomWidget() {
|
|||||||
add_child(zoom_minus);
|
add_child(zoom_minus);
|
||||||
zoom_minus->connect("pressed", this, "_button_zoom_minus");
|
zoom_minus->connect("pressed", this, "_button_zoom_minus");
|
||||||
zoom_minus->set_shortcut(ED_SHORTCUT("canvas_item_editor/zoom_minus", TTR("Zoom Out"), KEY_MASK_CMD | KEY_MINUS));
|
zoom_minus->set_shortcut(ED_SHORTCUT("canvas_item_editor/zoom_minus", TTR("Zoom Out"), KEY_MASK_CMD | KEY_MINUS));
|
||||||
//zoom_minus->set_shortcut_context(this);
|
zoom_minus->set_shortcut_context(this);
|
||||||
zoom_minus->set_focus_mode(FOCUS_NONE);
|
zoom_minus->set_focus_mode(FOCUS_NONE);
|
||||||
|
|
||||||
zoom_reset = memnew(Button);
|
zoom_reset = memnew(Button);
|
||||||
@ -186,7 +230,7 @@ EditorZoomWidget::EditorZoomWidget() {
|
|||||||
zoom_reset->add_theme_color_override("font_color", Color(1, 1, 1));
|
zoom_reset->add_theme_color_override("font_color", Color(1, 1, 1));
|
||||||
zoom_reset->connect("pressed", this, "_button_zoom_reset");
|
zoom_reset->connect("pressed", this, "_button_zoom_reset");
|
||||||
zoom_reset->set_shortcut(ED_SHORTCUT("canvas_item_editor/zoom_reset", TTR("Zoom Reset"), KEY_MASK_CMD | KEY_0));
|
zoom_reset->set_shortcut(ED_SHORTCUT("canvas_item_editor/zoom_reset", TTR("Zoom Reset"), KEY_MASK_CMD | KEY_0));
|
||||||
//zoom_reset->set_shortcut_context(this);
|
zoom_reset->set_shortcut_context(this);
|
||||||
zoom_reset->set_focus_mode(FOCUS_NONE);
|
zoom_reset->set_focus_mode(FOCUS_NONE);
|
||||||
zoom_reset->set_text_align(Button::ALIGN_CENTER);
|
zoom_reset->set_text_align(Button::ALIGN_CENTER);
|
||||||
|
|
||||||
@ -198,7 +242,7 @@ EditorZoomWidget::EditorZoomWidget() {
|
|||||||
add_child(zoom_plus);
|
add_child(zoom_plus);
|
||||||
zoom_plus->connect("pressed", this, "_button_zoom_plus");
|
zoom_plus->connect("pressed", this, "_button_zoom_plus");
|
||||||
zoom_plus->set_shortcut(ED_SHORTCUT("canvas_item_editor/zoom_plus", TTR("Zoom In"), KEY_MASK_CMD | KEY_EQUAL)); // Usually direct access key for PLUS
|
zoom_plus->set_shortcut(ED_SHORTCUT("canvas_item_editor/zoom_plus", TTR("Zoom In"), KEY_MASK_CMD | KEY_EQUAL)); // Usually direct access key for PLUS
|
||||||
//zoom_plus->set_shortcut_context(this);
|
zoom_plus->set_shortcut_context(this);
|
||||||
zoom_plus->set_focus_mode(FOCUS_NONE);
|
zoom_plus->set_focus_mode(FOCUS_NONE);
|
||||||
|
|
||||||
_update_zoom_label();
|
_update_zoom_label();
|
||||||
|
@ -44,6 +44,10 @@ class EditorZoomWidget : public HBoxContainer {
|
|||||||
Button *zoom_plus = nullptr;
|
Button *zoom_plus = nullptr;
|
||||||
|
|
||||||
float zoom = 1.0;
|
float zoom = 1.0;
|
||||||
|
float min_zoom = 1.0 / 128;
|
||||||
|
float max_zoom = 128.0;
|
||||||
|
bool zoom_limits_enabled = false;
|
||||||
|
|
||||||
void _update_zoom_label();
|
void _update_zoom_label();
|
||||||
void _button_zoom_minus();
|
void _button_zoom_minus();
|
||||||
void _button_zoom_reset();
|
void _button_zoom_reset();
|
||||||
@ -59,6 +63,15 @@ public:
|
|||||||
float get_zoom();
|
float get_zoom();
|
||||||
void set_zoom(float p_zoom);
|
void set_zoom(float p_zoom);
|
||||||
void set_zoom_by_increments(int p_increment_count, bool p_integer_only = false);
|
void set_zoom_by_increments(int p_increment_count, bool p_integer_only = false);
|
||||||
|
|
||||||
|
void set_enable_zoom_limits(bool p_enabled);
|
||||||
|
|
||||||
|
float get_min_zoom();
|
||||||
|
float get_max_zoom();
|
||||||
|
// It's best to setup simultaneously, so min < max can be checked easily.
|
||||||
|
void setup_zoom_limits(float p_min, float p_max);
|
||||||
|
// Sets the shortcut context for the zoom buttons. By default their context is this EditorZoomWidget control.
|
||||||
|
void set_shortcut_context(Node *p_node) const;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // EDITOR_ZOOM_WIDGET_H
|
#endif // EDITOR_ZOOM_WIDGET_H
|
||||||
|
Loading…
Reference in New Issue
Block a user