gtk4/subclass/
print_operation_preview.rs
1use glib::translate::*;
7
8use crate::{
9 ffi, prelude::*, subclass::prelude::*, PageSetup, PrintContext, PrintOperationPreview,
10};
11
12pub trait PrintOperationPreviewImpl:
13 ObjectImpl + ObjectSubclass<Type: IsA<PrintOperationPreview>>
14{
15 fn ready(&self, context: &PrintContext) {
16 self.parent_ready(context)
17 }
18
19 fn got_page_size(&self, context: &PrintContext, page_setup: &PageSetup) {
20 self.parent_got_page_size(context, page_setup)
21 }
22
23 fn render_page(&self, page_nr: i32);
24 fn is_selected(&self, page_nr: i32) -> bool;
25 fn end_preview(&self);
26}
27
28pub trait PrintOperationPreviewImplExt: PrintOperationPreviewImpl {
29 fn parent_ready(&self, context: &PrintContext) {
30 unsafe {
31 let type_data = Self::type_data();
32 let parent_iface = type_data
33 .as_ref()
34 .parent_interface::<PrintOperationPreview>()
35 as *const ffi::GtkPrintOperationPreviewIface;
36
37 if let Some(func) = (*parent_iface).ready {
38 func(
39 self.obj()
40 .unsafe_cast_ref::<PrintOperationPreview>()
41 .to_glib_none()
42 .0,
43 context.to_glib_none().0,
44 );
45 }
46 }
47 }
48
49 fn parent_got_page_size(&self, context: &PrintContext, page_setup: &PageSetup) {
50 unsafe {
51 let type_data = Self::type_data();
52 let parent_iface = type_data
53 .as_ref()
54 .parent_interface::<PrintOperationPreview>()
55 as *const ffi::GtkPrintOperationPreviewIface;
56
57 if let Some(func) = (*parent_iface).got_page_size {
58 func(
59 self.obj()
60 .unsafe_cast_ref::<PrintOperationPreview>()
61 .to_glib_none()
62 .0,
63 context.to_glib_none().0,
64 page_setup.to_glib_none().0,
65 );
66 }
67 }
68 }
69
70 fn parent_render_page(&self, page_nr: i32) {
71 unsafe {
72 let type_data = Self::type_data();
73 let parent_iface = type_data
74 .as_ref()
75 .parent_interface::<PrintOperationPreview>()
76 as *const ffi::GtkPrintOperationPreviewIface;
77
78 if let Some(func) = (*parent_iface).render_page {
79 func(
80 self.obj()
81 .unsafe_cast_ref::<PrintOperationPreview>()
82 .to_glib_none()
83 .0,
84 page_nr,
85 );
86 }
87 }
88 }
89
90 fn parent_is_selected(&self, page_nr: i32) -> bool {
91 unsafe {
92 let type_data = Self::type_data();
93 let parent_iface = type_data
94 .as_ref()
95 .parent_interface::<PrintOperationPreview>()
96 as *const ffi::GtkPrintOperationPreviewIface;
97 let func = (*parent_iface)
98 .is_selected
99 .expect("no parent \"is_selected\" implementation");
100
101 from_glib(func(
102 self.obj()
103 .unsafe_cast_ref::<PrintOperationPreview>()
104 .to_glib_none()
105 .0,
106 page_nr,
107 ))
108 }
109 }
110
111 fn parent_end_preview(&self) {
112 unsafe {
113 let type_data = Self::type_data();
114 let parent_iface = type_data
115 .as_ref()
116 .parent_interface::<PrintOperationPreview>()
117 as *const ffi::GtkPrintOperationPreviewIface;
118
119 if let Some(func) = (*parent_iface).end_preview {
120 func(
121 self.obj()
122 .unsafe_cast_ref::<PrintOperationPreview>()
123 .to_glib_none()
124 .0,
125 );
126 }
127 }
128 }
129}
130
131impl<T: PrintOperationPreviewImpl> PrintOperationPreviewImplExt for T {}
132
133unsafe impl<T: PrintOperationPreviewImpl> IsImplementable<T> for PrintOperationPreview {
134 fn interface_init(iface: &mut glib::Interface<Self>) {
135 let iface = iface.as_mut();
136
137 assert_initialized_main_thread!();
138
139 iface.ready = Some(print_operation_preview_ready::<T>);
140 iface.got_page_size = Some(print_operation_preview_got_page_size::<T>);
141 iface.render_page = Some(print_operation_preview_render_page::<T>);
142 iface.is_selected = Some(print_operation_preview_is_selected::<T>);
143 iface.end_preview = Some(print_operation_preview_end_preview::<T>);
144 }
145}
146
147unsafe extern "C" fn print_operation_preview_ready<T: PrintOperationPreviewImpl>(
148 print_operation_preview: *mut ffi::GtkPrintOperationPreview,
149 contextptr: *mut ffi::GtkPrintContext,
150) {
151 let instance = &*(print_operation_preview as *mut T::Instance);
152 let imp = instance.imp();
153 let context: Borrowed<PrintContext> = from_glib_borrow(contextptr);
154
155 imp.ready(&context)
156}
157
158unsafe extern "C" fn print_operation_preview_got_page_size<T: PrintOperationPreviewImpl>(
159 print_operation_preview: *mut ffi::GtkPrintOperationPreview,
160 contextptr: *mut ffi::GtkPrintContext,
161 setupptr: *mut ffi::GtkPageSetup,
162) {
163 let instance = &*(print_operation_preview as *mut T::Instance);
164 let imp = instance.imp();
165
166 let context: Borrowed<PrintContext> = from_glib_borrow(contextptr);
167 let setup: Borrowed<PageSetup> = from_glib_borrow(setupptr);
168
169 imp.got_page_size(&context, &setup)
170}
171
172unsafe extern "C" fn print_operation_preview_render_page<T: PrintOperationPreviewImpl>(
173 print_operation_preview: *mut ffi::GtkPrintOperationPreview,
174 page_nr: i32,
175) {
176 let instance = &*(print_operation_preview as *mut T::Instance);
177 let imp = instance.imp();
178
179 imp.render_page(page_nr)
180}
181
182unsafe extern "C" fn print_operation_preview_is_selected<T: PrintOperationPreviewImpl>(
183 print_operation_preview: *mut ffi::GtkPrintOperationPreview,
184 page_nr: i32,
185) -> glib::ffi::gboolean {
186 let instance = &*(print_operation_preview as *mut T::Instance);
187 let imp = instance.imp();
188
189 imp.is_selected(page_nr).into_glib()
190}
191
192unsafe extern "C" fn print_operation_preview_end_preview<T: PrintOperationPreviewImpl>(
193 print_operation_preview: *mut ffi::GtkPrintOperationPreview,
194) {
195 let instance = &*(print_operation_preview as *mut T::Instance);
196 let imp = instance.imp();
197
198 imp.end_preview()
199}