From c03282663102d63fe86bef8a2c904d97e1e86f7f Mon Sep 17 00:00:00 2001 From: Ben Loftis Date: Tue, 28 May 2024 17:31:35 -0500 Subject: [PATCH] (backport) minimal changes to make group bar more discoverable * highlight on mouseover * set cursor to indicate drag motion --- gtk2_ardour/group_tabs.cc | 37 ++++++++++++++++++++++++- gtk2_ardour/group_tabs.h | 5 ++++ gtk2_ardour/themes/dark-livetrax.colors | 4 +-- 3 files changed, 43 insertions(+), 3 deletions(-) diff --git a/gtk2_ardour/group_tabs.cc b/gtk2_ardour/group_tabs.cc index 4b5c98ea00..73e28edd86 100644 --- a/gtk2_ardour/group_tabs.cc +++ b/gtk2_ardour/group_tabs.cc @@ -52,8 +52,9 @@ GroupTabs::GroupTabs () : _menu (0) , _dragging (0) , _dragging_new_tab (0) + , _hovering (false) { - add_events (Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK|Gdk::POINTER_MOTION_MASK); + add_events (Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK|Gdk::POINTER_MOTION_MASK|Gdk::ENTER_NOTIFY_MASK|Gdk::LEAVE_NOTIFY_MASK); UIConfiguration::instance().ColorsChanged.connect (sigc::mem_fun (*this, &GroupTabs::queue_draw)); } @@ -82,6 +83,33 @@ GroupTabs::set_session (Session* s) } } +bool +GroupTabs::on_enter_notify_event (GdkEventCrossing* ev) +{ + _hovering = true; + + if (UIConfiguration::instance ().get_widget_prelight ()) { + queue_draw (); + } + + get_window()->set_cursor (Gdk::Cursor( primary_coordinate(1,0) ? Gdk::SB_H_DOUBLE_ARROW : Gdk::SB_V_DOUBLE_ARROW)); + + return CairoWidget::on_enter_notify_event (ev); +} + +bool +GroupTabs::on_leave_notify_event (GdkEventCrossing* ev) +{ + _hovering = false; + + if (UIConfiguration::instance ().get_widget_prelight ()) { + queue_draw (); + } + + get_window()->set_cursor (); + + return CairoWidget::on_leave_notify_event (ev); +} /** Handle a size request. * @param req GTK requisition @@ -283,6 +311,13 @@ GroupTabs::render (Cairo::RefPtr const& ctx, cairo_rectangle_t*) for (list::const_iterator i = _tabs.begin(); i != _tabs.end(); ++i) { draw_tab (cr, *i); } + + if (_hovering) { + cairo_set_source_rgba (cr, 1, 1, 1, 0.15); + cairo_rectangle (cr, 0, 0, get_width(), get_height()); + cairo_fill (cr); + } + } /** Convert a click position to a tab. diff --git a/gtk2_ardour/group_tabs.h b/gtk2_ardour/group_tabs.h index 29656cf247..f46be82a83 100644 --- a/gtk2_ardour/group_tabs.h +++ b/gtk2_ardour/group_tabs.h @@ -133,6 +133,9 @@ private: bool on_motion_notify_event (GdkEventMotion *); bool on_button_release_event (GdkEventButton *); + bool on_enter_notify_event (GdkEventCrossing*); + bool on_leave_notify_event (GdkEventCrossing*); + Tab * click_to_tab (double, std::list::iterator *, std::list::iterator *); void route_group_property_changed (ARDOUR::RouteGroup *); @@ -163,6 +166,8 @@ private: double _drag_max; ///< maximum position for drag double _drag_first; ///< first mouse pointer position during drag + bool _hovering; + /** colors that have been used for new route group tabs */ static std::list _used_colors; }; diff --git a/gtk2_ardour/themes/dark-livetrax.colors b/gtk2_ardour/themes/dark-livetrax.colors index cf108234fa..276fa875dd 100644 --- a/gtk2_ardour/themes/dark-livetrax.colors +++ b/gtk2_ardour/themes/dark-livetrax.colors @@ -177,8 +177,8 @@ - - + +