1use 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}