mirror of
https://github.com/Ardour/ardour.git
synced 2025-12-15 19:16:40 +01:00
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
This commit is contained in:
parent
6624f9be37
commit
e39a8fc968
15 changed files with 98 additions and 39 deletions
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
};
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue