Round to bars when mouse scroll/dragging BBT bars
This commit is contained in:
@@ -179,8 +179,8 @@ ARDOUR_UI::setup_transport ()
|
||||
trigger_page_visibility_button.set_related_action (ActionManager::get_action (X_("Common"), X_("change-trigger-visibility")));
|
||||
|
||||
/* connect signals */
|
||||
ARDOUR_UI::Clock.connect (sigc::bind (sigc::mem_fun (primary_clock, &MainClock::set), false));
|
||||
ARDOUR_UI::Clock.connect (sigc::bind (sigc::mem_fun (secondary_clock, &MainClock::set), false));
|
||||
ARDOUR_UI::Clock.connect (sigc::bind (sigc::mem_fun (primary_clock, &MainClock::set), false, false));
|
||||
ARDOUR_UI::Clock.connect (sigc::bind (sigc::mem_fun (secondary_clock, &MainClock::set), false, false));
|
||||
|
||||
editor_visibility_button.signal_drag_failed().connect (sigc::bind (sigc::ptr_fun (drag_failed), editor));
|
||||
mixer_visibility_button.signal_drag_failed().connect (sigc::bind (sigc::ptr_fun (drag_failed), mixer));
|
||||
|
||||
@@ -931,7 +931,7 @@ AudioClock::set_duration (Temporal::timecnt_t const & dur, bool force)
|
||||
}
|
||||
|
||||
void
|
||||
AudioClock::set (timepos_t const & w, bool force)
|
||||
AudioClock::set (timepos_t const & w, bool force, bool round_to_beat)
|
||||
{
|
||||
is_duration = false;
|
||||
|
||||
@@ -961,6 +961,11 @@ AudioClock::set (timepos_t const & w, bool force)
|
||||
break;
|
||||
|
||||
case BBT:
|
||||
if (round_to_beat) {
|
||||
TempoMap::SharedPtr tmap (TempoMap::use());
|
||||
Temporal::BBT_Argument BBT = tmap->round_to_bar (tmap->bbt_at (when));
|
||||
when = Temporal::timepos_t::from_superclock (tmap->superclock_at(BBT));
|
||||
}
|
||||
set_bbt (timecnt_t (when));
|
||||
btn_en = true;
|
||||
break;
|
||||
@@ -1825,6 +1830,7 @@ AudioClock::on_scroll_event (GdkEventScroll *ev)
|
||||
|
||||
Field f = index_to_field (index);
|
||||
timepos_t step;
|
||||
timecnt_t beat = timecnt_t (Temporal::Beats (1, 0));
|
||||
|
||||
switch (ev->direction) {
|
||||
|
||||
@@ -1837,7 +1843,7 @@ AudioClock::on_scroll_event (GdkEventScroll *ev)
|
||||
if (is_duration) {
|
||||
AudioClock::set_duration (current_duration() + step, true); // XXX step is too small ?!
|
||||
} else {
|
||||
AudioClock::set (last_when() + step, true);
|
||||
AudioClock::set (last_when() + step, true, step > beat);
|
||||
}
|
||||
ValueChanged (); /* EMIT_SIGNAL */
|
||||
}
|
||||
@@ -1856,7 +1862,7 @@ AudioClock::on_scroll_event (GdkEventScroll *ev)
|
||||
} else if (!_negative_allowed && last_when() < step) {
|
||||
AudioClock::set (timepos_t (), true);
|
||||
} else {
|
||||
AudioClock::set (last_when().earlier (step), true);
|
||||
AudioClock::set (last_when().earlier (step), true, step > beat);
|
||||
}
|
||||
|
||||
ValueChanged (); /* EMIT_SIGNAL */
|
||||
@@ -1888,6 +1894,7 @@ AudioClock::on_motion_notify_event (GdkEventMotion *ev)
|
||||
|
||||
timepos_t pos = last_when ();
|
||||
timepos_t step = get_incremental_step (drag_field, pos);
|
||||
timecnt_t beat = timecnt_t (Temporal::Beats (1, 0));
|
||||
|
||||
step *= fabs (drag_accum);
|
||||
|
||||
@@ -1898,9 +1905,9 @@ AudioClock::on_motion_notify_event (GdkEventMotion *ev)
|
||||
AudioClock::set_duration (current_duration () - step, false);
|
||||
}
|
||||
} else if (!step.is_zero () && (step < pos)) {
|
||||
AudioClock::set (pos.earlier (step), false);
|
||||
AudioClock::set (pos.earlier (step), false, step > beat);
|
||||
} else {
|
||||
AudioClock::set (timepos_t () , false);
|
||||
AudioClock::set (timepos_t (), false);
|
||||
}
|
||||
|
||||
} else if (is_duration) {
|
||||
@@ -1908,7 +1915,7 @@ AudioClock::on_motion_notify_event (GdkEventMotion *ev)
|
||||
AudioClock::set_duration (current_duration () + step, false);
|
||||
} else {
|
||||
/* negative so upward motion .. increment clock */
|
||||
AudioClock::set (pos + step, false);
|
||||
AudioClock::set (pos + step, false, step > beat);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -73,7 +73,7 @@ public:
|
||||
void focus ();
|
||||
|
||||
/* overridden by MainClock */
|
||||
virtual void set (Temporal::timepos_t const &, bool force = false);
|
||||
virtual void set (Temporal::timepos_t const &, bool force = false, bool round_to_beat = false);
|
||||
void set_duration (Temporal::timecnt_t const &, bool force = false);
|
||||
|
||||
virtual void set_mode (Mode);
|
||||
|
||||
@@ -39,7 +39,7 @@ BigClockWindow::BigClockWindow (AudioClock& c)
|
||||
: ArdourWindow (_("Big Clock"))
|
||||
, clock (c)
|
||||
{
|
||||
ARDOUR_UI::Clock.connect (sigc::bind (sigc::mem_fun (clock, &AudioClock::set), false));
|
||||
ARDOUR_UI::Clock.connect (sigc::bind (sigc::mem_fun (clock, &AudioClock::set), false, false));
|
||||
|
||||
clock.set_corner_radius (0.0);
|
||||
|
||||
|
||||
@@ -117,7 +117,7 @@ MainClock::build_ops_menu ()
|
||||
}
|
||||
|
||||
void
|
||||
MainClock::set (timepos_t const & when, bool force)
|
||||
MainClock::set (timepos_t const & when, bool force, bool round_to_beat)
|
||||
{
|
||||
if (!AudioEngine::instance()->session()) {
|
||||
_delta_mode = NoDelta;
|
||||
|
||||
@@ -38,7 +38,7 @@ public:
|
||||
ARDOUR::ClockDeltaMode display_delta_mode () {return _delta_mode;}
|
||||
void set_display_delta_mode (ARDOUR::ClockDeltaMode m);
|
||||
|
||||
void set (Temporal::timepos_t const &, bool force = false);
|
||||
void set (Temporal::timepos_t const &, bool force = false, bool round_to_beat = false);
|
||||
sigc::signal<bool, ARDOUR::ClockDeltaMode> change_display_delta_mode_signal;
|
||||
|
||||
sigc::signal<void> CanonicalClockChanged;
|
||||
|
||||
Reference in New Issue
Block a user