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}