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
#[cfg(feature = "glib")] use glib::translate::*; use libc::c_char; use ffi; use std::ffi::{CString, CStr}; use ffi::enums::{ FontType, FontWeight, FontSlant, }; #[cfg(feature = "glib")] glib_wrapper! { pub struct FontFace(Shared<ffi::cairo_font_face_t>); match fn { ref => |ptr| ffi::cairo_font_face_reference(ptr), unref => |ptr| ffi::cairo_font_face_destroy(ptr), } } #[cfg(not(feature = "glib"))] pub struct FontFace(*mut ffi::cairo_font_face_t); impl FontFace { pub fn toy_create(family: &str, slant: FontSlant, weight: FontWeight) -> FontFace { let font_face: FontFace = unsafe { FontFace::from_raw_full(ffi::cairo_toy_font_face_create(CString::new(family).unwrap().as_ptr(), slant, weight)) }; font_face.ensure_status(); font_face } #[cfg(feature = "glib")] #[doc(hidden)] pub unsafe fn from_raw_full(ptr: *mut ffi::cairo_font_face_t) -> FontFace { from_glib_full(ptr) } #[cfg(not(feature = "glib"))] #[doc(hidden)] pub unsafe fn from_raw_full(ptr: *mut ffi::cairo_font_face_t) -> FontFace { assert!(!ptr.is_null()); FontFace(ptr) } #[cfg(feature = "glib")] #[doc(hidden)] pub unsafe fn from_raw_none(ptr: *mut ffi::cairo_font_face_t) -> FontFace { from_glib_none(ptr) } #[cfg(not(feature = "glib"))] #[doc(hidden)] pub unsafe fn from_raw_none(ptr: *mut ffi::cairo_font_face_t) -> FontFace { assert!(!ptr.is_null()); FontFace(ptr) } #[cfg(feature = "glib")] #[doc(hidden)] pub fn to_raw_none(&self) -> *mut ffi::cairo_font_face_t { self.to_glib_none().0 } #[cfg(not(feature = "glib"))] #[doc(hidden)] pub fn to_raw_none(&self) -> *mut ffi::cairo_font_face_t { self.0 } pub fn toy_get_family(&self) -> Option<String> { unsafe { to_optional_string(ffi::cairo_toy_font_face_get_family(self.to_raw_none())) } } pub fn toy_get_slant(&self) -> FontSlant { unsafe { ffi::cairo_toy_font_face_get_slant(self.to_raw_none()) } } pub fn toy_get_weight(&self) -> FontWeight { unsafe { ffi::cairo_toy_font_face_get_weight(self.to_raw_none()) } } pub fn ensure_status(&self) { let status = unsafe { ffi::cairo_font_face_status(self.to_raw_none()) }; status.ensure_valid() } pub fn get_type(&self) -> FontType { unsafe { ffi::cairo_font_face_get_type(self.to_raw_none()) } } pub fn get_reference_count(&self) -> usize { unsafe { ffi::cairo_font_face_get_reference_count(self.to_raw_none()) as usize } } } unsafe fn to_optional_string(str: *const c_char) -> Option<String> { if str.is_null() { None } else { Some(String::from_utf8_lossy(CStr::from_ptr(str).to_bytes()).into_owned()) } }