diff options
author | David Robillard <d@drobilla.net> | 2006-09-19 03:29:16 +0000 |
---|---|---|
committer | David Robillard <d@drobilla.net> | 2006-09-19 03:29:16 +0000 |
commit | 7bd41538d951c3e476655df741adfbebbb990bde (patch) | |
tree | f9988f959571c75535341ab1de463b7cfc5209e3 /gtk2_ardour/editor_canvas.cc | |
parent | c7307c09b8584b15610f0b29a40f839d9183419a (diff) |
Merged with trunk R920.
git-svn-id: svn://localhost/ardour2/branches/midi@921 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'gtk2_ardour/editor_canvas.cc')
-rw-r--r-- | gtk2_ardour/editor_canvas.cc | 56 |
1 files changed, 31 insertions, 25 deletions
diff --git a/gtk2_ardour/editor_canvas.cc b/gtk2_ardour/editor_canvas.cc index d8eebf1c4b..e2e04326ca 100644 --- a/gtk2_ardour/editor_canvas.cc +++ b/gtk2_ardour/editor_canvas.cc @@ -266,14 +266,15 @@ Editor::initialize_canvas () edit_cursor = new Cursor (*this, "blue", &Editor::canvas_edit_cursor_event); playhead_cursor = new Cursor (*this, "red", &Editor::canvas_playhead_cursor_event); - + + initial_ruler_update_required = true; track_canvas.signal_size_allocate().connect (mem_fun(*this, &Editor::track_canvas_allocate)); + } void Editor::track_canvas_allocate (Gtk::Allocation alloc) { - static bool first_time = true; canvas_width = alloc.get_width(); canvas_height = alloc.get_height(); @@ -318,14 +319,16 @@ Editor::track_canvas_allocate (Gtk::Allocation alloc) transport_punchout_line->property_y2() = canvas_height; } - update_fixed_rulers (); - - if (is_visible() && first_time) { + if (is_visible() && initial_ruler_update_required) { + /* + this is really dumb, but signal_size_allocate() gets emitted intermittently + depending on whether the canvas contents are visible or not. + we only want to do this once + */ + update_fixed_rulers(); tempo_map_changed (Change (0)); - first_time = false; - } else { - redisplay_tempo (); - } + initial_ruler_update_required = false; + } Resized (); /* EMIT_SIGNAL */ } @@ -414,6 +417,8 @@ Editor::track_canvas_drag_data_received (const RefPtr<Gdk::DragContext>& context const SelectionData& data, guint info, guint time) { + cerr << "dropping, target = " << data.get_target() << endl; + if (data.get_target() == "regions") { drop_regions (context, x, y, data, info, time); } else { @@ -528,7 +533,7 @@ Editor::maybe_autoscroll (GdkEvent* event) } - if (autoscroll_direction != last_autoscroll_direction) { + if ((autoscroll_direction != last_autoscroll_direction) || (leftmost_frame < frame < rightmost_frame)) { stop_canvas_autoscroll (); } @@ -542,14 +547,13 @@ Editor::maybe_autoscroll (GdkEvent* event) gint Editor::_autoscroll_canvas (void *arg) { - return ((Editor *) arg)->autoscroll_canvas (); + return ((Editor *) arg)->autoscroll_canvas (); } -gint +bool Editor::autoscroll_canvas () { jack_nframes_t new_frame; - bool keep_calling = true; jack_nframes_t limit = max_frames - current_page_frames(); GdkEventMotion ev; jack_nframes_t target_frame; @@ -570,10 +574,6 @@ Editor::autoscroll_canvas () target_frame = drag_info.current_pointer_frame + autoscroll_distance; } - if (new_frame != leftmost_frame) { - reposition_x_origin (new_frame); - } - /* now fake a motion event to get the object that is being dragged to move too */ ev.type = GDK_MOTION_NOTIFY; @@ -593,20 +593,26 @@ Editor::autoscroll_canvas () /* connect the timeout so that we get called repeatedly */ - autoscroll_timeout_tag = g_timeout_add (20, _autoscroll_canvas, this); - keep_calling = false; + autoscroll_timeout_tag = g_idle_add ( _autoscroll_canvas, this); + return false; + + } - } else if (autoscroll_cnt == 50) { /* 0.5 seconds */ + if (new_frame != leftmost_frame) { + reposition_x_origin (new_frame); + } + + if (autoscroll_cnt == 50) { /* 0.5 seconds */ /* after about a while, speed up a bit by changing the timeout interval */ - autoscroll_distance = (jack_nframes_t) floor (current_page_frames()/50.0f); + autoscroll_distance = (jack_nframes_t) floor (current_page_frames()/30.0f); - } else if (autoscroll_cnt == 75) { /* 1.0 seconds */ + } else if (autoscroll_cnt == 150) { /* 1.0 seconds */ autoscroll_distance = (jack_nframes_t) floor (current_page_frames()/20.0f); - } else if (autoscroll_cnt == 100) { /* 1.5 seconds */ + } else if (autoscroll_cnt == 300) { /* 1.5 seconds */ /* after about another while, speed up by increasing the shift per callback */ @@ -614,7 +620,7 @@ Editor::autoscroll_canvas () } - return keep_calling; + return true; } void @@ -631,7 +637,7 @@ Editor::start_canvas_autoscroll (int dir) autoscroll_cnt = 0; /* do it right now, which will start the repeated callbacks */ - + autoscroll_canvas (); } |