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 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116
use crate::Content; use glib::{object::IsA, translate::*}; use std::{fmt, ptr}; glib_wrapper! { pub struct Image(Object<ffi::ClutterImage, ffi::ClutterImageClass, ImageClass>) @implements Content; match fn { get_type => || ffi::clutter_image_get_type(), } } impl Image { /// Creates a new `Image` instance. /// /// # Returns /// /// the newly created `Image` instance. /// Use `gobject::ObjectExt::unref` when done. pub fn new() -> Option<Content> { unsafe { from_glib_full(ffi::clutter_image_new()) } } } // impl Default for Image { // fn default() -> Self { // Self::new() // } // } /// Trait containing all `Image` methods. /// /// # Implementors /// /// [`Image`](struct.Image.html) pub trait ImageExt: 'static { //fn set_area(&self, data: &[u8], pixel_format: dx::PixelFormat, rect: &cairo::RectangleInt, row_stride: u32) -> Result<(), glib::Error>; /// Sets the image data stored inside a `glib::Bytes` to be displayed by `self`. /// /// If the image data was successfully loaded, the `self` will be invalidated. /// /// In case of error, the `error` value will be set, and this function will /// return `false`. /// /// The image data contained inside the `glib::Bytes` is copied in texture memory, /// and no additional reference is acquired on the `data`. /// ## `data` /// the image data, as a `glib::Bytes` /// ## `pixel_format` /// the Cogl pixel format of the image data /// ## `width` /// the width of the image data /// ## `height` /// the height of the image data /// ## `row_stride` /// the length of each row inside `data` /// /// # Returns /// /// `true` if the image data was successfully loaded, /// and `false` otherwise. fn set_bytes( &self, data: &glib::Bytes, pixel_format: dx::PixelFormat, width: u32, height: u32, row_stride: u32, ) -> Result<(), glib::Error>; //fn set_data(&self, data: &[u8], pixel_format: dx::PixelFormat, width: u32, height: u32, row_stride: u32) -> Result<(), glib::Error>; } impl<O: IsA<Image>> ImageExt for O { //fn set_area(&self, data: &[u8], pixel_format: dx::PixelFormat, rect: &cairo::RectangleInt, row_stride: u32) -> Result<(), glib::Error> { // unsafe { TODO: call clutter_sys:clutter_image_set_area() } //} fn set_bytes( &self, data: &glib::Bytes, pixel_format: dx::PixelFormat, width: u32, height: u32, row_stride: u32, ) -> Result<(), glib::Error> { unsafe { let mut error = ptr::null_mut(); let _ = ffi::clutter_image_set_bytes( self.as_ref().to_glib_none().0, data.to_glib_none().0, pixel_format.to_glib(), width, height, row_stride, &mut error, ); if error.is_null() { Ok(()) } else { Err(from_glib_full(error)) } } } //fn set_data(&self, data: &[u8], pixel_format: dx::PixelFormat, width: u32, height: u32, row_stride: u32) -> Result<(), glib::Error> { // unsafe { TODO: call clutter_sys:clutter_image_set_data() } //} } impl fmt::Display for Image { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { write!(f, "Image") } }