diff --git a/gtk2_ardour/group_tabs.cc b/gtk2_ardour/group_tabs.cc index 42abbf7b8a..537a53412f 100644 --- a/gtk2_ardour/group_tabs.cc +++ b/gtk2_ardour/group_tabs.cc @@ -54,8 +54,9 @@ GroupTabs::GroupTabs () , _dragging_new_tab (0) , _extent (-1) , _offset (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)); } @@ -84,6 +85,34 @@ 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 (offset () != 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); +} + void GroupTabs::set_extent (double extent) { @@ -306,6 +335,12 @@ 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 && UIConfiguration::instance ().get_widget_prelight ()) { + cairo_set_source_rgba (cr, 1, 1, 1, 0.12); + 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 4b7f5a6864..a5f6dabe57 100644 --- a/gtk2_ardour/group_tabs.h +++ b/gtk2_ardour/group_tabs.h @@ -141,6 +141,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 *); @@ -173,6 +176,8 @@ private: double _extent; double _offset; + bool _hovering; + /** colors that have been used for new route group tabs */ static std::list _used_colors; };