summaryrefslogtreecommitdiff
path: root/libs
diff options
context:
space:
mode:
authorCarl Hetherington <carl@carlh.net>2012-06-01 00:41:28 +0000
committerCarl Hetherington <carl@carlh.net>2012-06-01 00:41:28 +0000
commite39a8fc9681a35b95e6d0f9b4e1a9b31d932f262 (patch)
treefd79bbefd926c6d5080ed25b3a9b9d462af1b6c9 /libs
parent6624f9be372ffd664f762e3bcba91005de5659b3 (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.h17
-rw-r--r--libs/gtkmm2ext/gtkmm2ext/slider_controller.h4
-rw-r--r--libs/gtkmm2ext/pixfader.cc50
-rw-r--r--libs/gtkmm2ext/slider_controller.cc19
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);