ColorControl: show the correct colors.

BColorControl was recently modified to preview the colors in the
sliders. However the computation was not correct and the colors shown
were not useful.

Fix the code so the correct colors are used. Since this can result in
the sliders having very bright colors, change the selection rings to use
black and white colors instead of just white, so they are always easily
visible.
This commit is contained in:
Adrien Destugues 2015-01-06 11:40:32 +01:00
parent 449e7cdde3
commit 2ba93e7d81
1 changed files with 23 additions and 35 deletions

View File

@ -462,11 +462,10 @@ BColorControl::_DrawColorArea(BView* target, BRect updateRect)
} }
} }
} else { } else {
rgb_color color = ValueAsColor();
rgb_color white = { 255, 255, 255, 255 }; rgb_color white = { 255, 255, 255, 255 };
rgb_color red = { 255, color.green, color.blue, 255 }; rgb_color red = { 255, 0, 0, 255 };
rgb_color green = { color.red, 255, color.blue, 255 }; rgb_color green = { 0, 255, 0, 255 };
rgb_color blue = { color.red, color.green, 255, 255 }; rgb_color blue = { 0, 0, 255, 255 };
rgb_color compColor = { 0, 0, 0, 255 }; rgb_color compColor = { 0, 0, 0, 255 };
if (!enabled) { if (!enabled) {
@ -500,36 +499,22 @@ BColorControl::_DrawSelectors(BView* target)
} else { } else {
rgb_color color = ValueAsColor(); rgb_color color = ValueAsColor();
target->SetHighColor(255, 255, 255); target->SetHighColor(255, 255, 255);
target->SetLowColor(0, 0, 0);
int components[4] = { color.alpha, color.red, color.green, color.blue };
for (int i = 1; i < 4; i++) {
BPoint center = _SelectorPosition(_RampFrame(i), components[i]);
BPoint center = _SelectorPosition(_RampFrame(1), color.red);
if (fFocusedRamp == 1) {
target->SetPenSize(kSelectorPenSize / 2);
target->StrokeEllipse(center, kSelectorSize, kSelectorSize);
target->StrokeEllipse(center, kSelectorSize / 2, kSelectorSize / 2);
} else {
target->SetPenSize(kSelectorPenSize); target->SetPenSize(kSelectorPenSize);
target->StrokeEllipse(center, kSelectorSize / 2, kSelectorSize / 2); target->StrokeEllipse(center, kSelectorSize / 2, kSelectorSize / 2);
}
center = _SelectorPosition(_RampFrame(2), color.green);
if (fFocusedRamp == 2) {
target->SetPenSize(kSelectorPenSize / 2); target->SetPenSize(kSelectorPenSize / 2);
target->StrokeEllipse(center, kSelectorSize, kSelectorSize); target->StrokeEllipse(center, kSelectorSize, kSelectorSize,
target->StrokeEllipse(center, kSelectorSize / 2, kSelectorSize / 2); B_SOLID_LOW);
} else { if (i == fFocusedRamp) {
target->SetPenSize(kSelectorPenSize); target->StrokeEllipse(center,
target->StrokeEllipse(center, kSelectorSize / 2, kSelectorSize / 2); kSelectorSize / 2, kSelectorSize / 2, B_SOLID_LOW);
} }
center = _SelectorPosition(_RampFrame(3), color.blue);
if (fFocusedRamp == 3) {
target->SetPenSize(kSelectorPenSize / 2);
target->StrokeEllipse(center, kSelectorSize, kSelectorSize);
target->StrokeEllipse(center, kSelectorSize / 2, kSelectorSize / 2);
} else {
target->SetPenSize(kSelectorPenSize);
target->StrokeEllipse(center, kSelectorSize / 2, kSelectorSize / 2);
} }
target->SetPenSize(1.0f); target->SetPenSize(1.0f);
@ -543,7 +528,7 @@ BColorControl::_DrawColorRamp(BRect rect, BView* target,
BRect updateRect) BRect updateRect)
{ {
float width = rect.Width() + 1; float width = rect.Width() + 1;
rgb_color color; rgb_color color = ValueAsColor();
color.alpha = 255; color.alpha = 255;
updateRect = updateRect & rect; updateRect = updateRect & rect;
@ -553,10 +538,13 @@ BColorControl::_DrawColorRamp(BRect rect, BView* target,
for (float i = (updateRect.left - rect.left); for (float i = (updateRect.left - rect.left);
i <= (updateRect.right - rect.left) + 1; i++) { i <= (updateRect.right - rect.left) + 1; i++) {
color.red = (uint8)(i * baseColor.red / width) + compColor.red; if (baseColor.red == 255)
color.green = (uint8)(i * baseColor.green / width) color.red = (uint8)(i * 255 / width) + compColor.red;
+ compColor.green; if (baseColor.green == 255)
color.blue = (uint8)(i * baseColor.blue / width) + compColor.blue; color.green = (uint8)(i * 255 / width) + compColor.green;
if (baseColor.blue == 255)
color.blue = (uint8)(i * 255 / width) + compColor.blue;
target->AddLine(BPoint(rect.left + i, rect.top), target->AddLine(BPoint(rect.left + i, rect.top),
BPoint(rect.left + i, rect.bottom - 1), color); BPoint(rect.left + i, rect.bottom - 1), color);
} }