1#![deny(unsafe_code)]
6
7mod font_descriptor;
8mod font_identifier;
9mod font_template;
10mod system_font_service_proxy;
11
12use std::sync::Arc;
13use std::sync::atomic::AtomicUsize;
14
15pub use font_descriptor::*;
16pub use font_identifier::*;
17pub use font_template::*;
18use malloc_size_of_derive::MallocSizeOf;
19use serde::{Deserialize, Serialize};
20use servo_arc::Arc as ServoArc;
21use servo_base::generic_channel::GenericSharedMemory;
22use style::font_face::Descriptors;
23use style::stylesheets::LockedFontFaceRule;
24pub use system_font_service_proxy::*;
25
26#[derive(Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)]
27pub enum WebFontLoadEvent {
28 LoadedSuccessfully,
29 UnblockedFontReadyPromise,
30}
31
32pub type StylesheetWebFontLoadFinishedCallback =
33 Arc<dyn Fn(WebFontLoadEvent) + Send + Sync + 'static>;
34
35#[derive(Clone, Deserialize, MallocSizeOf, Serialize)]
39pub struct FontData(#[conditional_malloc_size_of] pub(crate) Arc<GenericSharedMemory>);
40
41impl FontData {
42 pub fn from_bytes(bytes: &[u8]) -> Self {
43 Self(Arc::new(GenericSharedMemory::from_bytes(bytes)))
44 }
45
46 pub fn from_vec(bytes: Vec<u8>) -> Self {
48 Self(Arc::new(GenericSharedMemory::from_vec(bytes)))
49 }
50
51 pub fn as_ipc_shared_memory(&self) -> Arc<GenericSharedMemory> {
52 self.0.clone()
53 }
54}
55
56impl AsRef<[u8]> for FontData {
57 fn as_ref(&self) -> &[u8] {
58 &self.0
59 }
60}
61
62#[derive(Deserialize, Clone, Serialize, MallocSizeOf)]
67pub struct FontDataAndIndex {
68 pub data: FontData,
70 pub index: u32,
72}
73
74#[derive(Copy, Clone, PartialEq)]
75pub enum FontDataError {
76 FailedToLoad,
77}
78
79#[derive(Clone, Default)]
81pub struct WebFontSetDifference {
82 pub added_font_faces: Vec<ServoArc<FontFaceRuleInfo>>,
84 pub removed_font_faces: Vec<ServoArc<FontFaceRuleInfo>>,
86 pub cascade_index_of_any_rule_changed: bool,
90}
91
92impl WebFontSetDifference {
93 pub fn is_empty(&self) -> bool {
95 self.added_font_faces.is_empty() && self.removed_font_faces.is_empty()
96 }
97}
98
99#[derive(MallocSizeOf)]
100pub struct FontFaceRuleInfo {
101 pub cascade_index: AtomicUsize,
104 pub descriptors: Descriptors,
106 #[conditional_malloc_size_of]
111 pub rule: ServoArc<LockedFontFaceRule>,
112}