Ever so slightly less memory and better field alignment per CairoWidget.
Fix indentation. git-svn-id: svn://localhost/ardour2/branches/3.0@10316 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
parent
5005ba060e
commit
743f0ea0ec
|
@ -42,19 +42,18 @@ ArdourButton::Element ArdourButton::default_elements = ArdourButton::Element (Ar
|
|||
ArdourButton::Element ArdourButton::led_default_elements = ArdourButton::Element (ArdourButton::default_elements|ArdourButton::Indicator);
|
||||
|
||||
ArdourButton::ArdourButton (Element e)
|
||||
: _elements (e)
|
||||
: _elements (e)
|
||||
, _text_width (0)
|
||||
, _text_height (0)
|
||||
, _led_left (false)
|
||||
, _diameter (0.0)
|
||||
, _fixed_diameter (false)
|
||||
, _distinct_led_click (true)
|
||||
, _diameter (0.0)
|
||||
, _corner_radius (9)
|
||||
, edge_pattern (0)
|
||||
, fill_pattern (0)
|
||||
, led_inset_pattern (0)
|
||||
, reflection_pattern (0)
|
||||
|
||||
, _led_left (false)
|
||||
, _fixed_diameter (false)
|
||||
, _distinct_led_click (true)
|
||||
{
|
||||
ColorsChanged.connect (sigc::mem_fun (*this, &ArdourButton::color_handler));
|
||||
StateChanged.connect (sigc::mem_fun (*this, &ArdourButton::state_handler));
|
||||
|
@ -94,19 +93,19 @@ ArdourButton::set_markup (const std::string& str)
|
|||
void
|
||||
ArdourButton::render (cairo_t* cr)
|
||||
{
|
||||
if (!_fixed_diameter) {
|
||||
_diameter = std::min (_width, _height);
|
||||
}
|
||||
if (!_fixed_diameter) {
|
||||
_diameter = std::min (_width, _height);
|
||||
}
|
||||
|
||||
/* background fill. use parent window style, so that we fit in nicely.
|
||||
*/
|
||||
|
||||
Color c = get_parent_bg ();
|
||||
|
||||
cairo_rectangle (cr, 0, 0, _width, _height);
|
||||
cairo_stroke_preserve (cr);
|
||||
cairo_set_source_rgb (cr, c.get_red_p(), c.get_green_p(), c.get_blue_p());
|
||||
cairo_fill (cr);
|
||||
|
||||
cairo_rectangle (cr, 0, 0, _width, _height);
|
||||
cairo_stroke_preserve (cr);
|
||||
cairo_set_source_rgb (cr, c.get_red_p(), c.get_green_p(), c.get_blue_p());
|
||||
cairo_fill (cr);
|
||||
|
||||
if (_elements & Edge) {
|
||||
Gtkmm2ext::rounded_rectangle (cr, 0, 0, _width, _height, _corner_radius);
|
||||
|
@ -185,11 +184,11 @@ ArdourButton::state_handler ()
|
|||
void
|
||||
ArdourButton::set_diameter (float d)
|
||||
{
|
||||
_diameter = (d*2) + 5.0;
|
||||
_diameter = (d*2) + 5.0;
|
||||
|
||||
if (_diameter != 0.0) {
|
||||
_fixed_diameter = true;
|
||||
}
|
||||
if (_diameter != 0.0) {
|
||||
_fixed_diameter = true;
|
||||
}
|
||||
|
||||
set_colors ();
|
||||
}
|
||||
|
@ -211,13 +210,13 @@ ArdourButton::on_size_request (Gtk::Requisition* req)
|
|||
_layout->get_pixel_size (_text_width, _text_height);
|
||||
xpad += 6;
|
||||
}
|
||||
|
||||
if (_fixed_diameter) {
|
||||
req->width = _text_width + (int) _diameter + xpad;
|
||||
req->height = max (_text_height, (int) _diameter) + ypad;
|
||||
} else {
|
||||
CairoWidget::on_size_request (req);
|
||||
}
|
||||
|
||||
if (_fixed_diameter) {
|
||||
req->width = _text_width + (int) _diameter + xpad;
|
||||
req->height = max (_text_height, (int) _diameter) + ypad;
|
||||
} else {
|
||||
CairoWidget::on_size_request (req);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -322,7 +321,7 @@ ArdourButton::set_colors ()
|
|||
led_b = b/255.0;
|
||||
led_a = a/255.0;
|
||||
|
||||
set_dirty ();
|
||||
set_dirty ();
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
@ -47,7 +47,7 @@ class ArdourButton : public CairoWidget, Gtk::Activatable
|
|||
Element elements() const { return _elements; }
|
||||
|
||||
void set_corner_radius (float);
|
||||
void set_diameter (float);
|
||||
void set_diameter (float);
|
||||
|
||||
void set_text (const std::string&);
|
||||
void set_markup (const std::string&);
|
||||
|
@ -59,22 +59,20 @@ class ArdourButton : public CairoWidget, Gtk::Activatable
|
|||
|
||||
protected:
|
||||
void render (cairo_t *);
|
||||
void on_size_request (Gtk::Requisition* req);
|
||||
void on_size_request (Gtk::Requisition* req);
|
||||
void on_size_allocate (Gtk::Allocation&);
|
||||
bool on_button_press_event (GdkEventButton*);
|
||||
bool on_button_release_event (GdkEventButton*);
|
||||
|
||||
private:
|
||||
Element _elements;
|
||||
Glib::RefPtr<Pango::Layout> _layout;
|
||||
std::string _text;
|
||||
int _text_width;
|
||||
int _text_height;
|
||||
bool _led_left;
|
||||
float _diameter;
|
||||
bool _fixed_diameter;
|
||||
bool _distinct_led_click;
|
||||
float _corner_radius;
|
||||
std::string _text;
|
||||
Element _elements;
|
||||
|
||||
int _text_width;
|
||||
int _text_height;
|
||||
float _diameter;
|
||||
float _corner_radius;
|
||||
|
||||
cairo_pattern_t* edge_pattern;
|
||||
cairo_pattern_t* fill_pattern;
|
||||
|
@ -91,7 +89,11 @@ class ArdourButton : public CairoWidget, Gtk::Activatable
|
|||
double led_b;
|
||||
double led_a;
|
||||
|
||||
void set_colors ();
|
||||
bool _led_left;
|
||||
bool _fixed_diameter;
|
||||
bool _distinct_led_click;
|
||||
|
||||
void set_colors ();
|
||||
void color_handler ();
|
||||
void state_handler ();
|
||||
};
|
||||
|
|
|
@ -25,9 +25,8 @@ CairoWidget::CairoWidget ()
|
|||
, _height (1)
|
||||
, _active_state (CairoWidget::ActiveState (0))
|
||||
, _visual_state (CairoWidget::VisualState (0))
|
||||
, _dirty (true)
|
||||
, _pixmap (0)
|
||||
|
||||
, _dirty (true)
|
||||
{
|
||||
|
||||
}
|
||||
|
|
|
@ -73,8 +73,8 @@ protected:
|
|||
VisualState _visual_state;
|
||||
|
||||
private:
|
||||
bool _dirty; ///< true if the pixmap requires re-rendering
|
||||
GdkPixmap* _pixmap; ///< our pixmap
|
||||
bool _dirty; ///< true if the pixmap requires re-rendering
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
|
@ -28,12 +28,11 @@ using namespace Gtk;
|
|||
using namespace Glib;
|
||||
|
||||
LED::LED()
|
||||
: _diameter (0.0)
|
||||
, _fixed_diameter (false)
|
||||
, _red (0.0)
|
||||
, _green (1.0)
|
||||
, _blue (0.0)
|
||||
|
||||
: _diameter (0.0)
|
||||
, _red (0.0)
|
||||
, _green (1.0)
|
||||
, _blue (0.0)
|
||||
, _fixed_diameter (false)
|
||||
{
|
||||
}
|
||||
|
||||
|
@ -44,35 +43,35 @@ LED::~LED()
|
|||
void
|
||||
LED::render (cairo_t* cr)
|
||||
{
|
||||
if (!_fixed_diameter) {
|
||||
_diameter = std::min (_width, _height);
|
||||
}
|
||||
if (!_fixed_diameter) {
|
||||
_diameter = std::min (_width, _height);
|
||||
}
|
||||
|
||||
//background
|
||||
//background
|
||||
|
||||
Widget* parent;
|
||||
RefPtr<Style> style;
|
||||
Color c;
|
||||
Widget* parent;
|
||||
RefPtr<Style> style;
|
||||
Color c;
|
||||
|
||||
parent = get_parent ();
|
||||
parent = get_parent ();
|
||||
|
||||
while (parent && !parent->get_has_window()) {
|
||||
parent = parent->get_parent();
|
||||
}
|
||||
while (parent && !parent->get_has_window()) {
|
||||
parent = parent->get_parent();
|
||||
}
|
||||
|
||||
if (parent && parent->get_has_window()) {
|
||||
style = parent->get_style ();
|
||||
c = style->get_bg (parent->get_state());
|
||||
} else {
|
||||
style = get_style ();
|
||||
c = style->get_bg (get_state());
|
||||
}
|
||||
if (parent && parent->get_has_window()) {
|
||||
style = parent->get_style ();
|
||||
c = style->get_bg (parent->get_state());
|
||||
} else {
|
||||
style = get_style ();
|
||||
c = style->get_bg (get_state());
|
||||
}
|
||||
|
||||
#if 0
|
||||
cairo_rectangle(cr, 0, 0, _width, _height);
|
||||
cairo_stroke_preserve(cr);
|
||||
cairo_set_source_rgb(cr, c.get_red_p(), c.get_green_p(), c.get_blue_p());
|
||||
cairo_fill(cr);
|
||||
cairo_rectangle(cr, 0, 0, _width, _height);
|
||||
cairo_stroke_preserve(cr);
|
||||
cairo_set_source_rgb(cr, c.get_red_p(), c.get_green_p(), c.get_blue_p());
|
||||
cairo_fill(cr);
|
||||
#endif
|
||||
|
||||
cairo_translate(cr, _width/2, _height/2);
|
||||
|
@ -112,51 +111,51 @@ LED::render (cairo_t* cr)
|
|||
void
|
||||
LED::set_diameter (float d)
|
||||
{
|
||||
_diameter = (d*2) + 5.0;
|
||||
_diameter = (d*2) + 5.0;
|
||||
|
||||
if (_diameter != 0.0) {
|
||||
_fixed_diameter = true;
|
||||
}
|
||||
if (_diameter != 0.0) {
|
||||
_fixed_diameter = true;
|
||||
}
|
||||
|
||||
set_dirty ();
|
||||
set_dirty ();
|
||||
}
|
||||
|
||||
void
|
||||
LED::on_realize ()
|
||||
{
|
||||
set_colors_from_style ();
|
||||
CairoWidget::on_realize ();
|
||||
set_colors_from_style ();
|
||||
CairoWidget::on_realize ();
|
||||
}
|
||||
|
||||
void
|
||||
LED::on_size_request (Gtk::Requisition* req)
|
||||
{
|
||||
if (_fixed_diameter) {
|
||||
req->width = _diameter;
|
||||
req->height = _diameter;
|
||||
} else {
|
||||
CairoWidget::on_size_request (req);
|
||||
}
|
||||
if (_fixed_diameter) {
|
||||
req->width = _diameter;
|
||||
req->height = _diameter;
|
||||
} else {
|
||||
CairoWidget::on_size_request (req);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
LED::set_colors_from_style ()
|
||||
{
|
||||
RefPtr<Style> style = get_style();
|
||||
Color c;
|
||||
RefPtr<Style> style = get_style();
|
||||
Color c;
|
||||
|
||||
switch (_visual_state) {
|
||||
case 0:
|
||||
c = style->get_fg (STATE_NORMAL);
|
||||
break;
|
||||
default:
|
||||
c = style->get_fg (STATE_ACTIVE);
|
||||
break;
|
||||
}
|
||||
switch (_visual_state) {
|
||||
case 0:
|
||||
c = style->get_fg (STATE_NORMAL);
|
||||
break;
|
||||
default:
|
||||
c = style->get_fg (STATE_ACTIVE);
|
||||
break;
|
||||
}
|
||||
|
||||
_red = c.get_red_p ();
|
||||
_green = c.get_green_p ();
|
||||
_blue = c.get_blue_p ();
|
||||
_red = c.get_red_p ();
|
||||
_green = c.get_green_p ();
|
||||
_blue = c.get_blue_p ();
|
||||
|
||||
set_dirty ();
|
||||
set_dirty ();
|
||||
}
|
||||
|
|
|
@ -30,21 +30,21 @@ class LED : public CairoWidget
|
|||
LED ();
|
||||
virtual ~LED ();
|
||||
|
||||
void set_diameter (float);
|
||||
void set_diameter (float);
|
||||
|
||||
protected:
|
||||
void render (cairo_t *);
|
||||
void on_size_request (Gtk::Requisition* req);
|
||||
void on_realize ();
|
||||
void on_size_request (Gtk::Requisition* req);
|
||||
void on_realize ();
|
||||
|
||||
private:
|
||||
float _diameter;
|
||||
bool _fixed_diameter;
|
||||
float _red;
|
||||
float _green;
|
||||
float _blue;
|
||||
float _diameter;
|
||||
float _red;
|
||||
float _green;
|
||||
float _blue;
|
||||
bool _fixed_diameter;
|
||||
|
||||
void set_colors_from_style ();
|
||||
void set_colors_from_style ();
|
||||
};
|
||||
|
||||
#endif /* __gtk2_ardour_led_h__ */
|
||||
|
|
Loading…
Reference in New Issue
Block a user