1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88
// Take a look at the license at the top of the repository in the LICENSE file.
use crate::Surface;
use glib::object::IsA;
use glib::translate::*;
pub trait SurfaceExtManual: 'static {
/// Create a new Cairo surface that is as compatible as possible with the
/// given `self`.
///
/// For example the new surface will have the same fallback resolution
/// and font options as `self`. Generally, the new surface will also
/// use the same backend as `self`, unless that is not possible for
/// some reason. The type of the returned surface may be examined with
/// `cairo_surface_get_type()`.
///
/// Initially the surface contents are all 0 (transparent if contents
/// have transparency, black otherwise.)
///
/// This function always returns a valid pointer, but it will return a
/// pointer to a “nil” surface if `other` is already in an error state
/// or any other error occurs.
/// ## `content`
/// the content for the new surface
/// ## `width`
/// width of the new surface
/// ## `height`
/// height of the new surface
///
/// # Returns
///
/// a pointer to the newly allocated surface. The caller
/// owns the surface and should call `cairo_surface_destroy()` when done
/// with it.
#[doc(alias = "gdk_surface_create_similar_surface")]
fn create_similar_surface(
&self,
content: cairo::Content,
width: i32,
height: i32,
) -> Option<cairo::Surface>;
/// Translates coordinates between two surfaces.
///
/// Note that this only works if `to` and `self` are popups or
/// transient-for to the same toplevel (directly or indirectly).
/// ## `to`
/// the target surface
/// ## `x`
/// coordinates to translate
/// ## `y`
/// coordinates to translate
///
/// # Returns
///
/// [`true`] if the coordinates were successfully translated
#[doc(alias = "gdk_surface_translate_coordinates")]
fn translate_coordinates(&self, to: &Surface, x: f64, y: f64) -> bool;
}
impl<O: IsA<Surface>> SurfaceExtManual for O {
fn create_similar_surface(
&self,
content: cairo::Content,
width: i32,
height: i32,
) -> Option<cairo::Surface> {
unsafe {
from_glib_full(ffi::gdk_surface_create_similar_surface(
self.as_ref().to_glib_none().0,
content.into(),
width,
height,
))
}
}
fn translate_coordinates(&self, to: &Surface, mut x: f64, mut y: f64) -> bool {
unsafe {
from_glib(ffi::gdk_surface_translate_coordinates(
self.as_ref().to_glib_none().0,
to.to_glib_none().0,
&mut x,
&mut y,
))
}
}
}