diff --git a/crates/gpui/src/elements/img.rs b/crates/gpui/src/elements/img.rs index 961429b826..2ce63d7e30 100644 --- a/crates/gpui/src/elements/img.rs +++ b/crates/gpui/src/elements/img.rs @@ -3,6 +3,7 @@ use crate::{ DefiniteLength, Element, ElementId, GlobalElementId, Hitbox, Image, InteractiveElement, Interactivity, IntoElement, LayoutId, Length, ObjectFit, Pixels, RenderImage, Resource, SharedString, SharedUri, StyleRefinement, Styled, SvgSize, Task, Window, + SMOOTH_SVG_SCALE_FACTOR, }; use anyhow::{anyhow, Result}; @@ -610,7 +611,7 @@ impl Asset for ImageAssetLoader { } else { let pixmap = // TODO: Can we make svgs always rescale? - svg_renderer.render_pixmap(&bytes, SvgSize::ScaleFactor(1.0))?; + svg_renderer.render_pixmap(&bytes, SvgSize::ScaleFactor(SMOOTH_SVG_SCALE_FACTOR))?; let mut buffer = ImageBuffer::from_raw(pixmap.width(), pixmap.height(), pixmap.take()).unwrap(); diff --git a/crates/gpui/src/svg_renderer.rs b/crates/gpui/src/svg_renderer.rs index f99880ec5e..306f8ed651 100644 --- a/crates/gpui/src/svg_renderer.rs +++ b/crates/gpui/src/svg_renderer.rs @@ -3,6 +3,9 @@ use anyhow::anyhow; use resvg::tiny_skia::Pixmap; use std::{hash::Hash, sync::Arc}; +/// When rendering SVGs, we render them at twice the size to get a higher-quality result. +pub const SMOOTH_SVG_SCALE_FACTOR: f32 = 2.; + #[derive(Clone, PartialEq, Hash, Eq)] pub(crate) struct RenderSvgParams { pub(crate) path: SharedString, diff --git a/crates/gpui/src/window.rs b/crates/gpui/src/window.rs index 1b5b6bc717..e0e473974d 100644 --- a/crates/gpui/src/window.rs +++ b/crates/gpui/src/window.rs @@ -13,7 +13,7 @@ use crate::{ Subscription, TaffyLayoutEngine, Task, TextStyle, TextStyleRefinement, TransformationMatrix, Underline, UnderlineStyle, WindowAppearance, WindowBackgroundAppearance, WindowBounds, WindowControls, WindowDecorations, WindowOptions, WindowParams, WindowTextSystem, - SUBPIXEL_VARIANTS, + SMOOTH_SVG_SCALE_FACTOR, SUBPIXEL_VARIANTS, }; use anyhow::{anyhow, Context as _, Result}; use collections::{FxHashMap, FxHashSet}; @@ -2553,12 +2553,11 @@ impl Window { let element_opacity = self.element_opacity(); let scale_factor = self.scale_factor(); let bounds = bounds.scale(scale_factor); - // Render the SVG at twice the size to get a higher quality result. let params = RenderSvgParams { path, - size: bounds - .size - .map(|pixels| DevicePixels::from((pixels.0 * 2.).ceil() as i32)), + size: bounds.size.map(|pixels| { + DevicePixels::from((pixels.0 * SMOOTH_SVG_SCALE_FACTOR).ceil() as i32) + }), }; let Some(tile) =