X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Feditor_imageframe.cc;h=bac689b48ff779e30f18f5ddd3319106c0896557;hb=6b641cdde4fa01baa1bf03e69131bd2b1a81b67b;hp=a8dce7d64bbabfae4f6c45b4b6036de4828ecf75;hpb=d43cc4e7b5e95d4f4a8ed4d8fff99b6f846fe074;p=ardour.git diff --git a/gtk2_ardour/editor_imageframe.cc b/gtk2_ardour/editor_imageframe.cc index a8dce7d64b..bac689b48f 100644 --- a/gtk2_ardour/editor_imageframe.cc +++ b/gtk2_ardour/editor_imageframe.cc @@ -1,5 +1,5 @@ /* - Copyright (C) 2000-2003 Paul Davis + Copyright (C) 2000-2003 Paul Davis Written by Colin Law, CMT, Glasgow This program is free software; you can redistribute it and/or modify @@ -16,7 +16,6 @@ along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - $Id$ */ #include "imageframe_view.h" @@ -31,7 +30,7 @@ #include "canvas_impl.h" #include -#include +#include "pbd/error.h" #include #include @@ -42,8 +41,27 @@ #include "imageframe_socket_handler.h" #include "ardour_image_compositor_socket.h" #include "public_editor.h" +#include "gui_thread.h" using namespace Gtk; +using namespace PBD; +using namespace std; + +TimeAxisView* +Editor::get_named_time_axis(const string & name) +{ + TimeAxisView* tav = 0 ; + + for (TrackViewList::const_iterator i = track_views.begin(); i != track_views.end(); ++i) + { + if (((TimeAxisView*)*i)->name() == name) + { + tav = ((TimeAxisView*)*i) ; + break ; + } + } + return(tav) ; +} /* */ @@ -57,7 +75,7 @@ Editor::add_imageframe_time_axis(const string & track_name, void* src) } else { - Gtkmm2ext::UI::instance()->call_slot(bind(mem_fun(*this, &Editor::handle_new_imageframe_time_axis_view),track_name, src)) ; + Gtkmm2ext::UI::instance()->call_slot (boost::bind (&Editor::handle_new_imageframe_time_axis_view, this,track_name, src)); } } @@ -68,7 +86,7 @@ Editor::connect_to_image_compositor() { image_socket_listener = ImageFrameSocketHandler::create_instance(*this) ; } - + if(image_socket_listener->is_connected() == true) { return ; @@ -76,16 +94,16 @@ Editor::connect_to_image_compositor() // XXX should really put this somewhere safe const char * host_ip = "127.0.0.1" ; - + bool retcode = image_socket_listener->connect(host_ip, ardourvis::DEFAULT_PORT) ; - + if(retcode == false) { // XXX need to get some return status here warning << "Image Compositor Connection attempt failed" << std::endl ; return ; } - + // add the socket to the gui loop, and keep the retuned tag value of the input gint tag = gdk_input_add(image_socket_listener->get_socket_descriptor(), GDK_INPUT_READ,ImageFrameSocketHandler::image_socket_callback,image_socket_listener) ; image_socket_listener->set_gdk_input_tag(tag) ; @@ -95,40 +113,38 @@ void Editor::scroll_timeaxis_to_imageframe_item(const TimeAxisViewItem* item) { // GTK2FIX - //jack_nframes_t offset = static_cast(frames_per_unit * (edit_hscroll_slider_width/2)) ; - jack_nframes_t offset = 0; + //nframes64_t offset = static_cast(frames_per_unit * (edit_hscroll_slider_width/2)) ; + nframes64_t offset = 0; - jack_nframes_t x_pos = 0 ; - if(item->get_position() < offset) - { + nframes64_t x_pos = 0 ; + + if (item->get_position() < offset) { x_pos = 0 ; + } else { + x_pos = item->get_position() - offset + (item->get_duration() / 2); } - else - { - x_pos = item->get_position() - offset + (item->get_duration() / 2) ; - } - - reposition_x_origin(x_pos) ; + + reset_x_origin (x_pos); } void Editor::add_imageframe_marker_time_axis(const string & track_name, TimeAxisView* marked_track, void* src) { - // Can we only bind 2 data Items? - // @todo we really want to bind the src attribute too, for the moment tracks can only be added remotely, + // Can we only sigc::bind 2 data Items? + // @todo we really want to sigc::bind the src attribute too, for the moment tracks can only be added remotely, // so this is not too much of an issue, however will need to be looked at again - Gtkmm2ext::UI::instance()->call_slot(sigc::bind(mem_fun(*this, &Editor::handle_new_imageframe_marker_time_axis_view),track_name, marked_track)) ; + Gtkmm2ext::UI::instance()->call_slot (boost::bind (&Editor::handle_new_imageframe_marker_time_axis_view, this, track_name, marked_track)); } void Editor::popup_imageframe_edit_menu(int button, int32_t time, ArdourCanvas::Item* ifv, bool with_item) { - ImageFrameTimeAxis* ifta = dynamic_cast(clicked_trackview) ; - + ImageFrameTimeAxis* ifta = dynamic_cast(clicked_axisview) ; + if(ifta) { ImageFrameTimeAxisGroup* iftag = ifta->get_view()->get_selected_imageframe_group() ; - + if(iftag) { ImageFrameView* selected_ifv = ifta->get_view()->get_selected_imageframe_view() ; @@ -140,8 +156,8 @@ Editor::popup_imageframe_edit_menu(int button, int32_t time, ArdourCanvas::Item* void Editor::popup_marker_time_axis_edit_menu(int button, int32_t time, ArdourCanvas::Item* ifv, bool with_item) { - MarkerTimeAxis* mta = dynamic_cast(clicked_trackview) ; - + MarkerTimeAxis* mta = dynamic_cast(clicked_axisview) ; + if(mta) { MarkerView* selected_mv = mta->get_view()->get_selected_time_axis_item() ; @@ -151,45 +167,23 @@ Editor::popup_marker_time_axis_edit_menu(int button, int32_t time, ArdourCanvas: } } } - -TimeAxisView* -Editor::get_named_time_axis(const string & name) -{ - TimeAxisView* tav = 0 ; - - for (TrackViewList::const_iterator i = track_views.begin(); i != track_views.end(); ++i) - { - if (((TimeAxisView*)*i)->name() == name) - { - tav = ((TimeAxisView*)*i) ; - break ; - } - } - return(tav) ; -} - /* */ - - - - - /* */ bool Editor::canvas_imageframe_item_view_event (GdkEvent *event, ArdourCanvas::Item* item, ImageFrameView *ifv) { gint ret = FALSE ; ImageFrameTimeAxisGroup* iftag = 0 ; - + switch (event->type) { case GDK_BUTTON_PRESS: case GDK_2BUTTON_PRESS: case GDK_3BUTTON_PRESS: - clicked_trackview = &ifv->get_time_axis_view(); + clicked_axisview = &ifv->get_time_axis_view(); iftag = ifv->get_time_axis_group() ; - dynamic_cast(clicked_trackview)->get_view()->set_selected_imageframe_view(iftag, ifv); + dynamic_cast(clicked_axisview)->get_view()->set_selected_imageframe_view(iftag, ifv); ret = button_press_handler (item, event, ImageFrameItem) ; break ; case GDK_BUTTON_RELEASE: @@ -209,16 +203,16 @@ Editor::canvas_imageframe_start_handle_event (GdkEvent *event, ArdourCanvas::Ite { gint ret = FALSE ; ImageFrameTimeAxisGroup* iftag = 0 ; - + switch (event->type) { case GDK_BUTTON_PRESS: case GDK_2BUTTON_PRESS: case GDK_3BUTTON_PRESS: - clicked_trackview = &ifv->get_time_axis_view() ; + clicked_axisview = &ifv->get_time_axis_view() ; iftag = ifv->get_time_axis_group() ; - dynamic_cast(clicked_trackview)->get_view()->set_selected_imageframe_view(iftag, ifv); - + dynamic_cast(clicked_axisview)->get_view()->set_selected_imageframe_view(iftag, ifv); + ret = button_press_handler (item, event, ImageFrameHandleStartItem) ; break ; case GDK_BUTTON_RELEASE: @@ -244,16 +238,16 @@ Editor::canvas_imageframe_end_handle_event (GdkEvent *event, ArdourCanvas::Item* { gint ret = FALSE ; ImageFrameTimeAxisGroup* iftag = 0 ; - + switch (event->type) { case GDK_BUTTON_PRESS: case GDK_2BUTTON_PRESS: case GDK_3BUTTON_PRESS: - clicked_trackview = &ifv->get_time_axis_view() ; + clicked_axisview = &ifv->get_time_axis_view() ; iftag = ifv->get_time_axis_group() ; - dynamic_cast(clicked_trackview)->get_view()->set_selected_imageframe_view(iftag, ifv); - + dynamic_cast(clicked_axisview)->get_view()->set_selected_imageframe_view(iftag, ifv); + ret = button_press_handler (item, event, ImageFrameHandleEndItem) ; break ; case GDK_BUTTON_RELEASE: @@ -283,7 +277,7 @@ Editor::canvas_imageframe_view_event (GdkEvent* event, ArdourCanvas::Item* item, case GDK_BUTTON_PRESS: case GDK_2BUTTON_PRESS: case GDK_3BUTTON_PRESS: - clicked_trackview = ifta ; + clicked_axisview = ifta ; ret = button_press_handler (item, event, ImageFrameTimeAxisItem) ; break ; case GDK_BUTTON_RELEASE: @@ -306,7 +300,7 @@ Editor::canvas_marker_time_axis_view_event (GdkEvent* event, ArdourCanvas::Item* case GDK_BUTTON_PRESS: case GDK_2BUTTON_PRESS: case GDK_3BUTTON_PRESS: - clicked_trackview = mta ; + clicked_axisview = mta ; ret = button_press_handler(item, event, MarkerTimeAxisItem) ; break ; case GDK_BUTTON_RELEASE: @@ -329,8 +323,8 @@ Editor::canvas_markerview_item_view_event (GdkEvent* event, ArdourCanvas::Item* case GDK_BUTTON_PRESS: case GDK_2BUTTON_PRESS: case GDK_3BUTTON_PRESS: - clicked_trackview = &mta->get_time_axis_view() ; - dynamic_cast(clicked_trackview)->get_view()->set_selected_time_axis_item(mta); + clicked_axisview = &mta->get_time_axis_view() ; + dynamic_cast(clicked_axisview)->get_view()->set_selected_time_axis_item(mta); ret = button_press_handler(item, event, MarkerViewItem) ; break ; case GDK_BUTTON_RELEASE: @@ -354,8 +348,8 @@ Editor::canvas_markerview_start_handle_event (GdkEvent* event, ArdourCanvas::Ite case GDK_BUTTON_PRESS: case GDK_2BUTTON_PRESS: case GDK_3BUTTON_PRESS: - clicked_trackview = &mta->get_time_axis_view() ; - dynamic_cast(clicked_trackview)->get_view()->set_selected_time_axis_item(mta) ; + clicked_axisview = &mta->get_time_axis_view() ; + dynamic_cast(clicked_axisview)->get_view()->set_selected_time_axis_item(mta) ; ret = button_press_handler(item, event, MarkerViewHandleStartItem) ; break ; case GDK_BUTTON_RELEASE: @@ -385,8 +379,8 @@ Editor::canvas_markerview_end_handle_event (GdkEvent* event, ArdourCanvas::Item* case GDK_BUTTON_PRESS: case GDK_2BUTTON_PRESS: case GDK_3BUTTON_PRESS: - clicked_trackview = &mta->get_time_axis_view() ; - dynamic_cast(clicked_trackview)->get_view()->set_selected_time_axis_item(mta) ; + clicked_axisview = &mta->get_time_axis_view() ; + dynamic_cast(clicked_axisview)->get_view()->set_selected_time_axis_item(mta) ; ret = button_press_handler(item, event, MarkerViewHandleEndItem) ; break ; case GDK_BUTTON_RELEASE: @@ -424,16 +418,17 @@ Editor::canvas_markerview_end_handle_event (GdkEvent* event, ArdourCanvas::Item* void Editor::start_imageframe_grab(ArdourCanvas::Item* item, GdkEvent* event) { - ImageFrameView* ifv = ((ImageFrameTimeAxis*)clicked_trackview)->get_view()->get_selected_imageframe_view() ; + ImageFrameView* ifv = ((ImageFrameTimeAxis*)clicked_axisview)->get_view()->get_selected_imageframe_view() ; drag_info.copy = false ; drag_info.item = item ; drag_info.data = ifv ; drag_info.motion_callback = &Editor::imageframe_drag_motion_callback; drag_info.finished_callback = &Editor::timeaxis_item_drag_finished_callback; drag_info.last_frame_position = ifv->get_position() ; - - drag_info.last_trackview = &ifv->get_time_axis_view() ; - + + drag_info.source_trackview = &ifv->get_time_axis_view() ; + drag_info.dest_trackview = drag_info.source_trackview; + /* this is subtle. raising the regionview itself won't help, because raise_to_top() just puts the item on the top of its parent's stack. so, we need to put the trackview canvas_display group @@ -444,7 +439,7 @@ Editor::start_imageframe_grab(ArdourCanvas::Item* item, GdkEvent* event) */ drag_info.item->raise_to_top(); - drag_info.last_trackview->canvas_display->raise_to_top(); + drag_info.source_trackview->canvas_display->raise_to_top(); //time_line_group->raise_to_top(); cursor_group->raise_to_top (); @@ -457,7 +452,7 @@ Editor::start_imageframe_grab(ArdourCanvas::Item* item, GdkEvent* event) void Editor::start_markerview_grab(ArdourCanvas::Item* item, GdkEvent* event) { - MarkerView* mv = ((MarkerTimeAxis*)clicked_trackview)->get_view()->get_selected_time_axis_item() ; + MarkerView* mv = ((MarkerTimeAxis*)clicked_axisview)->get_view()->get_selected_time_axis_item() ; drag_info.copy = false ; drag_info.item = item ; drag_info.data = mv ; @@ -465,7 +460,8 @@ Editor::start_markerview_grab(ArdourCanvas::Item* item, GdkEvent* event) drag_info.finished_callback = &Editor::timeaxis_item_drag_finished_callback; drag_info.last_frame_position = mv->get_position() ; - drag_info.last_trackview = &mv->get_time_axis_view() ; + drag_info.source_trackview = &mv->get_time_axis_view() ; + drag_info.dest_trackview = drag_info.source_trackview; /* this is subtle. raising the regionview itself won't help, because raise_to_top() just puts the item on the top of @@ -477,12 +473,12 @@ Editor::start_markerview_grab(ArdourCanvas::Item* item, GdkEvent* event) */ drag_info.item->raise_to_top(); - drag_info.last_trackview->canvas_display->raise_to_top(); + drag_info.source_trackview->canvas_display->raise_to_top(); //time_line_group->raise_to_top(); cursor_group->raise_to_top (); start_grab(event) ; - + drag_info.pointer_frame_offset = pixel_to_frame(drag_info.grab_x) - drag_info.last_frame_position ; } @@ -493,25 +489,25 @@ Editor::markerview_drag_motion_callback(ArdourCanvas::Item*, GdkEvent* event) double cx, cy ; MarkerView* mv = reinterpret_cast(drag_info.data) ; - jack_nframes_t pending_region_position ; - jack_nframes_t pointer_frame ; + nframes64_t pending_region_position ; + nframes64_t pointer_frame ; pointer_frame = event_frame(event, &cx, &cy) ; snap_to(pointer_frame) ; - if (pointer_frame > (jack_nframes_t) drag_info.pointer_frame_offset) + if (pointer_frame > (nframes64_t) drag_info.pointer_frame_offset) { pending_region_position = pointer_frame - drag_info.pointer_frame_offset ; snap_to(pending_region_position) ; - + // we dont allow marker items to extend beyond, or in front of the marked items so // cap the value to the marked items position and duration - if((pending_region_position + mv->get_duration()) >= ((mv->get_marked_item()->get_position()) + (mv->get_marked_item()->get_duration()))) + if((pending_region_position + mv->get_duration()) >= ((mv->get_marked_item()->get_position()) + (mv->get_marked_item()->get_duration()))) { pending_region_position = (mv->get_marked_item()->get_position() + mv->get_marked_item()->get_duration()) - (mv->get_duration()) ; } - else if(pending_region_position <= mv->get_marked_item()->get_position()) + else if(pending_region_position <= mv->get_marked_item()->get_position()) { pending_region_position = mv->get_marked_item()->get_position() ; } @@ -522,7 +518,7 @@ Editor::markerview_drag_motion_callback(ArdourCanvas::Item*, GdkEvent* event) } drag_info.last_frame_position = pending_region_position ; - + // we treat this as a special case, usually we want to send the identitiy of the caller // but in this case, that would trigger our socket handler to handle the event, sending // notification to the image compositor. This would be fine, except that we have not @@ -538,17 +534,17 @@ void Editor::imageframe_drag_motion_callback(ArdourCanvas::Item*, GdkEvent* event) { double cx, cy ; - + ImageFrameView* ifv = reinterpret_cast(drag_info.data) ; - - jack_nframes_t pending_region_position; - jack_nframes_t pointer_frame; + + nframes64_t pending_region_position; + nframes64_t pointer_frame; pointer_frame = event_frame(event, &cx, &cy) ; snap_to(pointer_frame) ; - if (pointer_frame > (jack_nframes_t) drag_info.pointer_frame_offset) + if (pointer_frame > (nframes64_t) drag_info.pointer_frame_offset) { pending_region_position = pointer_frame - drag_info.pointer_frame_offset ; snap_to(pending_region_position) ; @@ -561,7 +557,7 @@ Editor::imageframe_drag_motion_callback(ArdourCanvas::Item*, GdkEvent* event) drag_info.grab_x = cx; //drag_info.last_frame_position = pending_region_position ; drag_info.current_pointer_frame = pending_region_position ; - + // we treat this as a special case, usually we want to send the identitiy of the caller // but in this case, that would trigger our socket handler to handle the event, sending // notification to the image compositor. This would be fine, except that we have not @@ -569,14 +565,14 @@ Editor::imageframe_drag_motion_callback(ArdourCanvas::Item*, GdkEvent* event) // completed the drag, only then do we want the image compositor notofied. // We therefore set the caller identity to the special case of 0 ifv->set_position(pending_region_position, 0) ; - + show_verbose_time_cursor(pending_region_position) ; } void Editor::timeaxis_item_drag_finished_callback(ArdourCanvas::Item*, GdkEvent* event) { - jack_nframes_t where ; + nframes64_t where ; TimeAxisViewItem* tavi = reinterpret_cast(drag_info.data) ; bool item_x_movement = (drag_info.last_frame_position != tavi->get_position()) ; @@ -598,7 +594,7 @@ Editor::timeaxis_item_drag_finished_callback(ArdourCanvas::Item*, GdkEvent* even { /* base the new region position on the current position of the regionview.*/ where = drag_info.current_pointer_frame ; - + // final call to set position after the motion to tell interested parties of the new position tavi->set_position(where, this) ; } @@ -606,7 +602,7 @@ Editor::timeaxis_item_drag_finished_callback(ArdourCanvas::Item*, GdkEvent* even { //where = tavi->get_position() ; } - + } @@ -615,7 +611,7 @@ void Editor::imageframe_start_handle_op(ArdourCanvas::Item* item, GdkEvent* event) { // get the selected item from the parent time axis - ImageFrameTimeAxis* ifta = dynamic_cast(clicked_trackview) ; + ImageFrameTimeAxis* ifta = dynamic_cast(clicked_axisview) ; if(ifta) { ImageFrameView* ifv = ifta->get_view()->get_selected_imageframe_view() ; @@ -632,9 +628,9 @@ Editor::imageframe_start_handle_op(ArdourCanvas::Item* item, GdkEvent* event) drag_info.cumulative_x_drag = 0; drag_info.motion_callback = &Editor::imageframe_start_handle_trim_motion ; drag_info.finished_callback = &Editor::imageframe_start_handle_end_trim ; - + start_grab(event) ; - + show_verbose_time_cursor(ifv->get_position(), 10) ; } } @@ -643,19 +639,19 @@ void Editor::imageframe_end_handle_op(ArdourCanvas::Item* item, GdkEvent* event) { // get the selected item from the parent time axis - ImageFrameTimeAxis* ifta = dynamic_cast(clicked_trackview) ; + ImageFrameTimeAxis* ifta = dynamic_cast(clicked_axisview) ; if(ifta) { ImageFrameView* ifv = ifta->get_view()->get_selected_imageframe_view() ; - + if (ifv == 0) { fatal << _("programming error: no ImageFrameView selected") << endmsg ; /*NOTREACHED*/ return ; } - + drag_info.item = ifv->get_canvas_frame() ; drag_info.data = ifv ; drag_info.grab_x = event->motion.x ; @@ -673,11 +669,11 @@ void Editor::imageframe_start_handle_trim_motion(ArdourCanvas::Item* item, GdkEvent* event) { ImageFrameView* ifv = reinterpret_cast (drag_info.data) ; - - jack_nframes_t start = 0 ; - jack_nframes_t end = 0 ; - jack_nframes_t pointer_frame = event_frame(event) ; - + + nframes64_t start = 0 ; + nframes64_t end = 0 ; + nframes64_t pointer_frame = event_frame(event) ; + // chekc th eposition of the item is not locked if(!ifv->get_position_locked()) { snap_to(pointer_frame) ; @@ -685,18 +681,18 @@ Editor::imageframe_start_handle_trim_motion(ArdourCanvas::Item* item, GdkEvent* if(pointer_frame != drag_info.last_pointer_frame) { start = ifv->get_position() ; end = ifv->get_position() + ifv->get_duration() ; - + if (pointer_frame > end) { start = end ; } else { start = pointer_frame ; } - + // are we getting bigger or smaller? - jack_nframes_t new_dur_val = end - start ; - + nframes64_t new_dur_val = end - start ; + // start handle, so a smaller pointer frame increases our component size - if(pointer_frame <= drag_info.grab_frame) + if(pointer_frame <= drag_info.grab_frame) { if(ifv->get_max_duration_active() && (new_dur_val > ifv->get_max_duration())) { @@ -720,9 +716,9 @@ Editor::imageframe_start_handle_trim_motion(ArdourCanvas::Item* item, GdkEvent* // current values are ok } } - + drag_info.last_pointer_frame = pointer_frame ; - + /* re-calculatethe duration and position of the imageframeview */ drag_info.cumulative_x_drag = new_dur_val ; @@ -736,7 +732,7 @@ Editor::imageframe_start_handle_trim_motion(ArdourCanvas::Item* item, GdkEvent* ifv->set_position(start, 0) ; } } - + show_verbose_time_cursor(start, 10) ; } @@ -744,17 +740,17 @@ void Editor::imageframe_start_handle_end_trim(ArdourCanvas::Item* item, GdkEvent* event) { ImageFrameView* ifv = reinterpret_cast (drag_info.data) ; - + if (drag_info.cumulative_x_drag == 0) { /* just a click */ } else { - jack_nframes_t temp = ifv->get_position() + ifv->get_duration() ; - - ifv->set_position((jack_nframes_t) (temp - drag_info.cumulative_x_drag), this) ; - ifv->set_duration((jack_nframes_t) drag_info.cumulative_x_drag, this) ; + nframes64_t temp = ifv->get_position() + ifv->get_duration() ; + + ifv->set_position((nframes64_t) (temp - drag_info.cumulative_x_drag), this) ; + ifv->set_duration((nframes64_t) drag_info.cumulative_x_drag, this) ; } } @@ -762,14 +758,14 @@ void Editor::imageframe_end_handle_trim_motion(ArdourCanvas::Item* item, GdkEvent* event) { ImageFrameView* ifv = reinterpret_cast (drag_info.data) ; - - jack_nframes_t start = 0 ; - jack_nframes_t end = 0 ; - jack_nframes_t pointer_frame = event_frame(event) ; - jack_nframes_t new_dur_val = 0 ; + + nframes64_t start = 0 ; + nframes64_t end = 0 ; + nframes64_t pointer_frame = event_frame(event) ; + nframes64_t new_dur_val = 0 ; snap_to(pointer_frame) ; - + if (pointer_frame != drag_info.last_pointer_frame) { start = ifv->get_position() ; @@ -782,9 +778,9 @@ Editor::imageframe_end_handle_trim_motion(ArdourCanvas::Item* item, GdkEvent* ev { end = pointer_frame ; } - + new_dur_val = end - start ; - + // are we getting bigger or smaller? if(pointer_frame >= drag_info.last_pointer_frame) { @@ -800,10 +796,10 @@ Editor::imageframe_end_handle_trim_motion(ArdourCanvas::Item* item, GdkEvent* ev new_dur_val = ifv->get_min_duration() ; } } - + drag_info.last_pointer_frame = pointer_frame ; drag_info.cumulative_x_drag = new_dur_val ; - + // we treat this as a special case, usually we want to send the identitiy of the caller // but in this case, that would trigger our socket handler to handle the event, sending // notification to the image compositor. This would be fine, except that we have not @@ -812,7 +808,7 @@ Editor::imageframe_end_handle_trim_motion(ArdourCanvas::Item* item, GdkEvent* ev // We therefore set the caller identity to the special case of 0 ifv->set_duration(new_dur_val, 0) ; } - + show_verbose_time_cursor(new_dur_val, 10) ; } @@ -828,7 +824,7 @@ Editor::imageframe_end_handle_end_trim (ArdourCanvas::Item* item, GdkEvent* even } else { - jack_nframes_t new_duration = (jack_nframes_t)drag_info.cumulative_x_drag ; + nframes64_t new_duration = (nframes64_t)drag_info.cumulative_x_drag ; if((new_duration <= ifv->get_max_duration()) && (new_duration >= ifv->get_min_duration())) { ifv->set_duration(new_duration, this) ; @@ -840,7 +836,7 @@ Editor::imageframe_end_handle_end_trim (ArdourCanvas::Item* item, GdkEvent* even void Editor::markerview_item_start_handle_op(ArdourCanvas::Item* item, GdkEvent* event) { - MarkerView* mv = reinterpret_cast(clicked_trackview)->get_view()->get_selected_time_axis_item() ; + MarkerView* mv = reinterpret_cast(clicked_axisview)->get_view()->get_selected_time_axis_item() ; if (mv == 0) { @@ -863,22 +859,22 @@ Editor::markerview_item_start_handle_op(ArdourCanvas::Item* item, GdkEvent* even void Editor::markerview_item_end_handle_op(ArdourCanvas::Item* item, GdkEvent* event) { - MarkerView* mv = reinterpret_cast(clicked_trackview)->get_view()->get_selected_time_axis_item() ; + MarkerView* mv = reinterpret_cast(clicked_axisview)->get_view()->get_selected_time_axis_item() ; if (mv == 0) { fatal << _("programming error: no MarkerView selected") << endmsg ; /*NOTREACHED*/ return ; } - + drag_info.item = mv->get_canvas_frame() ; drag_info.data = mv ; drag_info.grab_x = event->motion.x ; drag_info.cumulative_x_drag = 0 ; - + drag_info.motion_callback = &Editor::markerview_end_handle_trim_motion ; drag_info.finished_callback = &Editor::markerview_end_handle_end_trim ; - + start_grab(event, trimmer_cursor) ; } @@ -887,11 +883,11 @@ void Editor::markerview_start_handle_trim_motion(ArdourCanvas::Item* item, GdkEvent* event) { MarkerView* mv = reinterpret_cast (drag_info.data) ; - - jack_nframes_t start = 0 ; - jack_nframes_t end = 0 ; - jack_nframes_t pointer_frame = event_frame(event) ; - + + nframes64_t start = 0 ; + nframes64_t end = 0 ; + nframes64_t pointer_frame = event_frame(event) ; + // chekc th eposition of the item is not locked if(!mv->get_position_locked()) { @@ -900,7 +896,7 @@ Editor::markerview_start_handle_trim_motion(ArdourCanvas::Item* item, GdkEvent* { start = mv->get_position() ; end = mv->get_position() + mv->get_duration() ; - + if (pointer_frame > end) { start = end ; @@ -909,10 +905,10 @@ Editor::markerview_start_handle_trim_motion(ArdourCanvas::Item* item, GdkEvent* { start = pointer_frame ; } - + // are we getting bigger or smaller? - jack_nframes_t new_dur_val = end - start ; - + nframes64_t new_dur_val = end - start ; + if(pointer_frame <= drag_info.grab_frame) { if(mv->get_max_duration_active() && (new_dur_val > mv->get_max_duration())) @@ -937,12 +933,12 @@ Editor::markerview_start_handle_trim_motion(ArdourCanvas::Item* item, GdkEvent* // current values are ok } } - + drag_info.last_pointer_frame = pointer_frame ; - + /* re-calculatethe duration and position of the imageframeview */ drag_info.cumulative_x_drag = new_dur_val ; - + // we treat this as a special case, usually we want to send the identitiy of the caller // but in this case, that would trigger our socket handler to handle the event, sending // notification to the image compositor. This would be fine, except that we have not @@ -953,7 +949,7 @@ Editor::markerview_start_handle_trim_motion(ArdourCanvas::Item* item, GdkEvent* mv->set_position(start, 0) ; } } - + show_verbose_time_cursor(start, 10) ; } @@ -961,17 +957,17 @@ void Editor::markerview_start_handle_end_trim(ArdourCanvas::Item* item, GdkEvent* event) { MarkerView* mv = reinterpret_cast (drag_info.data) ; - + if (drag_info.cumulative_x_drag == 0) { /* just a click */ } else { - jack_nframes_t temp = mv->get_position() + mv->get_duration() ; - - mv->set_position((jack_nframes_t) (temp - drag_info.cumulative_x_drag), this) ; - mv->set_duration((jack_nframes_t) drag_info.cumulative_x_drag, this) ; + nframes64_t temp = mv->get_position() + mv->get_duration() ; + + mv->set_position((nframes64_t) (temp - drag_info.cumulative_x_drag), this) ; + mv->set_duration((nframes64_t) drag_info.cumulative_x_drag, this) ; } } @@ -979,19 +975,19 @@ void Editor::markerview_end_handle_trim_motion(ArdourCanvas::Item* item, GdkEvent* event) { MarkerView* mv = reinterpret_cast (drag_info.data) ; - - jack_nframes_t start = 0 ; - jack_nframes_t end = 0 ; - jack_nframes_t pointer_frame = event_frame(event) ; - jack_nframes_t new_dur_val = 0 ; + + nframes64_t start = 0 ; + nframes64_t end = 0 ; + nframes64_t pointer_frame = event_frame(event) ; + nframes64_t new_dur_val = 0 ; snap_to(pointer_frame) ; - + if (pointer_frame != drag_info.last_pointer_frame) { start = mv->get_position() ; end = mv->get_position() + mv->get_duration() ; - + if(pointer_frame < start) { end = start ; @@ -1000,16 +996,16 @@ Editor::markerview_end_handle_trim_motion(ArdourCanvas::Item* item, GdkEvent* ev { end = pointer_frame ; } - + new_dur_val = end - start ; - + // are we getting bigger or smaller? if(pointer_frame >= drag_info.last_pointer_frame) { // we cant extend beyond the item we are marking ImageFrameView* marked_item = mv->get_marked_item() ; - jack_nframes_t marked_end = marked_item->get_position() + marked_item->get_duration() ; - + nframes64_t marked_end = marked_item->get_position() + marked_item->get_duration() ; + if(mv->get_max_duration_active() && (new_dur_val > mv->get_max_duration())) { if((start + mv->get_max_duration()) > marked_end) @@ -1037,7 +1033,7 @@ Editor::markerview_end_handle_trim_motion(ArdourCanvas::Item* item, GdkEvent* ev drag_info.last_pointer_frame = pointer_frame ; drag_info.cumulative_x_drag = new_dur_val ; - + // we treat this as a special case, usually we want to send the identitiy of the caller // but in this case, that would trigger our socket handler to handle the event, sending // notification to the image compositor. This would be fine, except that we have not @@ -1046,7 +1042,7 @@ Editor::markerview_end_handle_trim_motion(ArdourCanvas::Item* item, GdkEvent* ev // We therefore set the caller identity to the special case of 0 mv->set_duration(new_dur_val, 0) ; } - + show_verbose_time_cursor(new_dur_val, 10) ; } @@ -1062,7 +1058,7 @@ Editor::markerview_end_handle_end_trim (ArdourCanvas::Item* item, GdkEvent* even } else { - jack_nframes_t new_duration = (jack_nframes_t)drag_info.cumulative_x_drag ; + nframes64_t new_duration = (nframes64_t)drag_info.cumulative_x_drag ; mv->set_duration(new_duration, this) ; } } @@ -1082,7 +1078,7 @@ void Editor::handle_new_imageframe_time_axis_view(const string & track_name, void* src) { ImageFrameTimeAxis* iftav ; - iftav = new ImageFrameTimeAxis(track_name, *this, *session, track_canvas) ; + iftav = new ImageFrameTimeAxis(track_name, *this, *session, *track_canvas) ; iftav->set_time_axis_name(track_name, this) ; track_views.push_back(iftav) ; @@ -1092,14 +1088,13 @@ Editor::handle_new_imageframe_time_axis_view(const string & track_name, void* sr row[route_display_columns.tv] = iftav; route_list_display.get_selection()->select (row); - iftav->GoingAway.connect(bind(mem_fun(*this, &Editor::remove_route), (TimeAxisView*)iftav)) ; - iftav->gui_changed.connect(mem_fun(*this, &Editor::handle_gui_changes)) ; + iftav->gui_changed.connect(sigc::mem_fun(*this, &Editor::handle_gui_changes)) ; } void Editor::handle_new_imageframe_marker_time_axis_view(const string & track_name, TimeAxisView* marked_track) { - MarkerTimeAxis* mta = new MarkerTimeAxis (*this, *this->current_session(), track_canvas, track_name, marked_track) ; + MarkerTimeAxis* mta = new MarkerTimeAxis (*this, *this->session(), *track_canvas, track_name, marked_track) ; ((ImageFrameTimeAxis*)marked_track)->add_marker_time_axis(mta, this) ; track_views.push_back(mta) ; @@ -1108,9 +1103,7 @@ Editor::handle_new_imageframe_marker_time_axis_view(const string & track_name, T row[route_display_columns.text] = mta->name(); row[route_display_columns.tv] = mta; route_list_display.get_selection()->select (row); - - mta->GoingAway.connect(bind(mem_fun(*this, &Editor::remove_route), (TimeAxisView*)mta)) ; - } +} /* */