gdk4/
gl_texture_builder.rs1use glib::{prelude::*, translate::*};
4
5#[cfg(feature = "v4_16")]
6use crate::ColorState;
7use crate::{ffi, GLContext, GLTextureBuilder, MemoryFormat, Texture};
8
9#[cfg(not(feature = "gl"))]
10pub type GLsync = *const libc::c_void;
11
12#[cfg(feature = "gl")]
13pub use gl::types::GLsync;
14
15impl GLTextureBuilder {
16 #[doc(alias = "gdk_gl_texture_builder_build")]
17 #[must_use = "The builder must be built to be used"]
18 #[allow(clippy::missing_safety_doc)]
19 pub unsafe fn build(self) -> Texture {
20 from_glib_full(ffi::gdk_gl_texture_builder_build(
21 self.to_glib_none().0,
22 None,
23 std::ptr::null_mut(),
24 ))
25 }
26
27 #[doc(alias = "gdk_gl_texture_builder_build")]
28 #[must_use = "The builder must be built to be used"]
29 #[allow(clippy::missing_safety_doc)]
30 pub unsafe fn build_with_release_func<F: FnOnce() + Send + 'static>(
31 self,
32 release_func: F,
33 ) -> Texture {
34 unsafe extern "C" fn destroy_closure<F: FnOnce() + Send + 'static>(
35 func: glib::ffi::gpointer,
36 ) {
37 let released_func = Box::<F>::from_raw(func as *mut _);
38 released_func();
39 }
40 let released_func = Box::new(release_func);
41 from_glib_full(ffi::gdk_gl_texture_builder_build(
42 self.to_glib_none().0,
43 Some(destroy_closure::<F>),
44 Box::into_raw(released_func) as glib::ffi::gpointer,
45 ))
46 }
47
48 #[cfg(feature = "v4_16")]
49 #[cfg_attr(docsrs, doc(cfg(feature = "v4_16")))]
50 #[doc(alias = "gdk_gl_texture_builder_set_color_state")]
51 #[doc(alias = "color-state")]
52 pub fn set_color_state(self, color_state: &ColorState) -> Self {
53 unsafe {
54 ffi::gdk_gl_texture_builder_set_color_state(
55 self.to_glib_none().0,
56 color_state.to_glib_none().0,
57 );
58 }
59
60 self
61 }
62
63 #[doc(alias = "gdk_gl_texture_builder_set_context")]
64 pub fn set_context(self, context: Option<&impl IsA<GLContext>>) -> Self {
65 unsafe {
66 ffi::gdk_gl_texture_builder_set_context(
67 self.to_glib_none().0,
68 context.map(|p| p.as_ref()).to_glib_none().0,
69 );
70 }
71
72 self
73 }
74
75 #[doc(alias = "gdk_gl_texture_builder_set_format")]
76 pub fn set_format(self, format: MemoryFormat) -> Self {
77 unsafe {
78 ffi::gdk_gl_texture_builder_set_format(self.to_glib_none().0, format.into_glib());
79 }
80
81 self
82 }
83
84 #[doc(alias = "gdk_gl_texture_builder_set_has_mipmap")]
85 pub fn set_has_mipmap(self, has_mipmap: bool) -> Self {
86 unsafe {
87 ffi::gdk_gl_texture_builder_set_has_mipmap(
88 self.to_glib_none().0,
89 has_mipmap.into_glib(),
90 );
91 }
92
93 self
94 }
95
96 #[doc(alias = "gdk_gl_texture_builder_set_height")]
97 pub fn set_height(self, height: i32) -> Self {
98 unsafe {
99 ffi::gdk_gl_texture_builder_set_height(self.to_glib_none().0, height);
100 }
101
102 self
103 }
104
105 #[doc(alias = "gdk_gl_texture_builder_set_id")]
106 pub fn set_id(self, id: u32) -> Self {
107 unsafe {
108 ffi::gdk_gl_texture_builder_set_id(self.to_glib_none().0, id);
109 }
110
111 self
112 }
113
114 #[doc(alias = "gdk_gl_texture_builder_set_update_region")]
115 pub fn set_update_region(self, region: Option<&cairo::Region>) -> Self {
116 unsafe {
117 ffi::gdk_gl_texture_builder_set_update_region(
118 self.to_glib_none().0,
119 mut_override(region.to_glib_none().0),
120 );
121 }
122
123 self
124 }
125
126 #[doc(alias = "gdk_gl_texture_builder_set_update_texture")]
127 pub fn set_update_texture(self, texture: Option<&impl IsA<Texture>>) -> Self {
128 unsafe {
129 ffi::gdk_gl_texture_builder_set_update_texture(
130 self.to_glib_none().0,
131 texture.map(|p| p.as_ref()).to_glib_none().0,
132 );
133 }
134
135 self
136 }
137
138 #[doc(alias = "gdk_gl_texture_builder_set_width")]
139 pub fn set_width(self, width: i32) -> Self {
140 unsafe {
141 ffi::gdk_gl_texture_builder_set_width(self.to_glib_none().0, width);
142 }
143
144 self
145 }
146
147 #[doc(alias = "gdk_gl_texture_builder_get_sync")]
148 #[doc(alias = "get_sync")]
149 pub fn sync(&self) -> Option<GLsync> {
150 let ptr = unsafe { ffi::gdk_gl_texture_builder_get_sync(self.to_glib_none().0) };
151 if ptr.is_null() {
152 None
153 } else {
154 Some(ptr as _)
155 }
156 }
157
158 #[doc(alias = "gdk_gl_texture_builder_set_sync")]
159 pub fn set_sync(self, sync: Option<GLsync>) -> Self {
160 let ptr = sync.unwrap_or(std::ptr::null());
161 unsafe {
162 ffi::gdk_gl_texture_builder_set_sync(self.to_glib_none().0, ptr as _);
163 }
164
165 self
166 }
167}