update waves' fader implementation, clean up whitespace, indentation, variable initialization and remove unused members

This commit is contained in:
Paul Davis 2015-06-18 08:16:43 -04:00
parent 8e9bb12f92
commit 0e72e8446a
2 changed files with 56 additions and 22 deletions

View file

@ -155,6 +155,28 @@ Fader::~Fader ()
}
}
void
Fader::get_image_scales (double &x_scale, double &y_scale)
{
int pbwidth = _face_pixbuf->get_width ();
int pbheight = _face_pixbuf->get_height ();
int width = get_width ();
int height = get_height ();
if ((width != pbwidth) || (height != pbheight)) {
x_scale = double (width) / double (pbwidth);
if (x_scale == 0.0) {
x_scale = 1.0;
}
y_scale = double (height) / double (pbheight);
if (y_scale == 0.0) {
y_scale = 1.0;
}
} else {
x_scale = y_scale = 1.0;
}
}
void
Fader::set_touch_cursor (const Glib::RefPtr<Gdk::Pixbuf>& touch_cursor)
{
@ -164,39 +186,41 @@ Fader::set_touch_cursor (const Glib::RefPtr<Gdk::Pixbuf>& touch_cursor)
void
Fader::render (cairo_t* cr, cairo_rectangle_t*)
{
double xscale = 1.0;
double yscale = 1.0;
get_image_scales (xscale, yscale);
cairo_matrix_t matrix;
cairo_get_matrix (cr, &matrix);
cairo_matrix_scale (&matrix, xscale, yscale);
cairo_set_matrix (cr, &matrix);
get_handle_position (_last_drawn_x, _last_drawn_y);
if (_underlay_pixbuf != 0) {
cairo_rectangle (cr, 0, 0, get_width(), get_height());
gdk_cairo_set_source_pixbuf (cr,
_underlay_pixbuf->gobj(),
_last_drawn_x - (int)(_underlay_pixbuf->get_width()/2.0 + 0.5),
_last_drawn_y - (int)(_underlay_pixbuf->get_height()/2.0 + 0.5));
cairo_fill (cr);
(_last_drawn_x - (int)((_underlay_pixbuf->get_width() * xscale) / 2.0 + 0.5)) / xscale,
(_last_drawn_y - (int)((_underlay_pixbuf->get_height() * yscale) / 2.0 + 0.5)) / yscale);
cairo_paint (cr);
}
cairo_rectangle (cr, 0, 0, get_width(), get_height());
gdk_cairo_set_source_pixbuf (cr,
gdk_cairo_set_source_pixbuf (cr,
((get_state () == Gtk::STATE_ACTIVE) && (_active_face_pixbuf != 0)) ?
_active_face_pixbuf->gobj() :
_face_pixbuf->gobj(),
0,
0);
cairo_fill (cr);
cairo_paint (cr);
cairo_rectangle (cr, 0, 0, get_width(), get_height());
if (_dragging) {
gdk_cairo_set_source_pixbuf (cr,
_active_handle_pixbuf->gobj(),
_last_drawn_x - (int)(_active_handle_pixbuf->get_width()/2.0 + 0.5),
_last_drawn_y - (int)(_active_handle_pixbuf->get_height()/2.0 + 0.5));
} else {
gdk_cairo_set_source_pixbuf (cr,
_handle_pixbuf->gobj(),
_last_drawn_x - (int)(_handle_pixbuf->get_width()/2.0 + 0.5),
_last_drawn_y - (int)(_handle_pixbuf->get_height()/2.0 + 0.5));
}
cairo_fill (cr);
const Glib::RefPtr<Gdk::Pixbuf> handle_pixbuf (_dragging ? _active_handle_pixbuf : _handle_pixbuf);
gdk_cairo_set_source_pixbuf (cr,
handle_pixbuf->gobj(),
(_last_drawn_x - (int)((handle_pixbuf->get_width() * xscale) / 2.0 + 0.5)) / xscale,
(_last_drawn_y - (int)((handle_pixbuf->get_height() * yscale) / 2.0 + 0.5)) / yscale);
cairo_paint (cr);
}
void
@ -238,8 +262,13 @@ Fader::on_button_press_event (GdkEventButton* ev)
_grab_start_mouse_y = ev->y;
get_handle_position (_grab_start_handle_x, _grab_start_handle_y);
double hw = _handle_pixbuf->get_width();
double hh = _handle_pixbuf->get_height();
double xscale = 1.0;
double yscale = 1.0;
get_image_scales (xscale, yscale);
double hw = _handle_pixbuf->get_width() * xscale;
double hh = _handle_pixbuf->get_height() * yscale;
if ((ev->x < (_grab_start_handle_x - hw/2)) || (ev->x > (_grab_start_handle_x + hw/2)) || (ev->y < (_grab_start_handle_y - hh/2)) || (ev->y > (_grab_start_handle_y + hh/2))) {
return false;

View file

@ -54,6 +54,7 @@ class LIBGTKMM2EXT_API Fader : public CairoWidget
void set_controllable (boost::shared_ptr<PBD::Controllable> c) { binding_proxy.set_controllable (c); }
void set_default_value (float);
void set_touch_cursor (const Glib::RefPtr<Gdk::Pixbuf>& touch_cursor);
void get_image_scales (double &x_scale, double &y_scale);
protected:
void get_handle_position (double& x, double& y);
@ -74,6 +75,7 @@ class LIBGTKMM2EXT_API Fader : public CairoWidget
BindingProxy binding_proxy;
private:
const Glib::RefPtr<Gdk::Pixbuf> _face_pixbuf;
const Glib::RefPtr<Gdk::Pixbuf> _active_face_pixbuf;
const Glib::RefPtr<Gdk::Pixbuf> _underlay_pixbuf;
@ -83,9 +85,12 @@ class LIBGTKMM2EXT_API Fader : public CairoWidget
int _min_pos_y;
int _max_pos_x;
int _max_pos_y;
bool _hovering;
GdkWindow* _grab_window;
Gdk::Cursor *_touch_cursor;
double _grab_start_mouse_x;
double _grab_start_mouse_y;
double _grab_start_handle_x;