#include #include using std::min; using std::max; RgbInt::RgbInt(int x, int y) : Fl_Group(x,y,82,100) { int bw = w(); int bh = h(); int margen = 4; frame = new Fl_Box(x,y,w(),h()); frame->box(FL_EMBOSSED_BOX); int vix = x+2*margen + 36; //15; int viy = y+2*margen; //int viw = 200;// w()-3*margen-15; int viw = 36;// w()-3*margen-15; int vih = 28; int sepVert = 30; viRed = new Fl_Value_Input(vix, viy, viw, vih, "R ent"); viRed->maximum (255); viRed->step (1); viRed->labelcolor(FL_RED); viRed->callback(cambioCB,(long)FL_RED); viGreen = new Fl_Value_Input(vix, viy+sepVert, viw, vih, "G ent"); viGreen->maximum(255); viGreen->step(1); viGreen->labelcolor(FL_GREEN); viGreen->callback(cambioCB,(long)FL_GREEN); viBlue = new Fl_Value_Input(vix, viy+2*sepVert, viw, vih, "B ent"); viBlue->maximum(255); viBlue->step(1); viBlue->labelcolor(FL_BLUE); viBlue->callback(cambioCB,(long)FL_BLUE); end(); // importante!! } void RgbInt::getRGB(uchar &r, uchar &g, uchar &b) { r = (uchar) viRed->value(); g = (uchar) viGreen->value(); b = (uchar) viBlue->value(); } void RgbInt::_setRGB(int r, int g, int b) { viRed->value(r); viGreen->value(g); viBlue->value(b); } void RgbInt::setRGB(int r, int g, int b) { } void RgbInt::cambioCB(Fl_Widget *w, long color) { static uchar r, g, b; const static double MIN = 0.0; const static double MAX = 255.0; RgbInt *rgbInt = (RgbInt *)w->parent(); rgbInt->getRGB(r,g,b); Fl_Value_Input *vi = (Fl_Value_Input *)w; double val = max(MIN, min(vi->value(), MAX)); switch (color) { case FL_RED: r = (uchar) val; break; case FL_GREEN: g = (uchar) val; break; case FL_BLUE: b = (uchar) val; break; } rgbInt->setRGB(r,g,b); }