void ColorField::SetModeAndValue(color_mode mode, float fixed_value) { float R(0); float G(0); float B(0); float H(0); float S(0); float V(0); fBgBitmap[0]->Lock(); switch (fColorMode) { case R_SELECTED: R = fFixedValue * 255; G = round(fMarkerPosition.x); B = round(255.0 - fMarkerPosition.y); break; case G_SELECTED: R = round(fMarkerPosition.x); G = fFixedValue * 255; B = round(255.0 - fMarkerPosition.y); break; case B_SELECTED: R = round(fMarkerPosition.x); G = round(255.0 - fMarkerPosition.y); B = fFixedValue * 255; break; case H_SELECTED: H = fFixedValue; S = fMarkerPosition.x / 255.0; V = 1.0 - fMarkerPosition.y / 255.0; break; case S_SELECTED: H = fMarkerPosition.x / 255.0 * 6.0; S = fFixedValue; V = 1.0 - fMarkerPosition.y / 255.0; break; case V_SELECTED: H = fMarkerPosition.x / 255.0 * 6.0; S = 1.0 - fMarkerPosition.y / 255.0; V = fFixedValue; break; } if (fColorMode & (H_SELECTED | S_SELECTED | V_SELECTED)) { HSV_to_RGB(H, S, V, R, G, B); R *= 255.0; G *= 255.0; B *= 255.0; } rgb_color color = { round(R), round(G), round(B), 255 }; fBgBitmap[0]->Unlock(); fFixedValue = fixed_value; fColorMode = mode; Update(3); SetMarkerToColor(color); }
// SetModeAndValues void ColorSlider::SetModeAndValues(selected_color_mode mode, float value1, float value2) { float R(0), G(0), B(0); float h(0), s(0), v(0); fBgBitmap->Lock(); switch (fMode) { case R_SELECTED: { R = 255 - Value(); G = round(fFixedValue1 * 255.0); B = round(fFixedValue2 * 255.0); }; break; case G_SELECTED: { R = round(fFixedValue1 * 255.0); G = 255 - Value(); B = round(fFixedValue2 * 255.0); }; break; case B_SELECTED: { R = round(fFixedValue1 * 255.0); G = round(fFixedValue2 * 255.0); B = 255 - Value(); }; break; case H_SELECTED: { h = (1.0 - (float)Value()/255.0)*6.0; s = fFixedValue1; v = fFixedValue2; }; break; case S_SELECTED: { h = fFixedValue1; s = 1.0 - (float)Value()/255.0; v = fFixedValue2; }; break; case V_SELECTED: { h = fFixedValue1; s = fFixedValue2; v = 1.0 - (float)Value()/255.0; }; break; } if (fMode & (H_SELECTED|S_SELECTED|V_SELECTED) ) { HSV_to_RGB(h, s, v, R, G, B); R*=255.0; G*=255.0; B*=255.0; } rgb_color color = { round(R), round(G), round(B), 255 }; fMode = mode; SetOtherValues(value1, value2); fBgBitmap->Unlock(); SetMarkerToColor( color ); Update(2); }
// SetModeAndValue void ColorField::SetModeAndValue(selected_color_mode mode, float fixed_value) { float R(0), G(0), B(0); float H(0), S(0), V(0); fBgBitmap[0]->Lock(); float width = Width(); float height = Height(); switch (fMode) { case R_SELECTED: { R = fFixedValue * 255; G = round(fMarkerPosition.x / width * 255.0); B = round(255.0 - fMarkerPosition.y / height * 255.0); }; break; case G_SELECTED: { R = round(fMarkerPosition.x / width * 255.0); G = fFixedValue * 255; B = round(255.0 - fMarkerPosition.y / height * 255.0); }; break; case B_SELECTED: { R = round(fMarkerPosition.x / width * 255.0); G = round(255.0 - fMarkerPosition.y / height * 255.0); B = fFixedValue * 255; }; break; case H_SELECTED: { H = fFixedValue; S = fMarkerPosition.x / width; V = 1.0 - fMarkerPosition.y / height; }; break; case S_SELECTED: { H = fMarkerPosition.x / width * 6.0; S = fFixedValue; V = 1.0 - fMarkerPosition.y / height; }; break; case V_SELECTED: { H = fMarkerPosition.x / width * 6.0; S = 1.0 - fMarkerPosition.y / height; V = fFixedValue; }; break; } if (fMode & (H_SELECTED | S_SELECTED | V_SELECTED)) { HSV_to_RGB(H, S, V, R, G, B); R *= 255.0; G *= 255.0; B *= 255.0; } rgb_color color = { round(R), round(G), round(B), 255 }; fBgBitmap[0]->Unlock(); if (fFixedValue != fixed_value || fMode != mode) { fFixedValue = fixed_value; fMode = mode; Update(3); } SetMarkerToColor(color); }