Skip to content

Commit f6c634e

Browse files
committed
gpui: Add support for text in svgs
1 parent 22d9b5d commit f6c634e

File tree

3 files changed

+113
-28
lines changed

3 files changed

+113
-28
lines changed

Cargo.lock

Lines changed: 98 additions & 24 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

crates/gpui/Cargo.toml

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -98,8 +98,8 @@ profiling.workspace = true
9898
rand = { optional = true, workspace = true }
9999
raw-window-handle = "0.6"
100100
refineable.workspace = true
101-
resvg = { version = "0.44.0", default-features = false }
102-
usvg = { version = "0.44.0", default-features = false }
101+
resvg = { version = "0.45.0", default-features = false, features = ["text"] }
102+
usvg = { version = "0.45.0", default-features = false }
103103
schemars.workspace = true
104104
seahash = "4.1"
105105
semantic_version.workspace = true
@@ -117,6 +117,7 @@ util.workspace = true
117117
uuid.workspace = true
118118
waker-fn = "1.2.0"
119119
lyon = "1.0"
120+
fontdb = "0.23.0"
120121

121122
[target.'cfg(target_os = "macos")'.dependencies]
122123
block = "0.1"

crates/gpui/src/svg_renderer.rs

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ pub(crate) struct RenderSvgParams {
1515
#[derive(Clone)]
1616
pub struct SvgRenderer {
1717
asset_source: Arc<dyn AssetSource>,
18+
usvg_options: Arc<usvg::Options<'static>>,
1819
}
1920

2021
pub enum SvgSize {
@@ -24,7 +25,16 @@ pub enum SvgSize {
2425

2526
impl SvgRenderer {
2627
pub fn new(asset_source: Arc<dyn AssetSource>) -> Self {
27-
Self { asset_source }
28+
let mut font_db = fontdb::Database::new();
29+
font_db.load_system_fonts();
30+
let options = usvg::Options {
31+
fontdb: Arc::new(font_db),
32+
..Default::default()
33+
};
34+
Self {
35+
asset_source,
36+
usvg_options: Arc::new(options),
37+
}
2838
}
2939

3040
pub(crate) fn render(&self, params: &RenderSvgParams) -> Result<Option<Vec<u8>>> {
@@ -49,7 +59,7 @@ impl SvgRenderer {
4959
}
5060

5161
pub fn render_pixmap(&self, bytes: &[u8], size: SvgSize) -> Result<Pixmap, usvg::Error> {
52-
let tree = usvg::Tree::from_data(bytes, &usvg::Options::default())?;
62+
let tree = usvg::Tree::from_data(bytes, &self.usvg_options)?;
5363

5464
let size = match size {
5565
SvgSize::Size(size) => size,

0 commit comments

Comments
 (0)