1use crate::ffi;
6use glib::{
7 object::ObjectType as _,
8 prelude::*,
9 signal::{SignalHandlerId, connect_raw},
10 translate::*,
11};
12use std::boxed::Box as Box_;
13
14glib::wrapper! {
15 #[doc(alias = "GtkAdjustment")]
16 pub struct Adjustment(Object<ffi::GtkAdjustment, ffi::GtkAdjustmentClass>);
17
18 match fn {
19 type_ => || ffi::gtk_adjustment_get_type(),
20 }
21}
22
23impl Adjustment {
24 pub const NONE: Option<&'static Adjustment> = None;
25
26 #[doc(alias = "gtk_adjustment_new")]
27 pub fn new(
28 value: f64,
29 lower: f64,
30 upper: f64,
31 step_increment: f64,
32 page_increment: f64,
33 page_size: f64,
34 ) -> Adjustment {
35 assert_initialized_main_thread!();
36 unsafe {
37 from_glib_none(ffi::gtk_adjustment_new(
38 value,
39 lower,
40 upper,
41 step_increment,
42 page_increment,
43 page_size,
44 ))
45 }
46 }
47
48 pub fn builder() -> AdjustmentBuilder {
53 AdjustmentBuilder::new()
54 }
55}
56
57impl Default for Adjustment {
58 fn default() -> Self {
59 glib::object::Object::new::<Self>()
60 }
61}
62
63#[must_use = "The builder must be built to be used"]
68pub struct AdjustmentBuilder {
69 builder: glib::object::ObjectBuilder<'static, Adjustment>,
70}
71
72impl AdjustmentBuilder {
73 fn new() -> Self {
74 Self {
75 builder: glib::object::Object::builder(),
76 }
77 }
78
79 pub fn lower(self, lower: f64) -> Self {
80 Self {
81 builder: self.builder.property("lower", lower),
82 }
83 }
84
85 pub fn page_increment(self, page_increment: f64) -> Self {
86 Self {
87 builder: self.builder.property("page-increment", page_increment),
88 }
89 }
90
91 pub fn page_size(self, page_size: f64) -> Self {
92 Self {
93 builder: self.builder.property("page-size", page_size),
94 }
95 }
96
97 pub fn step_increment(self, step_increment: f64) -> Self {
98 Self {
99 builder: self.builder.property("step-increment", step_increment),
100 }
101 }
102
103 pub fn upper(self, upper: f64) -> Self {
104 Self {
105 builder: self.builder.property("upper", upper),
106 }
107 }
108
109 pub fn value(self, value: f64) -> Self {
110 Self {
111 builder: self.builder.property("value", value),
112 }
113 }
114
115 #[must_use = "Building the object from the builder is usually expensive and is not expected to have side effects"]
118 pub fn build(self) -> Adjustment {
119 assert_initialized_main_thread!();
120 self.builder.build()
121 }
122}
123
124pub trait AdjustmentExt: IsA<Adjustment> + 'static {
125 #[doc(alias = "gtk_adjustment_clamp_page")]
126 fn clamp_page(&self, lower: f64, upper: f64) {
127 unsafe {
128 ffi::gtk_adjustment_clamp_page(self.as_ref().to_glib_none().0, lower, upper);
129 }
130 }
131
132 #[doc(alias = "gtk_adjustment_configure")]
133 fn configure(
134 &self,
135 value: f64,
136 lower: f64,
137 upper: f64,
138 step_increment: f64,
139 page_increment: f64,
140 page_size: f64,
141 ) {
142 unsafe {
143 ffi::gtk_adjustment_configure(
144 self.as_ref().to_glib_none().0,
145 value,
146 lower,
147 upper,
148 step_increment,
149 page_increment,
150 page_size,
151 );
152 }
153 }
154
155 #[doc(alias = "gtk_adjustment_get_lower")]
156 #[doc(alias = "get_lower")]
157 fn lower(&self) -> f64 {
158 unsafe { ffi::gtk_adjustment_get_lower(self.as_ref().to_glib_none().0) }
159 }
160
161 #[doc(alias = "gtk_adjustment_get_minimum_increment")]
162 #[doc(alias = "get_minimum_increment")]
163 fn minimum_increment(&self) -> f64 {
164 unsafe { ffi::gtk_adjustment_get_minimum_increment(self.as_ref().to_glib_none().0) }
165 }
166
167 #[doc(alias = "gtk_adjustment_get_page_increment")]
168 #[doc(alias = "get_page_increment")]
169 #[doc(alias = "page-increment")]
170 fn page_increment(&self) -> f64 {
171 unsafe { ffi::gtk_adjustment_get_page_increment(self.as_ref().to_glib_none().0) }
172 }
173
174 #[doc(alias = "gtk_adjustment_get_page_size")]
175 #[doc(alias = "get_page_size")]
176 #[doc(alias = "page-size")]
177 fn page_size(&self) -> f64 {
178 unsafe { ffi::gtk_adjustment_get_page_size(self.as_ref().to_glib_none().0) }
179 }
180
181 #[doc(alias = "gtk_adjustment_get_step_increment")]
182 #[doc(alias = "get_step_increment")]
183 #[doc(alias = "step-increment")]
184 fn step_increment(&self) -> f64 {
185 unsafe { ffi::gtk_adjustment_get_step_increment(self.as_ref().to_glib_none().0) }
186 }
187
188 #[doc(alias = "gtk_adjustment_get_upper")]
189 #[doc(alias = "get_upper")]
190 fn upper(&self) -> f64 {
191 unsafe { ffi::gtk_adjustment_get_upper(self.as_ref().to_glib_none().0) }
192 }
193
194 #[doc(alias = "gtk_adjustment_get_value")]
195 #[doc(alias = "get_value")]
196 fn value(&self) -> f64 {
197 unsafe { ffi::gtk_adjustment_get_value(self.as_ref().to_glib_none().0) }
198 }
199
200 #[doc(alias = "gtk_adjustment_set_lower")]
201 #[doc(alias = "lower")]
202 fn set_lower(&self, lower: f64) {
203 unsafe {
204 ffi::gtk_adjustment_set_lower(self.as_ref().to_glib_none().0, lower);
205 }
206 }
207
208 #[doc(alias = "gtk_adjustment_set_page_increment")]
209 #[doc(alias = "page-increment")]
210 fn set_page_increment(&self, page_increment: f64) {
211 unsafe {
212 ffi::gtk_adjustment_set_page_increment(self.as_ref().to_glib_none().0, page_increment);
213 }
214 }
215
216 #[doc(alias = "gtk_adjustment_set_page_size")]
217 #[doc(alias = "page-size")]
218 fn set_page_size(&self, page_size: f64) {
219 unsafe {
220 ffi::gtk_adjustment_set_page_size(self.as_ref().to_glib_none().0, page_size);
221 }
222 }
223
224 #[doc(alias = "gtk_adjustment_set_step_increment")]
225 #[doc(alias = "step-increment")]
226 fn set_step_increment(&self, step_increment: f64) {
227 unsafe {
228 ffi::gtk_adjustment_set_step_increment(self.as_ref().to_glib_none().0, step_increment);
229 }
230 }
231
232 #[doc(alias = "gtk_adjustment_set_upper")]
233 #[doc(alias = "upper")]
234 fn set_upper(&self, upper: f64) {
235 unsafe {
236 ffi::gtk_adjustment_set_upper(self.as_ref().to_glib_none().0, upper);
237 }
238 }
239
240 #[doc(alias = "gtk_adjustment_set_value")]
241 #[doc(alias = "value")]
242 fn set_value(&self, value: f64) {
243 unsafe {
244 ffi::gtk_adjustment_set_value(self.as_ref().to_glib_none().0, value);
245 }
246 }
247
248 #[doc(alias = "changed")]
249 fn connect_changed<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId {
250 unsafe extern "C" fn changed_trampoline<P: IsA<Adjustment>, F: Fn(&P) + 'static>(
251 this: *mut ffi::GtkAdjustment,
252 f: glib::ffi::gpointer,
253 ) {
254 unsafe {
255 let f: &F = &*(f as *const F);
256 f(Adjustment::from_glib_borrow(this).unsafe_cast_ref())
257 }
258 }
259 unsafe {
260 let f: Box_<F> = Box_::new(f);
261 connect_raw(
262 self.as_ptr() as *mut _,
263 c"changed".as_ptr(),
264 Some(std::mem::transmute::<*const (), unsafe extern "C" fn()>(
265 changed_trampoline::<Self, F> as *const (),
266 )),
267 Box_::into_raw(f),
268 )
269 }
270 }
271
272 #[doc(alias = "value-changed")]
273 fn connect_value_changed<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId {
274 unsafe extern "C" fn value_changed_trampoline<P: IsA<Adjustment>, F: Fn(&P) + 'static>(
275 this: *mut ffi::GtkAdjustment,
276 f: glib::ffi::gpointer,
277 ) {
278 unsafe {
279 let f: &F = &*(f as *const F);
280 f(Adjustment::from_glib_borrow(this).unsafe_cast_ref())
281 }
282 }
283 unsafe {
284 let f: Box_<F> = Box_::new(f);
285 connect_raw(
286 self.as_ptr() as *mut _,
287 c"value-changed".as_ptr(),
288 Some(std::mem::transmute::<*const (), unsafe extern "C" fn()>(
289 value_changed_trampoline::<Self, F> as *const (),
290 )),
291 Box_::into_raw(f),
292 )
293 }
294 }
295
296 #[doc(alias = "lower")]
297 fn connect_lower_notify<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId {
298 unsafe extern "C" fn notify_lower_trampoline<P: IsA<Adjustment>, F: Fn(&P) + 'static>(
299 this: *mut ffi::GtkAdjustment,
300 _param_spec: glib::ffi::gpointer,
301 f: glib::ffi::gpointer,
302 ) {
303 unsafe {
304 let f: &F = &*(f as *const F);
305 f(Adjustment::from_glib_borrow(this).unsafe_cast_ref())
306 }
307 }
308 unsafe {
309 let f: Box_<F> = Box_::new(f);
310 connect_raw(
311 self.as_ptr() as *mut _,
312 c"notify::lower".as_ptr(),
313 Some(std::mem::transmute::<*const (), unsafe extern "C" fn()>(
314 notify_lower_trampoline::<Self, F> as *const (),
315 )),
316 Box_::into_raw(f),
317 )
318 }
319 }
320
321 #[doc(alias = "page-increment")]
322 fn connect_page_increment_notify<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId {
323 unsafe extern "C" fn notify_page_increment_trampoline<
324 P: IsA<Adjustment>,
325 F: Fn(&P) + 'static,
326 >(
327 this: *mut ffi::GtkAdjustment,
328 _param_spec: glib::ffi::gpointer,
329 f: glib::ffi::gpointer,
330 ) {
331 unsafe {
332 let f: &F = &*(f as *const F);
333 f(Adjustment::from_glib_borrow(this).unsafe_cast_ref())
334 }
335 }
336 unsafe {
337 let f: Box_<F> = Box_::new(f);
338 connect_raw(
339 self.as_ptr() as *mut _,
340 c"notify::page-increment".as_ptr(),
341 Some(std::mem::transmute::<*const (), unsafe extern "C" fn()>(
342 notify_page_increment_trampoline::<Self, F> as *const (),
343 )),
344 Box_::into_raw(f),
345 )
346 }
347 }
348
349 #[doc(alias = "page-size")]
350 fn connect_page_size_notify<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId {
351 unsafe extern "C" fn notify_page_size_trampoline<
352 P: IsA<Adjustment>,
353 F: Fn(&P) + 'static,
354 >(
355 this: *mut ffi::GtkAdjustment,
356 _param_spec: glib::ffi::gpointer,
357 f: glib::ffi::gpointer,
358 ) {
359 unsafe {
360 let f: &F = &*(f as *const F);
361 f(Adjustment::from_glib_borrow(this).unsafe_cast_ref())
362 }
363 }
364 unsafe {
365 let f: Box_<F> = Box_::new(f);
366 connect_raw(
367 self.as_ptr() as *mut _,
368 c"notify::page-size".as_ptr(),
369 Some(std::mem::transmute::<*const (), unsafe extern "C" fn()>(
370 notify_page_size_trampoline::<Self, F> as *const (),
371 )),
372 Box_::into_raw(f),
373 )
374 }
375 }
376
377 #[doc(alias = "step-increment")]
378 fn connect_step_increment_notify<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId {
379 unsafe extern "C" fn notify_step_increment_trampoline<
380 P: IsA<Adjustment>,
381 F: Fn(&P) + 'static,
382 >(
383 this: *mut ffi::GtkAdjustment,
384 _param_spec: glib::ffi::gpointer,
385 f: glib::ffi::gpointer,
386 ) {
387 unsafe {
388 let f: &F = &*(f as *const F);
389 f(Adjustment::from_glib_borrow(this).unsafe_cast_ref())
390 }
391 }
392 unsafe {
393 let f: Box_<F> = Box_::new(f);
394 connect_raw(
395 self.as_ptr() as *mut _,
396 c"notify::step-increment".as_ptr(),
397 Some(std::mem::transmute::<*const (), unsafe extern "C" fn()>(
398 notify_step_increment_trampoline::<Self, F> as *const (),
399 )),
400 Box_::into_raw(f),
401 )
402 }
403 }
404
405 #[doc(alias = "upper")]
406 fn connect_upper_notify<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId {
407 unsafe extern "C" fn notify_upper_trampoline<P: IsA<Adjustment>, F: Fn(&P) + 'static>(
408 this: *mut ffi::GtkAdjustment,
409 _param_spec: glib::ffi::gpointer,
410 f: glib::ffi::gpointer,
411 ) {
412 unsafe {
413 let f: &F = &*(f as *const F);
414 f(Adjustment::from_glib_borrow(this).unsafe_cast_ref())
415 }
416 }
417 unsafe {
418 let f: Box_<F> = Box_::new(f);
419 connect_raw(
420 self.as_ptr() as *mut _,
421 c"notify::upper".as_ptr(),
422 Some(std::mem::transmute::<*const (), unsafe extern "C" fn()>(
423 notify_upper_trampoline::<Self, F> as *const (),
424 )),
425 Box_::into_raw(f),
426 )
427 }
428 }
429
430 #[doc(alias = "value")]
431 fn connect_value_notify<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId {
432 unsafe extern "C" fn notify_value_trampoline<P: IsA<Adjustment>, F: Fn(&P) + 'static>(
433 this: *mut ffi::GtkAdjustment,
434 _param_spec: glib::ffi::gpointer,
435 f: glib::ffi::gpointer,
436 ) {
437 unsafe {
438 let f: &F = &*(f as *const F);
439 f(Adjustment::from_glib_borrow(this).unsafe_cast_ref())
440 }
441 }
442 unsafe {
443 let f: Box_<F> = Box_::new(f);
444 connect_raw(
445 self.as_ptr() as *mut _,
446 c"notify::value".as_ptr(),
447 Some(std::mem::transmute::<*const (), unsafe extern "C" fn()>(
448 notify_value_trampoline::<Self, F> as *const (),
449 )),
450 Box_::into_raw(f),
451 )
452 }
453 }
454}
455
456impl<O: IsA<Adjustment>> AdjustmentExt for O {}