diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2011-12-13 02:46:36 +0000 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2011-12-13 02:46:36 +0000 |
commit | e0cf3b6354e2c92a6adabe85cb6d6d3c547c287c (patch) | |
tree | 564e24afbcdda3cf67c06b3ac71db3cb5b66023f /gtk2_ardour | |
parent | 6aaf4ea17a326eb06d81b06cb83048fbdaaa8a52 (diff) |
more fun and games with meter and the tempo map: rename Meter::beats_per_bar() to Meter::divisions_per_bar() so that its clear(er) on what it is actually returning; use Meter::divisions_per_bar() in more (all?) places that need it; fix up dragging meter marks by removing the relevant meter section from the map while we drag; operator<< for some tempo-related objects
git-svn-id: svn://localhost/ardour2/branches/3.0@10995 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'gtk2_ardour')
-rw-r--r-- | gtk2_ardour/audio_clock.cc | 2 | ||||
-rw-r--r-- | gtk2_ardour/editor.cc | 2 | ||||
-rw-r--r-- | gtk2_ardour/editor_drag.cc | 68 | ||||
-rw-r--r-- | gtk2_ardour/editor_ops.cc | 4 | ||||
-rw-r--r-- | gtk2_ardour/editor_rulers.cc | 6 | ||||
-rw-r--r-- | gtk2_ardour/editor_tempodisplay.cc | 4 | ||||
-rw-r--r-- | gtk2_ardour/tempo_dialog.cc | 4 | ||||
-rw-r--r-- | gtk2_ardour/verbose_cursor.cc | 2 |
8 files changed, 50 insertions, 42 deletions
diff --git a/gtk2_ardour/audio_clock.cc b/gtk2_ardour/audio_clock.cc index 757d5bc846..aa15079587 100644 --- a/gtk2_ardour/audio_clock.cc +++ b/gtk2_ardour/audio_clock.cc @@ -1171,7 +1171,7 @@ AudioClock::set_bbt (framepos_t when, bool force) sprintf (buf, "%-5.2f", m.tempo().beats_per_minute()); _left_layout->set_text (buf); - sprintf (buf, "%g/%g", m.meter().beats_per_bar(), m.meter().note_divisor()); + sprintf (buf, "%g/%g", m.meter().divisions_per_bar(), m.meter().note_divisor()); _right_layout->set_text (buf); } } diff --git a/gtk2_ardour/editor.cc b/gtk2_ardour/editor.cc index 28659d077d..d4e0e60ef8 100644 --- a/gtk2_ardour/editor.cc +++ b/gtk2_ardour/editor.cc @@ -3745,7 +3745,7 @@ Editor::get_grid_type_as_beats (bool& success, framepos_t position) case SnapToBar: if (_session) { - return _session->tempo_map().meter_at (position).beats_per_bar(); + return _session->tempo_map().meter_at (position).divisions_per_bar(); } break; diff --git a/gtk2_ardour/editor_drag.cc b/gtk2_ardour/editor_drag.cc index ef00b011c1..20ebe7f98d 100644 --- a/gtk2_ardour/editor_drag.cc +++ b/gtk2_ardour/editor_drag.cc @@ -1853,35 +1853,37 @@ MeterMarkerDrag::MeterMarkerDrag (Editor* e, ArdourCanvas::Item* i, bool c) void MeterMarkerDrag::start_grab (GdkEvent* event, Gdk::Cursor* cursor) { - if (_copy) { - // create a dummy marker for visual representation of moving the copy. - // The actual copying is not done before we reach the finish callback. - char name[64]; - snprintf (name, sizeof(name), "%g/%g", _marker->meter().beats_per_bar(), _marker->meter().note_divisor ()); - - MeterMarker* new_marker = new MeterMarker ( - *_editor, - *_editor->meter_group, - ARDOUR_UI::config()->canvasvar_MeterMarker.get(), - name, - *new MeterSection (_marker->meter()) - ); - - _item = &new_marker->the_item (); - _marker = new_marker; - - } else { - - MetricSection& section (_marker->meter()); - - if (!section.movable()) { - return; - } - + // create a dummy marker for visual representation of moving the + // section, because whether its a copy or not, we're going to + // leave or lose the original marker (leave if its a copy; lose if its + // not, because we'll remove it from the map). + + MeterSection section (_marker->meter()); + + if (!section.movable()) { + return; + } + + char name[64]; + snprintf (name, sizeof(name), "%g/%g", _marker->meter().divisions_per_bar(), _marker->meter().note_divisor ()); + + _marker = new MeterMarker ( + *_editor, + *_editor->meter_group, + ARDOUR_UI::config()->canvasvar_MeterMarker.get(), + name, + *new MeterSection (_marker->meter()) + ); + + _item = &_marker->the_item (); + + if (!_copy) { + TempoMap& map (_editor->session()->tempo_map()); + /* remove the section while we drag it */ + map.remove_meter (section); } Drag::start_grab (event, cursor); - show_verbose_cursor_time (adjusted_current_frame(event)); } @@ -1914,7 +1916,7 @@ MeterMarkerDrag::finished (GdkEvent* event, bool movement_occurred) TempoMap& map (_editor->session()->tempo_map()); map.bbt_time (last_pointer_frame(), when); - + if (_copy == true) { _editor->begin_reversible_command (_("copy meter mark")); XMLNode &before = map.get_state(); @@ -1923,17 +1925,21 @@ MeterMarkerDrag::finished (GdkEvent* event, bool movement_occurred) _editor->session()->add_command(new MementoCommand<TempoMap>(map, &before, &after)); _editor->commit_reversible_command (); - // delete the dummy marker we used for visual representation of copying. - // a new visual marker will show up automatically. - delete _marker; } else { _editor->begin_reversible_command (_("move meter mark")); XMLNode &before = map.get_state(); - map.move_meter (_marker->meter(), when); + + /* we removed it before, so add it back now */ + + map.add_meter (_marker->meter(), when); XMLNode &after = map.get_state(); _editor->session()->add_command(new MementoCommand<TempoMap>(map, &before, &after)); _editor->commit_reversible_command (); } + + // delete the dummy marker we used for visual representation while moving. + // a new visual marker will show up automatically. + delete _marker; } void diff --git a/gtk2_ardour/editor_ops.cc b/gtk2_ardour/editor_ops.cc index 738737f46d..a07f16b5c8 100644 --- a/gtk2_ardour/editor_ops.cc +++ b/gtk2_ardour/editor_ops.cc @@ -5475,7 +5475,9 @@ Editor::define_one_bar (framepos_t start, framepos_t end) we have frames per bar, and beats per bar, so ... */ - double frames_per_beat = length / m.beats_per_bar(); + /* XXXX METER MATH */ + + double frames_per_beat = length / m.divisions_per_bar(); /* beats per minute = */ diff --git a/gtk2_ardour/editor_rulers.cc b/gtk2_ardour/editor_rulers.cc index 3b525ae6aa..3a54e965f1 100644 --- a/gtk2_ardour/editor_rulers.cc +++ b/gtk2_ardour/editor_rulers.cc @@ -1380,7 +1380,7 @@ Editor::metric_get_bbt (GtkCustomRulerMark **marks, gdouble lower, gdouble /*upp next_beat.bars = (*i).bar; next_beat.ticks = 0; - if ((*i).meter->beats_per_bar() > (next_beat.beats + 1)) { + if ((*i).meter->divisions_per_bar() > (next_beat.beats + 1)) { next_beat.beats += 1; } else { next_beat.bars += 1; @@ -1472,7 +1472,7 @@ Editor::metric_get_bbt (GtkCustomRulerMark **marks, gdouble lower, gdouble /*upp next_beat.beats = (*i).beat; next_beat.bars = (*i).bar; - if ((*i).meter->beats_per_bar() > (next_beat.beats + 1)) { + if ((*i).meter->divisions_per_bar() > (next_beat.beats + 1)) { next_beat.beats += 1; } else { next_beat.bars += 1; @@ -1569,7 +1569,7 @@ Editor::metric_get_bbt (GtkCustomRulerMark **marks, gdouble lower, gdouble /*upp next_beat.beats = (*i).beat; next_beat.bars = (*i).bar; - if ((*i).meter->beats_per_bar() > (next_beat.beats + 1)) { + if ((*i).meter->divisions_per_bar() > (next_beat.beats + 1)) { next_beat.beats += 1; } else { next_beat.bars += 1; diff --git a/gtk2_ardour/editor_tempodisplay.cc b/gtk2_ardour/editor_tempodisplay.cc index 1069e457e6..28afc3b015 100644 --- a/gtk2_ardour/editor_tempodisplay.cc +++ b/gtk2_ardour/editor_tempodisplay.cc @@ -84,7 +84,7 @@ Editor::draw_metric_marks (const Metrics& metrics) for (Metrics::const_iterator i = metrics.begin(); i != metrics.end(); ++i) { if ((ms = dynamic_cast<const MeterSection*>(*i)) != 0) { - snprintf (buf, sizeof(buf), "%g/%g", ms->beats_per_bar(), ms->note_divisor ()); + snprintf (buf, sizeof(buf), "%g/%g", ms->divisions_per_bar(), ms->note_divisor ()); metric_marks.push_back (new MeterMarker (*this, *meter_group, ARDOUR_UI::config()->canvasvar_MeterMarker.get(), buf, *(const_cast<MeterSection*>(ms)))); } else if ((ts = dynamic_cast<const TempoSection*>(*i)) != 0) { @@ -157,7 +157,7 @@ Editor::compute_current_bbt_points (framepos_t leftmost, framepos_t rightmost) } previous_beat.ticks = 0; - if (_session->tempo_map().meter_at(rightmost).beats_per_bar () > next_beat.beats + 1) { + if (_session->tempo_map().meter_at(rightmost).divisions_per_bar () > next_beat.beats + 1) { next_beat.beats += 1; } else { next_beat.bars += 1; diff --git a/gtk2_ardour/tempo_dialog.cc b/gtk2_ardour/tempo_dialog.cc index bb9a5c4a83..f014832f2a 100644 --- a/gtk2_ardour/tempo_dialog.cc +++ b/gtk2_ardour/tempo_dialog.cc @@ -249,7 +249,7 @@ MeterDialog::MeterDialog (TempoMap& map, framepos_t frame, const string & action Meter meter (map.meter_at(frame)); map.bbt_time (frame, when); - init (when, meter.beats_per_bar(), meter.note_divisor(), true); + init (when, meter.divisions_per_bar(), meter.note_divisor(), true); } MeterDialog::MeterDialog (MeterSection& section, const string & action) @@ -257,7 +257,7 @@ MeterDialog::MeterDialog (MeterSection& section, const string & action) ok_button (action), cancel_button (_("Cancel")) { - init (section.start(), section.beats_per_bar(), section.note_divisor(), section.movable()); + init (section.start(), section.divisions_per_bar(), section.note_divisor(), section.movable()); } void diff --git a/gtk2_ardour/verbose_cursor.cc b/gtk2_ardour/verbose_cursor.cc index 2ae215acec..f80b74c4f8 100644 --- a/gtk2_ardour/verbose_cursor.cc +++ b/gtk2_ardour/verbose_cursor.cc @@ -215,7 +215,7 @@ VerboseCursor::set_duration (framepos_t start, framepos_t end, double x, double beats -= sbbt.beats; if (beats < 0) { - beats += int (meter_at_start.beats_per_bar()); + beats += int (meter_at_start.divisions_per_bar()); --bars; } |