13
0

when use stripable palette colors, use them sequentially

Also break this code out into a separate method
This commit is contained in:
Paul Davis 2022-12-08 10:52:57 -07:00
parent cd4b6e85a8
commit 74f95ff0dd
3 changed files with 28 additions and 19 deletions

View File

@ -65,7 +65,7 @@ AxisView::~AxisView()
Gdk::Color
AxisView::unique_random_color()
{
return ::unique_random_color (used_colors, true);
return ARDOUR_UI_UTILS::unique_palette_color (used_colors);
}
string

View File

@ -680,28 +680,36 @@ ARDOUR_UI_UTILS::escape_underscores (string const & s)
}
Gdk::Color
ARDOUR_UI_UTILS::unique_random_color (list<Gdk::Color>& used_colors, bool from_palette)
ARDOUR_UI_UTILS::unique_palette_color (list<Gdk::Color>& used_colors)
{
Gdk::Color newcolor;
string cp = UIConfiguration::instance().get_stripable_color_palette ();
Gdk::ArrayHandle_Color gc = ColorSelection::palette_from_string (cp);
std::vector<Gdk::Color> c (gc);
static std::vector<Gdk::Color>::size_type index = 0;
if (from_palette) {
string cp = UIConfiguration::instance().get_stripable_color_palette ();
Gdk::ArrayHandle_Color gc = ColorSelection::palette_from_string (cp);
std::vector<Gdk::Color> c (gc);
int n = random () % c.size();
Gtkmm2ext::HSV hsv (Gtkmm2ext::gdk_color_to_rgba (c[n]));
do {
newcolor.set_hsv (hsv.h, hsv.s, hsv.v);
hsv = random() % 1000 > 500 ? hsv.darker ((random() % 500) / 1000.0) : hsv.lighter ((random() % 500 / 1000.0));
} while (find (used_colors.begin(), used_colors.end(), newcolor) != used_colors.end());
used_colors.push_back (newcolor);
return newcolor;
if (index >= c.size()) {
index = 0;
}
Gtkmm2ext::HSV hsv (Gtkmm2ext::gdk_color_to_rgba (c[index]));
index++;
do {
newcolor.set_hsv (hsv.h, hsv.s, hsv.v);
hsv = random() % 1000 > 500 ? hsv.darker ((random() % 500) / 1000.0) : hsv.lighter ((random() % 500 / 1000.0));
} while (find (used_colors.begin(), used_colors.end(), newcolor) != used_colors.end());
used_colors.push_back (newcolor);
return newcolor;
}
Gdk::Color
ARDOUR_UI_UTILS::unique_random_color (list<Gdk::Color>& used_colors)
{
Gdk::Color newcolor;
while (1) {
double h, s, v;

View File

@ -98,7 +98,8 @@ void resize_window_to_proportion_of_monitor (Gtk::Window*, int, int);
std::string escape_underscores (std::string const &);
Gdk::Color unique_random_color (std::list<Gdk::Color> &, bool from_palette = false);
Gdk::Color unique_palette_color (std::list<Gdk::Color> &);
Gdk::Color unique_random_color (std::list<Gdk::Color> &);
std::string rate_as_string (float r);
std::string samples_as_time_string (ARDOUR::samplecnt_t s, float r, bool show_samples = false);