Exemple #1
0
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);
}
Exemple #3
0
// 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);
}