diff options
-rw-r--r-- | examples/game_of_life/src/main.rs | 17 |
1 files changed, 10 insertions, 7 deletions
diff --git a/examples/game_of_life/src/main.rs b/examples/game_of_life/src/main.rs index c818d99f..44ab4da6 100644 --- a/examples/game_of_life/src/main.rs +++ b/examples/game_of_life/src/main.rs @@ -292,24 +292,27 @@ mod grid { if y < 0.0 && self.scaling > Self::MIN_SCALING || y > 0.0 && self.scaling < Self::MAX_SCALING { - let factor = y / 30.0; + let old_scaling = self.scaling; + + self.scaling = (self.scaling + * (1.0 + y / 30.0)) + .max(Self::MIN_SCALING) + .min(Self::MAX_SCALING); if let Some(cursor_to_center) = cursor.position_from(bounds.center()) { + let factor = self.scaling - old_scaling; + self.translation = self.translation - Vector::new( cursor_to_center.x * factor - / (self.scaling * self.scaling), + / (old_scaling * old_scaling), cursor_to_center.y * factor - / (self.scaling * self.scaling), + / (old_scaling * old_scaling), ); } - self.scaling = (self.scaling + factor) - .max(Self::MIN_SCALING) - .min(Self::MAX_SCALING); - self.cache.clear(); } |