Put back code that makes the avatar rounded (#18799)

Danilo Leal created

Follow-up to https://github.com/zed-industries/zed/pull/18768

---

Release Notes:

- N/A

Change summary

crates/ui/src/components/avatar/avatar.rs | 36 +++++++++++++++++++++++++
1 file changed, 36 insertions(+)

Detailed changes

crates/ui/src/components/avatar/avatar.rs 🔗

@@ -2,6 +2,16 @@ use crate::prelude::*;
 
 use gpui::{img, AnyElement, Hsla, ImageSource, Img, IntoElement, Styled};
 
+/// The shape of an [`Avatar`].
+#[derive(Debug, Default, PartialEq, Clone)]
+pub enum AvatarShape {
+    /// The avatar is shown in a circle.
+    #[default]
+    Circle,
+    /// The avatar is shown in a rectangle with rounded corners.
+    RoundedRectangle,
+}
+
 /// An element that renders a user avatar with customizable appearance options.
 ///
 /// # Examples
@@ -10,6 +20,7 @@ use gpui::{img, AnyElement, Hsla, ImageSource, Img, IntoElement, Styled};
 /// use ui::{Avatar, AvatarShape};
 ///
 /// Avatar::new("path/to/image.png")
+///     .shape(AvatarShape::Circle)
 ///     .grayscale(true)
 ///     .border_color(gpui::red());
 /// ```
@@ -32,6 +43,27 @@ impl Avatar {
         }
     }
 
+    /// Sets the shape of the avatar image.
+    ///
+    /// This method allows the shape of the avatar to be specified using an [`AvatarShape`].
+    /// It modifies the corner radius of the image to match the specified shape.
+    ///
+    /// # Examples
+    ///
+    /// ```
+    /// use ui::{Avatar, AvatarShape};
+    ///
+    /// Avatar::new("path/to/image.png").shape(AvatarShape::Circle);
+    /// ```
+    ///
+    pub fn shape(mut self, shape: AvatarShape) -> Self {
+        self.image = match shape {
+            AvatarShape::Circle => self.image.rounded_full(),
+            AvatarShape::RoundedRectangle => self.image.rounded_md(),
+        };
+        self
+    }
+
     /// Applies a grayscale filter to the avatar image.
     ///
     /// # Examples
@@ -71,6 +103,10 @@ impl Avatar {
 
 impl RenderOnce for Avatar {
     fn render(mut self, cx: &mut WindowContext) -> impl IntoElement {
+        if self.image.style().corner_radii.top_left.is_none() {
+            self = self.shape(AvatarShape::Circle);
+        }
+
         let border_width = if self.border_color.is_some() {
             px(2.)
         } else {