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
// Take a look at the license at the top of the repository in the LICENSE file.
use crate::Texture;
use glib::translate::*;
use glib::IsA;
pub trait TextureExtManual: 'static {
/// Downloads the `self` into local memory.
///
/// This may be an expensive operation, as the actual texture data
/// may reside on a GPU or on a remote display server.
///
/// The data format of the downloaded data is equivalent to
/// `CAIRO_FORMAT_ARGB32`, so every downloaded pixel requires
/// 4 bytes of memory.
///
/// Downloading a texture into a Cairo image surface:
/// **⚠️ The following code is in c ⚠️**
///
/// ```c
/// surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32,
/// gdk_texture_get_width (texture),
/// gdk_texture_get_height (texture));
/// gdk_texture_download (texture,
/// cairo_image_surface_get_data (surface),
/// cairo_image_surface_get_stride (surface));
/// cairo_surface_mark_dirty (surface);
/// ```
/// ## `data`
/// pointer to enough memory to be filled with the
/// downloaded data of `self`
/// ## `stride`
/// rowstride in bytes
#[doc(alias = "gdk_texture_download")]
fn download(&self, data: &mut [u8], stride: usize);
}
impl<O: IsA<Texture>> TextureExtManual for O {
fn download(&self, data: &mut [u8], stride: usize) {
unsafe {
ffi::gdk_texture_download(self.as_ref().to_glib_none().0, data.as_mut_ptr(), stride);
}
}
}