gdk_pixbuf/subclass/
pixbuf_loader.rs1use glib::{prelude::*, subclass::prelude::*, translate::*};
7
8use crate::{ffi, PixbufLoader};
9
10pub trait PixbufLoaderImpl: ObjectImpl + ObjectSubclass<Type: IsA<PixbufLoader>> {
11 fn size_prepared(&self, width: i32, height: i32) {
12 self.parent_size_prepared(width, height)
13 }
14
15 fn area_prepared(&self) {
16 self.parent_area_prepared()
17 }
18
19 fn area_updated(&self, x: i32, y: i32, width: i32, height: i32) {
20 self.parent_area_updated(x, y, width, height)
21 }
22
23 fn closed(&self) {
24 self.parent_closed()
25 }
26}
27
28pub trait PixbufLoaderImplExt: PixbufLoaderImpl {
29 fn parent_size_prepared(&self, width: i32, height: i32) {
30 unsafe {
31 let data = Self::type_data();
32 let parent_class = data.as_ref().parent_class() as *mut ffi::GdkPixbufLoaderClass;
33 if let Some(f) = (*parent_class).size_prepared {
34 f(
35 self.obj()
36 .unsafe_cast_ref::<PixbufLoader>()
37 .to_glib_none()
38 .0,
39 width,
40 height,
41 )
42 }
43 }
44 }
45
46 fn parent_area_prepared(&self) {
47 unsafe {
48 let data = Self::type_data();
49 let parent_class = data.as_ref().parent_class() as *mut ffi::GdkPixbufLoaderClass;
50 if let Some(f) = (*parent_class).area_prepared {
51 f(self
52 .obj()
53 .unsafe_cast_ref::<PixbufLoader>()
54 .to_glib_none()
55 .0)
56 }
57 }
58 }
59
60 fn parent_area_updated(&self, x: i32, y: i32, width: i32, height: i32) {
61 unsafe {
62 let data = Self::type_data();
63 let parent_class = data.as_ref().parent_class() as *mut ffi::GdkPixbufLoaderClass;
64 if let Some(f) = (*parent_class).area_updated {
65 f(
66 self.obj()
67 .unsafe_cast_ref::<PixbufLoader>()
68 .to_glib_none()
69 .0,
70 x,
71 y,
72 width,
73 height,
74 )
75 }
76 }
77 }
78
79 fn parent_closed(&self) {
80 unsafe {
81 let data = Self::type_data();
82 let parent_class = data.as_ref().parent_class() as *mut ffi::GdkPixbufLoaderClass;
83 if let Some(f) = (*parent_class).closed {
84 f(self
85 .obj()
86 .unsafe_cast_ref::<PixbufLoader>()
87 .to_glib_none()
88 .0)
89 }
90 }
91 }
92}
93
94impl<T: PixbufLoaderImpl> PixbufLoaderImplExt for T {}
95
96unsafe impl<T: PixbufLoaderImpl> IsSubclassable<T> for PixbufLoader {
97 fn class_init(class: &mut ::glib::Class<Self>) {
98 Self::parent_class_init::<T>(class);
99
100 let klass = class.as_mut();
101 klass.size_prepared = Some(loader_size_prepared::<T>);
102 klass.area_prepared = Some(loader_area_prepared::<T>);
103 klass.area_updated = Some(loader_area_updated::<T>);
104 klass.closed = Some(loader_closed::<T>);
105 }
106}
107
108unsafe extern "C" fn loader_size_prepared<T: PixbufLoaderImpl>(
109 ptr: *mut ffi::GdkPixbufLoader,
110 width: i32,
111 height: i32,
112) {
113 let instance = &*(ptr as *mut T::Instance);
114 let imp = instance.imp();
115
116 imp.size_prepared(width, height)
117}
118
119unsafe extern "C" fn loader_area_prepared<T: PixbufLoaderImpl>(ptr: *mut ffi::GdkPixbufLoader) {
120 let instance = &*(ptr as *mut T::Instance);
121 let imp = instance.imp();
122
123 imp.area_prepared();
124}
125
126unsafe extern "C" fn loader_area_updated<T: PixbufLoaderImpl>(
127 ptr: *mut ffi::GdkPixbufLoader,
128 x: i32,
129 y: i32,
130 width: i32,
131 height: i32,
132) {
133 let instance = &*(ptr as *mut T::Instance);
134 let imp = instance.imp();
135
136 imp.area_updated(x, y, width, height)
137}
138
139unsafe extern "C" fn loader_closed<T: PixbufLoaderImpl>(ptr: *mut ffi::GdkPixbufLoader) {
140 let instance = &*(ptr as *mut T::Instance);
141 let imp = instance.imp();
142
143 imp.closed()
144}