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
This commit is contained in:
Daniel J. Ramirez 2016-07-02 20:08:25 -05:00
parent 4c4ab140b4
commit 7b846d62ac
2 changed files with 27 additions and 19 deletions

View File

@ -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;

View File

@ -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);