image: Limit rubberbanding zoom and add stiffness
This commit is contained in:
parent
74a067e3b8
commit
caefec74b4
1 changed files with 28 additions and 2 deletions
|
|
@ -45,6 +45,11 @@ const ZOOM_FACTOR_WHEEL_HI_RES: f64 = 0.001;
|
||||||
/// Relative to best-fit level
|
/// Relative to best-fit level
|
||||||
const ZOOM_FACTOR_DOUBLE_TAP: f64 = 2.5;
|
const ZOOM_FACTOR_DOUBLE_TAP: f64 = 2.5;
|
||||||
|
|
||||||
|
/// Relative to best-fit and `MAX_ZOOM_LEVEL`
|
||||||
|
const ZOOM_FACTOR_MAX_RUBBERBAND: f64 = 2.;
|
||||||
|
/// Smaller values make the band feel stiffer
|
||||||
|
const RUBBERBANDING_EXPONENT: f64 = 0.4;
|
||||||
|
|
||||||
/// Max zoom level 2000%
|
/// Max zoom level 2000%
|
||||||
const MAX_ZOOM_LEVEL: f64 = 20.0;
|
const MAX_ZOOM_LEVEL: f64 = 20.0;
|
||||||
|
|
||||||
|
|
@ -873,8 +878,29 @@ impl LpImage {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Set zoom level aiming for given position or center if not available
|
/// Set zoom level aiming for given position or center if not available
|
||||||
fn set_zoom_aiming(&self, zoom: f64, aiming: Option<(f64, f64)>) {
|
fn set_zoom_aiming(&self, mut zoom: f64, aiming: Option<(f64, f64)>) {
|
||||||
if zoom == self.zoom() || zoom <= 0. {
|
// allow some deviantion from max value for rubberbanding
|
||||||
|
if zoom > MAX_ZOOM_LEVEL {
|
||||||
|
let max_deviation = MAX_ZOOM_LEVEL * ZOOM_FACTOR_MAX_RUBBERBAND;
|
||||||
|
let deviation = zoom / MAX_ZOOM_LEVEL;
|
||||||
|
zoom = f64::min(
|
||||||
|
MAX_ZOOM_LEVEL * deviation.powf(RUBBERBANDING_EXPONENT),
|
||||||
|
max_deviation,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
if zoom < self.zoom_level_best_fit() {
|
||||||
|
let minimum = self.zoom_level_best_fit();
|
||||||
|
let max_deviation = minimum / ZOOM_FACTOR_MAX_RUBBERBAND;
|
||||||
|
let deviation = zoom / minimum;
|
||||||
|
zoom = f64::max(
|
||||||
|
minimum * deviation.powf(RUBBERBANDING_EXPONENT),
|
||||||
|
max_deviation,
|
||||||
|
);
|
||||||
|
dbg!(zoom);
|
||||||
|
}
|
||||||
|
|
||||||
|
if zoom == self.zoom() {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue