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
// Take a look at the license at the top of the repository in the LICENSE file.
use std::mem;
use glib::translate::*;
use crate::{AttrList, Attribute};
impl AttrList {
/// Insert the given attribute into the [`AttrList`][crate::AttrList].
///
/// It will replace any attributes of the same type
/// on that segment and be merged with any adjoining
/// attributes that are identical.
///
/// This function is slower than [`insert()`][Self::insert()]
/// for creating an attribute list in order (potentially
/// much slower for large lists). However,
/// [`insert()`][Self::insert()] is not suitable for
/// continually changing a set of attributes since it
/// never removes or combines existing attributes.
/// ## `attr`
/// the attribute to insert
#[doc(alias = "pango_attr_list_change")]
pub fn change(&self, attr: impl Into<Attribute>) {
unsafe {
let attr = attr.into();
ffi::pango_attr_list_change(self.to_glib_none().0, attr.to_glib_none().0);
mem::forget(attr); //As attr transferred fully
}
}
#[cfg(feature = "v1_46")]
#[cfg_attr(docsrs, doc(cfg(feature = "v1_46")))]
#[doc(alias = "pango_attr_list_equal")]
fn equal(&self, other_list: &AttrList) -> bool {
unsafe {
from_glib(ffi::pango_attr_list_equal(
self.to_glib_none().0,
other_list.to_glib_none().0,
))
}
}
/// Insert the given attribute into the [`AttrList`][crate::AttrList].
///
/// It will be inserted after all other attributes with a
/// matching @start_index.
/// ## `attr`
/// the attribute to insert
#[doc(alias = "pango_attr_list_insert")]
pub fn insert(&self, attr: impl Into<Attribute>) {
unsafe {
let attr = attr.into();
ffi::pango_attr_list_insert(self.to_glib_none().0, attr.to_glib_none().0);
mem::forget(attr); //As attr transferred fully
}
}
/// Insert the given attribute into the [`AttrList`][crate::AttrList].
///
/// It will be inserted before all other attributes with a
/// matching @start_index.
/// ## `attr`
/// the attribute to insert
#[doc(alias = "pango_attr_list_insert_before")]
pub fn insert_before(&self, attr: impl Into<Attribute>) {
unsafe {
let attr = attr.into();
ffi::pango_attr_list_insert_before(self.to_glib_none().0, attr.to_glib_none().0);
mem::forget(attr); //As attr transferred fully
}
}
}
#[cfg(feature = "v1_46")]
#[cfg_attr(docsrs, doc(cfg(feature = "v1_46")))]
impl PartialEq for AttrList {
#[inline]
fn eq(&self, other: &Self) -> bool {
self.equal(other)
}
}
#[cfg(feature = "v1_46")]
#[cfg_attr(docsrs, doc(cfg(feature = "v1_46")))]
impl Eq for AttrList {}
#[cfg(feature = "v1_50")]
#[cfg_attr(docsrs, doc(cfg(feature = "v1_50")))]
impl std::str::FromStr for AttrList {
type Err = glib::BoolError;
fn from_str(s: &str) -> Result<Self, Self::Err> {
Self::from_string(s)
}
}