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 as_ipc_shared_memory(&self) -> Arc<GenericSharedMemory> {
47 self.0.clone()
48 }
49}
50
51impl AsRef<[u8]> for FontData {
52 fn as_ref(&self) -> &[u8] {
53 &self.0
54 }
55}
56
57#[derive(Deserialize, Clone, Serialize, MallocSizeOf)]
62pub struct FontDataAndIndex {
63 pub data: FontData,
65 pub index: u32,
67}
68
69#[derive(Copy, Clone, PartialEq)]
70pub enum FontDataError {
71 FailedToLoad,
72}
73
74#[derive(Clone, Default)]
76pub struct WebFontSetDifference {
77 pub added_font_faces: Vec<ServoArc<FontFaceRuleInfo>>,
79 pub removed_font_faces: Vec<ServoArc<FontFaceRuleInfo>>,
81 pub cascade_index_of_any_rule_changed: bool,
85}
86
87impl WebFontSetDifference {
88 pub fn is_empty(&self) -> bool {
90 self.added_font_faces.is_empty() && self.removed_font_faces.is_empty()
91 }
92}
93
94#[derive(MallocSizeOf)]
95pub struct FontFaceRuleInfo {
96 pub cascade_index: AtomicUsize,
99 pub descriptors: Descriptors,
101 #[conditional_malloc_size_of]
106 pub rule: ServoArc<LockedFontFaceRule>,
107}