Fix entering/editing MIDI region "automation" (controllers).

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.
This commit is contained in:
David Robillard 2014-11-15 02:58:39 -05:00
parent 333c776e0e
commit de1ebcc149
3 changed files with 7 additions and 4 deletions

View 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);
}
}
}

View 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 ();

View 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();