void CXTColorRef::toHSB(double& h, double& s, double& b) const { int red = getRValue(); int green = getGValue(); int blue = getBValue(); int cmax = __max(red, __max(green, blue)); int cmin = __min(red, __min(green, blue)); b = ((double) cmax) / 255.0; if (cmax != 0) s = ((double) (cmax - cmin)) / ((double) cmax); else s = 0; if (s == 0) h = 0; else { double redc = ((double) (cmax - red)) / ((double) (cmax - cmin)); double greenc = ((double) (cmax - green)) / ((double) (cmax - cmin)); double bluec = ((double) (cmax - blue)) / ((double) (cmax - cmin)); if (red == cmax) h = bluec - greenc; else if (green == cmax) h = 2.0 + redc - bluec; else h = 4.0 + greenc - redc; h /= 6.0; if (h < 0) h = h + 1.0; } }
CXTColorRef& CXTColorRef::blend(const CXTColorRef& clr, int opacity) { *this = RGB(BlendColor(clr.getRValue(), getRValue(), opacity), BlendColor(clr.getGValue(), getGValue(), opacity), BlendColor(clr.getBValue(), getBValue(), opacity)); return *this; }
CXTColorRef& CXTColorRef::subtract(const CXTColorRef& clr) { *this = RGB(addColorValue(-clr.getRValue(), getRValue()), addColorValue(-clr.getGValue(), getGValue()), addColorValue(-clr.getBValue(), getBValue())); return *this; }
CXTColorRef& CXTColorRef::operator/=(COLORREF cr) { m_ColorRef = SafeRGB( getRValue() / GetRValue(cr), getGValue() / GetGValue(cr), getBValue() / GetBValue(cr)); return *this; }
//processes a statement void processString(char *str){ Var *tmp = variables, *var1, *var2; int varLen, opLen, isNumeric, var3; char *lValue, *op, *rValue; lValue = getVarName(str); varLen = strlen(lValue); op = getOp(str, varLen); opLen = strlen(op); rValue = getRValue(str, varLen, opLen); var1 = getVar(lValue); isNumeric = isnumeric(rValue); if(1 == isNumeric){ var3 = atoi(rValue); } else{ var2 = getVar(rValue); var3 = var2->value; } switch(op[0]){ case '+': var1->value+=var3; break; case '-': var1->value-=var3; break; case '*': var1->value*=var3; break; case '/': var1->value/=var3; break; } }