mirror of
https://github.com/Ardour/ardour.git
synced 2025-12-08 15:54:57 +01:00
various changes to editor drag code to correctly use a bounding item
This commit is contained in:
parent
030052e57f
commit
c97f4f4016
2 changed files with 24 additions and 23 deletions
|
|
@ -313,9 +313,9 @@ Drag::set_time_domain (Temporal::TimeDomain td)
|
||||||
}
|
}
|
||||||
|
|
||||||
timepos_t
|
timepos_t
|
||||||
Drag::pixel_to_time (double x) const
|
Drag::pixel_duration_to_time (double x) const
|
||||||
{
|
{
|
||||||
samplepos_t p = editing_context.pixel_to_sample (x);
|
samplepos_t p = editing_context.pixel_duration_to_samples (x);
|
||||||
|
|
||||||
if (_time_domain == Temporal::AudioTime) {
|
if (_time_domain == Temporal::AudioTime) {
|
||||||
return timepos_t (p);
|
return timepos_t (p);
|
||||||
|
|
@ -464,7 +464,6 @@ Drag::current_pointer_x () const
|
||||||
return _drags->current_pointer_x ();
|
return _drags->current_pointer_x ();
|
||||||
}
|
}
|
||||||
|
|
||||||
std::cerr << "mouse @ " << _drags->current_pointer_x () << " corrected by " << _bounding_item->canvas_origin().x << " to " << _drags->current_pointer_x () - _bounding_item->canvas_origin().x << std::endl;
|
|
||||||
return _drags->current_pointer_x () - _bounding_item->canvas_origin().x;
|
return _drags->current_pointer_x () - _bounding_item->canvas_origin().x;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -512,7 +511,7 @@ Drag::motion_handler (GdkEvent* event, bool from_autoscroll)
|
||||||
if (old_move_threshold_passed != _move_threshold_passed) {
|
if (old_move_threshold_passed != _move_threshold_passed) {
|
||||||
/* just changed */
|
/* just changed */
|
||||||
|
|
||||||
if (fabs (current_pointer_y () - _grab_y) > fabs (current_pointer_x () - _grab_x)) {
|
if (fabs (_drags->current_pointer_y () - _grab_y) > fabs (_drags->current_pointer_x () - _grab_x)) {
|
||||||
_initially_vertical = true;
|
_initially_vertical = true;
|
||||||
} else {
|
} else {
|
||||||
_initially_vertical = false;
|
_initially_vertical = false;
|
||||||
|
|
@ -565,7 +564,7 @@ Drag::motion_handler (GdkEvent* event, bool from_autoscroll)
|
||||||
_starting_point_passed = true;
|
_starting_point_passed = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
_last_pointer_x = _drags->current_pointer_x ();
|
_last_pointer_x = current_pointer_x ();
|
||||||
_last_pointer_y = current_pointer_y ();
|
_last_pointer_y = current_pointer_y ();
|
||||||
_last_pointer_time = adjusted_current_time (event, false);
|
_last_pointer_time = adjusted_current_time (event, false);
|
||||||
}
|
}
|
||||||
|
|
@ -953,7 +952,7 @@ RegionMotionDrag::compute_x_delta (GdkEvent const* event, Temporal::timepos_t& p
|
||||||
dx = editing_context.duration_to_pixels_unrounded (_last_position.distance (pending_region_position));
|
dx = editing_context.duration_to_pixels_unrounded (_last_position.distance (pending_region_position));
|
||||||
|
|
||||||
/* total x movement */
|
/* total x movement */
|
||||||
timecnt_t total_dx = timecnt_t (pixel_to_time (_total_x_delta + dx), grab_time ());
|
timecnt_t total_dx = timecnt_t (pixel_duration_to_time (_total_x_delta + dx), grab_time ());
|
||||||
|
|
||||||
for (list<DraggingView>::const_iterator i = _views.begin (); i != _views.end (); ++i) {
|
for (list<DraggingView>::const_iterator i = _views.begin (); i != _views.end (); ++i) {
|
||||||
const timepos_t off = i->view->region ()->position () + total_dx;
|
const timepos_t off = i->view->region ()->position () + total_dx;
|
||||||
|
|
@ -2461,7 +2460,7 @@ NoteResizeDrag::motion (GdkEvent* event, bool first_move)
|
||||||
sd = _snap_delta;
|
sd = _snap_delta;
|
||||||
}
|
}
|
||||||
|
|
||||||
mrv->update_resizing (nb, at_front, _drags->current_pointer_x () - grab_x (), relative, sd, snap);
|
mrv->update_resizing (nb, at_front, current_pointer_x () - grab_x (), relative, sd, snap);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -2524,7 +2523,7 @@ NoteResizeDrag::finished (GdkEvent* event, bool movement_occurred)
|
||||||
sd = _snap_delta;
|
sd = _snap_delta;
|
||||||
}
|
}
|
||||||
|
|
||||||
mrv->finish_resizing (nb, at_front, _drags->current_pointer_x () - grab_x (), relative, sd, snap);
|
mrv->finish_resizing (nb, at_front, current_pointer_x () - grab_x (), relative, sd, snap);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -3625,7 +3624,7 @@ MappingTwistDrag::setup_pointer_offset ()
|
||||||
void
|
void
|
||||||
MappingTwistDrag::motion (GdkEvent* event, bool first_move)
|
MappingTwistDrag::motion (GdkEvent* event, bool first_move)
|
||||||
{
|
{
|
||||||
if (_drags->current_pointer_x () < last_pointer_x ()) {
|
if (current_pointer_x () < last_pointer_x ()) {
|
||||||
if (direction < 0.) {
|
if (direction < 0.) {
|
||||||
direction = 1.;
|
direction = 1.;
|
||||||
initial_focus_npm += delta;
|
initial_focus_npm += delta;
|
||||||
|
|
@ -3643,7 +3642,7 @@ MappingTwistDrag::motion (GdkEvent* event, bool first_move)
|
||||||
|
|
||||||
/* XXX needs to scale somehow with zoom level */
|
/* XXX needs to scale somehow with zoom level */
|
||||||
|
|
||||||
const double pixel_distance = last_pointer_x () - _drags->current_pointer_x ();
|
const double pixel_distance = last_pointer_x () - current_pointer_x ();
|
||||||
const double spp = editing_context.get_current_zoom ();
|
const double spp = editing_context.get_current_zoom ();
|
||||||
const double scaling_factor = 0.4 * (spp / 1500.);
|
const double scaling_factor = 0.4 * (spp / 1500.);
|
||||||
|
|
||||||
|
|
@ -4798,7 +4797,7 @@ ControlPointDrag::total_dt (GdkEvent* event) const
|
||||||
}
|
}
|
||||||
|
|
||||||
/* x-axis delta in absolute samples, because we can't do any better */
|
/* x-axis delta in absolute samples, because we can't do any better */
|
||||||
timecnt_t const dx = timecnt_t (pixel_to_time (_drags->current_pointer_x () - grab_x ()), _point->line ().get_origin ());
|
timecnt_t const dx = timecnt_t (pixel_duration_to_time (current_pointer_x () - grab_x ()), _point->line ().get_origin ());
|
||||||
|
|
||||||
/* control point time in absolute time, using natural time domain */
|
/* control point time in absolute time, using natural time domain */
|
||||||
timepos_t const point_absolute = (*_point->model ())->when + _point->line ().get_origin ().shift_earlier (_point->line ().offset ());
|
timepos_t const point_absolute = (*_point->model ())->when + _point->line ().get_origin ().shift_earlier (_point->line ().offset ());
|
||||||
|
|
@ -5119,7 +5118,7 @@ FeatureLineDrag::start_grab (GdkEvent* event, Gdk::Cursor* /*cursor*/)
|
||||||
void
|
void
|
||||||
FeatureLineDrag::motion (GdkEvent*, bool)
|
FeatureLineDrag::motion (GdkEvent*, bool)
|
||||||
{
|
{
|
||||||
double dx = _drags->current_pointer_x () - last_pointer_x ();
|
double dx = current_pointer_x () - last_pointer_x ();
|
||||||
|
|
||||||
double cx = _region_view_grab_x + _cumulative_x_drag + dx;
|
double cx = _region_view_grab_x + _cumulative_x_drag + dx;
|
||||||
|
|
||||||
|
|
@ -5262,7 +5261,7 @@ RubberbandSelectDrag::do_select_things (GdkEvent* event, bool drag_in_progress)
|
||||||
if (!UIConfiguration::instance ().get_rubberbanding_snaps_to_grid ()) {
|
if (!UIConfiguration::instance ().get_rubberbanding_snaps_to_grid ()) {
|
||||||
grab = raw_grab_time ();
|
grab = raw_grab_time ();
|
||||||
|
|
||||||
timepos_t pos (pixel_to_time (last_pointer_x ()));
|
timepos_t pos (pixel_duration_to_time (last_pointer_x ()));
|
||||||
|
|
||||||
if (editing_context.time_domain () == Temporal::AudioTime) {
|
if (editing_context.time_domain () == Temporal::AudioTime) {
|
||||||
lpf = pos;
|
lpf = pos;
|
||||||
|
|
@ -6218,7 +6217,7 @@ NoteDrag::total_dx (GdkEvent* event) const
|
||||||
/* now calculate proper `b@b` time */
|
/* now calculate proper `b@b` time */
|
||||||
timecnt_t dx = t2.distance (t1);
|
timecnt_t dx = t2.distance (t1);
|
||||||
|
|
||||||
std::cerr << "apparent dx " << dx.beats().str() << " from " << _drags->current_pointer_x() << " - " << grab_x() << std::endl;
|
// std::cerr << "apparent dx " << dx << " beats " << dx.beats().str() << " from " << current_pointer_x() << " - " << grab_x() << " = " << current_pointer_x() - grab_x() << std::endl;
|
||||||
|
|
||||||
/* primary note time in quarter notes */
|
/* primary note time in quarter notes */
|
||||||
timepos_t const n_qn = _region->midi_region()->source_beats_to_absolute_time (_primary->note ()->time ());
|
timepos_t const n_qn = _region->midi_region()->source_beats_to_absolute_time (_primary->note ()->time ());
|
||||||
|
|
@ -6261,7 +6260,10 @@ NoteDrag::total_dy () const
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
double const y = _region->midi_context().y_position ();
|
double const y = _region->midi_context().y_position ();
|
||||||
|
double const p = current_pointer_y();
|
||||||
|
|
||||||
/* new current note */
|
/* new current note */
|
||||||
uint8_t n = _region->y_to_note (current_pointer_y () - y);
|
uint8_t n = _region->y_to_note (current_pointer_y () - y);
|
||||||
/* clamp */
|
/* clamp */
|
||||||
|
|
@ -6292,7 +6294,7 @@ NoteDrag::motion (GdkEvent* event, bool first_move)
|
||||||
double const tdy = _y_constrained ? 0 : -dy * _note_height - _cumulative_dy;
|
double const tdy = _y_constrained ? 0 : -dy * _note_height - _cumulative_dy;
|
||||||
|
|
||||||
if (!tdx.is_zero () || tdy) {
|
if (!tdx.is_zero () || tdy) {
|
||||||
_cumulative_dx = dx_qn;
|
_cumulative_dx += dx_qn;
|
||||||
_cumulative_dy += tdy;
|
_cumulative_dy += tdy;
|
||||||
|
|
||||||
int8_t pitch_delta = total_dy ();
|
int8_t pitch_delta = total_dy ();
|
||||||
|
|
@ -6360,7 +6362,6 @@ NoteDrag::finished (GdkEvent* ev, bool moved)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
std::cerr << "ready to drop\n";
|
|
||||||
_region->note_dropped (_primary, total_dx (ev), total_dy (), _copy);
|
_region->note_dropped (_primary, total_dx (ev), total_dy (), _copy);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -6999,16 +7000,16 @@ CrossfadeEdgeDrag::motion (GdkEvent*, bool)
|
||||||
std::shared_ptr<AudioRegion> ar (arv->audio_region ());
|
std::shared_ptr<AudioRegion> ar (arv->audio_region ());
|
||||||
|
|
||||||
if (start) {
|
if (start) {
|
||||||
distance = _drags->current_pointer_x () - grab_x ();
|
distance = current_pointer_x () - grab_x ();
|
||||||
len = timecnt_t (ar->fade_in ()->back ()->when);
|
len = timecnt_t (ar->fade_in ()->back ()->when);
|
||||||
} else {
|
} else {
|
||||||
distance = grab_x () - _drags->current_pointer_x ();
|
distance = grab_x () - current_pointer_x ();
|
||||||
len = timecnt_t (ar->fade_out ()->back ()->when);
|
len = timecnt_t (ar->fade_out ()->back ()->when);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* how long should it be ? */
|
/* how long should it be ? */
|
||||||
|
|
||||||
new_length = len + timecnt_t (pixel_to_time (distance));
|
new_length = len + timecnt_t (pixel_duration_to_time (distance));
|
||||||
|
|
||||||
/* now check with the region that this is legal */
|
/* now check with the region that this is legal */
|
||||||
|
|
||||||
|
|
@ -7031,14 +7032,14 @@ CrossfadeEdgeDrag::finished (GdkEvent*, bool)
|
||||||
std::shared_ptr<AudioRegion> ar (arv->audio_region ());
|
std::shared_ptr<AudioRegion> ar (arv->audio_region ());
|
||||||
|
|
||||||
if (start) {
|
if (start) {
|
||||||
distance = _drags->current_pointer_x () - grab_x ();
|
distance = current_pointer_x () - grab_x ();
|
||||||
len = timecnt_t (ar->fade_in ()->back ()->when);
|
len = timecnt_t (ar->fade_in ()->back ()->when);
|
||||||
} else {
|
} else {
|
||||||
distance = grab_x () - _drags->current_pointer_x ();
|
distance = grab_x () - current_pointer_x ();
|
||||||
len = timecnt_t (ar->fade_out ()->back ()->when);
|
len = timecnt_t (ar->fade_out ()->back ()->when);
|
||||||
}
|
}
|
||||||
|
|
||||||
timecnt_t tdist = timecnt_t (pixel_to_time (distance));
|
timecnt_t tdist = timecnt_t (pixel_duration_to_time (distance));
|
||||||
timecnt_t newlen = len + tdist;
|
timecnt_t newlen = len + tdist;
|
||||||
new_length = timecnt_t (ar->verify_xfade_bounds (newlen.samples (), start));
|
new_length = timecnt_t (ar->verify_xfade_bounds (newlen.samples (), start));
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -274,7 +274,7 @@ protected:
|
||||||
return _grab_y;
|
return _grab_y;
|
||||||
}
|
}
|
||||||
|
|
||||||
Temporal::timepos_t pixel_to_time (double x) const;
|
Temporal::timepos_t pixel_duration_to_time (double x) const;
|
||||||
|
|
||||||
Temporal::timepos_t raw_grab_time () const {
|
Temporal::timepos_t raw_grab_time () const {
|
||||||
return _raw_grab_time;
|
return _raw_grab_time;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue