diff options
Diffstat (limited to 'src/coord/translate.rs')
-rw-r--r-- | src/coord/translate.rs | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/src/coord/translate.rs b/src/coord/translate.rs new file mode 100644 index 0000000..32888be --- /dev/null +++ b/src/coord/translate.rs @@ -0,0 +1,32 @@ +use plotters_backend::BackendCoord; +use std::ops::Deref; + +/// The trait that translates some customized object to the backend coordinate +pub trait CoordTranslate { + type From; + + /// Translate the guest coordinate to the guest coordinate + fn translate(&self, from: &Self::From) -> BackendCoord; +} + +impl<C, T> CoordTranslate for T +where + C: CoordTranslate, + T: Deref<Target = C>, +{ + type From = C::From; + fn translate(&self, from: &Self::From) -> BackendCoord { + self.deref().translate(from) + } +} + +/// The trait indicates that the coordinate system supports reverse transform +/// This is useful when we need an interactive plot, thus we need to map the event +/// from the backend coordinate to the logical coordinate +pub trait ReverseCoordTranslate: CoordTranslate { + /// Reverse translate the coordinate from the drawing coordinate to the + /// logic coordinate. + /// Note: the return value is an option, because it's possible that the drawing + /// coordinate isn't able to be represented in te guest coordinate system + fn reverse_translate(&self, input: BackendCoord) -> Option<Self::From>; +} |