gdk/
functions.rs

1// Copyright 2013-2018, The Gtk-rs Project Developers.
2// See the COPYRIGHT file at the top-level directory of this distribution.
3// Licensed under the MIT license, see the LICENSE file or <http://opensource.org/licenses/MIT>
4
5use 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}