gtk/auto/
print_operation_preview.rs1use glib::object::Cast;
6use glib::object::IsA;
7use glib::signal::connect_raw;
8use glib::signal::SignalHandlerId;
9use glib::translate::*;
10use glib_sys;
11use gtk_sys;
12use std::boxed::Box as Box_;
13use std::fmt;
14use std::mem::transmute;
15use PageSetup;
16use PrintContext;
17
18glib_wrapper! {
19 pub struct PrintOperationPreview(Interface<gtk_sys::GtkPrintOperationPreview>);
20
21 match fn {
22 get_type => || gtk_sys::gtk_print_operation_preview_get_type(),
23 }
24}
25
26pub const NONE_PRINT_OPERATION_PREVIEW: Option<&PrintOperationPreview> = None;
27
28pub trait PrintOperationPreviewExt: 'static {
29 fn end_preview(&self);
30
31 fn is_selected(&self, page_nr: i32) -> bool;
32
33 fn render_page(&self, page_nr: i32);
34
35 fn connect_got_page_size<F: Fn(&Self, &PrintContext, &PageSetup) + 'static>(
36 &self,
37 f: F,
38 ) -> SignalHandlerId;
39
40 fn connect_ready<F: Fn(&Self, &PrintContext) + 'static>(&self, f: F) -> SignalHandlerId;
41}
42
43impl<O: IsA<PrintOperationPreview>> PrintOperationPreviewExt for O {
44 fn end_preview(&self) {
45 unsafe {
46 gtk_sys::gtk_print_operation_preview_end_preview(self.as_ref().to_glib_none().0);
47 }
48 }
49
50 fn is_selected(&self, page_nr: i32) -> bool {
51 unsafe {
52 from_glib(gtk_sys::gtk_print_operation_preview_is_selected(
53 self.as_ref().to_glib_none().0,
54 page_nr,
55 ))
56 }
57 }
58
59 fn render_page(&self, page_nr: i32) {
60 unsafe {
61 gtk_sys::gtk_print_operation_preview_render_page(
62 self.as_ref().to_glib_none().0,
63 page_nr,
64 );
65 }
66 }
67
68 fn connect_got_page_size<F: Fn(&Self, &PrintContext, &PageSetup) + 'static>(
69 &self,
70 f: F,
71 ) -> SignalHandlerId {
72 unsafe extern "C" fn got_page_size_trampoline<
73 P,
74 F: Fn(&P, &PrintContext, &PageSetup) + 'static,
75 >(
76 this: *mut gtk_sys::GtkPrintOperationPreview,
77 context: *mut gtk_sys::GtkPrintContext,
78 page_setup: *mut gtk_sys::GtkPageSetup,
79 f: glib_sys::gpointer,
80 ) where
81 P: IsA<PrintOperationPreview>,
82 {
83 let f: &F = &*(f as *const F);
84 f(
85 &PrintOperationPreview::from_glib_borrow(this).unsafe_cast(),
86 &from_glib_borrow(context),
87 &from_glib_borrow(page_setup),
88 )
89 }
90 unsafe {
91 let f: Box_<F> = Box_::new(f);
92 connect_raw(
93 self.as_ptr() as *mut _,
94 b"got-page-size\0".as_ptr() as *const _,
95 Some(transmute(got_page_size_trampoline::<Self, F> as usize)),
96 Box_::into_raw(f),
97 )
98 }
99 }
100
101 fn connect_ready<F: Fn(&Self, &PrintContext) + 'static>(&self, f: F) -> SignalHandlerId {
102 unsafe extern "C" fn ready_trampoline<P, F: Fn(&P, &PrintContext) + 'static>(
103 this: *mut gtk_sys::GtkPrintOperationPreview,
104 context: *mut gtk_sys::GtkPrintContext,
105 f: glib_sys::gpointer,
106 ) where
107 P: IsA<PrintOperationPreview>,
108 {
109 let f: &F = &*(f as *const F);
110 f(
111 &PrintOperationPreview::from_glib_borrow(this).unsafe_cast(),
112 &from_glib_borrow(context),
113 )
114 }
115 unsafe {
116 let f: Box_<F> = Box_::new(f);
117 connect_raw(
118 self.as_ptr() as *mut _,
119 b"ready\0".as_ptr() as *const _,
120 Some(transmute(ready_trampoline::<Self, F> as usize)),
121 Box_::into_raw(f),
122 )
123 }
124 }
125}
126
127impl fmt::Display for PrintOperationPreview {
128 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
129 write!(f, "PrintOperationPreview")
130 }
131}