13
0

Touch Support for Ardour Button

This commit is contained in:
Robin Gareus 2024-09-26 18:52:31 +02:00
parent 79dae5f2b4
commit 24b916d125
Signed by: rgareus
GPG Key ID: A090BCE02CF57F04
2 changed files with 40 additions and 0 deletions

View File

@ -103,6 +103,7 @@ ArdourButton::ArdourButton (Element e, bool toggle)
UIConfigurationBase::instance().ColorsChanged.connect (sigc::mem_fun (*this, &ArdourButton::color_handler));
/* This is not provided by gtkmm */
signal_grab_broken_event().connect (sigc::mem_fun (*this, &ArdourButton::on_grab_broken_event));
add_events (Gdk::TOUCH_BEGIN_MASK | Gdk::TOUCH_END_MASK);
}
ArdourButton::ArdourButton (const std::string& str, Element e, bool toggle)
@ -154,6 +155,7 @@ ArdourButton::ArdourButton (const std::string& str, Element e, bool toggle)
UIConfigurationBase::instance().DPIReset.connect (sigc::mem_fun (*this, &ArdourButton::on_name_changed));
/* This is not provided by gtkmm */
signal_grab_broken_event().connect (sigc::mem_fun (*this, &ArdourButton::on_grab_broken_event));
add_events (Gdk::TOUCH_BEGIN_MASK | Gdk::TOUCH_END_MASK);
}
ArdourButton::~ArdourButton()
@ -943,6 +945,42 @@ ArdourButton::set_led_left (bool yn)
_led_left = yn;
}
bool
ArdourButton::on_touch_begin_event (GdkEventTouch *ev)
{
printf ("ArdourButton::on_touch_begin_event finger %d\n", ev->sequence);
focus_handler (this);
CairoWidget::set_dirty ();
if (!_act_on_release) {
if (_action) {
_action->activate ();
} else if (_auto_toggle) {
set_active (!get_active ());
signal_clicked ();
}
}
return true;
}
bool
ArdourButton::on_touch_end_event (GdkEventTouch *ev)
{
printf ("ArdourButton::on_touch_end_event finger: %d\n", ev->sequence);
CairoWidget::set_dirty ();
if (_act_on_release && _auto_toggle && !_action) {
set_active (!get_active ());
}
signal_clicked ();
if (_act_on_release && _action) {
_action->activate ();
}
return true;
}
bool
ArdourButton::on_button_press_event (GdkEventButton *ev)
{

View File

@ -124,6 +124,8 @@ class LIBWIDGETS_API ArdourButton : public CairoWidget , public Gtkmm2ext::Activ
bool on_button_press_event (GdkEventButton*);
bool on_button_release_event (GdkEventButton*);
bool on_touch_begin_event (GdkEventTouch*);
bool on_touch_end_event (GdkEventTouch*);
void set_image (const Glib::RefPtr<Gdk::Pixbuf>&);