Transitioned TimelineBody and timeline tools to having reference to
TimelineWidget not pointers
This commit is contained in:
parent
6bfef606a0
commit
cd94bf9765
9 changed files with 57 additions and 75 deletions
|
|
@ -58,7 +58,7 @@ TimelineWidget::TimelineWidget(
|
|||
{
|
||||
REQUIRE(sequence);
|
||||
|
||||
body = new TimelineBody(this);
|
||||
body = new TimelineBody(*this);
|
||||
ENSURE(body != NULL);
|
||||
headerContainer = new TimelineHeaderContainer(*this);
|
||||
ENSURE(headerContainer != NULL);
|
||||
|
|
|
|||
|
|
@ -26,7 +26,7 @@ namespace gui {
|
|||
namespace widgets {
|
||||
namespace timeline {
|
||||
|
||||
ArrowTool::ArrowTool(TimelineBody *timeline_body) :
|
||||
ArrowTool::ArrowTool(TimelineBody &timeline_body) :
|
||||
Tool(timeline_body)
|
||||
{
|
||||
|
||||
|
|
|
|||
|
|
@ -43,7 +43,7 @@ public:
|
|||
* Constructor
|
||||
* @param timeline_body The owner timeline body object
|
||||
*/
|
||||
ArrowTool(TimelineBody *timeline_body);
|
||||
ArrowTool(TimelineBody &timeline_body);
|
||||
|
||||
/**
|
||||
* Gets the type of tool represented by this class
|
||||
|
|
|
|||
|
|
@ -38,8 +38,7 @@ namespace gui {
|
|||
namespace widgets {
|
||||
namespace timeline {
|
||||
|
||||
TimelineBody::TimelineBody(gui::widgets::TimelineWidget
|
||||
*timeline_widget) :
|
||||
TimelineBody::TimelineBody(TimelineWidget &timeline_widget) :
|
||||
Glib::ObjectBase("TimelineBody"),
|
||||
tool(NULL),
|
||||
mouseDownX(0),
|
||||
|
|
@ -48,11 +47,9 @@ TimelineBody::TimelineBody(gui::widgets::TimelineWidget
|
|||
beginShiftTimeOffset(0),
|
||||
selectionAlpha(0.5),
|
||||
timelineWidget(timeline_widget)
|
||||
{
|
||||
REQUIRE(timelineWidget != NULL);
|
||||
|
||||
{
|
||||
// Connect up some events
|
||||
timelineWidget->get_view_window().changed_signal().connect(
|
||||
timelineWidget.get_view_window().changed_signal().connect(
|
||||
sigc::mem_fun(this, &TimelineBody::on_update_view) );
|
||||
|
||||
// Install style properties
|
||||
|
|
@ -92,11 +89,11 @@ TimelineBody::set_tool(timeline::ToolType tool_type)
|
|||
switch(tool_type)
|
||||
{
|
||||
case timeline::Arrow:
|
||||
tool = new ArrowTool(this);
|
||||
tool = new ArrowTool(*this);
|
||||
break;
|
||||
|
||||
case timeline::IBeam:
|
||||
tool = new IBeamTool(this);
|
||||
tool = new IBeamTool(*this);
|
||||
break;
|
||||
|
||||
default:
|
||||
|
|
@ -133,7 +130,6 @@ bool
|
|||
TimelineBody::on_expose_event(GdkEventExpose* event)
|
||||
{
|
||||
REQUIRE(event != NULL);
|
||||
REQUIRE(timelineWidget != NULL);
|
||||
|
||||
// This is where we draw on the window
|
||||
Glib::RefPtr<Gdk::Window> window = get_window();
|
||||
|
|
@ -161,9 +157,8 @@ bool
|
|||
TimelineBody::on_scroll_event (GdkEventScroll* event)
|
||||
{
|
||||
REQUIRE(event != NULL);
|
||||
REQUIRE(timelineWidget != NULL);
|
||||
|
||||
TimelineViewWindow &window = timelineWidget->get_view_window();
|
||||
TimelineViewWindow &window = timelineWidget.get_view_window();
|
||||
|
||||
if(event->state & GDK_CONTROL_MASK)
|
||||
{
|
||||
|
|
@ -244,14 +239,13 @@ bool
|
|||
TimelineBody::on_motion_notify_event(GdkEventMotion *event)
|
||||
{
|
||||
REQUIRE(event != NULL);
|
||||
REQUIRE(timelineWidget != NULL);
|
||||
|
||||
// Handle a middle-mouse drag if one is occuring
|
||||
switch(dragType)
|
||||
{
|
||||
case Shift:
|
||||
{
|
||||
TimelineViewWindow &window = timelineWidget->get_view_window();
|
||||
TimelineViewWindow &window = timelineWidget.get_view_window();
|
||||
|
||||
const int64_t scale = window.get_time_scale();
|
||||
gavl_time_t offset = beginShiftTimeOffset +
|
||||
|
|
@ -272,9 +266,9 @@ TimelineBody::on_motion_notify_event(GdkEventMotion *event)
|
|||
|
||||
// See if the track that we're hovering over has changed
|
||||
shared_ptr<timeline::Track> new_hovering_track(
|
||||
timelineWidget->layoutHelper.track_from_y(event->y));
|
||||
if(timelineWidget->get_hovering_track() != new_hovering_track)
|
||||
timelineWidget->set_hovering_track(new_hovering_track);
|
||||
timelineWidget.layoutHelper.track_from_y(event->y));
|
||||
if(timelineWidget.get_hovering_track() != new_hovering_track)
|
||||
timelineWidget.set_hovering_track(new_hovering_track);
|
||||
|
||||
// false so that the message is passed up to the owner TimelineWidget
|
||||
return false;
|
||||
|
|
@ -284,11 +278,10 @@ void
|
|||
TimelineBody::draw_tracks(Cairo::RefPtr<Cairo::Context> cr)
|
||||
{
|
||||
REQUIRE(cr);
|
||||
REQUIRE(timelineWidget != NULL);
|
||||
REQUIRE(timelineWidget->sequence);
|
||||
REQUIRE(timelineWidget.sequence);
|
||||
|
||||
// Prepare
|
||||
TimelineLayoutHelper &layout_helper = timelineWidget->layoutHelper;
|
||||
TimelineLayoutHelper &layout_helper = timelineWidget.layoutHelper;
|
||||
const TimelineLayoutHelper::TrackTree &layout_tree =
|
||||
layout_helper.get_layout_tree();
|
||||
const Allocation allocation = get_allocation();
|
||||
|
|
@ -305,7 +298,7 @@ TimelineBody::draw_tracks(Cairo::RefPtr<Cairo::Context> cr)
|
|||
{
|
||||
const shared_ptr<model::Track> model_track(*iterator);
|
||||
const shared_ptr<timeline::Track> timeline_track =
|
||||
timelineWidget->lookup_timeline_track(*iterator);
|
||||
timelineWidget.lookup_timeline_track(*iterator);
|
||||
|
||||
optional<Gdk::Rectangle> rect =
|
||||
layout_helper.get_track_header_rect(timeline_track);
|
||||
|
|
@ -333,7 +326,6 @@ TimelineBody::draw_track(Cairo::RefPtr<Cairo::Context> cr,
|
|||
{
|
||||
REQUIRE(cr);
|
||||
REQUIRE(timeline_track != NULL);
|
||||
REQUIRE(timelineWidget != NULL);
|
||||
|
||||
const int height = timeline_track->get_height();
|
||||
REQUIRE(height >= 0);
|
||||
|
|
@ -346,7 +338,7 @@ TimelineBody::draw_track(Cairo::RefPtr<Cairo::Context> cr,
|
|||
|
||||
// Render the track
|
||||
cr->save();
|
||||
timeline_track->draw_track(cr, &timelineWidget->get_view_window());
|
||||
timeline_track->draw_track(cr, &timelineWidget.get_view_window());
|
||||
cr->restore();
|
||||
}
|
||||
|
||||
|
|
@ -354,16 +346,15 @@ void
|
|||
TimelineBody::draw_selection(Cairo::RefPtr<Cairo::Context> cr)
|
||||
{
|
||||
REQUIRE(cr);
|
||||
REQUIRE(timelineWidget != NULL);
|
||||
|
||||
// Prepare
|
||||
const Allocation allocation = get_allocation();
|
||||
|
||||
const TimelineViewWindow &window = timelineWidget->get_view_window();
|
||||
const TimelineViewWindow &window = timelineWidget.get_view_window();
|
||||
const int start_x = window.time_to_x(
|
||||
timelineWidget->get_selection_start());
|
||||
timelineWidget.get_selection_start());
|
||||
const int end_x = window.time_to_x(
|
||||
timelineWidget->get_selection_end());
|
||||
timelineWidget.get_selection_end());
|
||||
|
||||
// Draw the cover
|
||||
if(end_x > 0 && start_x < allocation.get_width())
|
||||
|
|
@ -402,16 +393,15 @@ void
|
|||
TimelineBody::draw_playback_point(Cairo::RefPtr<Cairo::Context> cr)
|
||||
{
|
||||
REQUIRE(cr);
|
||||
REQUIRE(timelineWidget != NULL);
|
||||
|
||||
// Prepare
|
||||
const Allocation allocation = get_allocation();
|
||||
|
||||
const gavl_time_t point = timelineWidget->get_playback_point();
|
||||
const gavl_time_t point = timelineWidget.get_playback_point();
|
||||
if(point == (gavl_time_t)GAVL_TIME_UNDEFINED)
|
||||
return;
|
||||
|
||||
const int x = timelineWidget->get_view_window().time_to_x(point);
|
||||
const int x = timelineWidget.get_view_window().time_to_x(point);
|
||||
|
||||
// Set source
|
||||
gdk_cairo_set_source_color(cr->cobj(), &playbackPointColour);
|
||||
|
|
@ -431,20 +421,20 @@ TimelineBody::begin_shift_drag()
|
|||
{
|
||||
dragType = Shift;
|
||||
beginShiftTimeOffset =
|
||||
timelineWidget->get_view_window().get_time_offset();
|
||||
timelineWidget.get_view_window().get_time_offset();
|
||||
beginShiftVerticalOffset = get_vertical_offset();
|
||||
}
|
||||
|
||||
int
|
||||
TimelineBody::get_vertical_offset() const
|
||||
{
|
||||
return (int)timelineWidget->verticalAdjustment.get_value();
|
||||
return (int)timelineWidget.verticalAdjustment.get_value();
|
||||
}
|
||||
|
||||
void
|
||||
TimelineBody::set_vertical_offset(int offset)
|
||||
{
|
||||
timelineWidget->verticalAdjustment.set_value(offset);
|
||||
timelineWidget.verticalAdjustment.set_value(offset);
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
|||
|
|
@ -54,9 +54,10 @@ public:
|
|||
|
||||
/**
|
||||
* Constructor
|
||||
* @param timeline_widget The owner widget of this ruler.
|
||||
* @param timeline_widget A reference to the owner widget of this
|
||||
* ruler.
|
||||
*/
|
||||
TimelineBody(gui::widgets::TimelineWidget *timeline_widget);
|
||||
TimelineBody(gui::widgets::TimelineWidget &timeline_widget);
|
||||
|
||||
/**
|
||||
* Destructor
|
||||
|
|
@ -173,7 +174,7 @@ private:
|
|||
float selectionAlpha;
|
||||
GdkColor playbackPointColour;
|
||||
|
||||
gui::widgets::TimelineWidget* const timelineWidget;
|
||||
gui::widgets::TimelineWidget &timelineWidget;
|
||||
|
||||
friend class Tool;
|
||||
friend class ArrowTool;
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@ const int IBeamTool::ScrollSlideEventInterval = 40;
|
|||
|
||||
// ===== Implementation ===== //
|
||||
|
||||
IBeamTool::IBeamTool(TimelineBody *timeline_body) :
|
||||
IBeamTool::IBeamTool(TimelineBody &timeline_body) :
|
||||
Tool(timeline_body),
|
||||
dragType(None),
|
||||
pinnedDragTime(0),
|
||||
|
|
@ -90,32 +90,31 @@ IBeamTool::on_button_press_event(GdkEventButton* event)
|
|||
{
|
||||
Tool::on_button_press_event(event);
|
||||
|
||||
TimelineWidget *timeline_widget = get_timeline_widget();
|
||||
REQUIRE(timeline_widget != NULL);
|
||||
TimelineWidget &timeline_widget = get_timeline_widget();
|
||||
|
||||
if(event->button == 1)
|
||||
{
|
||||
const gavl_time_t time =
|
||||
get_timeline_widget()->get_view_window().x_to_time(event->x);
|
||||
timeline_widget.get_view_window().x_to_time(event->x);
|
||||
|
||||
if(is_mouse_in_start_drag_zone())
|
||||
{
|
||||
// User began to drag the start of the selection
|
||||
dragType = GrabStart;
|
||||
pinnedDragTime = timeline_widget->get_selection_end();
|
||||
pinnedDragTime = timeline_widget.get_selection_end();
|
||||
}
|
||||
else if(is_mouse_in_end_drag_zone())
|
||||
{
|
||||
// User began to drag the end of the selection
|
||||
dragType = GrabEnd;
|
||||
pinnedDragTime = timeline_widget->get_selection_start();
|
||||
pinnedDragTime = timeline_widget.get_selection_start();
|
||||
}
|
||||
else
|
||||
{
|
||||
// User began the drag in clear space, begin a Select drag
|
||||
dragType = Selection;
|
||||
pinnedDragTime = time;
|
||||
timeline_widget->set_selection(time, time);
|
||||
timeline_widget.set_selection(time, time);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -174,7 +173,7 @@ IBeamTool::on_motion_notify_event(GdkEventMotion *event)
|
|||
bool
|
||||
IBeamTool::on_scroll_slide_timer()
|
||||
{
|
||||
get_timeline_widget()->get_view_window().shift_view(scrollSlideRate);
|
||||
get_timeline_widget().get_view_window().shift_view(scrollSlideRate);
|
||||
|
||||
// Return true to keep the timer going
|
||||
return true;
|
||||
|
|
@ -183,17 +182,16 @@ IBeamTool::on_scroll_slide_timer()
|
|||
void
|
||||
IBeamTool::set_leading_x(const int x)
|
||||
{
|
||||
TimelineWidget *timeline_widget = get_timeline_widget();
|
||||
REQUIRE(timeline_widget != NULL);
|
||||
TimelineWidget &timeline_widget = get_timeline_widget();
|
||||
|
||||
const bool set_playback_period = dragType == Selection;
|
||||
const gavl_time_t time =
|
||||
timeline_widget->get_view_window().x_to_time(x);
|
||||
timeline_widget.get_view_window().x_to_time(x);
|
||||
if(time > pinnedDragTime)
|
||||
timeline_widget->set_selection(
|
||||
timeline_widget.set_selection(
|
||||
pinnedDragTime, time, set_playback_period);
|
||||
else
|
||||
timeline_widget->set_selection(
|
||||
timeline_widget.set_selection(
|
||||
time, pinnedDragTime, set_playback_period);
|
||||
}
|
||||
|
||||
|
|
@ -218,10 +216,10 @@ IBeamTool::end_scroll_slide()
|
|||
bool
|
||||
IBeamTool::is_mouse_in_start_drag_zone() const
|
||||
{
|
||||
TimelineWidget *timeline_widget = get_timeline_widget();
|
||||
TimelineWidget &timeline_widget = get_timeline_widget();
|
||||
|
||||
const int start_x = timeline_widget->get_view_window().time_to_x(
|
||||
timeline_widget->get_selection_start());
|
||||
const int start_x = timeline_widget.get_view_window().time_to_x(
|
||||
timeline_widget.get_selection_start());
|
||||
|
||||
return (mousePoint.get_x() <= start_x &&
|
||||
mousePoint.get_x() > start_x - DragZoneWidth);
|
||||
|
|
@ -230,10 +228,10 @@ IBeamTool::is_mouse_in_start_drag_zone() const
|
|||
bool
|
||||
IBeamTool::is_mouse_in_end_drag_zone() const
|
||||
{
|
||||
TimelineWidget *timeline_widget = get_timeline_widget();
|
||||
TimelineWidget &timeline_widget = get_timeline_widget();
|
||||
|
||||
const int end_x = timeline_widget->get_view_window().time_to_x(
|
||||
timeline_widget->get_selection_end());
|
||||
const int end_x = timeline_widget.get_view_window().time_to_x(
|
||||
timeline_widget.get_selection_end());
|
||||
|
||||
return (mousePoint.get_x() >= end_x &&
|
||||
mousePoint.get_x() < end_x + DragZoneWidth);
|
||||
|
|
|
|||
|
|
@ -44,7 +44,7 @@ public:
|
|||
* Constructor
|
||||
* @param timeline_body The owner timeline body object
|
||||
*/
|
||||
IBeamTool(TimelineBody *timeline_body);
|
||||
IBeamTool(TimelineBody &timeline_body);
|
||||
|
||||
/**
|
||||
* Gets the type of tool represented by this class
|
||||
|
|
|
|||
|
|
@ -29,20 +29,16 @@ namespace gui {
|
|||
namespace widgets {
|
||||
namespace timeline {
|
||||
|
||||
Tool::Tool(TimelineBody *timeline_body) :
|
||||
Tool::Tool(TimelineBody &timeline_body) :
|
||||
timelineBody(timeline_body),
|
||||
isDragging(false)
|
||||
{
|
||||
REQUIRE(timeline_body != NULL);
|
||||
}
|
||||
|
||||
bool
|
||||
Tool::apply_cursor()
|
||||
{
|
||||
REQUIRE(timelineBody != NULL);
|
||||
|
||||
Glib::RefPtr<Window> window =
|
||||
timelineBody->get_window();
|
||||
{
|
||||
Glib::RefPtr<Window> window = timelineBody.get_window();
|
||||
if(!window)
|
||||
return false;
|
||||
|
||||
|
|
@ -75,21 +71,18 @@ Tool::on_motion_notify_event(GdkEventMotion *event)
|
|||
mousePoint = Point(event->x, event->y);
|
||||
}
|
||||
|
||||
gui::widgets::TimelineWidget*
|
||||
gui::widgets::TimelineWidget&
|
||||
Tool::get_timeline_widget() const
|
||||
{
|
||||
REQUIRE(timelineBody != NULL);
|
||||
gui::widgets::TimelineWidget *timeline_widget =
|
||||
timelineBody->timelineWidget;
|
||||
REQUIRE(timeline_widget != NULL);
|
||||
gui::widgets::TimelineWidget &timeline_widget =
|
||||
timelineBody.timelineWidget;
|
||||
return timeline_widget;
|
||||
}
|
||||
|
||||
Gdk::Rectangle
|
||||
Tool::get_body_rectangle() const
|
||||
{
|
||||
REQUIRE(timelineBody != NULL);
|
||||
return timelineBody->get_allocation();
|
||||
return timelineBody.get_allocation();
|
||||
}
|
||||
|
||||
} // namespace timeline
|
||||
|
|
|
|||
|
|
@ -58,7 +58,7 @@ protected:
|
|||
* Constructor
|
||||
* @param timeline_body The owner timeline body object
|
||||
*/
|
||||
Tool(TimelineBody *timeline_body);
|
||||
Tool(TimelineBody &timeline_body);
|
||||
|
||||
public:
|
||||
/**
|
||||
|
|
@ -120,7 +120,7 @@ protected:
|
|||
* Helper function which retrieves the pointer to owner timeline
|
||||
* widget object, which is the owner of the timeline body.
|
||||
*/
|
||||
gui::widgets::TimelineWidget *get_timeline_widget() const;
|
||||
gui::widgets::TimelineWidget &get_timeline_widget() const;
|
||||
|
||||
/**
|
||||
* Helper function which retrieves the rectangle of the timeline
|
||||
|
|
@ -129,7 +129,7 @@ protected:
|
|||
Gdk::Rectangle get_body_rectangle() const;
|
||||
|
||||
protected:
|
||||
TimelineBody *timelineBody;
|
||||
TimelineBody &timelineBody;
|
||||
|
||||
bool isDragging;
|
||||
Gdk::Point mousePoint;
|
||||
|
|
|
|||
Loading…
Reference in a new issue