Răsfoiți Sursa

Added increment_pressed and decrement_pressed icons to scrollbars

(cherry picked from commit e27ab2708fe08b6c24767129505666b2ff007e1b)
skysphr 4 ani în urmă
părinte
comite
f53294f874

+ 6 - 0
doc/classes/HScrollBar.xml

@@ -19,6 +19,9 @@
 		<theme_item name="decrement_highlight" data_type="icon" type="Texture">
 			Displayed when the mouse cursor hovers over the decrement button.
 		</theme_item>
+		<theme_item name="decrement_pressed" data_type="icon" type="Texture">
+			Displayed when the decrement button is being pressed.
+		</theme_item>
 		<theme_item name="grabber" data_type="style" type="StyleBox">
 			Used as texture for the grabber, the draggable element representing current scroll.
 		</theme_item>
@@ -34,6 +37,9 @@
 		<theme_item name="increment_highlight" data_type="icon" type="Texture">
 			Displayed when the mouse cursor hovers over the increment button.
 		</theme_item>
+		<theme_item name="increment_pressed" data_type="icon" type="Texture">
+			Displayed when the increment button is being pressed.
+		</theme_item>
 		<theme_item name="scroll" data_type="style" type="StyleBox">
 			Used as background of this [ScrollBar].
 		</theme_item>

+ 6 - 0
doc/classes/VScrollBar.xml

@@ -23,6 +23,9 @@
 		<theme_item name="decrement_highlight" data_type="icon" type="Texture">
 			Displayed when the mouse cursor hovers over the decrement button.
 		</theme_item>
+		<theme_item name="decrement_pressed" data_type="icon" type="Texture">
+			Displayed when the decrement button is being pressed.
+		</theme_item>
 		<theme_item name="grabber" data_type="style" type="StyleBox">
 			Used as texture for the grabber, the draggable element representing current scroll.
 		</theme_item>
@@ -38,6 +41,9 @@
 		<theme_item name="increment_highlight" data_type="icon" type="Texture">
 			Displayed when the mouse cursor hovers over the increment button.
 		</theme_item>
+		<theme_item name="increment_pressed" data_type="icon" type="Texture">
+			Displayed when the increment button is being pressed.
+		</theme_item>
 		<theme_item name="scroll" data_type="style" type="StyleBox">
 			Used as background of this [ScrollBar].
 		</theme_item>

+ 4 - 0
editor/editor_themes.cpp

@@ -1037,8 +1037,10 @@ Ref<Theme> create_editor_theme(const Ref<Theme> p_theme) {
 
 	theme->set_icon("increment", "HScrollBar", empty_icon);
 	theme->set_icon("increment_highlight", "HScrollBar", empty_icon);
+	theme->set_icon("increment_pressed", "HScrollBar", empty_icon);
 	theme->set_icon("decrement", "HScrollBar", empty_icon);
 	theme->set_icon("decrement_highlight", "HScrollBar", empty_icon);
+	theme->set_icon("decrement_pressed", "HScrollBar", empty_icon);
 
 	// VScrollBar
 	theme->set_stylebox("scroll", "VScrollBar", make_stylebox(theme->get_icon("GuiScrollBg", "EditorIcons"), 5, 5, 5, 5, 0, 0, 0, 0));
@@ -1049,8 +1051,10 @@ Ref<Theme> create_editor_theme(const Ref<Theme> p_theme) {
 
 	theme->set_icon("increment", "VScrollBar", empty_icon);
 	theme->set_icon("increment_highlight", "VScrollBar", empty_icon);
+	theme->set_icon("increment_pressed", "VScrollBar", empty_icon);
 	theme->set_icon("decrement", "VScrollBar", empty_icon);
 	theme->set_icon("decrement_highlight", "VScrollBar", empty_icon);
+	theme->set_icon("decrement_pressed", "VScrollBar", empty_icon);
 
 	// HSlider
 	theme->set_icon("grabber_highlight", "HSlider", theme->get_icon("GuiSliderGrabberHl", "EditorIcons"));

+ 24 - 2
scene/gui/scroll_bar.cpp

@@ -79,12 +79,16 @@ void ScrollBar::_gui_input(Ref<InputEvent> p_event) {
 			double total = orientation == VERTICAL ? get_size().height : get_size().width;
 
 			if (ofs < decr_size) {
+				decr_active = true;
 				set_value(get_value() - (custom_step >= 0 ? custom_step : get_step()));
+				update();
 				return;
 			}
 
 			if (ofs > total - incr_size) {
+				incr_active = true;
 				set_value(get_value() + (custom_step >= 0 ? custom_step : get_step()));
+				update();
 				return;
 			}
 
@@ -129,6 +133,8 @@ void ScrollBar::_gui_input(Ref<InputEvent> p_event) {
 			}
 
 		} else {
+			incr_active = false;
+			decr_active = false;
 			drag.active = false;
 			update();
 		}
@@ -214,8 +220,24 @@ void ScrollBar::_notification(int p_what) {
 	if (p_what == NOTIFICATION_DRAW) {
 		RID ci = get_canvas_item();
 
-		Ref<Texture> decr = highlight == HIGHLIGHT_DECR ? get_icon("decrement_highlight") : get_icon("decrement");
-		Ref<Texture> incr = highlight == HIGHLIGHT_INCR ? get_icon("increment_highlight") : get_icon("increment");
+		Ref<Texture> decr, incr;
+
+		if (decr_active) {
+			decr = get_icon("decrement_pressed");
+		} else if (highlight == HIGHLIGHT_DECR) {
+			decr = get_icon("decrement_highlight");
+		} else {
+			decr = get_icon("decrement");
+		}
+
+		if (incr_active) {
+			incr = get_icon("increment_pressed");
+		} else if (highlight == HIGHLIGHT_INCR) {
+			incr = get_icon("increment_highlight");
+		} else {
+			incr = get_icon("increment");
+		}
+
 		Ref<StyleBox> bg = has_focus() ? get_stylebox("scroll_focus") : get_stylebox("scroll");
 
 		Ref<StyleBox> grabber;

+ 3 - 0
scene/gui/scroll_bar.h

@@ -51,6 +51,9 @@ class ScrollBar : public Range {
 
 	HighlightStatus highlight;
 
+	bool incr_active = false;
+	bool decr_active = false;
+
 	struct Drag {
 		bool active;
 		float pos_at_click;

+ 4 - 0
scene/resources/default_theme/default_theme.cpp

@@ -502,8 +502,10 @@ void fill_default_theme(Ref<Theme> &theme, const Ref<Font> &default_font, const
 
 	theme->set_icon("increment", "HScrollBar", empty_icon);
 	theme->set_icon("increment_highlight", "HScrollBar", empty_icon);
+	theme->set_icon("increment_pressed", "HScrollBar", empty_icon);
 	theme->set_icon("decrement", "HScrollBar", empty_icon);
 	theme->set_icon("decrement_highlight", "HScrollBar", empty_icon);
+	theme->set_icon("decrement_pressed", "HScrollBar", empty_icon);
 
 	// VScrollBar
 
@@ -515,8 +517,10 @@ void fill_default_theme(Ref<Theme> &theme, const Ref<Font> &default_font, const
 
 	theme->set_icon("increment", "VScrollBar", empty_icon);
 	theme->set_icon("increment_highlight", "VScrollBar", empty_icon);
+	theme->set_icon("increment_pressed", "VScrollBar", empty_icon);
 	theme->set_icon("decrement", "VScrollBar", empty_icon);
 	theme->set_icon("decrement_highlight", "VScrollBar", empty_icon);
+	theme->set_icon("decrement_pressed", "VScrollBar", empty_icon);
 
 	// HSlider