1use glib::{prelude::*, translate::*};
2
3use crate::{Handle, Length, Rectangle};
4pub trait HandleExtManual: IsA<Handle> + 'static {
5 #[doc(alias = "rsvg_handle_get_intrinsic_dimensions")]
6 #[doc(alias = "get_intrinsic_dimensions")]
7 fn intrinsic_dimensions(&self) -> (Length, Length, Option<Rectangle>) {
8 unsafe {
9 let mut out_has_width = std::mem::MaybeUninit::uninit();
10 let mut out_width = Length::uninitialized();
11 let mut out_has_height = std::mem::MaybeUninit::uninit();
12 let mut out_height = Length::uninitialized();
13 let mut out_has_viewbox = std::mem::MaybeUninit::uninit();
14 let mut out_viewbox = Rectangle::uninitialized();
15 ffi::rsvg_handle_get_intrinsic_dimensions(
16 self.as_ref().to_glib_none().0,
17 out_has_width.as_mut_ptr(),
18 out_width.to_glib_none_mut().0,
19 out_has_height.as_mut_ptr(),
20 out_height.to_glib_none_mut().0,
21 out_has_viewbox.as_mut_ptr(),
22 out_viewbox.to_glib_none_mut().0,
23 );
24 (
25 out_width,
26 out_height,
27 (out_has_viewbox.assume_init() != 0).then_some(out_viewbox),
28 )
29 }
30 }
31}
32
33impl<O: IsA<Handle>> HandleExtManual for O {}