simple_view/lib.rs
1use vector_space::{interpolate, VectorSpace};
2
3pub struct View<V: VectorSpace> {
4 pub zoom: V::Scalar,
5 pub offset: V,
6}
7
8impl<V: VectorSpace> View<V> {
9 pub fn zoom(&mut self, factor: V::Scalar, center: V) {
10 self.zoom = self.zoom * factor;
11 self.offset = interpolate(center, self.offset, factor);
12 }
13
14 pub fn clip(&self, pos: V) -> V {
15 pos * self.zoom + self.offset
16 }
17
18 pub fn unclip(&self, pos: V) -> V {
19 (pos - self.offset) / self.zoom
20 }
21}