summaryrefslogtreecommitdiff
path: root/gtk2_ardour/editor_canvas_events.cc
diff options
context:
space:
mode:
authorCarl Hetherington <carl@carlh.net>2009-07-09 13:39:45 +0000
committerCarl Hetherington <carl@carlh.net>2009-07-09 13:39:45 +0000
commit4297071b3f7360b17d81ef9cf36b8d75d46d2818 (patch)
tree13cbb169cfcf79a2e845d8860f0f98e192f3a8d3 /gtk2_ardour/editor_canvas_events.cc
parent0f8031da06e131595b3625169f9687c1a1ab2f3a (diff)
Use shared_ptr for the TimeAxisView hierarchy.
git-svn-id: svn://localhost/ardour2/branches/3.0@5339 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'gtk2_ardour/editor_canvas_events.cc')
-rw-r--r--gtk2_ardour/editor_canvas_events.cc78
1 files changed, 44 insertions, 34 deletions
diff --git a/gtk2_ardour/editor_canvas_events.cc b/gtk2_ardour/editor_canvas_events.cc
index 4a22c2bda7..3269f9d011 100644
--- a/gtk2_ardour/editor_canvas_events.cc
+++ b/gtk2_ardour/editor_canvas_events.cc
@@ -99,7 +99,7 @@ Editor::track_canvas_scroll (GdkEventScroll* ev)
} else if (Keyboard::modifier_state_equals (ev->state, Keyboard::TertiaryModifier)) {
if (!current_stepping_trackview) {
step_timeout = Glib::signal_timeout().connect (mem_fun(*this, &Editor::track_height_step_timeout), 500);
- std::pair<TimeAxisView*, int> const p = trackview_by_y_position (ev->y + vertical_adjustment.get_value() - canvas_timebars_vsize);
+ std::pair<TimeAxisViewPtr, int> const p = trackview_by_y_position (ev->y + vertical_adjustment.get_value() - canvas_timebars_vsize);
current_stepping_trackview = p.first;
if (!current_stepping_trackview) {
return false;
@@ -134,7 +134,7 @@ Editor::track_canvas_scroll (GdkEventScroll* ev)
} else if (Keyboard::modifier_state_equals (ev->state, Keyboard::TertiaryModifier)) {
if (!current_stepping_trackview) {
step_timeout = Glib::signal_timeout().connect (mem_fun(*this, &Editor::track_height_step_timeout), 500);
- std::pair<TimeAxisView*, int> const p = trackview_by_y_position (ev->y + vertical_adjustment.get_value() - canvas_timebars_vsize);
+ std::pair<TimeAxisViewPtr, int> const p = trackview_by_y_position (ev->y + vertical_adjustment.get_value() - canvas_timebars_vsize);
current_stepping_trackview = p.first;
if (!current_stepping_trackview) {
return false;
@@ -270,8 +270,8 @@ Editor::canvas_region_view_event (GdkEvent *event, ArdourCanvas::Item* item, Reg
case GDK_3BUTTON_PRESS:
clicked_regionview = rv;
clicked_control_point = 0;
- clicked_axisview = &rv->get_time_axis_view();
- clicked_routeview = dynamic_cast<RouteTimeAxisView*>(clicked_axisview);
+ clicked_axisview = rv->get_time_axis_view();
+ clicked_routeview = boost::dynamic_pointer_cast<RouteTimeAxisView> (clicked_axisview);
ret = button_press_handler (item, event, RegionItem);
break;
@@ -284,12 +284,12 @@ Editor::canvas_region_view_event (GdkEvent *event, ArdourCanvas::Item* item, Reg
break;
case GDK_ENTER_NOTIFY:
- set_entered_track (&rv->get_time_axis_view ());
+ set_entered_track (rv->get_time_axis_view ());
set_entered_regionview (rv);
break;
case GDK_LEAVE_NOTIFY:
- set_entered_track (0);
+ set_entered_track (TimeAxisViewPtr ());
set_entered_regionview (0);
break;
@@ -301,8 +301,13 @@ Editor::canvas_region_view_event (GdkEvent *event, ArdourCanvas::Item* item, Reg
}
bool
-Editor::canvas_stream_view_event (GdkEvent *event, ArdourCanvas::Item* item, RouteTimeAxisView *tv)
+Editor::canvas_stream_view_event (GdkEvent *event, ArdourCanvas::Item* item, boost::weak_ptr<TimeAxisView> w)
{
+ boost::shared_ptr<TimeAxisView> tv = w.lock ();
+ if (!tv) {
+ return false;
+ }
+
bool ret = FALSE;
switch (event->type) {
@@ -312,7 +317,7 @@ Editor::canvas_stream_view_event (GdkEvent *event, ArdourCanvas::Item* item, Rou
clicked_regionview = 0;
clicked_control_point = 0;
clicked_axisview = tv;
- clicked_routeview = dynamic_cast<RouteTimeAxisView*>(tv);
+ clicked_routeview = boost::dynamic_pointer_cast<RouteTimeAxisView>(tv);
ret = button_press_handler (item, event, StreamItem);
break;
@@ -329,7 +334,7 @@ Editor::canvas_stream_view_event (GdkEvent *event, ArdourCanvas::Item* item, Rou
break;
case GDK_LEAVE_NOTIFY:
- set_entered_track (0);
+ set_entered_track (TimeAxisViewPtr ());
break;
default:
@@ -340,8 +345,13 @@ Editor::canvas_stream_view_event (GdkEvent *event, ArdourCanvas::Item* item, Rou
}
bool
-Editor::canvas_automation_track_event (GdkEvent *event, ArdourCanvas::Item* item, AutomationTimeAxisView *atv)
+Editor::canvas_automation_track_event (GdkEvent *event, ArdourCanvas::Item* item, boost::weak_ptr<AutomationTimeAxisView> v)
{
+ boost::shared_ptr<AutomationTimeAxisView> atv = v.lock ();
+ if (!atv) {
+ return false;
+ }
+
bool ret = false;
switch (event->type) {
@@ -350,8 +360,8 @@ Editor::canvas_automation_track_event (GdkEvent *event, ArdourCanvas::Item* item
case GDK_3BUTTON_PRESS:
clicked_regionview = 0;
clicked_control_point = 0;
- clicked_axisview = atv;
- clicked_routeview = 0;
+ clicked_axisview.reset ();
+ clicked_routeview.reset ();
ret = button_press_handler (item, event, AutomationTrackItem);
break;
@@ -391,8 +401,8 @@ Editor::canvas_fade_in_event (GdkEvent *event, ArdourCanvas::Item* item, AudioRe
case GDK_BUTTON_PRESS:
clicked_regionview = rv;
clicked_control_point = 0;
- clicked_axisview = &rv->get_time_axis_view();
- clicked_routeview = dynamic_cast<RouteTimeAxisView*>(clicked_axisview);
+ clicked_axisview = rv->get_time_axis_view();
+ clicked_routeview = boost::dynamic_pointer_cast<RouteTimeAxisView>(clicked_axisview);
if (event->button.button == 3) {
return button_press_handler (item, event, FadeInItem);
}
@@ -429,8 +439,8 @@ Editor::canvas_fade_in_handle_event (GdkEvent *event, ArdourCanvas::Item* item,
case GDK_3BUTTON_PRESS:
clicked_regionview = rv;
clicked_control_point = 0;
- clicked_axisview = &rv->get_time_axis_view();
- clicked_routeview = dynamic_cast<RouteTimeAxisView*>(clicked_axisview);
+ clicked_axisview = rv->get_time_axis_view();
+ clicked_routeview = boost::dynamic_pointer_cast<RouteTimeAxisView>(clicked_axisview);
ret = button_press_handler (item, event, FadeInHandleItem);
break;
@@ -470,8 +480,8 @@ Editor::canvas_fade_out_event (GdkEvent *event, ArdourCanvas::Item* item, AudioR
case GDK_BUTTON_PRESS:
clicked_regionview = rv;
clicked_control_point = 0;
- clicked_axisview = &rv->get_time_axis_view();
- clicked_routeview = dynamic_cast<RouteTimeAxisView*>(clicked_axisview);
+ clicked_axisview = rv->get_time_axis_view();
+ clicked_routeview = boost::dynamic_pointer_cast<RouteTimeAxisView> (clicked_axisview);
if (event->button.button == 3) {
return button_press_handler (item, event, FadeOutItem);
}
@@ -508,8 +518,8 @@ Editor::canvas_fade_out_handle_event (GdkEvent *event, ArdourCanvas::Item* item,
case GDK_3BUTTON_PRESS:
clicked_regionview = rv;
clicked_control_point = 0;
- clicked_axisview = &rv->get_time_axis_view();
- clicked_routeview = dynamic_cast<RouteTimeAxisView*>(clicked_axisview);
+ clicked_axisview = rv->get_time_axis_view();
+ clicked_routeview = boost::dynamic_pointer_cast<RouteTimeAxisView>(clicked_axisview);
ret = button_press_handler (item, event, FadeOutHandleItem);
break;
@@ -550,7 +560,7 @@ Editor::canvas_crossfade_view_event (GdkEvent* event, ArdourCanvas::Item* item,
switch (event->type) {
case GDK_BUTTON_PRESS:
clicked_crossfadeview = xfv;
- clicked_axisview = &clicked_crossfadeview->get_time_axis_view();
+ clicked_axisview = clicked_crossfadeview->get_time_axis_view();
if (event->button.button == 3) {
return button_press_handler (item, event, CrossfadeViewItem);
}
@@ -580,10 +590,10 @@ Editor::canvas_crossfade_view_event (GdkEvent* event, ArdourCanvas::Item* item,
and proxy to that when required.
*/
- TimeAxisView& tv (xfv->get_time_axis_view());
- AudioTimeAxisView* atv;
+ TimeAxisViewPtr tv (xfv->get_time_axis_view());
+ AudioTimeAxisViewPtr atv;
- if ((atv = dynamic_cast<AudioTimeAxisView*>(&tv)) != 0) {
+ if ((atv = boost::dynamic_pointer_cast<AudioTimeAxisView>(tv)) != 0) {
if (atv->is_audio_track()) {
@@ -621,8 +631,8 @@ Editor::canvas_control_point_event (GdkEvent *event, ArdourCanvas::Item* item, C
case GDK_2BUTTON_PRESS:
case GDK_3BUTTON_PRESS:
clicked_control_point = cp;
- clicked_axisview = &cp->line().trackview;
- clicked_routeview = dynamic_cast<RouteTimeAxisView*>(clicked_axisview);
+ clicked_axisview = cp->line().trackview;
+ clicked_routeview = boost::dynamic_pointer_cast<RouteTimeAxisView>(clicked_axisview);
clicked_regionview = 0;
break;
@@ -769,8 +779,8 @@ Editor::canvas_region_view_name_highlight_event (GdkEvent* event, ArdourCanvas::
case GDK_3BUTTON_PRESS:
clicked_regionview = rv;
clicked_control_point = 0;
- clicked_axisview = &clicked_regionview->get_time_axis_view();
- clicked_routeview = dynamic_cast<RouteTimeAxisView*>(clicked_axisview);
+ clicked_axisview = clicked_regionview->get_time_axis_view();
+ clicked_routeview = boost::dynamic_pointer_cast<RouteTimeAxisView>(clicked_axisview);
ret = button_press_handler (item, event, RegionViewNameHighlight);
break;
case GDK_BUTTON_RELEASE:
@@ -809,8 +819,8 @@ Editor::canvas_region_view_name_event (GdkEvent *event, ArdourCanvas::Item* item
case GDK_3BUTTON_PRESS:
clicked_regionview = rv;
clicked_control_point = 0;
- clicked_axisview = &clicked_regionview->get_time_axis_view();
- clicked_routeview = dynamic_cast<RouteTimeAxisView*>(clicked_axisview);
+ clicked_axisview = clicked_regionview->get_time_axis_view();
+ clicked_routeview = boost::dynamic_pointer_cast<RouteTimeAxisView>(clicked_axisview);
ret = button_press_handler (item, event, RegionViewName);
break;
case GDK_BUTTON_RELEASE:
@@ -920,12 +930,12 @@ Editor::track_canvas_drag_motion (Glib::RefPtr<Gdk::DragContext> const & c, int
double py;
nframes64_t const pos = event_frame (&event, &px, &py);
- std::pair<TimeAxisView*, int> const tv = trackview_by_y_position (py);
+ std::pair<TimeAxisViewPtr, int> const tv = trackview_by_y_position (py);
if (tv.first == 0) {
return true;
}
- RouteTimeAxisView* rtav = dynamic_cast<RouteTimeAxisView*> (tv.first);
+ RouteTimeAxisViewPtr rtav = boost::dynamic_pointer_cast<RouteTimeAxisView> (tv.first);
if (rtav == 0 || !rtav->is_track ()) {
return true;
}
@@ -935,14 +945,14 @@ Editor::track_canvas_drag_motion (Glib::RefPtr<Gdk::DragContext> const & c, int
boost::shared_ptr<Region> region_copy = RegionFactory::create (region);
if (boost::dynamic_pointer_cast<AudioRegion> (region_copy) != 0 &&
- dynamic_cast<AudioTimeAxisView*> (tv.first) == 0) {
+ boost::dynamic_pointer_cast<AudioTimeAxisView> (tv.first) == 0) {
/* audio -> non-audio */
return true;
}
if (boost::dynamic_pointer_cast<MidiRegion> (region_copy) == 0 &&
- dynamic_cast<MidiTimeAxisView*> (tv.first) != 0) {
+ boost::dynamic_pointer_cast<MidiTimeAxisView> (tv.first) != 0) {
/* MIDI -> non-MIDI */
return true;