pango/
functions.rs

1// Copyright 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 glib::translate::*;
6use glib_sys;
7use pango_sys;
8use std::ptr;
9use Analysis;
10use GlyphString;
11use Item;
12
13pub fn reorder_items(logical_items: &[&Item]) -> Vec<Item> {
14    unsafe {
15        let stash_vec: Vec<_> = logical_items
16            .iter()
17            .rev()
18            .map(|v| v.to_glib_none())
19            .collect();
20        let mut list: *mut glib_sys::GList = ptr::null_mut();
21        for stash in &stash_vec {
22            list = glib_sys::g_list_prepend(list, Ptr::to(stash.0));
23        }
24
25        FromGlibPtrContainer::from_glib_full(pango_sys::pango_reorder_items(list))
26    }
27}
28
29pub fn shape_full(
30    item_text: &str,
31    paragraph_text: Option<&str>,
32    analysis: &Analysis,
33    glyphs: &mut GlyphString,
34) {
35    let paragraph_length = match paragraph_text {
36        Some(s) => s.len(),
37        None => 0,
38    } as i32;
39    let paragraph_text = paragraph_text.to_glib_none();
40    let item_length = item_text.len() as i32;
41    unsafe {
42        pango_sys::pango_shape_full(
43            item_text.to_glib_none().0,
44            item_length,
45            paragraph_text.0,
46            paragraph_length,
47            analysis.to_glib_none().0,
48            glyphs.to_glib_none_mut().0,
49        );
50    }
51}