Add ArdourButton::set_fixed_colors() (equivalent to ::set_bg_colors() in Valeriy's original changes)
This commit is contained in:
parent
b360274e34
commit
4a915ee541
@ -493,12 +493,16 @@ ArdourButton::on_size_request (Gtk::Requisition* req)
|
|||||||
req->width += _corner_radius;
|
req->width += _corner_radius;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This sets the colors used for rendering based on the name of the button, and
|
||||||
|
* thus uses information from the GUI config data.
|
||||||
|
*/
|
||||||
void
|
void
|
||||||
ArdourButton::set_colors ()
|
ArdourButton::set_colors ()
|
||||||
{
|
{
|
||||||
std::string name = get_name();
|
std::string name = get_name();
|
||||||
|
|
||||||
border_color = ARDOUR_UI::config()->color_by_name ( "button border" );
|
border_color = ARDOUR_UI::config()->color_by_name ("button border");
|
||||||
|
|
||||||
fill_start_active_color = ARDOUR_UI::config()->color_by_name (string_compose ("%1: fill start active", name));
|
fill_start_active_color = ARDOUR_UI::config()->color_by_name (string_compose ("%1: fill start active", name));
|
||||||
fill_end_active_color = ARDOUR_UI::config()->color_by_name (string_compose ("%1: fill end active", name));
|
fill_end_active_color = ARDOUR_UI::config()->color_by_name (string_compose ("%1: fill end active", name));
|
||||||
@ -514,6 +518,41 @@ ArdourButton::set_colors ()
|
|||||||
|
|
||||||
build_patterns ();
|
build_patterns ();
|
||||||
}
|
}
|
||||||
|
/**
|
||||||
|
* This sets the colors used for rendering based on two fixed values, rather
|
||||||
|
* than basing them on the button name, and thus information in the GUI config
|
||||||
|
* data.
|
||||||
|
*/
|
||||||
|
void ArdourButton::set_fixed_colors (const uint32_t color_active, const uint32_t color_inactive)
|
||||||
|
{
|
||||||
|
set_name (""); /* this will trigger a "style-changed" message and then
|
||||||
|
set_colors()
|
||||||
|
*/
|
||||||
|
|
||||||
|
fill_start_active_color = fill_end_active_color = color_active;
|
||||||
|
|
||||||
|
unsigned char r, g, b, a;
|
||||||
|
UINT_TO_RGBA(color_active, &r, &g, &b, &a);
|
||||||
|
|
||||||
|
double white_contrast = (max (double(r), 255.) - min (double(r), 255.)) +
|
||||||
|
(max (double(g), 255.) - min (double(g), 255.)) +
|
||||||
|
(max (double(b), 255.) - min (double(b), 255.));
|
||||||
|
|
||||||
|
double black_contrast = (max (double(r), 0.) - min (double(r), 0.)) +
|
||||||
|
(max (double(g), 0.) - min (double(g), 0.)) +
|
||||||
|
(max (double(b), 0.) - min (double(b), 0.));
|
||||||
|
|
||||||
|
text_active_color =
|
||||||
|
text_inactive_color = (white_contrast > black_contrast) ?
|
||||||
|
RGBA_TO_UINT(255, 255, 255, 255) : /* use white */
|
||||||
|
RGBA_TO_UINT( 0, 0, 0, 255); /* use black */
|
||||||
|
|
||||||
|
fill_start_inactive_color = fill_end_inactive_color = color_inactive;
|
||||||
|
|
||||||
|
/* XXX what about led colors ? */
|
||||||
|
|
||||||
|
build_patterns ();
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
ArdourButton::build_patterns ()
|
ArdourButton::build_patterns ()
|
||||||
|
@ -96,6 +96,8 @@ class ArdourButton : public CairoWidget , public Gtkmm2ext::Activatable
|
|||||||
|
|
||||||
void set_image (const Glib::RefPtr<Gdk::Pixbuf>&);
|
void set_image (const Glib::RefPtr<Gdk::Pixbuf>&);
|
||||||
|
|
||||||
|
void set_fixed_colors (const uint32_t active_color, const uint32_t inactive_color);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void render (cairo_t *);
|
void render (cairo_t *);
|
||||||
void on_size_request (Gtk::Requisition* req);
|
void on_size_request (Gtk::Requisition* req);
|
||||||
|
Loading…
Reference in New Issue
Block a user