framework for handling events on the xfade rects
authorPaul Davis <paul@linuxaudiosystems.com>
Tue, 8 May 2012 17:13:59 +0000 (17:13 +0000)
committerPaul Davis <paul@linuxaudiosystems.com>
Tue, 8 May 2012 17:13:59 +0000 (17:13 +0000)
git-svn-id: svn://localhost/ardour2/branches/3.0@12213 d708f5d6-7413-0410-9779-e7cbd77b26cf

gtk2_ardour/audio_region_view.cc
gtk2_ardour/editor.cc
gtk2_ardour/editor.h
gtk2_ardour/editor_canvas_events.cc
gtk2_ardour/editor_items.h
gtk2_ardour/editor_mouse.cc
gtk2_ardour/public_editor.h

index 48c9b5d12db28aa0b3d28346024f16076bbeb651..5c25377a350aaf77a6730509f63b0da36c2ea0d9 100644 (file)
@@ -1555,6 +1555,7 @@ AudioRegionView::redraw_start_xfade ()
                start_xfade_rect->property_fill() = true;;
                start_xfade_rect->property_fill_color_rgba() =  ARDOUR_UI::config()->canvasvar_ActiveCrossfade.get();
                start_xfade_rect->property_outline_pixels() = 0;
+               start_xfade_rect->signal_event().connect (sigc::bind (sigc::mem_fun (PublicEditor::instance(), &PublicEditor::canvas_start_xfade_event), start_xfade_rect, this));
        }
 
        Points* points = get_canvas_points ("xfade edit redraw", npoints);
@@ -1642,6 +1643,8 @@ AudioRegionView::redraw_end_xfade ()
                end_xfade_rect->property_fill() = true;;
                end_xfade_rect->property_fill_color_rgba() =  ARDOUR_UI::config()->canvasvar_ActiveCrossfade.get();
                end_xfade_rect->property_outline_pixels() = 0;
+
+               end_xfade_rect->signal_event().connect (sigc::bind (sigc::mem_fun (PublicEditor::instance(), &PublicEditor::canvas_end_xfade_event), end_xfade_rect, this));
        }
 
        Points* points = get_canvas_points ("xfade edit redraw", npoints);
index f6450a91e9c3dc3f93aa5f4521e5ee03a4a3f93e..1bee0719ede5f9c2022de4125d72e37061e82889 100644 (file)
@@ -1358,6 +1358,9 @@ Editor::popup_fade_context_menu (int button, int32_t time, ArdourCanvas::Item* i
        items.clear ();
 
        switch (item_type) {
+       case StartCrossFadeItem:
+       case EndCrossFadeItem:
+               break;
        case FadeInItem:
        case FadeInHandleItem:
                if (arv->audio_region()->fade_in_active()) {
index 589b0ead6c09d54b5bd86bb922a4099d580b9771..82fa3c41afbb783b3051dc42b525ad0454252717 100644 (file)
@@ -1374,6 +1374,8 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD
        bool canvas_selection_rect_event (GdkEvent* event,ArdourCanvas::Item*, SelectionRect*);
        bool canvas_selection_start_trim_event (GdkEvent* event,ArdourCanvas::Item*, SelectionRect*);
        bool canvas_selection_end_trim_event (GdkEvent* event,ArdourCanvas::Item*, SelectionRect*);
+       bool canvas_start_xfade_event (GdkEvent* event,ArdourCanvas::Item*, AudioRegionView*);
+       bool canvas_end_xfade_event (GdkEvent* event,ArdourCanvas::Item*, AudioRegionView*);
        bool canvas_fade_in_event (GdkEvent* event,ArdourCanvas::Item*, AudioRegionView*);
        bool canvas_fade_in_handle_event (GdkEvent* event,ArdourCanvas::Item*, AudioRegionView*);
        bool canvas_fade_out_event (GdkEvent* event,ArdourCanvas::Item*, AudioRegionView*);
index 72de3535001b18b407d57e0602a61030e35b213a..a123ea1e9cec7e98d4dd1fa70e2e2ea45087bb2b 100644 (file)
@@ -348,6 +348,74 @@ Editor::canvas_automation_track_event (GdkEvent *event, ArdourCanvas::Item* item
        return ret;
 }
 
+bool
+Editor::canvas_start_xfade_event (GdkEvent *event, ArdourCanvas::Item* item, AudioRegionView *rv)
+{
+       if (!rv->sensitive()) {
+               return false;
+       }
+
+       switch (event->type) {
+       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);
+               if (event->button.button == 3) {
+                       return button_press_handler (item, event, StartCrossFadeItem);
+               }
+               break;
+
+       case GDK_BUTTON_RELEASE:
+               if (event->button.button == 3) {
+                       return button_release_handler (item, event, StartCrossFadeItem);
+               }
+               break;
+
+       default:
+               break;
+
+       }
+
+       /* proxy for the regionview */
+
+       return canvas_region_view_event (event, rv->get_canvas_group(), rv);
+}
+
+bool
+Editor::canvas_end_xfade_event (GdkEvent *event, ArdourCanvas::Item* item, AudioRegionView *rv)
+{
+       if (!rv->sensitive()) {
+               return false;
+       }
+
+       switch (event->type) {
+       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);
+               if (event->button.button == 3) {
+                       return button_press_handler (item, event, EndCrossFadeItem);
+               }
+               break;
+
+       case GDK_BUTTON_RELEASE:
+               if (event->button.button == 3) {
+                       return button_release_handler (item, event, EndCrossFadeItem);
+               }
+               break;
+
+       default:
+               break;
+
+       }
+
+       /* proxy for the regionview */
+
+       return canvas_region_view_event (event, rv->get_canvas_group(), rv);
+}
+
 bool
 Editor::canvas_fade_in_event (GdkEvent *event, ArdourCanvas::Item* item, AudioRegionView *rv)
 {
index 36a5a9e36fb1f796bea9710995f035c7f22056d9..51db6dbc87046272fcbe60c5aac34afbcaa75447 100644 (file)
@@ -50,6 +50,8 @@ enum ItemType {
        FeatureLineItem,
         LeftFrameHandle,
         RightFrameHandle,
+       StartCrossFadeItem,
+       EndCrossFadeItem,
 
 #ifdef WITH_CMT
        MarkerViewItem,
index bd5cdd3f8f23c6710ba517218179b665dd367602..351ed82e646d7c568edbc3c9eccd62e4938f620c 100644 (file)
@@ -641,6 +641,10 @@ Editor::button_selection (ArdourCanvas::Item* /*item*/, GdkEvent* event, ItemTyp
                break;
 
 
+       case StartCrossFadeItem:
+       case EndCrossFadeItem:
+               break;
+
        case FadeInHandleItem:
        case FadeInItem:
        case FadeOutHandleItem:
index ee4c7162cbd941eed1755270a85819f7f86424f0..ce625e18899898071119506c7b53a39417227b06 100644 (file)
@@ -314,6 +314,8 @@ class PublicEditor : public Gtk::Window, public PBD::StatefulDestructible {
        virtual bool canvas_selection_rect_event (GdkEvent* event, ArdourCanvas::Item*, SelectionRect*) = 0;
        virtual bool canvas_selection_start_trim_event (GdkEvent* event, ArdourCanvas::Item*, SelectionRect*) = 0;
        virtual bool canvas_selection_end_trim_event (GdkEvent* event, ArdourCanvas::Item*, SelectionRect*) = 0;
+       virtual bool canvas_start_xfade_event (GdkEvent* event, ArdourCanvas::Item*, AudioRegionView*) = 0;
+       virtual bool canvas_end_xfade_event (GdkEvent* event, ArdourCanvas::Item*, AudioRegionView*) = 0;
        virtual bool canvas_fade_in_event (GdkEvent* event, ArdourCanvas::Item*, AudioRegionView*) = 0;
        virtual bool canvas_fade_in_handle_event (GdkEvent* event, ArdourCanvas::Item*, AudioRegionView*) = 0;
        virtual bool canvas_fade_out_event (GdkEvent* event, ArdourCanvas::Item*, AudioRegionView*) = 0;