add more controllable modifiers for region transparency
[ardour.git] / gtk2_ardour / ardour_button.h
index 7807c1cb72773bed9a1967ee9809fb0e042a2b8d..7d837e70cd2b0a0f3e46f55451d7232c215fded0 100644 (file)
@@ -31,7 +31,7 @@
 
 class ArdourButton : public CairoWidget , public Gtkmm2ext::Activatable
 {
-  public:
+       public:
        enum Element {
                Edge = 0x1,
                Body = 0x2,
@@ -55,7 +55,7 @@ class ArdourButton : public CairoWidget , public Gtkmm2ext::Activatable
 
        enum Tweaks {
                Square = 0x1,
-               unused2 = 0x2,
+               TrackHeader = 0x2,
                unused3 = 0x4,
        };
 
@@ -70,13 +70,11 @@ class ArdourButton : public CairoWidget , public Gtkmm2ext::Activatable
        Element elements() const { return _elements; }
        void set_elements (Element);
        void add_elements (Element);
-       
+
        void set_corner_radius (float);
-       void set_diameter (float);
 
        void set_text (const std::string&);
        const std::string& get_text () {return _text;}
-       void set_markup (const std::string&);
        void set_angle (const double);
        void set_alignment (const float, const float);
        void get_alignment (float& xa, float& ya) {xa = _xalign; ya = _yalign;};
@@ -84,13 +82,15 @@ class ArdourButton : public CairoWidget , public Gtkmm2ext::Activatable
        void set_led_left (bool yn);
        void set_distinct_led_click (bool yn);
 
-       Glib::RefPtr<Pango::Layout> layout() const { return _layout; }
-
+       void set_layout_ellisize_width (int w);
+       void set_layout_font (const Pango::FontDescription&);
+       void set_text_ellipsize (Pango::EllipsizeMode);
+       
        sigc::signal<void> signal_led_clicked;
        sigc::signal<void> signal_clicked;
 
        boost::shared_ptr<PBD::Controllable> get_controllable() { return binding_proxy.get_controllable(); }
-       void set_controllable (boost::shared_ptr<PBD::Controllable> c);
+       void set_controllable (boost::shared_ptr<PBD::Controllable> c);
        void watch ();
 
        void set_related_action (Glib::RefPtr<Gtk::Action>);
@@ -106,13 +106,15 @@ class ArdourButton : public CairoWidget , public Gtkmm2ext::Activatable
 
        unsigned int char_pixel_width() { if (_char_pixel_width < 1) recalc_char_pixel_geometry() ; return _char_pixel_width; }
        unsigned int char_pixel_height() { if (_char_pixel_height < 1) recalc_char_pixel_geometry() ; return _char_pixel_height; }
+       float char_avg_pixel_width() { if (_char_pixel_width < 1) recalc_char_pixel_geometry() ; return _char_avg_pixel_width; }
 
-  protected:
+       protected:
        void render (cairo_t *, cairo_rectangle_t *);
        void on_size_request (Gtk::Requisition* req);
        void on_size_allocate (Gtk::Allocation&);
        void on_style_changed (const Glib::RefPtr<Gtk::Style>&);
        void on_name_changed ();
+       void on_realize ();
        bool on_enter_notify_event (GdkEventCrossing*);
        bool on_leave_notify_event (GdkEventCrossing*);
        bool on_focus_in_event (GdkEventFocus*);
@@ -122,7 +124,7 @@ class ArdourButton : public CairoWidget , public Gtkmm2ext::Activatable
        void controllable_changed ();
        PBD::ScopedConnection watch_connection;
 
-  protected:
+       protected:
        Glib::RefPtr<Pango::Layout> _layout;
        Glib::RefPtr<Gdk::Pixbuf>   _pixbuf;
        std::string                 _text;
@@ -133,6 +135,7 @@ class ArdourButton : public CairoWidget , public Gtkmm2ext::Activatable
        void recalc_char_pixel_geometry ();
        unsigned int _char_pixel_width;
        unsigned int _char_pixel_height;
+       float _char_avg_pixel_width;
 
        int   _text_width;
        int   _text_height;
@@ -151,12 +154,10 @@ class ArdourButton : public CairoWidget , public Gtkmm2ext::Activatable
 
        uint32_t led_active_color;
        uint32_t led_inactive_color;
-    
+
        cairo_pattern_t* convex_pattern;
        cairo_pattern_t* concave_pattern;
-
        cairo_pattern_t* led_inset_pattern;
-    
        cairo_rectangle_t* _led_rect;
 
        bool _act_on_release;
@@ -165,16 +166,19 @@ class ArdourButton : public CairoWidget , public Gtkmm2ext::Activatable
        bool _hovering;
        bool _focused;
        bool _fixed_colors_set;
-    
        bool _fallthrough_to_parent;
-    
+       int _layout_ellipsize_width;
+       Pango::EllipsizeMode _ellipsis;
+       bool _update_colors;
+       int _pattern_height;
+
        void setup_led_rect ();
        void set_colors ();
        void color_handler ();
-        void build_patterns ();
+       void build_patterns ();
+       void ensure_layout ();
 
        void action_toggled ();
-
        void action_sensitivity_changed ();
        void action_visibility_changed ();
        void action_tooltip_changed ();