add new Playhead snap mode
This commit is contained in:
@@ -22,6 +22,7 @@
|
||||
|
||||
/* Changing this order will break the menu */
|
||||
GRIDTYPE(GridTypeNone)
|
||||
GRIDTYPE(GridTypePlayhead)
|
||||
GRIDTYPE(GridTypeBar)
|
||||
GRIDTYPE(GridTypeBeat)
|
||||
GRIDTYPE(GridTypeBeatDiv2)
|
||||
|
||||
@@ -180,6 +180,7 @@ double Editor::timebar_height = 15.0;
|
||||
|
||||
static const gchar *_grid_type_strings[] = {
|
||||
N_("No Grid"),
|
||||
N_("Playhead"),
|
||||
N_("Bar"),
|
||||
N_("1/4 Note"),
|
||||
N_("1/8 Note"),
|
||||
@@ -2197,6 +2198,7 @@ Editor::grid_type_is_musical(GridType gt) const
|
||||
case GridTypeBar:
|
||||
return true;
|
||||
case GridTypeNone:
|
||||
case GridTypePlayhead:
|
||||
case GridTypeTimecode:
|
||||
case GridTypeMinSec:
|
||||
case GridTypeCDFrame:
|
||||
@@ -3030,6 +3032,7 @@ Editor::_snap_to_bbt (timepos_t const & presnap, Temporal::RoundMode direction,
|
||||
divisor = 1;
|
||||
break;
|
||||
case GridTypeNone:
|
||||
case GridTypePlayhead:
|
||||
return ret;
|
||||
default:
|
||||
divisor = 2;
|
||||
@@ -3154,10 +3157,16 @@ Editor::snap_to_internal (timepos_t& start, Temporal::RoundMode direction, SnapP
|
||||
UIConfiguration const& uic (UIConfiguration::instance ());
|
||||
const timepos_t presnap = start;
|
||||
|
||||
|
||||
timepos_t test = timepos_t::max (start.time_domain()); // for each snap, we'll use this value
|
||||
timepos_t dist = timepos_t::max (start.time_domain()); // this records the distance of the best snap result we've found so far
|
||||
timepos_t best = timepos_t::max (start.time_domain()); // this records the best snap-result we've found so far
|
||||
|
||||
if (_grid_type == GridTypePlayhead) {
|
||||
best = timepos_t (_session->transport_sample ());
|
||||
goto check_distance;
|
||||
}
|
||||
|
||||
/* check snap-to-marker */
|
||||
if ((pref == SnapToAny_Visual) && uic.get_snap_to_marks ()) {
|
||||
test = snap_to_marker (presnap, direction);
|
||||
@@ -3207,6 +3216,7 @@ Editor::snap_to_internal (timepos_t& start, Temporal::RoundMode direction, SnapP
|
||||
return;
|
||||
}
|
||||
|
||||
check_distance:
|
||||
/* now check "magnetic" state: is the grid within reasonable on-screen distance to trigger a snap?
|
||||
* this also helps to avoid snapping to somewhere the user can't see. (i.e.: I clicked on a region and it disappeared!!)
|
||||
* ToDo: Perhaps this should only occur if EditPointMouse?
|
||||
@@ -3508,6 +3518,7 @@ Editor::build_grid_type_menu ()
|
||||
/* main grid: bars, quarter-notes, etc */
|
||||
grid_type_selector.AddMenuElem (MenuElem (grid_type_strings[(int)GridTypeNone], sigc::bind (sigc::mem_fun(*this, &Editor::grid_type_selection_done), (GridType) GridTypeNone)));
|
||||
grid_type_selector.AddMenuElem (MenuElem (grid_type_strings[(int)GridTypeBar], sigc::bind (sigc::mem_fun(*this, &Editor::grid_type_selection_done), (GridType) GridTypeBar)));
|
||||
grid_type_selector.AddMenuElem (MenuElem (grid_type_strings[(int)GridTypePlayhead], sigc::bind (sigc::mem_fun(*this, &Editor::grid_type_selection_done), (GridType) GridTypePlayhead)));
|
||||
grid_type_selector.AddMenuElem (MenuElem (grid_type_strings[(int)GridTypeBeat], sigc::bind (sigc::mem_fun(*this, &Editor::grid_type_selection_done), (GridType) GridTypeBeat)));
|
||||
grid_type_selector.AddMenuElem (MenuElem (grid_type_strings[(int)GridTypeBeatDiv2], sigc::bind (sigc::mem_fun(*this, &Editor::grid_type_selection_done), (GridType) GridTypeBeatDiv2)));
|
||||
grid_type_selector.AddMenuElem (MenuElem (grid_type_strings[(int)GridTypeBeatDiv4], sigc::bind (sigc::mem_fun(*this, &Editor::grid_type_selection_done), (GridType) GridTypeBeatDiv4)));
|
||||
@@ -4366,6 +4377,7 @@ Editor::get_grid_beat_divisions (GridType gt)
|
||||
case GridTypeBar: return -1;
|
||||
|
||||
case GridTypeNone: return 0;
|
||||
case GridTypePlayhead: return 0;
|
||||
case GridTypeTimecode: return 0;
|
||||
case GridTypeMinSec: return 0;
|
||||
case GridTypeCDFrame: return 0;
|
||||
|
||||
@@ -704,6 +704,7 @@ Editor::register_actions ()
|
||||
|
||||
ActionManager::register_radio_action (snap_actions, grid_choice_group, X_("grid-type-beat"), grid_type_strings[(int)GridTypeBeat].c_str(), (sigc::bind (sigc::mem_fun(*this, &Editor::grid_type_chosen), Editing::GridTypeBeat)));
|
||||
ActionManager::register_radio_action (snap_actions, grid_choice_group, X_("grid-type-bar"), grid_type_strings[(int)GridTypeBar].c_str(), (sigc::bind (sigc::mem_fun(*this, &Editor::grid_type_chosen), Editing::GridTypeBar)));
|
||||
ActionManager::register_radio_action (snap_actions, grid_choice_group, X_("grid-type-playhead"), grid_type_strings[(int)GridTypePlayhead].c_str(), (sigc::bind (sigc::mem_fun(*this, &Editor::grid_type_chosen), Editing::GridTypePlayhead)));
|
||||
|
||||
ActionManager::register_radio_action (snap_actions, grid_choice_group, X_("grid-type-none"), grid_type_strings[(int)GridTypeNone].c_str(), (sigc::bind (sigc::mem_fun(*this, &Editor::grid_type_chosen), Editing::GridTypeNone)));
|
||||
|
||||
@@ -1249,6 +1250,9 @@ Editor::draw_length_action (GridType type)
|
||||
case Editing::GridTypeBar:
|
||||
action = "draw-length-bar";
|
||||
break;
|
||||
case Editing::GridTypePlayhead:
|
||||
action = "draw-length-playhead";
|
||||
break;
|
||||
case Editing::GridTypeNone:
|
||||
action = "draw-length-auto";
|
||||
break;
|
||||
@@ -1330,6 +1334,9 @@ Editor::grid_type_action (GridType type)
|
||||
case Editing::GridTypeBar:
|
||||
action = "grid-type-bar";
|
||||
break;
|
||||
case Editing::GridTypePlayhead:
|
||||
action = "grid-type-playhead";
|
||||
break;
|
||||
case Editing::GridTypeNone:
|
||||
action = "grid-type-none";
|
||||
break;
|
||||
@@ -1385,6 +1392,9 @@ Editor::next_grid_choice ()
|
||||
set_grid_to (Editing::GridTypeBeat);
|
||||
break;
|
||||
case Editing::GridTypeNone:
|
||||
set_grid_to (Editing::GridTypePlayhead);
|
||||
break;
|
||||
case Editing::GridTypePlayhead:
|
||||
set_grid_to (Editing::GridTypeBar);
|
||||
break;
|
||||
case Editing::GridTypeBeatDiv3:
|
||||
@@ -1427,7 +1437,10 @@ Editor::prev_grid_choice ()
|
||||
set_grid_to (Editing::GridTypeBar);
|
||||
break;
|
||||
case Editing::GridTypeBar:
|
||||
set_grid_to (Editing::GridTypeNone);
|
||||
set_grid_to (Editing::GridTypePlayhead);
|
||||
break;
|
||||
case Editing::GridTypePlayhead:
|
||||
set_grid_to (Editing::GridTypeBar);
|
||||
break;
|
||||
case Editing::GridTypeNone:
|
||||
set_grid_to (Editing::GridTypeBeatDiv32);
|
||||
|
||||
@@ -106,6 +106,7 @@ setup_gtk_ardour_enums ()
|
||||
REGISTER (region_list_sort_type);
|
||||
|
||||
REGISTER_ENUM (GridTypeNone);
|
||||
REGISTER_ENUM (GridTypePlayhead);
|
||||
REGISTER_ENUM (GridTypeBar);
|
||||
REGISTER_ENUM (GridTypeBeat);
|
||||
REGISTER_ENUM (GridTypeBeatDiv2);
|
||||
|
||||
Reference in New Issue
Block a user