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 89 90 91 92
// Take a look at the license at the top of the repository in the LICENSE file.
use glib::translate::*;
use crate::{prelude::*, Surface};
mod sealed {
pub trait Sealed {}
impl<T: super::IsA<super::Surface>> Sealed for T {}
}
// rustdoc-stripper-ignore-next
/// Trait containing manually implemented methods of
/// [`Surface`](crate::Surface).
pub trait SurfaceExtManual: sealed::Sealed + IsA<Surface> + '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.
///
/// # Deprecated since 4.12
///
/// Create a suitable cairo image surface yourself
/// ## `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,
) -> cairo::Surface {
unsafe {
from_glib_full(ffi::gdk_surface_create_similar_surface(
self.as_ref().to_glib_none().0,
content.into(),
width,
height,
))
}
}
// Returns true if the coordinates were successfully translated
/// 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, 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,
))
}
}
}
impl<O: IsA<Surface>> SurfaceExtManual for O {}