mirror of
https://github.com/Ardour/ardour.git
synced 2025-12-18 12:46:32 +01:00
simplify zooming, remove Editor::clamp_samples_per_pixel(), fix getting "stuck" at max and min zoom levels
This commit is contained in:
parent
4c79d35838
commit
3dbf37eab7
3 changed files with 18 additions and 43 deletions
|
|
@ -3335,7 +3335,7 @@ Editor::cycle_edit_mode ()
|
||||||
Config->set_edit_mode (Ripple);
|
Config->set_edit_mode (Ripple);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
// case Splice:
|
case Splice:
|
||||||
case Ripple:
|
case Ripple:
|
||||||
Config->set_edit_mode (Lock);
|
Config->set_edit_mode (Lock);
|
||||||
break;
|
break;
|
||||||
|
|
@ -4056,8 +4056,6 @@ Editor::reset_y_origin (double y)
|
||||||
void
|
void
|
||||||
Editor::reset_zoom (framecnt_t spp)
|
Editor::reset_zoom (framecnt_t spp)
|
||||||
{
|
{
|
||||||
clamp_samples_per_pixel (spp);
|
|
||||||
|
|
||||||
if (spp == samples_per_pixel) {
|
if (spp == samples_per_pixel) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
@ -4169,12 +4167,26 @@ Editor::use_visual_state (VisualState& vs)
|
||||||
|
|
||||||
/** This is the core function that controls the zoom level of the canvas. It is called
|
/** This is the core function that controls the zoom level of the canvas. It is called
|
||||||
* whenever one or more calls are made to reset_zoom(). It executes in an idle handler.
|
* whenever one or more calls are made to reset_zoom(). It executes in an idle handler.
|
||||||
* @param fpu New frames per unit; should already have been clamped so that it is sensible.
|
* @param spp new number of samples per pixel
|
||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
Editor::set_samples_per_pixel (framecnt_t spp)
|
Editor::set_samples_per_pixel (framecnt_t spp)
|
||||||
{
|
{
|
||||||
clamp_samples_per_pixel (spp);
|
if (spp < 1) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const framecnt_t three_days = 3 * 24 * 60 * 60 * (_session ? _session->frame_rate() : 48000);
|
||||||
|
const framecnt_t lots_of_pixels = 4000;
|
||||||
|
|
||||||
|
/* if the zoom level is greater than what you'd get trying to display 3
|
||||||
|
* days of audio on a really big screen, then it's too big.
|
||||||
|
*/
|
||||||
|
|
||||||
|
if (spp * lots_of_pixels > three_days) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
samples_per_pixel = spp;
|
samples_per_pixel = spp;
|
||||||
|
|
||||||
if (tempo_lines) {
|
if (tempo_lines) {
|
||||||
|
|
|
||||||
|
|
@ -520,7 +520,6 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD
|
||||||
Editing::ZoomFocus zoom_focus;
|
Editing::ZoomFocus zoom_focus;
|
||||||
|
|
||||||
void set_samples_per_pixel (framecnt_t);
|
void set_samples_per_pixel (framecnt_t);
|
||||||
bool clamp_samples_per_pixel (framecnt_t &) const;
|
|
||||||
|
|
||||||
Editing::MouseMode mouse_mode;
|
Editing::MouseMode mouse_mode;
|
||||||
Editing::MouseMode pre_internal_mouse_mode;
|
Editing::MouseMode pre_internal_mouse_mode;
|
||||||
|
|
|
||||||
|
|
@ -1448,38 +1448,6 @@ Editor::tav_zoom_smooth (bool coarser, bool force_all)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool
|
|
||||||
Editor::clamp_samples_per_pixel (framecnt_t& fpp) const
|
|
||||||
{
|
|
||||||
bool clamped = false;
|
|
||||||
|
|
||||||
if (fpp < 1) {
|
|
||||||
fpp = 1;
|
|
||||||
clamped = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
framecnt_t sr;
|
|
||||||
|
|
||||||
if (_session) {
|
|
||||||
sr = _session->frame_rate ();
|
|
||||||
} else {
|
|
||||||
sr = 48000;
|
|
||||||
}
|
|
||||||
|
|
||||||
const framecnt_t three_days = 3 * 24 * 60 * 60 * sr;
|
|
||||||
const framecnt_t lots_of_pixels = 4000;
|
|
||||||
|
|
||||||
/* if the zoom level is greater than what you'd get trying to display 3
|
|
||||||
* days of audio on a really big screen, scale it down.
|
|
||||||
*/
|
|
||||||
|
|
||||||
if (fpp * lots_of_pixels > three_days) {
|
|
||||||
fpp = three_days / _track_canvas->width();
|
|
||||||
clamped = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
return clamped;
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
void
|
||||||
Editor::temporal_zoom_step (bool coarser)
|
Editor::temporal_zoom_step (bool coarser)
|
||||||
|
|
@ -1516,7 +1484,6 @@ Editor::temporal_zoom (framecnt_t fpp)
|
||||||
framecnt_t nfpp;
|
framecnt_t nfpp;
|
||||||
double l;
|
double l;
|
||||||
|
|
||||||
clamp_samples_per_pixel (fpp);
|
|
||||||
if (fpp == samples_per_pixel) {
|
if (fpp == samples_per_pixel) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
@ -1806,8 +1773,7 @@ Editor::temporal_zoom_to_frame (bool coarser, framepos_t frame)
|
||||||
new_spp = samples_per_pixel - (samples_per_pixel/2);
|
new_spp = samples_per_pixel - (samples_per_pixel/2);
|
||||||
} else {
|
} else {
|
||||||
/* could bail out here since we cannot zoom any finer,
|
/* could bail out here since we cannot zoom any finer,
|
||||||
but leave that to the clamp_samples_per_pixel() and
|
but leave that to the equality test below
|
||||||
equality test below
|
|
||||||
*/
|
*/
|
||||||
new_spp = samples_per_pixel;
|
new_spp = samples_per_pixel;
|
||||||
}
|
}
|
||||||
|
|
@ -1815,8 +1781,6 @@ Editor::temporal_zoom_to_frame (bool coarser, framepos_t frame)
|
||||||
range_before -= range_before/2;
|
range_before -= range_before/2;
|
||||||
}
|
}
|
||||||
|
|
||||||
clamp_samples_per_pixel (new_spp);
|
|
||||||
|
|
||||||
if (new_spp == samples_per_pixel) {
|
if (new_spp == samples_per_pixel) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue