Browse Source

Color picker fixes:
- fixed alpha channel slider range in raw mode to go from 0 to 1 fixes #4396
- fixed HS bars going outside the control area
- fixed color text field changing to hex mode even if script mode was selected

Daniel J. Ramirez 9 years ago
parent
commit
7b846d62ac
2 changed files with 27 additions and 19 deletions
  1. 26 19
      scene/gui/color_picker.cpp
  2. 1 0
      scene/gui/color_picker.h

+ 26 - 19
scene/gui/color_picker.cpp

@@ -140,14 +140,13 @@ void ColorPicker::_value_changed(double) {
 	if (updating)
 		return;
 
-	for(int i=0;i<3;i++) {
+	for(int i=0;i<4;i++) {
 		color.components[i] = scroll[i]->get_val()/(raw_mode_enabled?1.0:255.0);
 	}
-	color.components[3] = scroll[3]->get_val()/255.0;
 
 	set_color(color);
 
-	c_text->set_text(color.to_html(edit_alpha && color.a<1));
+	_update_text_value();
 
 	emit_signal("color_changed",color);
 
@@ -174,22 +173,16 @@ void ColorPicker::_update_color() {
 	for(int i=0;i<4;i++) {
 		scroll[i]->set_max(255);
 		scroll[i]->set_step(0.01);
-		if (raw_mode_enabled && i != 3)
+		if (raw_mode_enabled) {
+			if (i == 3)
+				scroll[i]->set_max(1);
 			scroll[i]->set_val(color.components[i]);
-		else
-			scroll[i]->set_val(color.components[i]*255);
+		} else {
+			scroll[i]->set_val(color.components[i] * 255);
+		}
 	}
 
-	if (text_is_constructor) {
-		String t = "Color("+String::num(color.r)+","+String::num(color.g)+","+String::num(color.b);
-		if (edit_alpha && color.a<1)
-			t+=(","+String::num(color.a)+")") ;
-		else
-			t+=")";
-		c_text->set_text(t);
-	} else {
-		c_text->set_text(color.to_html(edit_alpha && color.a<1));
-	}
+	_update_text_value();
 
 	sample->update();
 	updating=false;
@@ -262,6 +255,20 @@ bool ColorPicker::is_raw_mode() const {
 	return raw_mode_enabled;
 }
 
+
+void ColorPicker::_update_text_value() {
+	if (text_is_constructor) {
+		String t = "Color("+String::num(color.r)+","+String::num(color.g)+","+String::num(color.b);
+		if (edit_alpha && color.a<1)
+			t+=(","+String::num(color.a)+")") ;
+		else
+			t+=")";
+		c_text->set_text(t);
+	} else {
+		c_text->set_text(color.to_html(edit_alpha && color.a<1));
+	}
+}
+
 void ColorPicker::_sample_draw() {
 	sample->draw_rect(Rect2(Point2(),Size2(256,20)),color);
 }
@@ -271,12 +278,12 @@ void ColorPicker::_hsv_draw(int p_wich,Control* c)
 	if (!c)
 		return;
 	if (p_wich==0) {
-		int x=c->get_size().x*s;
-		int y=c->get_size().y-c->get_size().y*v;
+		int x = CLAMP(c->get_size().x * s, 0, c->get_size().x);
+		int y = CLAMP(c->get_size().y-c->get_size().y * v, 0, c->get_size().y);
 		Color col = color;
 		col.a=1;
 		c->draw_line(Point2(x,0),Point2(x,c->get_size().y),col.inverted());
-		c->draw_line(Point2(0,y),Point2(c->get_size().x,y),col.inverted());
+		c->draw_line(Point2(0, y),Point2(c->get_size().x, y),col.inverted());
 		c->draw_line(Point2(x,y),Point2(x,y),Color(1,1,1),2);
 	} else if (p_wich==1) {
 		int y=c->get_size().y-c->get_size().y*h;

+ 1 - 0
scene/gui/color_picker.h

@@ -80,6 +80,7 @@ private:
 	void _update_controls();
 	void _update_color();
 	void _update_presets();
+	void _update_text_value();
 	void _text_type_toggled();
 	void _sample_draw();
 	void _hsv_draw(int p_wich,Control *c);