mirror of
https://github.com/Ardour/ardour.git
synced 2025-12-16 19:56:31 +01:00
updated Temporal::Beats ... GUI edition
This commit is contained in:
parent
4dc048b28a
commit
0a469527f1
14 changed files with 80 additions and 83 deletions
|
|
@ -247,7 +247,7 @@ AutomationRegionView::paste (samplepos_t pos
|
|||
/* add multi-paste offset if applicable */
|
||||
if (parameter_is_midi (src_type)) {
|
||||
// convert length to samples (incl tempo-ramps)
|
||||
len = DoubleBeatsSamplesConverter (view->session()->tempo_map(), pos).to (len * paste_count);
|
||||
len = BeatsSamplesConverter (view->session()->tempo_map(), pos).to (Temporal::Beats::from_double (len * paste_count));
|
||||
pos += view->editor ().get_paste_offset (pos, paste_count > 0 ? 1 : 0, len);
|
||||
} else {
|
||||
pos += view->editor ().get_paste_offset (pos, paste_count, len);
|
||||
|
|
@ -258,7 +258,7 @@ AutomationRegionView::paste (samplepos_t pos
|
|||
pos - _source_relative_time_converter.origin_b());
|
||||
|
||||
XMLNode& before = my_list->get_state();
|
||||
my_list->paste(*slist, model_pos, DoubleBeatsSamplesConverter (view->session()->tempo_map(), pos));
|
||||
my_list->paste(*slist, model_pos, BeatsSamplesConverter (view->session()->tempo_map(), pos));
|
||||
view->session()->add_command(
|
||||
new MementoCommand<ARDOUR::AutomationList>(_line->memento_command_binder(), &before, &my_list->get_state()));
|
||||
|
||||
|
|
|
|||
|
|
@ -858,7 +858,7 @@ AutomationTimeAxisView::paste_one (samplepos_t pos, unsigned paste_count, float
|
|||
|
||||
if (parameter_is_midi (src_type)) {
|
||||
// convert length to samples (incl tempo-ramps)
|
||||
len = DoubleBeatsSamplesConverter (_session->tempo_map(), pos).to (len * paste_count);
|
||||
len = BeatsSamplesConverter (_session->tempo_map(), pos).to (Temporal::Beats::from_double (len * paste_count));
|
||||
pos += _editor.get_paste_offset (pos, paste_count > 0 ? 1 : 0, len);
|
||||
} else {
|
||||
pos += _editor.get_paste_offset (pos, paste_count, len);
|
||||
|
|
@ -868,7 +868,7 @@ AutomationTimeAxisView::paste_one (samplepos_t pos, unsigned paste_count, float
|
|||
double const model_pos = _line->time_converter().from (pos - _line->time_converter().origin_b ());
|
||||
|
||||
XMLNode &before = alist->get_state();
|
||||
alist->paste (**p, model_pos, DoubleBeatsSamplesConverter (_session->tempo_map(), pos));
|
||||
alist->paste (**p, model_pos, BeatsSamplesConverter (_session->tempo_map(), pos));
|
||||
_session->add_command (new MementoCommand<AutomationList>(*alist.get(), &before, &alist->get_state()));
|
||||
|
||||
return true;
|
||||
|
|
|
|||
|
|
@ -4154,16 +4154,16 @@ Editor::get_grid_type_as_beats (bool& success, samplepos_t position)
|
|||
|
||||
const unsigned divisions = get_grid_beat_divisions(position);
|
||||
if (divisions) {
|
||||
return Temporal::Beats(1.0 / (double)get_grid_beat_divisions(position));
|
||||
return Temporal::Beats::from_double (1.0 / (double)get_grid_beat_divisions(position));
|
||||
}
|
||||
|
||||
switch (_grid_type) {
|
||||
case GridTypeBeat:
|
||||
return Temporal::Beats(4.0 / _session->tempo_map().meter_at_sample (position).note_divisor());
|
||||
return Temporal::Beats::from_double (4.0 / _session->tempo_map().meter_at_sample (position).note_divisor());
|
||||
case GridTypeBar:
|
||||
if (_session) {
|
||||
const Meter& m = _session->tempo_map().meter_at_sample (position);
|
||||
return Temporal::Beats((4.0 * m.divisions_per_bar()) / m.note_divisor());
|
||||
return Temporal::Beats::from_double ((4.0 * m.divisions_per_bar()) / m.note_divisor());
|
||||
}
|
||||
break;
|
||||
default:
|
||||
|
|
|
|||
|
|
@ -5935,11 +5935,11 @@ NoteDrag::start_grab (GdkEvent* event, Gdk::Cursor *)
|
|||
}
|
||||
|
||||
/** @return Current total drag x change in quarter notes */
|
||||
double
|
||||
Temporal::Beats
|
||||
NoteDrag::total_dx (GdkEvent * event) const
|
||||
{
|
||||
if (_x_constrained) {
|
||||
return 0;
|
||||
return Temporal::Beats();
|
||||
}
|
||||
|
||||
TempoMap& map (_editor->session()->tempo_map());
|
||||
|
|
@ -5948,10 +5948,10 @@ NoteDrag::total_dx (GdkEvent * event) const
|
|||
sampleoffset_t const dx = _editor->pixel_to_sample (_drags->current_pointer_x() - grab_x());
|
||||
|
||||
/* primary note time */
|
||||
sampleoffset_t const n = map.sample_at_quarter_note (_region->session_relative_qn (_primary->note()->time().to_double()));
|
||||
sampleoffset_t const n = map.sample_at_quarter_note (_region->session_relative_qn (_primary->note()->time()));
|
||||
|
||||
/* primary note time in quarter notes */
|
||||
double const n_qn = _region->session_relative_qn (_primary->note()->time().to_double());
|
||||
double const n_qn = _region->session_relative_qn (_primary->note()->time());
|
||||
|
||||
/* new time of the primary note in session samples */
|
||||
sampleoffset_t st = n + dx + snap_delta (event->button.state);
|
||||
|
|
@ -5959,7 +5959,7 @@ NoteDrag::total_dx (GdkEvent * event) const
|
|||
/* possibly snap and return corresponding delta in quarter notes */
|
||||
MusicSample snap (st, 0);
|
||||
_editor->snap_to_with_modifier (snap, event, RoundNearest, SnapToGrid_Unscaled);
|
||||
double ret = map.exact_qn_at_sample (snap.sample, snap.division) - n_qn - snap_delta_music (event->button.state);
|
||||
Temporal::Beats ret = Temporal::Beats::from_double (map.exact_qn_at_sample (snap.sample, snap.division) - n_qn - snap_delta_music (event->button.state));
|
||||
|
||||
/* prevent the earliest note being dragged earlier than the region's start position */
|
||||
if (_earliest + ret < _region->midi_region()->start_beats()) {
|
||||
|
|
@ -6000,7 +6000,7 @@ NoteDrag::motion (GdkEvent * event, bool first_move)
|
|||
}
|
||||
|
||||
/* Total change in x and y since the start of the drag */
|
||||
double const dx_qn = total_dx (event);
|
||||
Temporal::Beats const dx_qn = total_dx (event);
|
||||
int8_t const dy = total_dy ();
|
||||
|
||||
/* Now work out what we have to do to the note canvas items to set this new drag delta */
|
||||
|
|
@ -6690,7 +6690,7 @@ HitCreateDrag::start_grab (GdkEvent* event, Gdk::Cursor* cursor)
|
|||
}
|
||||
|
||||
const samplepos_t start = map.sample_at_quarter_note (eqaf) - _region_view->region()->position();
|
||||
Temporal::Beats length = Temporal::Beats(1.0 / 32.0); /* 1/32 beat = 1/128 note */
|
||||
Temporal::Beats length = Temporal::Beats::from_double (1.0 / 32.0); /* 1/32 beat = 1/128 note */
|
||||
|
||||
_editor->begin_reversible_command (_("Create Hit"));
|
||||
_region_view->clear_note_selection();
|
||||
|
|
|
|||
|
|
@ -597,7 +597,7 @@ public:
|
|||
|
||||
private:
|
||||
|
||||
double total_dx (GdkEvent * event) const; // total movement in quarter notes
|
||||
Temporal::Beats total_dx (GdkEvent * event) const; // total movement in quarter notes
|
||||
int8_t total_dy () const;
|
||||
|
||||
MidiRegionView* _region;
|
||||
|
|
|
|||
|
|
@ -4450,7 +4450,7 @@ Editor::cut_copy_points (Editing::CutCopyOp op, Temporal::Beats earliest, bool m
|
|||
lists[al].copy->fast_simple_add ((*ctrl_evt)->when, (*ctrl_evt)->value);
|
||||
if (midi) {
|
||||
/* Update earliest MIDI start time in beats */
|
||||
earliest = std::min(earliest, Temporal::Beats((*ctrl_evt)->when));
|
||||
earliest = std::min(earliest, Temporal::Beats::from_double ((*ctrl_evt)->when));
|
||||
} else {
|
||||
/* Update earliest session start time in samples */
|
||||
start.sample = std::min(start.sample, (*sel_point)->line().session_position(ctrl_evt));
|
||||
|
|
@ -4470,7 +4470,9 @@ Editor::cut_copy_points (Editing::CutCopyOp op, Temporal::Beats earliest, bool m
|
|||
snap_to(start, RoundDownMaybe);
|
||||
}
|
||||
|
||||
const double line_offset = midi ? earliest.to_double() : start.sample;
|
||||
/* XXX NUTEMPO BROKEN FOR MIDI */
|
||||
//const double line_offset = midi ? earliest.to_double() : start.sample;
|
||||
const double line_offset = start.sample;
|
||||
for (Lists::iterator i = lists.begin(); i != lists.end(); ++i) {
|
||||
/* Correct this copy list so that it is relative to the earliest
|
||||
start time, so relative ordering between points is preserved
|
||||
|
|
@ -5700,7 +5702,7 @@ Editor::apply_midi_note_edit_op_to_region (MidiOperator& op, MidiRegionView& mrv
|
|||
vector<Evoral::Sequence<Temporal::Beats>::Notes> v;
|
||||
v.push_back (selected);
|
||||
|
||||
Temporal::Beats pos_beats = Temporal::Beats (mrv.midi_region()->beat()) - mrv.midi_region()->start_beats();
|
||||
Temporal::Beats pos_beats = Temporal::Beats::from_double (mrv.midi_region()->beat() - mrv.midi_region()->start_beats());
|
||||
|
||||
return op (mrv.midi_region()->model(), pos_beats, v);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -23,7 +23,6 @@ using namespace ARDOUR;
|
|||
|
||||
MidiCutBuffer::MidiCutBuffer (Session* s)
|
||||
: AutomatableSequence<Temporal::Beats> (*s)
|
||||
, _origin (0)
|
||||
{
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -293,7 +293,7 @@ MidiListEditor::scroll_event (GdkEventScroll* ev)
|
|||
|
||||
switch (prop) {
|
||||
case MidiModel::NoteDiffCommand::StartTime:
|
||||
if (note->time() + fdelta >= 0) {
|
||||
if (note->time() + fdelta >= Temporal::Beats()) {
|
||||
cmd->change (note, prop, note->time() + fdelta);
|
||||
} else {
|
||||
cmd->change (note, prop, Temporal::Beats());
|
||||
|
|
@ -303,11 +303,10 @@ MidiListEditor::scroll_event (GdkEventScroll* ev)
|
|||
cmd->change (note, prop, (uint8_t) (note->velocity() + idelta));
|
||||
break;
|
||||
case MidiModel::NoteDiffCommand::Length:
|
||||
if (note->length().to_double() + fdelta >=
|
||||
Temporal::Beats::tick().to_double()) {
|
||||
if (note->length() + fdelta >= Temporal::Beats::one_tick()) {
|
||||
cmd->change (note, prop, note->length() + fdelta);
|
||||
} else {
|
||||
cmd->change (note, prop, Temporal::Beats::tick());
|
||||
cmd->change (note, prop, Temporal::Beats::one_tick());
|
||||
}
|
||||
break;
|
||||
case MidiModel::NoteDiffCommand::Channel:
|
||||
|
|
@ -336,7 +335,7 @@ MidiListEditor::scroll_event (GdkEventScroll* ev)
|
|||
|
||||
switch (prop) {
|
||||
case MidiModel::NoteDiffCommand::StartTime:
|
||||
if (note->time() + fdelta >= 0) {
|
||||
if (note->time() + fdelta >= Temporal::Beats()) {
|
||||
cmd->change (note, prop, note->time() + fdelta);
|
||||
} else {
|
||||
cmd->change (note, prop, Temporal::Beats());
|
||||
|
|
@ -346,11 +345,10 @@ MidiListEditor::scroll_event (GdkEventScroll* ev)
|
|||
cmd->change (note, prop, (uint8_t) (note->velocity() + idelta));
|
||||
break;
|
||||
case MidiModel::NoteDiffCommand::Length:
|
||||
if (note->length() + fdelta >=
|
||||
Temporal::Beats::tick().to_double()) {
|
||||
if (note->length() + fdelta >= Temporal::Beats::one_tick()) {
|
||||
cmd->change (note, prop, note->length() + fdelta);
|
||||
} else {
|
||||
cmd->change (note, prop, Temporal::Beats::tick());
|
||||
cmd->change (note, prop, Temporal::Beats::one_tick());
|
||||
}
|
||||
break;
|
||||
case MidiModel::NoteDiffCommand::Channel:
|
||||
|
|
@ -593,7 +591,7 @@ MidiListEditor::edited (const std::string& path, const std::string& text)
|
|||
int ival;
|
||||
bool apply = false;
|
||||
int idelta = 0;
|
||||
double fdelta = 0;
|
||||
Temporal::Beats delta;
|
||||
char const * opname;
|
||||
switch (edit_column) {
|
||||
case 0: // start
|
||||
|
|
@ -696,7 +694,7 @@ MidiListEditor::edited (const std::string& path, const std::string& text)
|
|||
}
|
||||
|
||||
if (fval > 0.0) {
|
||||
fdelta = fval - note->length().to_double();
|
||||
delta = fval - note->length();
|
||||
prop = MidiModel::NoteDiffCommand::Length;
|
||||
opname = _("change note length");
|
||||
apply = true;
|
||||
|
|
@ -724,7 +722,7 @@ MidiListEditor::edited (const std::string& path, const std::string& text)
|
|||
cmd->change (note, prop, (uint8_t) (note->velocity() + idelta));
|
||||
break;
|
||||
case MidiModel::NoteDiffCommand::Length:
|
||||
cmd->change (note, prop, note->length() + fdelta);
|
||||
cmd->change (note, prop, note->length() + delta);
|
||||
break;
|
||||
case MidiModel::NoteDiffCommand::Channel:
|
||||
cmd->change (note, prop, (uint8_t) (note->channel() + idelta));
|
||||
|
|
|
|||
|
|
@ -110,16 +110,15 @@ MidiRegionView::MidiRegionView (ArdourCanvas::Container* parent,
|
|||
: RegionView (parent, tv, r, spu, basic_color)
|
||||
, _current_range_min(0)
|
||||
, _current_range_max(0)
|
||||
, _region_relative_time_converter(r->session().tempo_map(), r->position())
|
||||
, _source_relative_time_converter(r->session().tempo_map(), r->position() - r->start())
|
||||
, _region_relative_time_converter_double(r->session().tempo_map(), r->position())
|
||||
, _region_relative_time_converter(r->session().tempo_map(), Temporal::Beats::from_double (r->position()))
|
||||
, _source_relative_time_converter(r->session().tempo_map(), Temporal::Beats::from_double (r->position() - r->start()))
|
||||
, _region_relative_time_converter_double(r->session().tempo_map(), Temporal::Beats::from_double (r->position()))
|
||||
, _active_notes(0)
|
||||
, _note_group (new ArdourCanvas::Container (group))
|
||||
, _note_diff_command (0)
|
||||
, _ghost_note(0)
|
||||
, _step_edit_cursor (0)
|
||||
, _step_edit_cursor_width (1.0)
|
||||
, _step_edit_cursor_position (0.0)
|
||||
, _step_edit_cursor_width (1, 0)
|
||||
, _channel_selection_scoped_note (0)
|
||||
, _mouse_state(None)
|
||||
, _pressed_button(0)
|
||||
|
|
@ -164,8 +163,7 @@ MidiRegionView::MidiRegionView (ArdourCanvas::Container* parent,
|
|||
, _note_diff_command (0)
|
||||
, _ghost_note(0)
|
||||
, _step_edit_cursor (0)
|
||||
, _step_edit_cursor_width (1.0)
|
||||
, _step_edit_cursor_position (0.0)
|
||||
, _step_edit_cursor_width (1,0)
|
||||
, _channel_selection_scoped_note (0)
|
||||
, _mouse_state(None)
|
||||
, _pressed_button(0)
|
||||
|
|
@ -219,8 +217,7 @@ MidiRegionView::MidiRegionView (const MidiRegionView& other)
|
|||
, _note_diff_command (0)
|
||||
, _ghost_note(0)
|
||||
, _step_edit_cursor (0)
|
||||
, _step_edit_cursor_width (1.0)
|
||||
, _step_edit_cursor_position (0.0)
|
||||
, _step_edit_cursor_width (1,0)
|
||||
, _channel_selection_scoped_note (0)
|
||||
, _mouse_state(None)
|
||||
, _pressed_button(0)
|
||||
|
|
@ -249,8 +246,7 @@ MidiRegionView::MidiRegionView (const MidiRegionView& other, boost::shared_ptr<M
|
|||
, _note_diff_command (0)
|
||||
, _ghost_note(0)
|
||||
, _step_edit_cursor (0)
|
||||
, _step_edit_cursor_width (1.0)
|
||||
, _step_edit_cursor_position (0.0)
|
||||
, _step_edit_cursor_width (1,0)
|
||||
, _channel_selection_scoped_note (0)
|
||||
, _mouse_state(None)
|
||||
, _pressed_button(0)
|
||||
|
|
@ -1635,8 +1631,8 @@ MidiRegionView::note_in_region_range (const boost::shared_ptr<NoteType> note, bo
|
|||
const boost::shared_ptr<ARDOUR::MidiRegion> midi_reg = midi_region();
|
||||
|
||||
/* must compare double explicitly as Beats::operator< rounds to ppqn */
|
||||
const bool outside = (note->time().to_double() < midi_reg->start_beats() ||
|
||||
note->time().to_double() >= midi_reg->start_beats() + midi_reg->length_beats());
|
||||
const bool outside = (note->time() < midi_reg->start_beats() ||
|
||||
note->time() >= midi_reg->start_beats() + midi_reg->length_beats());
|
||||
|
||||
visible = (note->note() >= _current_range_min) &&
|
||||
(note->note() <= _current_range_max);
|
||||
|
|
@ -1668,7 +1664,7 @@ MidiRegionView::update_sustained (Note* ev, bool update_ghost_regions)
|
|||
boost::shared_ptr<NoteType> note = ev->note();
|
||||
|
||||
const double session_source_start = _region->quarter_note() - mr->start_beats();
|
||||
const samplepos_t note_start_samples = map.sample_at_quarter_note (note->time().to_double() + session_source_start) - _region->position();
|
||||
const samplepos_t note_start_samples = map.sample_at_quarter_note (note->time() + session_source_start) - _region->position();
|
||||
|
||||
const double x0 = max (0.,trackview.editor().sample_to_pixel (note_start_samples));
|
||||
double x1;
|
||||
|
|
@ -1685,7 +1681,7 @@ MidiRegionView::update_sustained (Note* ev, bool update_ghost_regions)
|
|||
|
||||
/* normal note */
|
||||
|
||||
double note_end_time = note->end_time().to_double();
|
||||
Temporal::Beats note_end_time = note->end_time();
|
||||
|
||||
if (note->end_time() > mr->start_beats() + mr->length_beats()) {
|
||||
note_end_time = mr->start_beats() + mr->length_beats();
|
||||
|
|
@ -1740,7 +1736,7 @@ MidiRegionView::update_hit (Hit* ev, bool update_ghost_regions)
|
|||
{
|
||||
boost::shared_ptr<NoteType> note = ev->note();
|
||||
|
||||
const double note_time_qn = note->time().to_double() + (_region->quarter_note() - midi_region()->start_beats());
|
||||
const double note_time_qn = note->time() + (_region->quarter_note() - midi_region()->start_beats());
|
||||
const samplepos_t note_start_samples = trackview.session()->tempo_map().sample_at_quarter_note (note_time_qn) - _region->position();
|
||||
|
||||
const double x = trackview.editor().sample_to_pixel(note_start_samples);
|
||||
|
|
@ -2548,7 +2544,7 @@ MidiRegionView::move_selection(double dx_qn, double dy, double cumulative_dy)
|
|||
if (n->note()->time() == earliest) {
|
||||
to_play.push_back (n->note());
|
||||
}
|
||||
double const note_time_qn = session_relative_qn (n->note()->time().to_double());
|
||||
double const note_time_qn = session_relative_qn (n->note()->time());
|
||||
double dx = 0.0;
|
||||
if (midi_view()->note_mode() == Sustained) {
|
||||
dx = editor->sample_to_pixel_unrounded (tmap.sample_at_quarter_note (note_time_qn + dx_qn))
|
||||
|
|
@ -2567,8 +2563,7 @@ MidiRegionView::move_selection(double dx_qn, double dy, double cumulative_dy)
|
|||
/* update length */
|
||||
if (midi_view()->note_mode() == Sustained) {
|
||||
Note* sus = dynamic_cast<Note*> (*i);
|
||||
double const len_dx = editor->sample_to_pixel_unrounded (
|
||||
tmap.sample_at_quarter_note (note_time_qn + dx_qn + n->note()->length().to_double()));
|
||||
double const len_dx = editor->sample_to_pixel_unrounded (tmap.sample_at_quarter_note (note_time_qn + dx_qn + n->note()->length()));
|
||||
|
||||
sus->set_x1 (n->item()->canvas_to_item (ArdourCanvas::Duple (len_dx, 0)).x);
|
||||
}
|
||||
|
|
@ -2632,7 +2627,7 @@ MidiRegionView::copy_selection (NoteBase* primary)
|
|||
}
|
||||
|
||||
void
|
||||
MidiRegionView::move_copies (double dx_qn, double dy, double cumulative_dy)
|
||||
MidiRegionView::move_copies (Temporal::Beats const & dx_qn, double dy, double cumulative_dy)
|
||||
{
|
||||
typedef vector<boost::shared_ptr<NoteType> > PossibleChord;
|
||||
Editor* editor = dynamic_cast<Editor*> (&trackview.editor());
|
||||
|
|
@ -2645,7 +2640,7 @@ MidiRegionView::move_copies (double dx_qn, double dy, double cumulative_dy)
|
|||
if (n->note()->time() == earliest) {
|
||||
to_play.push_back (n->note());
|
||||
}
|
||||
double const note_time_qn = session_relative_qn (n->note()->time().to_double());
|
||||
Temporal::Beats const note_time_qn = Temporal::Beats::from_double (session_relative_qn (n->note()->time()));
|
||||
double dx = 0.0;
|
||||
if (midi_view()->note_mode() == Sustained) {
|
||||
dx = editor->sample_to_pixel_unrounded (tmap.sample_at_quarter_note (note_time_qn + dx_qn))
|
||||
|
|
@ -2662,8 +2657,7 @@ MidiRegionView::move_copies (double dx_qn, double dy, double cumulative_dy)
|
|||
|
||||
if (midi_view()->note_mode() == Sustained) {
|
||||
Note* sus = dynamic_cast<Note*> (*i);
|
||||
double const len_dx = editor->sample_to_pixel_unrounded (
|
||||
tmap.sample_at_quarter_note (note_time_qn + dx_qn + n->note()->length().to_double()));
|
||||
double const len_dx = editor->sample_to_pixel_unrounded (tmap.sample_at_quarter_note (note_time_qn + dx_qn + n->note()->length()));
|
||||
|
||||
sus->set_x1 (n->item()->canvas_to_item (ArdourCanvas::Duple (len_dx, 0)).x);
|
||||
}
|
||||
|
|
@ -2693,7 +2687,7 @@ MidiRegionView::move_copies (double dx_qn, double dy, double cumulative_dy)
|
|||
}
|
||||
|
||||
void
|
||||
MidiRegionView::note_dropped(NoteBase *, double d_qn, int8_t dnote, bool copy)
|
||||
MidiRegionView::note_dropped(NoteBase *, Temporal::Beats const & d_qn, int8_t dnote, bool copy)
|
||||
{
|
||||
uint8_t lowest_note_in_selection = 127;
|
||||
uint8_t highest_note_in_selection = 0;
|
||||
|
|
@ -2727,9 +2721,9 @@ MidiRegionView::note_dropped(NoteBase *, double d_qn, int8_t dnote, bool copy)
|
|||
|
||||
for (Selection::iterator i = _selection.begin(); i != _selection.end() ; ++i) {
|
||||
|
||||
Temporal::Beats new_time = Temporal::Beats ((*i)->note()->time().to_double() + d_qn);
|
||||
Temporal::Beats new_time = Temporal::Beats ((*i)->note()->time() + d_qn);
|
||||
|
||||
if (new_time < 0) {
|
||||
if (new_time < Temporal::Beats()) {
|
||||
continue;
|
||||
}
|
||||
|
||||
|
|
@ -2766,9 +2760,9 @@ MidiRegionView::note_dropped(NoteBase *, double d_qn, int8_t dnote, bool copy)
|
|||
for (CopyDragEvents::iterator i = _copy_drag_events.begin(); i != _copy_drag_events.end() ; ++i) {
|
||||
|
||||
/* update time */
|
||||
Temporal::Beats new_time = Temporal::Beats ((*i)->note()->time().to_double() + d_qn);
|
||||
Temporal::Beats new_time = (*i)->note()->time() + d_qn;
|
||||
|
||||
if (new_time < 0) {
|
||||
if (new_time < Temporal::Beats()) {
|
||||
continue;
|
||||
}
|
||||
|
||||
|
|
@ -3005,9 +2999,7 @@ MidiRegionView::update_resizing (NoteBase* primary, bool at_front, double delta_
|
|||
snapped_x = trackview.editor ().pixel_to_sample (current_x);
|
||||
}
|
||||
|
||||
const Temporal::Beats beats = Temporal::Beats (tmap.exact_beat_at_sample (snapped_x + midi_region()->position(), divisions)
|
||||
- midi_region()->beat())
|
||||
+ midi_region()->start_beats();
|
||||
const Temporal::Beats beats = Temporal::Beats::from_double (tmap.exact_beat_at_sample (snapped_x + midi_region()->position(), divisions) - midi_region()->beat()) + midi_region()->start_beats();
|
||||
|
||||
Temporal::Beats len = Temporal::Beats();
|
||||
|
||||
|
|
@ -3026,7 +3018,8 @@ MidiRegionView::update_resizing (NoteBase* primary, bool at_front, double delta_
|
|||
len = std::max (Temporal::Beats (0,1), len);
|
||||
|
||||
char buf[16];
|
||||
snprintf (buf, sizeof (buf), "%.3g beats", len.to_double());
|
||||
/* represent as float frac to help out the user */
|
||||
snprintf (buf, sizeof (buf), "%.3g beats", len.get_beats() + (len.get_ticks()/(double)Temporal::ticks_per_beat));
|
||||
show_verbose_cursor (buf, 0, 0);
|
||||
|
||||
cursor_set = true;
|
||||
|
|
@ -3106,7 +3099,7 @@ MidiRegionView::commit_resizing (NoteBase* primary, bool at_front, double delta_
|
|||
/* and then to beats */
|
||||
const double e_qaf = tmap.exact_qn_at_sample (current_fr + midi_region()->position(), divisions);
|
||||
const double quarter_note_start = _region->quarter_note() - midi_region()->start_beats();
|
||||
const Temporal::Beats x_beats = Temporal::Beats (e_qaf - quarter_note_start);
|
||||
const Temporal::Beats x_beats = Temporal::Beats::from_double (e_qaf - quarter_note_start);
|
||||
|
||||
if (at_front && x_beats < canvas_note->note()->end_time()) {
|
||||
const Temporal::Beats new_start = x_beats - (sign * snap_delta_beats);
|
||||
|
|
@ -3192,7 +3185,7 @@ MidiRegionView::trim_note (NoteBase* event, Temporal::Beats front_delta, Tempora
|
|||
*/
|
||||
|
||||
if (!!front_delta) {
|
||||
if (front_delta < 0) {
|
||||
if (front_delta < std::numeric_limits<Temporal::Beats>::lowest()) {
|
||||
|
||||
if (event->note()->time() < -front_delta) {
|
||||
new_start = Temporal::Beats();
|
||||
|
|
@ -3225,7 +3218,7 @@ MidiRegionView::trim_note (NoteBase* event, Temporal::Beats front_delta, Tempora
|
|||
|
||||
if (!!end_delta) {
|
||||
bool can_change = true;
|
||||
if (end_delta < 0) {
|
||||
if (end_delta < Temporal::Beats()) {
|
||||
if (event->note()->length() < -end_delta) {
|
||||
can_change = false;
|
||||
}
|
||||
|
|
@ -3407,7 +3400,7 @@ MidiRegionView::change_note_lengths (bool fine, bool shorter, Temporal::Beats de
|
|||
{
|
||||
if (!delta) {
|
||||
if (fine) {
|
||||
delta = Temporal::Beats(1.0/128.0);
|
||||
delta = Temporal::Beats::ticks (Temporal::ticks_per_beat / 128);
|
||||
} else {
|
||||
/* grab the current grid distance */
|
||||
delta = get_grid_beats(_region->position());
|
||||
|
|
@ -3962,7 +3955,11 @@ MidiRegionView::update_ghost_note (double x, double y, uint32_t state)
|
|||
}
|
||||
|
||||
/* ghost note may have been snapped before region */
|
||||
<<<<<<< HEAD
|
||||
if (snapped_beats.to_double() < 0.0) {
|
||||
=======
|
||||
if (_ghost_note && snapped_beats < Temporal::Beats()) {
|
||||
>>>>>>> 5ec97dc85c (updated Temporal::Beats ... GUI edition)
|
||||
_ghost_note->hide();
|
||||
return;
|
||||
}
|
||||
|
|
@ -4326,8 +4323,7 @@ MidiRegionView::get_velocity_for_add (MidiModel::TimeType time) const
|
|||
MidiModel::Notes::const_iterator n = m;
|
||||
--n;
|
||||
|
||||
const double frac = ((time - (*n)->time()).to_double() /
|
||||
((*m)->time() - (*n)->time()).to_double());
|
||||
const double frac = (time - (*n)->time()) / ((*m)->time() - (*n)->time());
|
||||
|
||||
return (*n)->velocity() + (frac * ((*m)->velocity() - (*n)->velocity()));
|
||||
}
|
||||
|
|
@ -4344,19 +4340,19 @@ MidiRegionView::snap_sample_to_grid_underneath (samplepos_t p, int32_t divisions
|
|||
double eqaf = map.exact_qn_at_sample (p + _region->position(), divisions);
|
||||
|
||||
if (divisions != 0 && shift_snap) {
|
||||
const double qaf = map.quarter_note_at_sample (p + _region->position());
|
||||
const Temporal::Beats qaf = Temporal::Beats::from_double (map.quarter_note_at_sample (p + _region->position()));
|
||||
/* Hack so that we always snap to the note that we are over, instead of snapping
|
||||
to the next one if we're more than halfway through the one we're over.
|
||||
*/
|
||||
const Temporal::Beats grid_beats = get_grid_beats (p + _region->position());
|
||||
const double rem = eqaf - qaf;
|
||||
if (rem >= 0.0) {
|
||||
eqaf -= grid_beats.to_double();
|
||||
eqaf -= grid_beats;
|
||||
}
|
||||
}
|
||||
const double session_start_off = _region->quarter_note() - midi_region()->start_beats();
|
||||
|
||||
return Temporal::Beats (eqaf - session_start_off);
|
||||
return Temporal::Beats::from_double (eqaf - session_start_off);
|
||||
}
|
||||
|
||||
ChannelMode
|
||||
|
|
@ -4381,7 +4377,7 @@ MidiRegionView::get_grid_beats(samplepos_t pos) const
|
|||
bool success = false;
|
||||
Temporal::Beats beats = editor.get_grid_type_as_beats (success, pos);
|
||||
if (!success) {
|
||||
beats = Temporal::Beats(1);
|
||||
beats = Temporal::Beats (1, 0);
|
||||
}
|
||||
return beats;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -211,9 +211,9 @@ public:
|
|||
|
||||
Temporal::Beats earliest_in_selection ();
|
||||
void move_selection(double dx, double dy, double cumulative_dy);
|
||||
void note_dropped (NoteBase* ev, double d_qn, int8_t d_note, bool copy);
|
||||
void note_dropped (NoteBase* ev, Temporal::Beats const & d_qn, int8_t d_note, bool copy);
|
||||
NoteBase* copy_selection (NoteBase* primary);
|
||||
void move_copies(double dx_qn, double dy, double cumulative_dy);
|
||||
void move_copies(Temporal::Beats const & dx_qn, double dy, double cumulative_dy);
|
||||
|
||||
void select_notes (std::list<Evoral::event_id_t>, bool allow_audition);
|
||||
void select_matching_notes (uint8_t notenum, uint16_t channel_mask, bool add, bool extend);
|
||||
|
|
@ -306,8 +306,8 @@ public:
|
|||
return _source_relative_time_converter;
|
||||
}
|
||||
|
||||
ARDOUR::DoubleBeatsSamplesConverter const & region_relative_time_converter_double () const {
|
||||
return _region_relative_time_converter_double;
|
||||
ARDOUR::BeatsSamplesConverter const & region_relative_time_converter_double () const {
|
||||
return _region_relative_time_converter;
|
||||
}
|
||||
|
||||
double session_relative_qn (double qn) const;
|
||||
|
|
@ -485,7 +485,7 @@ public:
|
|||
|
||||
ARDOUR::BeatsSamplesConverter _region_relative_time_converter;
|
||||
ARDOUR::BeatsSamplesConverter _source_relative_time_converter;
|
||||
ARDOUR::DoubleBeatsSamplesConverter _region_relative_time_converter_double;
|
||||
ARDOUR::BeatsSamplesConverter _region_relative_time_converter_double;
|
||||
|
||||
boost::shared_ptr<ARDOUR::MidiModel> _model;
|
||||
Events _events;
|
||||
|
|
|
|||
|
|
@ -189,8 +189,8 @@ QuantizeDialog::strength () const
|
|||
return strength_adjustment.get_value ();
|
||||
}
|
||||
|
||||
float
|
||||
Temporal::Beats
|
||||
QuantizeDialog::threshold () const
|
||||
{
|
||||
return threshold_adjustment.get_value ();
|
||||
return Temporal::Beats::from_double (threshold_adjustment.get_value ());
|
||||
}
|
||||
|
|
|
|||
|
|
@ -27,6 +27,8 @@
|
|||
#include <gtkmm/checkbutton.h>
|
||||
#include <gtkmm/spinbutton.h>
|
||||
|
||||
#include "temporal/beats.h"
|
||||
|
||||
#include "ardour/types.h"
|
||||
|
||||
#include "ardour_dialog.h"
|
||||
|
|
@ -49,7 +51,7 @@ public:
|
|||
bool snap_start() const { return snap_start_button.get_active(); }
|
||||
bool snap_end() const { return snap_end_button.get_active(); }
|
||||
float strength() const;
|
||||
float threshold () const;
|
||||
Temporal::Beats threshold () const;
|
||||
float swing () const;
|
||||
|
||||
private:
|
||||
|
|
|
|||
|
|
@ -443,7 +443,7 @@ StepEditor::region_removed (boost::weak_ptr<Region> wr)
|
|||
step_edit_region.reset();
|
||||
step_edit_region_view = 0;
|
||||
// force a recompute of the insert position
|
||||
step_edit_beat_pos = Temporal::Beats(-1);
|
||||
step_edit_beat_pos = Temporal::Beats::from_double (-1);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -62,7 +62,7 @@ StepEntry::instance()
|
|||
|
||||
StepEntry::StepEntry ()
|
||||
: ArdourWindow (string())
|
||||
, _current_note_length (1.0)
|
||||
, _current_note_length (1, 0)
|
||||
, _current_note_velocity (64)
|
||||
, triplet_button ("3")
|
||||
, dot_adjustment (0.0, 0.0, 3.0, 1.0, 1.0)
|
||||
|
|
@ -549,7 +549,7 @@ StepEntry::note_length ()
|
|||
base_time *= 1 + ((dots - 1.0)/dots);
|
||||
}
|
||||
|
||||
return Temporal::Beats(base_time);
|
||||
return Temporal::Beats::from_double (base_time);
|
||||
}
|
||||
|
||||
uint8_t
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue