浏览代码

Slider: add set/is_editable

Poommetee Ketson 8 年之前
父节点
当前提交
0c66078bcb

+ 21 - 1
scene/gui/slider.cpp

@@ -39,6 +39,10 @@ Size2 Slider::get_minimum_size() const {
 
 void Slider::_gui_input(Ref<InputEvent> p_event) {
 
+	if (!editable) {
+		return;
+	}
+
 	Ref<InputEventMouseButton> mb = p_event;
 
 	if (mb.is_valid()) {
@@ -158,7 +162,7 @@ void Slider::_notification(int p_what) {
 			Size2i size = get_size();
 			Ref<StyleBox> style = get_stylebox("slider");
 			Ref<StyleBox> focus = get_stylebox("focus");
-			Ref<Texture> grabber = get_icon(mouse_inside || has_focus() ? "grabber_highlight" : "grabber");
+			Ref<Texture> grabber = get_icon(editable ? ((mouse_inside || has_focus()) ? "grabber_highlight" : "grabber") : "grabber_disabled");
 			Ref<Texture> tick = get_icon("tick");
 
 			if (orientation == VERTICAL) {
@@ -231,6 +235,17 @@ void Slider::set_ticks_on_borders(bool _tob) {
 	update();
 }
 
+void Slider::set_editable(bool p_editable) {
+
+	editable = p_editable;
+	update();
+}
+
+bool Slider::is_editable() const {
+
+	return editable;
+}
+
 void Slider::_bind_methods() {
 
 	ClassDB::bind_method(D_METHOD("_gui_input"), &Slider::_gui_input);
@@ -240,6 +255,10 @@ void Slider::_bind_methods() {
 	ClassDB::bind_method(D_METHOD("get_ticks_on_borders"), &Slider::get_ticks_on_borders);
 	ClassDB::bind_method(D_METHOD("set_ticks_on_borders", "ticks_on_border"), &Slider::set_ticks_on_borders);
 
+	ClassDB::bind_method(D_METHOD("set_editable", "editable"), &Slider::set_editable);
+	ClassDB::bind_method(D_METHOD("is_editable"), &Slider::is_editable);
+
+	ADD_PROPERTY(PropertyInfo(Variant::BOOL, "editable"), "set_editable", "is_editable");
 	ADD_PROPERTY(PropertyInfo(Variant::INT, "tick_count", PROPERTY_HINT_RANGE, "0,4096,1"), "set_ticks", "get_ticks");
 	ADD_PROPERTY(PropertyInfo(Variant::BOOL, "ticks_on_borders"), "set_ticks_on_borders", "get_ticks_on_borders");
 	ADD_PROPERTY(PropertyInfo(Variant::INT, "focus_mode", PROPERTY_HINT_ENUM, "None,Click,All"), "set_focus_mode", "get_focus_mode");
@@ -251,5 +270,6 @@ Slider::Slider(Orientation p_orientation) {
 	grab.active = false;
 	ticks = 0;
 	custom_step = -1;
+	editable = true;
 	set_focus_mode(FOCUS_ALL);
 }

+ 4 - 0
scene/gui/slider.h

@@ -46,6 +46,7 @@ class Slider : public Range {
 	bool mouse_inside;
 	Orientation orientation;
 	float custom_step;
+	bool editable;
 
 protected:
 	void _gui_input(Ref<InputEvent> p_event);
@@ -65,6 +66,9 @@ public:
 	void set_ticks_on_borders(bool);
 	bool get_ticks_on_borders() const;
 
+	void set_editable(bool p_editable);
+	bool is_editable() const;
+
 	Slider(Orientation p_orientation = VERTICAL);
 };
 

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

@@ -510,20 +510,24 @@ void fill_default_theme(Ref<Theme> &t, const Ref<Font> &default_font, const Ref<
 
 	t->set_stylebox("slider", "HSlider", make_stylebox(hslider_bg_png, 4, 4, 4, 4));
 	t->set_stylebox("grabber_highlight", "HSlider", make_stylebox(hslider_grabber_hl_png, 6, 6, 6, 6));
+	t->set_stylebox("grabber_disabled", "HSlider", make_stylebox(hslider_grabber_disabled_png, 6, 6, 6, 6));
 	t->set_stylebox("focus", "HSlider", focus);
 
 	t->set_icon("grabber", "HSlider", make_icon(hslider_grabber_png));
 	t->set_icon("grabber_highlight", "HSlider", make_icon(hslider_grabber_hl_png));
+	t->set_icon("grabber_disabled", "HSlider", make_icon(hslider_grabber_disabled_png));
 	t->set_icon("tick", "HSlider", make_icon(hslider_tick_png));
 
 	// VSlider
 
 	t->set_stylebox("slider", "VSlider", make_stylebox(vslider_bg_png, 4, 4, 4, 4));
 	t->set_stylebox("grabber_highlight", "VSlider", make_stylebox(vslider_grabber_hl_png, 6, 6, 6, 6));
+	t->set_stylebox("grabber_disabled", "VSlider", make_stylebox(vslider_grabber_disabled_png, 6, 6, 6, 6));
 	t->set_stylebox("focus", "HSlider", focus);
 
 	t->set_icon("grabber", "VSlider", make_icon(vslider_grabber_png));
 	t->set_icon("grabber_highlight", "VSlider", make_icon(vslider_grabber_hl_png));
+	t->set_icon("grabber_disabled", "VSlider", make_icon(vslider_grabber_disabled_png));
 	t->set_icon("tick", "VSlider", make_icon(vslider_tick_png));
 
 	// SpinBox

二进制
scene/resources/default_theme/hslider_grabber_disabled.png


文件差异内容过多而无法显示
+ 0 - 0
scene/resources/default_theme/theme_data.h


二进制
scene/resources/default_theme/vslider_grabber_disabled.png


部分文件因为文件数量过多而无法显示