hopefully fix up selection of color for region name text, under all conditions
This commit is contained in:
@@ -1455,12 +1455,6 @@ AudioRegionView::set_one_waveform_color (ArdourCanvas::WaveView* wave)
|
||||
ArdourCanvas::color_to_rgba (fill, r, g, b, a);
|
||||
fill = ArdourCanvas::rgba_to_color (r, g, b, 0.85); /* magic number, not user controllable */
|
||||
outline = ARDOUR_UI::config()->get_canvasvar_WaveForm();
|
||||
|
||||
if (!Config->get_show_name_highlight()) {
|
||||
/* recolor name text because it needs to contrast with
|
||||
the waveform background, not the name highlight.
|
||||
*/
|
||||
}
|
||||
}
|
||||
|
||||
wave->set_fill_color (fill);
|
||||
|
||||
@@ -740,12 +740,6 @@ RegionView::remove_ghost (GhostRegion* ghost)
|
||||
}
|
||||
}
|
||||
|
||||
uint32_t
|
||||
RegionView::get_fill_color ()
|
||||
{
|
||||
return fill_color;
|
||||
}
|
||||
|
||||
void
|
||||
RegionView::set_height (double h)
|
||||
{
|
||||
|
||||
@@ -90,8 +90,6 @@ class RegionView : public TimeAxisViewItem
|
||||
void remove_ghost_in (TimeAxisView&);
|
||||
void remove_ghost (GhostRegion*);
|
||||
|
||||
uint32_t get_fill_color ();
|
||||
|
||||
virtual void entered (bool) {}
|
||||
virtual void exited () {}
|
||||
|
||||
|
||||
@@ -772,61 +772,60 @@ TimeAxisViewItem::set_colors()
|
||||
name_highlight->set_fill_color (fill_color);
|
||||
}
|
||||
|
||||
if (name_text) {
|
||||
double r, g, b, a;
|
||||
|
||||
const double black_r = 0.0;
|
||||
const double black_g = 0.0;
|
||||
const double black_b = 0.0;
|
||||
|
||||
const double white_r = 1.0;
|
||||
const double white_g = 1.0;
|
||||
const double white_b = 1.0;
|
||||
|
||||
ArdourCanvas::color_to_rgba (fill_color, r, g, b, a);
|
||||
|
||||
/* Use W3C contrast guideline calculation */
|
||||
|
||||
double white_contrast = (max (r, white_r) - min (r, white_r)) +
|
||||
(max (g, white_g) - min (g, white_g)) +
|
||||
(max (b, white_b) - min (b, white_b));
|
||||
|
||||
double black_contrast = (max (r, black_r) - min (r, black_r)) +
|
||||
(max (g, black_g) - min (g, black_g)) +
|
||||
(max (b, black_b) - min (b, black_b));
|
||||
|
||||
if (white_contrast > black_contrast) {
|
||||
/* use white */
|
||||
name_text->set_color (ArdourCanvas::rgba_to_color (1.0, 1.0, 1.0, 1.0));
|
||||
} else {
|
||||
/* use black */
|
||||
name_text->set_color (ArdourCanvas::rgba_to_color (0.0, 0.0, 0.0, 1.0));
|
||||
}
|
||||
|
||||
#if 0
|
||||
double h, s, v;
|
||||
|
||||
ArdourCanvas::color_to_hsv (fill_color, h, s, v);
|
||||
|
||||
if (v == 0.0) {
|
||||
/* fill is black, set text to white */
|
||||
name_text->set_color (ArdourCanvas::rgba_to_color (1.0, 1.0, 1.0, 1.0));
|
||||
} else if (v == 1.0) {
|
||||
/* fill is white, set text to black */
|
||||
name_text->set_color (ArdourCanvas::rgba_to_color (0.0, 0.0, 0.0, 1.0));
|
||||
} else {
|
||||
|
||||
h = fabs (fmod ((h - 180), 360.0)); /* complementary color */
|
||||
s = 1.0; /* fully saturate */
|
||||
v = 0.9; /* increase lightness/brightness/value */
|
||||
|
||||
name_text->set_color (ArdourCanvas::hsv_to_color (h, s, v, 1.0));
|
||||
}
|
||||
#endif
|
||||
set_name_text_color ();
|
||||
set_trim_handle_colors();
|
||||
}
|
||||
|
||||
void
|
||||
TimeAxisViewItem::set_name_text_color ()
|
||||
{
|
||||
if (!name_text) {
|
||||
return;
|
||||
}
|
||||
|
||||
set_trim_handle_colors();
|
||||
double r, g, b, a;
|
||||
|
||||
const double black_r = 0.0;
|
||||
const double black_g = 0.0;
|
||||
const double black_b = 0.0;
|
||||
|
||||
const double white_r = 1.0;
|
||||
const double white_g = 1.0;
|
||||
const double white_b = 1.0;
|
||||
|
||||
uint32_t f;
|
||||
|
||||
if (Config->get_show_name_highlight()) {
|
||||
/* name text will always be on top of name highlight, which
|
||||
will always use our fill color.
|
||||
*/
|
||||
f = fill_color;
|
||||
} else {
|
||||
/* name text will be on top of the item, whose color
|
||||
may vary depending on various conditions.
|
||||
*/
|
||||
f = get_fill_color ();
|
||||
}
|
||||
|
||||
ArdourCanvas::color_to_rgba (f, r, g, b, a);
|
||||
|
||||
/* Use W3C contrast guideline calculation */
|
||||
|
||||
double white_contrast = (max (r, white_r) - min (r, white_r)) +
|
||||
(max (g, white_g) - min (g, white_g)) +
|
||||
(max (b, white_b) - min (b, white_b));
|
||||
|
||||
double black_contrast = (max (r, black_r) - min (r, black_r)) +
|
||||
(max (g, black_g) - min (g, black_g)) +
|
||||
(max (b, black_b) - min (b, black_b));
|
||||
|
||||
if (white_contrast > black_contrast) {
|
||||
/* use white */
|
||||
name_text->set_color (ArdourCanvas::rgba_to_color (1.0, 1.0, 1.0, 1.0));
|
||||
} else {
|
||||
/* use black */
|
||||
name_text->set_color (ArdourCanvas::rgba_to_color (0.0, 0.0, 0.0, 1.0));
|
||||
}
|
||||
}
|
||||
|
||||
uint32_t
|
||||
|
||||
@@ -73,6 +73,7 @@ class TimeAxisViewItem : public Selectable, public PBD::ScopedConnectionList
|
||||
virtual void set_height(double h);
|
||||
void set_y (double);
|
||||
void set_color (Gdk::Color const &);
|
||||
void set_name_text_color ();
|
||||
|
||||
uint32_t get_fill_color () const;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user