diff --git a/src/gui/widgets/timeline/timeline-header-container.cpp b/src/gui/widgets/timeline/timeline-header-container.cpp index 54ad4f0f7..1db3aa3f0 100644 --- a/src/gui/widgets/timeline/timeline-header-container.cpp +++ b/src/gui/widgets/timeline/timeline-header-container.cpp @@ -204,16 +204,29 @@ bool TimelineHeaderContainer::on_motion_notify_event ( GdkEventMotion* event) { REQUIRE(event != NULL); - - // Are we hovering on an expander? - shared_ptr expander = expander_button_from_point( + + // Hit test the rectangle + shared_ptr header = + timelineWidget.layoutHelper.header_from_point( Gdk::Point(event->x, event->y)); - if(expander != hoveringExpander) - { - hoveringExpander = expander; - queue_draw(); - } + if(header) + { + const optional rect = + get_expander_button_rectangle(header); + + REQUIRE(rect); + + // Are we hovering on the expander? + if(event->x >= rect->get_x() && + event->x < rect->get_x() + rect->get_width() && + event->y >= rect->get_y() && + event->y < rect->get_y() + rect->get_height()) + { + hoveringExpander = header; + queue_draw(); + } + } return Container::on_motion_notify_event(event); } @@ -441,38 +454,6 @@ TimelineHeaderContainer::draw_header_decoration( timeline_track->get_expander_style()); } -shared_ptr -TimelineHeaderContainer::expander_button_from_point( - const Gdk::Point &point) -{ - const TimelineLayoutHelper::TrackTree &layout_tree = - timelineWidget.layoutHelper.get_layout_tree(); - - TimelineLayoutHelper::TrackTree::pre_order_iterator iterator; - for(iterator = ++layout_tree.begin(); // ++ so we skip the sequence root - iterator != layout_tree.end(); - iterator++) - { - const shared_ptr timeline_track = - lookup_timeline_track(*iterator); - - // Hit test the rectangle - const optional rect = - get_expander_button_rectangle(timeline_track); - - if(rect) - { - if(point.get_x() >= rect->get_x() && - point.get_x() < rect->get_x() + rect->get_width() && - point.get_y() >= rect->get_y() && - point.get_y() < rect->get_y() + rect->get_height()) - return timeline_track; - } - } - - return shared_ptr(); -} - const optional TimelineHeaderContainer::get_expander_button_rectangle( shared_ptr track) diff --git a/src/gui/widgets/timeline/timeline-header-container.hpp b/src/gui/widgets/timeline/timeline-header-container.hpp index 23c75eb37..567d195c5 100644 --- a/src/gui/widgets/timeline/timeline-header-container.hpp +++ b/src/gui/widgets/timeline/timeline-header-container.hpp @@ -165,16 +165,6 @@ private: boost::shared_ptr model_track, const Gdk::Rectangle &clip_rect); - /** - * Given a point, expander_button_from_point finds the track of the - * expand button that this point is hovering over, if there is one. - * @param point The window coordiates point to hit-test. - * @return Returns a pointer to the track whose expander button is - * being hovered over, or NULL if no button has been found. - **/ - boost::shared_ptr expander_button_from_point( - const Gdk::Point &point); - /** * Gets the rectangular hit-target area of a track header's expander * button.