summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMounir Tohami <53877170+WhalesState@users.noreply.github.com>2024-02-07 17:19:13 +0000
committerMounir Tohami <53877170+WhalesState@users.noreply.github.com>2024-02-07 17:19:13 +0000
commite6a42e3fc58e5bf6a4e8d04cbf1ab53bd7c7930d (patch)
tree44cf2f5b2e20d0e9a9ddd1f244b4807f767f6e6a
parent36e943b6b20cb7a8a89bc30489c4a81c3e149d74 (diff)
downloadredot-engine-e6a42e3fc58e5bf6a4e8d04cbf1ab53bd7c7930d.tar.gz
Fix `Slider`'s drag mouse position when grabber is centered
-rw-r--r--scene/gui/slider.cpp10
1 files changed, 6 insertions, 4 deletions
diff --git a/scene/gui/slider.cpp b/scene/gui/slider.cpp
index 69d281e373..f984d781d3 100644
--- a/scene/gui/slider.cpp
+++ b/scene/gui/slider.cpp
@@ -67,8 +67,8 @@ void Slider::gui_input(const Ref<InputEvent> &p_event) {
grab.value_before_dragging = get_as_ratio();
emit_signal(SNAME("drag_started"));
- double grab_width = (double)grabber->get_width();
- double grab_height = (double)grabber->get_height();
+ double grab_width = theme_cache.center_grabber ? 0.0 : (double)grabber->get_width();
+ double grab_height = theme_cache.center_grabber ? 0.0 : (double)grabber->get_height();
double max = orientation == VERTICAL ? get_size().height - grab_height : get_size().width - grab_width;
set_block_signals(true);
if (orientation == VERTICAL) {
@@ -107,12 +107,14 @@ void Slider::gui_input(const Ref<InputEvent> &p_event) {
if (mm.is_valid()) {
if (grab.active) {
Size2i size = get_size();
- Ref<Texture2D> grabber = theme_cache.grabber_icon;
+ Ref<Texture2D> grabber = theme_cache.grabber_hl_icon;
+ double grab_width = theme_cache.center_grabber ? 0.0 : (double)grabber->get_width();
+ double grab_height = theme_cache.center_grabber ? 0.0 : (double)grabber->get_height();
double motion = (orientation == VERTICAL ? mm->get_position().y : mm->get_position().x) - grab.pos;
if (orientation == VERTICAL) {
motion = -motion;
}
- double areasize = orientation == VERTICAL ? size.height - grabber->get_height() : size.width - grabber->get_width();
+ double areasize = orientation == VERTICAL ? size.height - grab_height : size.width - grab_width;
if (areasize <= 0) {
return;
}