1use cairo;
6use gdk_sys;
7use glib;
8use glib::translate::*;
9use pango;
10
11#[repr(packed)]
12pub struct GRange(pub i32, pub i32);
13
14pub fn pango_layout_line_get_clip_region(
15 line: &pango::LayoutLine,
16 x_origin: i32,
17 y_origin: i32,
18 index_ranges: &[GRange],
19) -> Option<cairo::Region> {
20 assert_initialized_main_thread!();
21
22 let ptr: *const i32 = index_ranges.as_ptr() as _;
23 unsafe {
24 from_glib_full(gdk_sys::gdk_pango_layout_line_get_clip_region(
25 line.to_glib_none().0,
26 x_origin,
27 y_origin,
28 mut_override(ptr),
29 index_ranges.len() as i32,
30 ))
31 }
32}
33
34pub fn pango_layout_get_clip_region(
35 layout: &pango::Layout,
36 x_origin: i32,
37 y_origin: i32,
38 index_ranges: &[GRange],
39) -> Option<cairo::Region> {
40 assert_initialized_main_thread!();
41
42 let ptr: *const i32 = index_ranges.as_ptr() as _;
43 unsafe {
44 from_glib_full(gdk_sys::gdk_pango_layout_get_clip_region(
45 layout.to_glib_none().0,
46 x_origin,
47 y_origin,
48 ptr,
49 index_ranges.len() as i32,
50 ))
51 }
52}
53
54pub fn setting_get(name: &str) -> Option<glib::Value> {
55 assert_initialized_main_thread!();
56 unsafe {
57 let mut value = glib::Value::uninitialized();
58 let done: bool = from_glib(gdk_sys::gdk_setting_get(
59 name.to_glib_none().0,
60 value.to_glib_none_mut().0,
61 ));
62 if done == true {
63 Some(value)
64 } else {
65 None
66 }
67 }
68}
69
70pub fn property_change(
71 window: &super::Window,
72 property: &super::Atom,
73 type_: &super::Atom,
74 format: i32,
75 mode: super::PropMode,
76 data: super::ChangeData,
77) {
78 skip_assert_initialized!();
79 let nelements = data.len();
80 unsafe {
81 gdk_sys::gdk_property_change(
82 window.to_glib_none().0,
83 property.to_glib_none().0,
84 type_.to_glib_none().0,
85 format,
86 mode.to_glib(),
87 data.to_glib(),
88 nelements as i32,
89 );
90 }
91}