323
299
m_green->Reset();
326
if (m_color_model == CM_RGB)
329
r = m_red->GetValue();
330
g = m_green->GetValue();
331
b = m_blue->GetValue();
333
m_red->AddColorMark (0, Color (0.0f, g, b), false);
334
m_red->AddColorMark (1, Color (1.0f, g, b), false);
335
m_green->AddColorMark (0, Color (r, 0.0f, b), false);
336
m_green->AddColorMark (1, Color (r, 1.0f, b), false);
337
m_blue->AddColorMark (0, Color (r, g, 0.0f), false);
338
m_blue->AddColorMark (1, Color (r, g, 1.0f), false);
345
if (m_color_model == CM_HSV)
349
h = m_red->GetValue();
350
s = m_green->GetValue();
351
v = m_blue->GetValue();
353
HSVtoRGB (r, g, b, h, 1.0f, 1.0f);
355
m_red->AddColorMark (0.0f, Color (1.0f, 0.0, 0.0), false);
356
m_red->AddColorMark (1.0f / 6.0f, Color (1.0f, 1.0, 0.0), false);
357
m_red->AddColorMark (2.0f / 6.0f, Color (0.0f, 1.0, 0.0), false);
358
m_red->AddColorMark (3.0f / 6.0f, Color (0.0f, 1.0, 1.0), false);
359
m_red->AddColorMark (4.0f / 6.0f, Color (0.0f, 0.0, 1.0), false);
360
m_red->AddColorMark (5.0f / 6.0f, Color (1.0f, 0.0, 1.0), false);
361
m_red->AddColorMark (1.0f, Color (1.0f, 0.0, 0.0), false);
366
HSVtoRGB (r, g, b, h, 1.0f, 1.0f);
367
m_green->AddColorMark (0, Color (v, v, v), false);
368
m_green->AddColorMark (1.0f, Color (r * v, g * v, b * v), false);
370
HSVtoRGB (r, g, b, h, s, 1.0f);
371
m_blue->AddColorMark (0, Color (0, 0, 0), false);
372
m_blue->AddColorMark (1.0f, Color (r, g, b), false);
374
HSVtoRGB (m_Red, m_Green, m_Blue, h, s, v);
377
if (m_color_model == CM_HLS)
381
h = m_red->GetValue();
382
l = m_green->GetValue();
383
s = m_blue->GetValue();
385
m_red->AddColorMark (0.0f, Color (1.0f, 0.0, 0.0), false);
386
m_red->AddColorMark (1.0f / 6.0f, Color (1.0f, 1.0, 0.0), false);
387
m_red->AddColorMark (2.0f / 6.0f, Color (0.0f, 1.0, 0.0), false);
388
m_red->AddColorMark (3.0f / 6.0f, Color (0.0f, 1.0, 1.0), false);
389
m_red->AddColorMark (4.0f / 6.0f, Color (0.0f, 0.0, 1.0), false);
390
m_red->AddColorMark (5.0f / 6.0f, Color (1.0f, 0.0, 1.0), false);
391
m_red->AddColorMark (1.0f, Color (1.0f, 0.0, 0.0), false);
302
if (color_model_ == color::RGB)
304
color::RedGreenBlue rgb(m_red->GetValue(),
308
m_red->AddColorMark (0, Color (0.0f, rgb.green, rgb.blue), false);
309
m_red->AddColorMark (1, Color (1.0f, rgb.green, rgb.blue), false);
310
m_green->AddColorMark (0, Color (rgb.red, 0.0f, rgb.blue), false);
311
m_green->AddColorMark (1, Color (rgb.red, 1.0f, rgb.blue), false);
312
m_blue->AddColorMark (0, Color (rgb.red, rgb.green, 0.0f), false);
313
m_blue->AddColorMark (1, Color (rgb.red, rgb.green, 1.0f), false);
318
if (color_model_ == color::HSV)
320
color::HueSaturationValue hsv(m_red->GetValue(),
324
m_red->AddColorMark (0.0f, Color (1.0f, 0.0, 0.0), false);
325
m_red->AddColorMark (1.0f / 6.0f, Color (1.0f, 1.0, 0.0), false);
326
m_red->AddColorMark (2.0f / 6.0f, Color (0.0f, 1.0, 0.0), false);
327
m_red->AddColorMark (3.0f / 6.0f, Color (0.0f, 1.0, 1.0), false);
328
m_red->AddColorMark (4.0f / 6.0f, Color (0.0f, 0.0, 1.0), false);
329
m_red->AddColorMark (5.0f / 6.0f, Color (1.0f, 0.0, 1.0), false);
330
m_red->AddColorMark (1.0f, Color (1.0f, 0.0, 0.0), false);
335
// Save these hsv values as rgb values.
336
rgb_values_ = color::RedGreenBlue(hsv);
338
// The green holds the saturation.
339
Color min_green(hsv.value, hsv.value, hsv.value);
341
// The blue slider handles full value.
343
color::RedGreenBlue blue_slider(hsv);
344
m_blue->AddColorMark (0, color::Black, false);
345
m_blue->AddColorMark (1.0f, Color(blue_slider), false);
347
// Max green slider has full saturation and value
348
hsv.saturation = 1.0f;
349
color::RedGreenBlue green_slider(hsv);
350
Color max_green = Color(green_slider) * hsv.value;
351
m_green->AddColorMark (0, min_green, false);
352
m_green->AddColorMark (1.0f, max_green, false);
355
if (color_model_ == color::HLS)
357
color::HueLightnessSaturation hls(m_red->GetValue(),
360
m_red->AddColorMark (0.0f, Color (1.0f, 0.0, 0.0), false);
361
m_red->AddColorMark (1.0f / 6.0f, Color (1.0f, 1.0, 0.0), false);
362
m_red->AddColorMark (2.0f / 6.0f, Color (0.0f, 1.0, 0.0), false);
363
m_red->AddColorMark (3.0f / 6.0f, Color (0.0f, 1.0, 1.0), false);
364
m_red->AddColorMark (4.0f / 6.0f, Color (0.0f, 0.0, 1.0), false);
365
m_red->AddColorMark (5.0f / 6.0f, Color (1.0f, 0.0, 1.0), false);
366
m_red->AddColorMark (1.0f, Color (1.0f, 0.0, 0.0), false);
368
// Save these hsv values as rgb values.
372
rgb_values_ = color::RedGreenBlue(hls);
374
float s = (1.0f - hls.saturation) * 0.5;
398
376
// Need to use HSVtoRGB to compute the primary color
399
HSVtoRGB (r, g, b, h, 1.0f, 1.0f);
400
m_green->AddColorMark (0.0f, Color (0, 0, 0), false);
401
m_green->AddColorMark (0.5f, Color (r* (1 - s) + 0.5f * s, g* (1 - s) + 0.5f * s, b* (1 - s) + 0.5f * s), false);
402
m_green->AddColorMark (1.0f, Color (1.0f, 1.0f, 1.0f), false);
377
color::HueSaturationValue primary_hsv(hls.hue, 1.0f, 1.0f);
378
color::RedGreenBlue primary_rgb(primary_hsv);
379
Color primary = Color(primary_rgb) * hls.saturation + s;
380
m_green->AddColorMark (0.0f, color::Black, false);
381
m_green->AddColorMark (0.5f, primary, false);
382
m_green->AddColorMark (1.0f, color::White, false);
384
// Not sure on the name of this color...
385
Color secondary = Color(primary_rgb);
387
if (hls.lightness > 0.5)
408
float factor = (l - 0.5f) / 0.5f;
409
cr = (1 - factor) * r * (1 - s) + 0.5 * s + factor * 1.0f;
410
cg = (1 - factor) * g * (1 - s) + 0.5 * s + factor * 1.0f;
411
cb = (1 - factor) * b * (1 - s) + 0.5 * s + factor * 1.0f;
389
float factor = (hls.lightness - 0.5f) / 0.5f;
390
secondary = secondary * ((1 - factor) * hls.saturation) + (s + factor);
415
float factor = l / 0.5f;
416
cr = (factor) * r * (1 - s) + 0.5 * s;
417
cg = (factor) * g * (1 - s) + 0.5 * s;
418
cb = (factor) * b * (1 - s) + 0.5 * s;
394
float factor = hls.lightness / 0.5f * hls.saturation;
395
secondary = secondary * factor + s;
421
m_blue->AddColorMark (0, Color (l, l, l), false);
422
m_blue->AddColorMark (1.0f, Color (cr, cg, cb), false);
424
HLStoRGB (m_Red, m_Green, m_Blue, h, l, 1.0f - s);
398
m_blue->AddColorMark (0, Color (hls.lightness, hls.lightness, hls.lightness), false);
399
m_blue->AddColorMark (1.0f, secondary, false);