#include #include "IupColorCalibrationDlg.h" int IupColorCalibrationDlg::_changeValueCB(Ihandle *self, double val) { IupColorCalibrationDlg* dlg; dlg = (IupColorCalibrationDlg*)IupGetAttribute(self, "this"); if(!dlg) return IUP_DEFAULT; if(!strcmp(IupGetAttribute(self, "color"), "RED")) dlg->r_ = (float)val; if(!strcmp(IupGetAttribute(self, "color"), "GREEN")) dlg->g_ = (float)val; if(!strcmp(IupGetAttribute(self, "color"), "BLUE")) dlg->b_ = (float)val; dlg->repaintCanvas(); return IUP_DEFAULT; } int IupColorCalibrationDlg::_repaintCanvasCB(Ihandle *self, float x, float y) { IupColorCalibrationDlg* dlg; dlg = (IupColorCalibrationDlg*)IupGetAttribute(self, "this"); if(!dlg) return IUP_DEFAULT; dlg->repaintCanvas(); return IUP_DEFAULT; } int IupColorCalibrationDlg::_okCB(Ihandle* self) { IupColorCalibrationDlg* dlg; dlg = (IupColorCalibrationDlg*)IupGetAttribute(self, "this"); return IUP_CLOSE; } int IupColorCalibrationDlg::_cancelCB(Ihandle* self) { return IUP_CLOSE; } Ihandle* createValControl(IupColorCalibrationDlg* dlg, char* color) { Ihandle* val = IupVal(ICTL_VERTICAL); IupSetAttribute(val, "MIN", "0"); IupSetAttribute(val, "MAX", "1"); IupSetAttribute(val, "VALUE", "1"); IupSetAttribute(val, "SHOWTICKS", "7"); IupSetAttribute(val, "color", color); IupSetAttribute(val, "this", (char*)dlg); IupSetAttribute(val, IUP_MOUSEMOVE_CB, "colorCalibration_changeValCB"); return val; } IupColorCalibrationDlg::IupColorCalibrationDlg() { Ihandle *okbtn, *cancelbtn, *box, *redval, *greenval, *blueval, *canvas; r_ = 1.0f; g_ = 1.0f; b_ = 1.0f; canvas = IupCanvas("colorCalibration_repaintCanvasCB"); IupSetAttributes(canvas, "RASTERSIZE=400x160, XMIN=0, XMAX=99, POSX=0, DX=10"); IupSetAttribute(canvas, "this", (char*)this); IupSetFunction("colorCalibration_repaintCanvasCB", (Icallback)_repaintCanvasCB); redval = createValControl(this, "RED"); greenval = createValControl(this, "GREEN"); blueval = createValControl(this, "BLUE"); IupSetFunction("colorCalibration_changeValCB", (Icallback)_changeValueCB); okbtn = IupButton("Ok", "colorCalibration_okCB"); IupSetFunction("colorCalibration_okCB", (Icallback)_okCB); IupSetAttribute(okbtn, "this", (char*)this); cancelbtn = IupButton("Cancel", "colorCalibration_cancelCB"); IupSetFunction("colorCalibration_cancelCB", (Icallback)_cancelCB); IupSetAttribute(cancelbtn, "this", (char*)this); box = IupVbox( canvas, IupHbox( IupFill(), IupVbox( redval, IupLabel("Red"), 0), IupFill(), IupVbox( greenval, IupLabel("Green"), 0), IupFill(), IupVbox( blueval, IupLabel("Blue"), 0), IupFill(), 0), IupHbox( IupFill(), okbtn, // cancelbtn, 0), 0); dlg = IupDialog(box); IupStoreAttribute(dlg, "this", (char*)this); IupStoreAttribute(dlg,IUP_MAXBOX,IUP_NO); IupStoreAttribute(dlg,IUP_RESIZE,IUP_NO); IupSetAttribute(dlg, IUP_TITLE, "Calibracao de Cores"); IupStoreAttribute(dlg, IUP_CLOSE_CB, "colorCalibration_close"); IupSetFunction("colorCalibration_close", (Icallback)_cancelCB); IupMap(dlg); cdcanvas_ = cdCreateCanvas(CD_IUP, canvas); } IupColorCalibrationDlg::~IupColorCalibrationDlg() { IupDestroy(dlg); } void IupColorCalibrationDlg::getColorFactors(float& r, float& g, float& b) { r = r_; g = g_; b = b_; } void IupColorCalibrationDlg::show() { IupPopup(dlg, IUP_CENTER, IUP_CENTER); // IupShowXY(dlg, IUP_CENTER, IUP_CENTER); } void IupColorCalibrationDlg::repaintCanvas() { cdActivate(cdcanvas_); long int backColor = cdEncodeColor(0, 0, 0); cdBackground(backColor); cdClear(); long int redColor = cdEncodeColor((unsigned char)(255*r_), 0, 0); cdForeground(redColor); cdBox(40, 120, 40, 120); long int greenColor = cdEncodeColor(0, (unsigned char)(255*g_), 0); cdForeground(greenColor); cdBox(160, 240, 40, 120); long int blueColor = cdEncodeColor(0, 0, (unsigned char)(255*b_)); cdForeground(blueColor); cdBox(280, 360, 40, 120); }