#include ColorWin::ColorWin(char *title,int x, int y, int w, int h) : Fl_Window(x,y,w,h,title) { r = g = b = 0; // Color RGB actual wx= 50, wy= 50, ww= 482, wh= 242;// Dimensiones de la ventana principal margen= 4; // Separación entre boxes mw= ww, mh= 30; // Dimensión de la barra de menú // pNotifyFunc = NULL; // pNotyArg = NULL; begin(); boxColor= new Fl_Box (ww-margen-200, mh+margen, 200, wh-mh-margen*2); boxColor->box(FL_EMBOSSED_BOX); boxColor->color(fl_rgb_color (r, g, b)); creaValueSliders(); // bOk = new Fl_Button(50,170,90,40,"&Aceptar"); // bCancel = new Fl_Button(150,170,90,40,"&Cancelar"); // bOk->callback(aceptarCb); // bCancel->callback(cancelarCb); end(); } void ColorWin::updateBoxColor () { boxColor->color(fl_rgb_color(r, g, b)); boxColor->redraw(); } void ColorWin::creaValueSliders (void) { int bx= margen, by= mh+ margen, bw= 270, bh= 100; int vsx= bx+margen+14, vsy= by+margen, vsw= bw-margen*2-14, vsh= 28; int vertical_step= vsh+margen; Fl_Box *boxRGB = new Fl_Box(bx, by, bw, bh); boxRGB->box(FL_EMBOSSED_BOX); vs_red= new Fl_Value_Slider(vsx, vsy, vsw, vsh, "R"); vs_red->type (FL_HOR_SLIDER); vs_red->bounds (0,255); vs_red->step (1); vs_red->align (FL_ALIGN_LEFT); vs_red->labelcolor(FL_RED); vs_green = new Fl_Value_Slider(vsx, vsy+30, vsw, vsh, "G"); vs_green->type (FL_HOR_SLIDER); vs_green->maximum (255); vs_green->step (1); vs_green->align (FL_ALIGN_LEFT); vs_green->labelcolor(FL_GREEN); vs_blue = new Fl_Value_Slider(vsx, vsy+60, vsw, vsh, "B"); vs_blue->type (FL_HOR_SLIDER); vs_blue->maximum (255); vs_blue->step (1); vs_blue->align (FL_ALIGN_LEFT); vs_blue->labelcolor(FL_BLUE); vs_red->callback(valueSlidersCb, (void *)FL_RED); vs_green->callback(valueSlidersCb, (void *)FL_GREEN); vs_blue->callback(valueSlidersCb, (void *)FL_BLUE); } void ColorWin::valueSlidersCb (Fl_Widget *w, void *data) { Fl_Value_Slider *vs = (Fl_Value_Slider *)w; int color = (int) data; ColorWin * win = (ColorWin *)vs->parent(); uchar r = win->red(); uchar g = win->green(); uchar b = win->blue(); switch(color) { case FL_RED: r = (uchar)vs->value(); break; case FL_GREEN: g = (uchar)vs->value(); break; case FL_BLUE: b = (uchar)vs->value(); break; } win->setColor(r,g,b); win->updateBoxColor(); } //void ColorWin::show(PFUNC_NOTIFY pFunc, void * pArg) //{ // pNotifyFunc = pFunc; // pNotyArg = pArg; // // Fl_Window::show(); //} //void ColorWin::aceptarCb(Fl_Widget *w) //{ // ColorWin *colorWin = (ColorWin *)w->parent(); // if (colorWin->pNotifyFunc && colorWin->pNotyArg) // colorWin->pNotifyFunc(colorWin->pNotyArg); // colorWin->hide(); //} //void ColorWin::cancelarCb(Fl_Widget *w) //{ // ColorWin *colorWin = (ColorWin *)w->parent(); // colorWin->hide(); //}