use cairo::{Context, Error, TextExtents};
pub trait ShowTextAlign {
fn show_text_align(
&self,
text: &str,
point: (f64, f64),
align: (f64, f64),
) -> Result<TextExtents, Error>;
fn show_text_align_with_extents(
&self,
text: &str,
point: (f64, f64),
align: (f64, f64),
extents: &TextExtents,
) -> Result<(), Error>;
}
impl ShowTextAlign for Context {
fn show_text_align(
&self,
text: &str,
(x, y): (f64, f64),
align: (f64, f64),
) -> Result<TextExtents, Error> {
let extents = self.text_extents(text)?;
self.show_text_align_with_extents(text, (x, y), align, &extents)?;
Ok(extents)
}
fn show_text_align_with_extents(
&self,
text: &str,
(x, y): (f64, f64),
align: (f64, f64),
extents: &TextExtents,
) -> Result<(), Error> {
let x = x - extents.width() * align.0;
let y = y + extents.height() * align.1;
self.move_to(x, y);
self.show_text(text)
}
}