When setting the duration of a TimeAxisViewItem, do not round before computing pixel width

This commit is contained in:
Paul Davis 2015-02-11 21:35:23 -05:00
parent baf10dc4e3
commit 9090057f6e

View File

@ -317,7 +317,6 @@ TimeAxisViewItem::set_position(framepos_t pos, void* src, double* delta)
}
group->set_x_position (new_unit_pos);
PositionChanged (frame_position, src); /* EMIT_SIGNAL */
return true;
@ -355,7 +354,10 @@ TimeAxisViewItem::set_duration (framecnt_t dur, void* src)
item_duration = dur;
reset_width_dependent_items (trackview.editor().sample_to_pixel (dur));
double end_pixel = trackview.editor().sample_to_pixel (frame_position + dur);
double first_pixel = trackview.editor().sample_to_pixel (frame_position);
reset_width_dependent_items (end_pixel - first_pixel);
DurationChanged (dur, src); /* EMIT_SIGNAL */
return true;
@ -820,7 +822,11 @@ TimeAxisViewItem::set_samples_per_pixel (double fpp)
{
samples_per_pixel = fpp;
set_position (this->get_position(), this);
reset_width_dependent_items ((double) get_duration() / samples_per_pixel);
double end_pixel = trackview.editor().sample_to_pixel (frame_position + get_duration());
double first_pixel = trackview.editor().sample_to_pixel (frame_position);
reset_width_dependent_items (end_pixel - first_pixel);
}
void
@ -862,6 +868,9 @@ TimeAxisViewItem::reset_width_dependent_items (double pixel_width)
if (frame) {
frame->show();
/* Note: x0 is always zero - the position is defined by
* the position of the group, not the frame.
*/
frame->set_x1 (pixel_width);
if (selection_frame) {