Fixed track drag raise behaviour
This commit is contained in:
parent
1be33426e4
commit
977cbf9e64
4 changed files with 26 additions and 38 deletions
|
|
@ -183,7 +183,7 @@ bool TimelineHeaderContainer::on_button_release_event (
|
||||||
|
|
||||||
// Has the user been dragging?
|
// Has the user been dragging?
|
||||||
if(layout.get_dragging_track())
|
if(layout.get_dragging_track())
|
||||||
end_drag();
|
layout.end_dragging_track();
|
||||||
|
|
||||||
return Container::on_button_release_event(event);
|
return Container::on_button_release_event(event);
|
||||||
}
|
}
|
||||||
|
|
@ -404,38 +404,16 @@ void
|
||||||
TimelineHeaderContainer::begin_drag()
|
TimelineHeaderContainer::begin_drag()
|
||||||
{
|
{
|
||||||
TimelineLayoutHelper &layout = timelineWidget.layoutHelper;
|
TimelineLayoutHelper &layout = timelineWidget.layoutHelper;
|
||||||
|
layout.begin_dragging_track(mousePoint);
|
||||||
shared_ptr<timeline::Track> dragging_track =
|
|
||||||
layout.begin_dragging_track(mousePoint);
|
|
||||||
ENSURE(dragging_track); // Something strange has happened if we
|
|
||||||
// were somehow not hovering on a track
|
|
||||||
|
|
||||||
const TimelineLayoutHelper::TrackTree::pre_order_iterator node =
|
// Raise all the header widgets so they float above the widgets not
|
||||||
layout.iterator_from_track(dragging_track->get_model_track());
|
// being dragged
|
||||||
set_keep_above_recursive(node, true);
|
raise_recursive(layout.get_dragging_track_iter());
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
TimelineHeaderContainer::end_drag()
|
TimelineHeaderContainer::raise_recursive(
|
||||||
{
|
TimelineLayoutHelper::TrackTree::iterator_base node)
|
||||||
TimelineLayoutHelper &layout = timelineWidget.layoutHelper;
|
|
||||||
|
|
||||||
shared_ptr<timeline::Track> dragging_track =
|
|
||||||
layout.get_dragging_track();
|
|
||||||
ENSURE(dragging_track); // Something strange has happened if we
|
|
||||||
// were somehow not dragging on a track
|
|
||||||
|
|
||||||
const TimelineLayoutHelper::TrackTree::pre_order_iterator node =
|
|
||||||
layout.iterator_from_track(dragging_track->get_model_track());
|
|
||||||
set_keep_above_recursive(node, false);
|
|
||||||
|
|
||||||
layout.end_dragging_track();
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
TimelineHeaderContainer::set_keep_above_recursive(
|
|
||||||
TimelineLayoutHelper::TrackTree::iterator_base node,
|
|
||||||
const bool keep_above)
|
|
||||||
{
|
{
|
||||||
TimelineLayoutHelper::TrackTree::pre_order_iterator iter;
|
TimelineLayoutHelper::TrackTree::pre_order_iterator iter;
|
||||||
|
|
||||||
|
|
@ -450,13 +428,13 @@ TimelineHeaderContainer::set_keep_above_recursive(
|
||||||
timeline_track->get_header_widget().get_window();
|
timeline_track->get_header_widget().get_window();
|
||||||
ENSURE(window); // Something strange has happened if there was no
|
ENSURE(window); // Something strange has happened if there was no
|
||||||
// window
|
// window
|
||||||
window->set_keep_above(keep_above);
|
window->raise();
|
||||||
|
|
||||||
for(iter = layout_tree.begin(node);
|
for(iter = layout_tree.begin(node);
|
||||||
iter != layout_tree.end(node);
|
iter != layout_tree.end(node);
|
||||||
iter++)
|
iter++)
|
||||||
{
|
{
|
||||||
set_keep_above_recursive(iter, keep_above);
|
raise_recursive(iter);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -184,13 +184,15 @@ private:
|
||||||
boost::shared_ptr<model::Track> model_track);
|
boost::shared_ptr<model::Track> model_track);
|
||||||
|
|
||||||
void begin_drag();
|
void begin_drag();
|
||||||
|
|
||||||
|
/**
|
||||||
void end_drag();
|
* Recusively raises all the header widget windows in a branch to the
|
||||||
|
* top of the Z-order.
|
||||||
void set_keep_above_recursive(
|
* @param node The window of node's track header will be raised, as
|
||||||
TimelineLayoutHelper::TrackTree::iterator_base node,
|
* well as all it's descendant nodes.
|
||||||
const bool keep_above);
|
**/
|
||||||
|
void raise_recursive(
|
||||||
|
TimelineLayoutHelper::TrackTree::iterator_base node);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Begins, or continues a scroll slide at a given rate
|
* Begins, or continues a scroll slide at a given rate
|
||||||
|
|
|
||||||
|
|
@ -163,6 +163,12 @@ TimelineLayoutHelper::get_dragging_track() const
|
||||||
return draggingTrack;
|
return draggingTrack;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TimelineLayoutHelper::TrackTree::pre_order_iterator
|
||||||
|
TimelineLayoutHelper::get_dragging_track_iter() const
|
||||||
|
{
|
||||||
|
return draggingTrackIter;
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
TimelineLayoutHelper::drag_to_point(const Gdk::Point &point)
|
TimelineLayoutHelper::drag_to_point(const Gdk::Point &point)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -134,6 +134,8 @@ public:
|
||||||
|
|
||||||
boost::shared_ptr<timeline::Track> get_dragging_track() const;
|
boost::shared_ptr<timeline::Track> get_dragging_track() const;
|
||||||
|
|
||||||
|
TrackTree::pre_order_iterator get_dragging_track_iter() const;
|
||||||
|
|
||||||
void drag_to_point(const Gdk::Point &point);
|
void drag_to_point(const Gdk::Point &point);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue