diff options
author | Carl Hetherington <carl@carlh.net> | 2012-06-01 00:41:28 +0000 |
---|---|---|
committer | Carl Hetherington <carl@carlh.net> | 2012-06-01 00:41:28 +0000 |
commit | e39a8fc9681a35b95e6d0f9b4e1a9b31d932f262 (patch) | |
tree | fd79bbefd926c6d5080ed25b3a9b9d462af1b6c9 /libs | |
parent | 6624f9be372ffd664f762e3bcba91005de5659b3 (diff) |
Make faders visually desensitised when their tracks are in automation-play.
git-svn-id: svn://localhost/ardour2/branches/3.0@12518 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'libs')
-rw-r--r-- | libs/gtkmm2ext/gtkmm2ext/pixfader.h | 17 | ||||
-rw-r--r-- | libs/gtkmm2ext/gtkmm2ext/slider_controller.h | 4 | ||||
-rw-r--r-- | libs/gtkmm2ext/pixfader.cc | 50 | ||||
-rw-r--r-- | libs/gtkmm2ext/slider_controller.cc | 19 |
4 files changed, 58 insertions, 32 deletions
diff --git a/libs/gtkmm2ext/gtkmm2ext/pixfader.h b/libs/gtkmm2ext/gtkmm2ext/pixfader.h index e32fe7550b..9f1e4b75ca 100644 --- a/libs/gtkmm2ext/gtkmm2ext/pixfader.h +++ b/libs/gtkmm2ext/gtkmm2ext/pixfader.h @@ -32,7 +32,7 @@ namespace Gtkmm2ext { class PixFader : public Gtk::DrawingArea { public: - PixFader (Glib::RefPtr<Gdk::Pixbuf> belt_image, Gtk::Adjustment& adjustment, int orientation, int); + PixFader (Glib::RefPtr<Gdk::Pixbuf>, Glib::RefPtr<Gdk::Pixbuf>, Gtk::Adjustment& adjustment, int orientation, int); virtual ~PixFader (); void set_fader_length (int); @@ -58,10 +58,17 @@ class PixFader : public Gtk::DrawingArea HORIZ=2, }; - private: - Cairo::RefPtr<Cairo::Context> belt_context; - Cairo::RefPtr<Cairo::ImageSurface> belt_surface; - Glib::RefPtr<Gdk::Pixbuf> pixbuf; + private: + + enum State { + NORMAL, + DESENSITISED, + STATES + }; + + Cairo::RefPtr<Cairo::Context> belt_context[STATES]; + Cairo::RefPtr<Cairo::ImageSurface> belt_surface[STATES]; + Glib::RefPtr<Gdk::Pixbuf> pixbuf[STATES]; int span, girth; int _orien; float left_r; diff --git a/libs/gtkmm2ext/gtkmm2ext/slider_controller.h b/libs/gtkmm2ext/gtkmm2ext/slider_controller.h index d6afefbdfc..64dd977e9b 100644 --- a/libs/gtkmm2ext/gtkmm2ext/slider_controller.h +++ b/libs/gtkmm2ext/gtkmm2ext/slider_controller.h @@ -39,7 +39,7 @@ namespace Gtkmm2ext { class SliderController : public Gtkmm2ext::PixFader { public: - SliderController (Glib::RefPtr<Gdk::Pixbuf> image, Gtk::Adjustment* adj, int orientation, int); + SliderController (Glib::RefPtr<Gdk::Pixbuf>, Glib::RefPtr<Gdk::Pixbuf>, Gtk::Adjustment* adj, int orientation, int); virtual ~SliderController () {} @@ -66,6 +66,7 @@ class VSliderController : public SliderController { public: VSliderController (Glib::RefPtr<Gdk::Pixbuf> image, + Glib::RefPtr<Gdk::Pixbuf> image_desensitised, Gtk::Adjustment *adj, int, bool with_numeric = true); }; @@ -74,6 +75,7 @@ class HSliderController : public SliderController { public: HSliderController (Glib::RefPtr<Gdk::Pixbuf> image, + Glib::RefPtr<Gdk::Pixbuf> image_desensitised, Gtk::Adjustment *adj, int, bool with_numeric = true); }; diff --git a/libs/gtkmm2ext/pixfader.cc b/libs/gtkmm2ext/pixfader.cc index e146f7aa60..02597f331e 100644 --- a/libs/gtkmm2ext/pixfader.cc +++ b/libs/gtkmm2ext/pixfader.cc @@ -28,14 +28,19 @@ using namespace Gtkmm2ext; using namespace Gtk; using namespace std; -PixFader::PixFader (Glib::RefPtr<Gdk::Pixbuf> belt, Gtk::Adjustment& adj, int orientation, int fader_length) - +PixFader::PixFader ( + Glib::RefPtr<Gdk::Pixbuf> belt, + Glib::RefPtr<Gdk::Pixbuf> belt_desensitised, + Gtk::Adjustment& adj, + int orientation, + int fader_length + ) : adjustment (adj), - pixbuf (belt), _orien(orientation) { - Cairo::Format format; - + pixbuf[NORMAL] = belt; + pixbuf[DESENSITISED] = belt_desensitised; + dragging = false; default_value = adjustment.get_value(); last_drawn = -1; @@ -44,9 +49,9 @@ PixFader::PixFader (Glib::RefPtr<Gdk::Pixbuf> belt, Gtk::Adjustment& adj, int or view.y = 0; if (orientation == VERT) { - view.width = girth = pixbuf->get_width(); + view.width = girth = pixbuf[0]->get_width(); } else { - view.height = girth = pixbuf->get_height(); + view.height = girth = pixbuf[0]->get_height(); } set_fader_length (fader_length); @@ -56,16 +61,21 @@ PixFader::PixFader (Glib::RefPtr<Gdk::Pixbuf> belt, Gtk::Adjustment& adj, int or adjustment.signal_value_changed().connect (mem_fun (*this, &PixFader::adjustment_changed)); adjustment.signal_changed().connect (mem_fun (*this, &PixFader::adjustment_changed)); - if (pixbuf->get_has_alpha()) { - format = Cairo::FORMAT_ARGB32; - } else { - format = Cairo::FORMAT_RGB24; - } - belt_surface = Cairo::ImageSurface::create (format, pixbuf->get_width(), pixbuf->get_height()); - belt_context = Cairo::Context::create (belt_surface); - Gdk::Cairo::set_source_pixbuf (belt_context, pixbuf, 0.0, 0.0); - belt_context->paint(); + for (int i = 0; i < STATES; ++i) { + Cairo::Format format; + + if (pixbuf[i]->get_has_alpha()) { + format = Cairo::FORMAT_ARGB32; + } else { + format = Cairo::FORMAT_RGB24; + } + belt_surface[i] = Cairo::ImageSurface::create (format, pixbuf[i]->get_width(), pixbuf[i]->get_height()); + belt_context[i] = Cairo::Context::create (belt_surface[i]); + Gdk::Cairo::set_source_pixbuf (belt_context[i], pixbuf[i], 0.0, 0.0); + belt_context[i]->paint(); + } + left_r = 0; left_g = 0; left_b = 0; @@ -96,6 +106,8 @@ PixFader::set_border_colors (uint32_t left, uint32_t right) bool PixFader::on_expose_event (GdkEventExpose* ev) { + int const pi = get_sensitive() ? NORMAL : DESENSITISED; + Cairo::RefPtr<Cairo::Context> context = get_window()->create_cairo_context(); int srcx, srcy; int const ds = display_span (); @@ -103,9 +115,9 @@ PixFader::on_expose_event (GdkEventExpose* ev) /* account for fader lengths that are shorter than the fader pixbuf */ if (_orien == VERT) { - offset_into_pixbuf += pixbuf->get_height() / 2 - view.height; + offset_into_pixbuf += pixbuf[pi]->get_height() / 2 - view.height; } else { - offset_into_pixbuf += pixbuf->get_width() / 2 - view.width; + offset_into_pixbuf += pixbuf[pi]->get_width() / 2 - view.width; } context->rectangle (ev->area.x, ev->area.y, ev->area.width, ev->area.height); @@ -122,7 +134,7 @@ PixFader::on_expose_event (GdkEventExpose* ev) /* fader */ context->save(); - context->set_source (belt_surface, -srcx, -srcy); + context->set_source (belt_surface[pi], -srcx, -srcy); context->rectangle (0, 0, get_width(), get_height()); context->clip (); context->paint(); diff --git a/libs/gtkmm2ext/slider_controller.cc b/libs/gtkmm2ext/slider_controller.cc index f86fd19820..c55697a2ee 100644 --- a/libs/gtkmm2ext/slider_controller.cc +++ b/libs/gtkmm2ext/slider_controller.cc @@ -28,9 +28,14 @@ using namespace Gtkmm2ext; using namespace PBD; -SliderController::SliderController (Glib::RefPtr<Gdk::Pixbuf> image, Gtk::Adjustment *adj, int orientation, int fader_length) - - : PixFader (image, *adj, orientation, fader_length), +SliderController::SliderController ( + Glib::RefPtr<Gdk::Pixbuf> image, + Glib::RefPtr<Gdk::Pixbuf> image_desensitised, + Gtk::Adjustment *adj, + int orientation, + int fader_length + ) + : PixFader (image, image_desensitised, *adj, orientation, fader_length), spin (*adj, 0, 2) { spin.set_name ("SliderControllerValue"); @@ -55,11 +60,11 @@ SliderController::on_button_press_event (GdkEventButton *ev) return PixFader::on_button_press_event (ev); } -VSliderController::VSliderController (Glib::RefPtr<Gdk::Pixbuf> image, +VSliderController::VSliderController (Glib::RefPtr<Gdk::Pixbuf> image, Glib::RefPtr<Gdk::Pixbuf> image_desensitised, Gtk::Adjustment *adj, int fader_length, bool with_numeric) - : SliderController (image, adj, VERT, fader_length) + : SliderController (image, image_desensitised, adj, VERT, fader_length) { if (with_numeric) { spin_frame.add (spin); @@ -70,11 +75,11 @@ VSliderController::VSliderController (Glib::RefPtr<Gdk::Pixbuf> image, } } -HSliderController::HSliderController (Glib::RefPtr<Gdk::Pixbuf> image, +HSliderController::HSliderController (Glib::RefPtr<Gdk::Pixbuf> image, Glib::RefPtr<Gdk::Pixbuf> image_desensitised, Gtk::Adjustment *adj, int fader_length, bool with_numeric) - : SliderController (image, adj, HORIZ, fader_length) + : SliderController (image, image_desensitised, adj, HORIZ, fader_length) { if (with_numeric) { spin_frame.add (spin); |