velocity region views: strip out existing event handling (avoids crash)
This commit is contained in:
parent
9e071f70d7
commit
59ccc9c5ee
@ -127,106 +127,20 @@ VelocityRegionView::canvas_group_event (GdkEvent* ev)
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
PublicEditor& e = trackview.editor ();
|
git* PublicEditor& e = trackview.editor ();
|
||||||
|
|
||||||
if (trackview.editor().internal_editing() &&
|
if (!trackview.editor().internal_editing()) {
|
||||||
ev->type == GDK_BUTTON_RELEASE &&
|
return false;
|
||||||
ev->button.button == 1 &&
|
|
||||||
e.current_mouse_mode() == Editing::MouseDraw &&
|
|
||||||
!e.drags()->active()) {
|
|
||||||
|
|
||||||
double x = ev->button.x;
|
|
||||||
double y = ev->button.y;
|
|
||||||
|
|
||||||
/* convert to item coordinates in the time axis view */
|
|
||||||
velocity_view()->canvas_display()->canvas_to_item (x, y);
|
|
||||||
|
|
||||||
/* clamp y */
|
|
||||||
y = std::max (y, 0.0);
|
|
||||||
y = std::min (y, _height - NAME_HIGHLIGHT_SIZE);
|
|
||||||
|
|
||||||
/* guard points only if primary modifier is used */
|
|
||||||
bool with_guard_points = Gtkmm2ext::Keyboard::modifier_state_equals (ev->button.state, Gtkmm2ext::Keyboard::PrimaryModifier);
|
|
||||||
|
|
||||||
/* the time domain doesn't matter here, because the automation
|
|
||||||
* list will force the position to its own time domain when
|
|
||||||
* adding the point.
|
|
||||||
*/
|
|
||||||
|
|
||||||
add_automation_event (ev, timepos_t (e.pixel_to_sample (x)), y, with_guard_points);
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return RegionView::canvas_group_event (ev);
|
return RegionView::canvas_group_event (ev);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** @param when Position is global time position
|
|
||||||
* @param y y position, relative to our TimeAxisView.
|
|
||||||
*/
|
|
||||||
void
|
|
||||||
VelocityRegionView::add_automation_event (GdkEvent *, timepos_t const & w, double y, bool with_guard_points)
|
|
||||||
{
|
|
||||||
boost::shared_ptr<Evoral::Control> c = _region->control(_parameter, true);
|
|
||||||
boost::shared_ptr<ARDOUR::AutomationControl> ac = boost::dynamic_pointer_cast<ARDOUR::AutomationControl>(c);
|
|
||||||
timepos_t when (w); /* the non-const copy */
|
|
||||||
|
|
||||||
if (!_line) {
|
|
||||||
assert(ac);
|
|
||||||
create_line(ac->alist());
|
|
||||||
}
|
|
||||||
assert(_line);
|
|
||||||
|
|
||||||
AutomationTimeAxisView* const view = velocity_view ();
|
|
||||||
|
|
||||||
/* compute vertical fractional position */
|
|
||||||
y = 1.0 - (y / _line->height());
|
|
||||||
|
|
||||||
/* snap time */
|
|
||||||
|
|
||||||
when = snap_region_time_to_region_time (_region->source_position().distance (when), false);
|
|
||||||
|
|
||||||
/* map using line */
|
|
||||||
|
|
||||||
_line->view_to_model_coord_y (y);
|
|
||||||
|
|
||||||
if (c->list()->size () == 0) {
|
|
||||||
/* we need the MidiTrack::MidiControl, not the region's (midi model source) control */
|
|
||||||
boost::shared_ptr<ARDOUR::MidiTrack> mt = boost::dynamic_pointer_cast<ARDOUR::MidiTrack> (view->parent_stripable ());
|
|
||||||
assert (mt);
|
|
||||||
boost::shared_ptr<Evoral::Control> mc = mt->control(_parameter);
|
|
||||||
assert (mc);
|
|
||||||
y = mc->get_double ();
|
|
||||||
} else if (UIConfiguration::instance().get_new_automation_points_on_lane()) {
|
|
||||||
y = c->list()->eval (when);
|
|
||||||
}
|
|
||||||
|
|
||||||
XMLNode& before = _line->the_list()->get_state();
|
|
||||||
|
|
||||||
if (_line->the_list()->editor_add (when, y, with_guard_points)) {
|
|
||||||
|
|
||||||
if (ac->automation_state () == ARDOUR::Off) {
|
|
||||||
view->set_automation_state (ARDOUR::Play);
|
|
||||||
}
|
|
||||||
if (UIConfiguration::instance().get_automation_edit_cancels_auto_hide () && ac == view->session()->recently_touched_controllable ()) {
|
|
||||||
RouteTimeAxisView::signal_ctrl_touched (false);
|
|
||||||
}
|
|
||||||
|
|
||||||
view->editor().begin_reversible_command (_("add automation event"));
|
|
||||||
|
|
||||||
XMLNode& after = _line->the_list()->get_state();
|
|
||||||
|
|
||||||
view->session()->add_command (new MementoCommand<ARDOUR::AutomationList> (_line->memento_command_binder(), &before, &after));
|
|
||||||
view->editor().commit_reversible_command ();
|
|
||||||
|
|
||||||
view->session()->set_dirty ();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
bool
|
bool
|
||||||
VelocityRegionView::paste (timepos_t const & pos,
|
VelocityRegionView::paste (timepos_t const & pos,
|
||||||
unsigned paste_count,
|
unsigned paste_count,
|
||||||
float times,
|
float times,
|
||||||
boost::shared_ptr<const ARDOUR::AutomationList> slist)
|
boost::shared_ptr<const ARDOUR::AutomationList> slist)
|
||||||
{
|
{
|
||||||
using namespace ARDOUR;
|
using namespace ARDOUR;
|
||||||
|
|
||||||
|
@ -74,7 +74,6 @@ protected:
|
|||||||
bool set_position(Temporal::timepos_t const & pos, void* src, double* ignored);
|
bool set_position(Temporal::timepos_t const & pos, void* src, double* ignored);
|
||||||
void region_resized (const PBD::PropertyChange&);
|
void region_resized (const PBD::PropertyChange&);
|
||||||
bool canvas_group_event(GdkEvent* ev);
|
bool canvas_group_event(GdkEvent* ev);
|
||||||
void add_automation_event (GdkEvent* event, Temporal::timepos_t const & when, double y, bool with_guard_points);
|
|
||||||
void mouse_mode_changed ();
|
void mouse_mode_changed ();
|
||||||
void entered();
|
void entered();
|
||||||
void exited();
|
void exited();
|
||||||
|
Loading…
Reference in New Issue
Block a user