fix height of tempo ruler curve elements
These were being drawn in a way that failed to really convey relative tempos very well. This is now better, though perhaps there are other improvements possible
This commit is contained in:
parent
0266d98a3b
commit
0d89bc5789
|
@ -1385,6 +1385,7 @@ private:
|
||||||
void reset_region_gain ();
|
void reset_region_gain ();
|
||||||
ARDOUR::Quantize get_quantize_op (bool force_dialog, bool& did_show_dialog);
|
ARDOUR::Quantize get_quantize_op (bool force_dialog, bool& did_show_dialog);
|
||||||
void apply_midi_note_edit_op (ARDOUR::MidiOperator& op, const RegionSelection& rs);
|
void apply_midi_note_edit_op (ARDOUR::MidiOperator& op, const RegionSelection& rs);
|
||||||
|
void set_tempo_curve_range (double& max, double& min) const;
|
||||||
void quantize_region ();
|
void quantize_region ();
|
||||||
void quantize_regions (const RegionSelection& rs);
|
void quantize_regions (const RegionSelection& rs);
|
||||||
void legatize_region (bool shrink_only);
|
void legatize_region (bool shrink_only);
|
||||||
|
@ -1924,7 +1925,7 @@ private:
|
||||||
|
|
||||||
void make_bbt_marker (Temporal::MusicTimePoint const *, Marks::iterator before);
|
void make_bbt_marker (Temporal::MusicTimePoint const *, Marks::iterator before);
|
||||||
void make_meter_marker (Temporal::MeterPoint const *, Marks::iterator before);
|
void make_meter_marker (Temporal::MeterPoint const *, Marks::iterator before);
|
||||||
void make_tempo_marker (Temporal::TempoPoint const * ts, double& min_tempo, double& max_tempo, Temporal::TempoPoint const *& prev_ts, uint32_t tc_color, samplecnt_t sr3, Marks::iterator before);
|
void make_tempo_marker (Temporal::TempoPoint const * ts, Temporal::TempoPoint const *& prev_ts, uint32_t tc_color, samplecnt_t sr3, Marks::iterator before);
|
||||||
void update_tempo_curves (double min_tempo, double max_tempo, samplecnt_t sr);
|
void update_tempo_curves (double min_tempo, double max_tempo, samplecnt_t sr);
|
||||||
|
|
||||||
void tempo_map_changed ();
|
void tempo_map_changed ();
|
||||||
|
|
|
@ -159,13 +159,8 @@ Editor::make_meter_marker (Temporal::MeterPoint const * ms, Marks::iterator befo
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
Editor::make_tempo_marker (Temporal::TempoPoint const * ts, double& min_tempo, double& max_tempo, TempoPoint const *& prev_ts, uint32_t tc_color, samplecnt_t sr, Marks::iterator before)
|
Editor::make_tempo_marker (Temporal::TempoPoint const * ts, TempoPoint const *& prev_ts, uint32_t tc_color, samplecnt_t sr, Marks::iterator before)
|
||||||
{
|
{
|
||||||
max_tempo = max (max_tempo, ts->note_types_per_minute());
|
|
||||||
max_tempo = max (max_tempo, ts->end_note_types_per_minute());
|
|
||||||
min_tempo = min (min_tempo, ts->note_types_per_minute());
|
|
||||||
min_tempo = min (min_tempo, ts->end_note_types_per_minute());
|
|
||||||
|
|
||||||
const std::string tname (X_(""));
|
const std::string tname (X_(""));
|
||||||
char const * color_name = X_("tempo marker");
|
char const * color_name = X_("tempo marker");
|
||||||
|
|
||||||
|
@ -205,8 +200,6 @@ Editor::reset_tempo_marks ()
|
||||||
|
|
||||||
Tempos const & tempi (TempoMap::use()->tempos());
|
Tempos const & tempi (TempoMap::use()->tempos());
|
||||||
TempoPoint const * prev_ts = 0;
|
TempoPoint const * prev_ts = 0;
|
||||||
double max_tempo = 0.0;
|
|
||||||
double min_tempo = DBL_MAX;
|
|
||||||
|
|
||||||
for (auto & t : tempo_marks) {
|
for (auto & t : tempo_marks) {
|
||||||
delete t;
|
delete t;
|
||||||
|
@ -215,11 +208,15 @@ Editor::reset_tempo_marks ()
|
||||||
tempo_marks.clear ();
|
tempo_marks.clear ();
|
||||||
|
|
||||||
for (auto const & t : tempi) {
|
for (auto const & t : tempi) {
|
||||||
make_tempo_marker (&t, min_tempo, max_tempo, prev_ts, tc_color, sr, tempo_marks.end());
|
make_tempo_marker (&t, prev_ts, tc_color, sr, tempo_marks.end());
|
||||||
prev_ts = &t;
|
prev_ts = &t;
|
||||||
}
|
}
|
||||||
|
|
||||||
update_tempo_curves (min_tempo, max_tempo, sr);
|
double max_tempo;
|
||||||
|
double min_tempo;
|
||||||
|
|
||||||
|
set_tempo_curve_range (max_tempo, min_tempo);
|
||||||
|
update_tempo_curves (min_tempo, max_tempo, sr);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -266,14 +263,6 @@ Editor::reset_bbt_marks ()
|
||||||
void
|
void
|
||||||
Editor::update_tempo_curves (double min_tempo, double max_tempo, samplecnt_t sr)
|
Editor::update_tempo_curves (double min_tempo, double max_tempo, samplecnt_t sr)
|
||||||
{
|
{
|
||||||
const double min_tempo_range = 5.0;
|
|
||||||
const double tempo_delta = fabs (max_tempo - min_tempo);
|
|
||||||
|
|
||||||
if (tempo_delta < min_tempo_range) {
|
|
||||||
max_tempo += min_tempo_range - tempo_delta;
|
|
||||||
min_tempo += tempo_delta - min_tempo_range;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (Marks::iterator m = tempo_marks.begin(); m != tempo_marks.end(); ++m) {
|
for (Marks::iterator m = tempo_marks.begin(); m != tempo_marks.end(); ++m) {
|
||||||
|
|
||||||
TempoMarker* tm = static_cast<TempoMarker*>(*m);
|
TempoMarker* tm = static_cast<TempoMarker*>(*m);
|
||||||
|
@ -282,8 +271,7 @@ Editor::update_tempo_curves (double min_tempo, double max_tempo, samplecnt_t sr)
|
||||||
|
|
||||||
TempoCurve& curve (tm->curve());
|
TempoCurve& curve (tm->curve());
|
||||||
|
|
||||||
curve.set_max_tempo (max_tempo);
|
curve.update_range (min_tempo, max_tempo);
|
||||||
curve.set_min_tempo (min_tempo);
|
|
||||||
|
|
||||||
if (tmp != tempo_marks.end()) {
|
if (tmp != tempo_marks.end()) {
|
||||||
TempoMarker* nxt = static_cast<TempoMarker*>(*tmp);
|
TempoMarker* nxt = static_cast<TempoMarker*>(*tmp);
|
||||||
|
@ -882,6 +870,26 @@ Editor::_commit_tempo_map_edit (TempoMap::WritableSharedPtr& new_map, bool with_
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
Editor::set_tempo_curve_range (double& max_tempo, double& min_tempo) const
|
||||||
|
{
|
||||||
|
TempoMap::SharedPtr map (TempoMap::use());
|
||||||
|
|
||||||
|
max_tempo = map->max_notes_per_minute();
|
||||||
|
min_tempo = map->min_notes_per_minute();
|
||||||
|
|
||||||
|
max_tempo = std::max (max_tempo, 200.);
|
||||||
|
min_tempo = std::min (min_tempo, 40.);
|
||||||
|
|
||||||
|
const double min_tempo_range = 5.0;
|
||||||
|
const double tempo_delta = fabs (max_tempo - min_tempo);
|
||||||
|
|
||||||
|
if (tempo_delta < min_tempo_range) {
|
||||||
|
max_tempo += min_tempo_range - tempo_delta;
|
||||||
|
min_tempo += tempo_delta - min_tempo_range;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
Editor::mid_tempo_change (MidTempoChanges what_changed)
|
Editor::mid_tempo_change (MidTempoChanges what_changed)
|
||||||
{
|
{
|
||||||
|
@ -890,20 +898,9 @@ Editor::mid_tempo_change (MidTempoChanges what_changed)
|
||||||
// map->dump (std::cerr);
|
// map->dump (std::cerr);
|
||||||
|
|
||||||
if ((what_changed & MidTempoChanges(BBTChanged|TempoChanged|MappingChanged))) {
|
if ((what_changed & MidTempoChanges(BBTChanged|TempoChanged|MappingChanged))) {
|
||||||
double min_tempo = DBL_MAX;
|
double max_tempo;
|
||||||
double max_tempo = 0.0;
|
double min_tempo;
|
||||||
|
set_tempo_curve_range (max_tempo, min_tempo);
|
||||||
for (auto & t : tempo_marks) {
|
|
||||||
t->update ();
|
|
||||||
|
|
||||||
TempoMarker* tm (dynamic_cast<TempoMarker*> (t));
|
|
||||||
|
|
||||||
max_tempo = max (max_tempo, tm->tempo().note_types_per_minute());
|
|
||||||
max_tempo = max (max_tempo, tm->tempo().end_note_types_per_minute());
|
|
||||||
min_tempo = min (min_tempo, tm->tempo().note_types_per_minute());
|
|
||||||
min_tempo = min (min_tempo, tm->tempo().end_note_types_per_minute());
|
|
||||||
|
|
||||||
}
|
|
||||||
update_tempo_curves (min_tempo, max_tempo, _session->sample_rate());
|
update_tempo_curves (min_tempo, max_tempo, _session->sample_rate());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -582,6 +582,8 @@ public:
|
||||||
virtual ARDOUR::Quantize get_quantize_op (bool force_dialog, bool& did_show_dialog) = 0;
|
virtual ARDOUR::Quantize get_quantize_op (bool force_dialog, bool& did_show_dialog) = 0;
|
||||||
virtual void apply_midi_note_edit_op (ARDOUR::MidiOperator& op, const RegionSelection& rs) = 0;
|
virtual void apply_midi_note_edit_op (ARDOUR::MidiOperator& op, const RegionSelection& rs) = 0;
|
||||||
|
|
||||||
|
virtual void set_tempo_curve_range (double& max, double& min) const = 0;
|
||||||
|
|
||||||
/// Singleton instance, set up by Editor::Editor()
|
/// Singleton instance, set up by Editor::Editor()
|
||||||
|
|
||||||
static PublicEditor* _instance;
|
static PublicEditor* _instance;
|
||||||
|
|
|
@ -60,12 +60,12 @@ TempoCurve::TempoCurve (PublicEditor& ed, ArdourCanvas::Item& parent, guint32 rg
|
||||||
, _duration (UINT32_MAX)
|
, _duration (UINT32_MAX)
|
||||||
, _marker_width (marker_width)
|
, _marker_width (marker_width)
|
||||||
, _color (rgba)
|
, _color (rgba)
|
||||||
, _min_tempo (temp.note_types_per_minute())
|
|
||||||
, _max_tempo (temp.note_types_per_minute())
|
|
||||||
, _tempo (&temp)
|
, _tempo (&temp)
|
||||||
, _start_text (0)
|
, _start_text (0)
|
||||||
, _end_text (0)
|
, _end_text (0)
|
||||||
{
|
{
|
||||||
|
ed.set_tempo_curve_range (_max_tempo, _min_tempo);
|
||||||
|
|
||||||
/* XXX x arg for Duple should probably be marker width, passed in from owner */
|
/* XXX x arg for Duple should probably be marker width, passed in from owner */
|
||||||
group = new ArdourCanvas::Container (&parent, ArdourCanvas::Duple (marker_width + 1, 1));
|
group = new ArdourCanvas::Container (&parent, ArdourCanvas::Duple (marker_width + 1, 1));
|
||||||
#ifdef CANVAS_DEBUG
|
#ifdef CANVAS_DEBUG
|
||||||
|
|
|
@ -58,8 +58,7 @@ public:
|
||||||
Temporal::TempoPoint const & tempo () const { return *_tempo; }
|
Temporal::TempoPoint const & tempo () const { return *_tempo; }
|
||||||
void reset_point (Temporal::TempoPoint const &);
|
void reset_point (Temporal::TempoPoint const &);
|
||||||
|
|
||||||
void set_max_tempo (const double& max) { _max_tempo = max; }
|
void update_range (double min, double max) { _max_tempo = max; _min_tempo = min; }
|
||||||
void set_min_tempo (const double& min) { _min_tempo = min; }
|
|
||||||
|
|
||||||
static void format_tempo (double ntpm, int nt, char*, size_t);
|
static void format_tempo (double ntpm, int nt, char*, size_t);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue