Fix entering/editing MIDI region "automation" (controllers).
authorDavid Robillard <d@drobilla.net>
Sat, 15 Nov 2014 07:58:39 +0000 (02:58 -0500)
committerDavid Robillard <d@drobilla.net>
Sat, 15 Nov 2014 07:58:39 +0000 (02:58 -0500)
Two issues:

1) AutomationRegionView not receiving events (CC breakage).

2) Entered values must be rounded to integer for MIDI controllers.  This should
be done more generically with ParameterDescriptor for all controls (also
supporting boolean toggles and such), once ParameterDescriptor becomes more
pervasive and takes over Evoral::Parameter, but this will do for now.

gtk2_ardour/automation_line.cc
gtk2_ardour/automation_region_view.cc
gtk2_ardour/automation_region_view.h

index 2e9f988bfa3321feb9d72b363469f15c65912146..b7c39f888f0ccb0f478d35192826715ba2011543 100644 (file)
@@ -39,6 +39,7 @@
 #include "ardour/automation_list.h"
 #include "ardour/dB.h"
 #include "ardour/debug.h"
+#include "ardour/parameter_types.h"
 #include "ardour/tempo.h"
 
 #include "evoral/Curve.hpp"
@@ -1171,6 +1172,9 @@ AutomationLine::view_to_model_coord_y (double& y) const
                y = 2.0 * y - 1.0;
        } else {
                y = y * (double)(alist->get_max_y() - alist->get_min_y()) + alist->get_min_y();
+               if (ARDOUR::parameter_is_midi((ARDOUR::AutomationType)alist->parameter().type())) {
+                       y = round(y);
+               }
        }
 }
 
index e088f7c59f5a0da9b4f9a0f7a89648c26bf2e860..0415e8c55e71704bf7e4c9a74472eb5c90bd0d93 100644 (file)
@@ -54,7 +54,6 @@ AutomationRegionView::AutomationRegionView (ArdourCanvas::Container*
                create_line(list);
        }
 
-       group->Event.connect (sigc::mem_fun (this, &AutomationRegionView::canvas_event));
        group->raise_to_top();
 }
 
@@ -96,7 +95,7 @@ AutomationRegionView::create_line (boost::shared_ptr<ARDOUR::AutomationList> lis
 }
 
 bool
-AutomationRegionView::canvas_event (GdkEvent* ev)
+AutomationRegionView::canvas_group_event (GdkEvent* ev)
 {
        PublicEditor& e = trackview.editor ();
 
index 1dec06f0c63bc73ae269edc6ecfaee2cb443fde8..0bebf12a32e4774bdf5050a5420987c6973a9a7d 100644 (file)
@@ -64,8 +64,8 @@ protected:
        void create_line(boost::shared_ptr<ARDOUR::AutomationList> list);
        bool set_position(framepos_t pos, void* src, double* ignored);
        void region_resized (const PBD::PropertyChange&);
-       bool canvas_event(GdkEvent* ev);
-        void add_automation_event (GdkEvent* event, framepos_t when, double y, bool with_guard_points);
+       bool canvas_group_event(GdkEvent* ev);
+       void add_automation_event (GdkEvent* event, framepos_t when, double y, bool with_guard_points);
        void entered (bool);
        void exited();