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 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132
// This file was generated by gir (https://github.com/gtk-rs/gir) // from gir-files (https://github.com/gtk-rs/gir-files) // DO NOT EDIT use crate::GlyphItem; use glib::translate::*; glib::wrapper! { /// A [`GlyphItemIter`][crate::GlyphItemIter] is an iterator over the clusters in a /// [`GlyphItem`][crate::GlyphItem]. The `<firstterm>`forward direction`</firstterm>` of the /// iterator is the logical direction of text. That is, with increasing /// `start_index` and `start_char` values. If `glyph_item` is right-to-left /// (that is, if `<literal>``glyph_item`->item->analysis.level`</literal>` is odd), /// then `start_glyph` decreases as the iterator moves forward. Moreover, /// in right-to-left cases, `start_glyph` is greater than `end_glyph`. /// /// An iterator should be initialized using either of /// [`init_start()`][Self::init_start()] and /// [`init_end()`][Self::init_end()], for forward and backward iteration /// respectively, and walked over using any desired mixture of /// [`next_cluster()`][Self::next_cluster()] and /// [`prev_cluster()`][Self::prev_cluster()]. A common idiom for doing a /// forward iteration over the clusters is: /// `<programlisting>` /// PangoGlyphItemIter cluster_iter; /// gboolean have_cluster; /// /// for (have_cluster = pango_glyph_item_iter_init_start (&cluster_iter, /// glyph_item, text); /// have_cluster; /// have_cluster = pango_glyph_item_iter_next_cluster (&cluster_iter)) /// { /// ... /// } /// `</programlisting>` /// /// Note that `text` is the start of the text for layout, which is then /// indexed by `<literal>``glyph_item`->item->offset`</literal>` to get to the /// text of `glyph_item`. The `start_index` and `end_index` values can directly /// index into `text`. The `start_glyph`, `end_glyph`, `start_char`, and `end_char` /// values however are zero-based for the `glyph_item`. For each cluster, the /// item pointed at by the start variables is included in the cluster while /// the one pointed at by end variables is not. /// /// None of the members of a [`GlyphItemIter`][crate::GlyphItemIter] should be modified manually. #[derive(Debug, PartialEq, Eq, PartialOrd, Ord, Hash)] pub struct GlyphItemIter(Boxed<ffi::PangoGlyphItemIter>); match fn { copy => |ptr| ffi::pango_glyph_item_iter_copy(mut_override(ptr)), free => |ptr| ffi::pango_glyph_item_iter_free(ptr), type_ => || ffi::pango_glyph_item_iter_get_type(), } } impl GlyphItemIter { /// Initializes a [`GlyphItemIter`][crate::GlyphItemIter] structure to point to the /// last cluster in a glyph item. /// See [`GlyphItemIter`][crate::GlyphItemIter] for details of cluster orders. /// ## `glyph_item` /// the glyph item to iterate over /// ## `text` /// text corresponding to the glyph item /// /// # Returns /// /// [`false`] if there are no clusters in the glyph item #[doc(alias = "pango_glyph_item_iter_init_end")] pub fn init_end(&mut self, glyph_item: &mut GlyphItem, text: &str) -> bool { unsafe { from_glib(ffi::pango_glyph_item_iter_init_end( self.to_glib_none_mut().0, glyph_item.to_glib_none_mut().0, text.to_glib_none().0, )) } } /// Initializes a [`GlyphItemIter`][crate::GlyphItemIter] structure to point to the /// first cluster in a glyph item. /// See [`GlyphItemIter`][crate::GlyphItemIter] for details of cluster orders. /// ## `glyph_item` /// the glyph item to iterate over /// ## `text` /// text corresponding to the glyph item /// /// # Returns /// /// [`false`] if there are no clusters in the glyph item #[doc(alias = "pango_glyph_item_iter_init_start")] pub fn init_start(&mut self, glyph_item: &mut GlyphItem, text: &str) -> bool { unsafe { from_glib(ffi::pango_glyph_item_iter_init_start( self.to_glib_none_mut().0, glyph_item.to_glib_none_mut().0, text.to_glib_none().0, )) } } /// Advances the iterator to the next cluster in the glyph item. /// See [`GlyphItemIter`][crate::GlyphItemIter] for details of cluster orders. /// /// # Returns /// /// [`true`] if the iterator was advanced, [`false`] if we were already on the /// last cluster. #[doc(alias = "pango_glyph_item_iter_next_cluster")] pub fn next_cluster(&mut self) -> bool { unsafe { from_glib(ffi::pango_glyph_item_iter_next_cluster( self.to_glib_none_mut().0, )) } } /// Moves the iterator to the preceding cluster in the glyph item. /// See [`GlyphItemIter`][crate::GlyphItemIter] for details of cluster orders. /// /// # Returns /// /// [`true`] if the iterator was moved, [`false`] if we were already on the /// first cluster. #[doc(alias = "pango_glyph_item_iter_prev_cluster")] pub fn prev_cluster(&mut self) -> bool { unsafe { from_glib(ffi::pango_glyph_item_iter_prev_cluster( self.to_glib_none_mut().0, )) } } }