hopefully fix up selection of color for region name text, under all conditions
[ardour.git] / gtk2_ardour / time_axis_view_item.cc
index b697db733f8254bd4f09687e1d8fab53a2338805..051f983ea7bedc9945884090d9c554e1c877ad66 100644 (file)
@@ -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 */
+       set_name_text_color ();
+       set_trim_handle_colors();
+}
 
-               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));
+void
+TimeAxisViewItem::set_name_text_color ()
+{
+       if (!name_text) {
+               return;
+       }
+       
+       double r, g, b, a;
 
-               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));
+       const double black_r = 0.0;
+       const double black_g = 0.0;
+       const double black_b = 0.0;
 
-               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));
-               }
+       const double white_r = 1.0;
+       const double white_g = 1.0;
+       const double white_b = 1.0;
 
-#if 0
-               double h, s, v;
+       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_hsv (fill_color, h, s, v);
+       ArdourCanvas::color_to_rgba (f, r, g, b, a);
 
-               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 {
+       /* Use W3C contrast guideline calculation */
 
-                       h = fabs (fmod ((h - 180), 360.0)); /* complementary color */
-                       s = 1.0; /* fully saturate */
-                       v = 0.9; /* increase lightness/brightness/value */
+       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));
 
-                       name_text->set_color (ArdourCanvas::hsv_to_color (h, s, v, 1.0));
-               }
-#endif
+       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));
        }
-       
-       set_trim_handle_colors();
 }
 
 uint32_t