diff --git a/crates/gpui/examples/image/color.svg b/crates/gpui/examples/image/color.svg new file mode 100644 index 0000000000000000000000000000000000000000..84e9809d09492a7280e757554bc3c2ccb1e3f8b3 --- /dev/null +++ b/crates/gpui/examples/image/color.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/crates/gpui/examples/image/image.rs b/crates/gpui/examples/image/image.rs index cc8e1a686c8a06285145317cd37e2d210f0dbe88..ac7af186d30ba0c31875da80057bbfeb524ee017 100644 --- a/crates/gpui/examples/image/image.rs +++ b/crates/gpui/examples/image/image.rs @@ -131,7 +131,7 @@ fn main() { PathBuf::from_str("crates/gpui/examples/image/app-icon.png").unwrap(), ), remote_resource: "https://picsum.photos/512/512".into(), - asset_resource: "image/app-icon.png".into(), + asset_resource: "image/color.svg".into(), }) }) .unwrap(); diff --git a/crates/gpui/src/elements/img.rs b/crates/gpui/src/elements/img.rs index 07f5acc95b1bc98a377db861dac0c9a3de2c512b..f1e8bb68e3237ee3b57b08303e1aa2ba89a5e1ae 100644 --- a/crates/gpui/src/elements/img.rs +++ b/crates/gpui/src/elements/img.rs @@ -408,9 +408,14 @@ impl Asset for ImageAsset { // TODO: Can we make svgs always rescale? svg_renderer.render_pixmap(&bytes, SvgSize::ScaleFactor(1.0))?; - let buffer = + let mut buffer = ImageBuffer::from_raw(pixmap.width(), pixmap.height(), pixmap.take()).unwrap(); + // Convert from RGBA to BGRA. + for pixel in buffer.chunks_exact_mut(4) { + pixel.swap(0, 2); + } + RenderImage::new(SmallVec::from_elem(Frame::new(buffer), 1)) };