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:
David Robillard 2011-10-27 20:10:49 +00:00
parent 5005ba060e
commit 743f0ea0ec
6 changed files with 104 additions and 105 deletions

View File

@ -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

View File

@ -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 ();
};

View File

@ -25,9 +25,8 @@ CairoWidget::CairoWidget ()
, _height (1)
, _active_state (CairoWidget::ActiveState (0))
, _visual_state (CairoWidget::VisualState (0))
, _dirty (true)
, _pixmap (0)
, _dirty (true)
{
}

View File

@ -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

View File

@ -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 ();
}

View File

@ -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__ */