1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
// Copyright 2013-2018, The Gtk-rs Project Developers.
// See the COPYRIGHT file at the top-level directory of this distribution.
// Licensed under the MIT license, see the LICENSE file or <http://opensource.org/licenses/MIT>

use cairo;
use ffi;
use glib;
use pango;

use glib::translate::*;

#[repr(packed)]
pub struct GRange(pub i32, pub i32);

pub fn pango_layout_line_get_clip_region(line: &pango::LayoutLine,
                                         x_origin: i32,
                                         y_origin: i32,
                                         index_ranges: &[GRange]) -> Option<cairo::Region> {
    assert_initialized_main_thread!();

    let ptr: *const i32 = index_ranges.as_ptr() as _;
    unsafe { from_glib_full(
                 ffi::gdk_pango_layout_line_get_clip_region(line.to_glib_none().0,
                                                            x_origin,
                                                            y_origin,
                                                            mut_override(ptr),
                                                            index_ranges.len() as i32)) }
}

pub fn pango_layout_get_clip_region(layout: &pango::Layout,
                                    x_origin: i32,
                                    y_origin: i32,
                                    index_ranges: &[GRange]) -> Option<cairo::Region> {
    assert_initialized_main_thread!();

    let ptr: *const i32 = index_ranges.as_ptr() as _;
    unsafe {
        from_glib_full(ffi::gdk_pango_layout_get_clip_region(layout.to_glib_none().0,
                                                             x_origin,
                                                             y_origin,
                                                             ptr,
                                                             index_ranges.len() as i32))
    }
}

pub fn setting_get(name: &str) -> Option<glib::Value> {
    assert_initialized_main_thread!();
    unsafe {
        let mut value = glib::Value::uninitialized();
        let done: bool = from_glib(ffi::gdk_setting_get(name.to_glib_none().0,
                                   value.to_glib_none_mut().0));
        if done == true {
            Some(value)
        } else {
            None
        }
    }
}

pub fn property_change(window: &super::Window, property: &super::Atom, type_: &super::Atom,
                       format: i32, mode: super::PropMode, data: super::ChangeData) {
    skip_assert_initialized!();
    let nelements = data.len();
    unsafe {
        ffi::gdk_property_change(window.to_glib_none().0, property.to_glib_none().0, type_.to_glib_none().0, format, mode.to_glib(), data.to_glib(), nelements as i32);
    }
}