gnome: add different avatar for conferences

Create avatar with two symbolic people to distinguish a conference.

Issue: #79076
Change-Id: Ie6b4b33af4d8fae2a188c23cb7cb5877bb64f199
diff --git a/src/utils/drawing.c b/src/utils/drawing.c
index 50e255b..454fb9d 100644
--- a/src/utils/drawing.c
+++ b/src/utils/drawing.c
@@ -73,6 +73,43 @@
 }
 
 GdkPixbuf *
+ring_draw_conference_avatar(int size) {
+    cairo_surface_t *surface;
+    cairo_t *cr;
+
+    surface = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, size, size);
+    cr = cairo_create(surface);
+
+    cairo_pattern_t *linpat = cairo_pattern_create_linear(0, 0, 0, size);
+    cairo_pattern_add_color_stop_rgb(linpat, 0, 0.937, 0.937, 0.937);
+    cairo_pattern_add_color_stop_rgb(linpat, 1, 0.969, 0.969, 0.969);
+
+    cairo_set_source(cr, linpat);
+    cairo_paint(cr);
+
+    int avatar_size = size * 0.5;
+    GtkIconInfo *icon_info = gtk_icon_theme_lookup_icon(gtk_icon_theme_get_default(), "system-users-symbolic",
+                                                        avatar_size, GTK_ICON_LOOKUP_GENERIC_FALLBACK);
+    GdkPixbuf *pixbuf_icon = gtk_icon_info_load_icon(icon_info, NULL);
+    g_object_unref(icon_info);
+
+    if (pixbuf_icon != NULL) {
+        gdk_cairo_set_source_pixbuf(cr, pixbuf_icon, (size - avatar_size) / 2, (size - avatar_size) / 2);
+        g_object_unref(pixbuf_icon);
+        cairo_rectangle(cr, (size - avatar_size) / 2, (size - avatar_size) / 2, avatar_size, avatar_size);
+        cairo_fill(cr);
+    }
+
+    GdkPixbuf *pixbuf = gdk_pixbuf_get_from_surface(surface, 0, 0, size, size);
+
+    /* free resources */
+    cairo_destroy(cr);
+    cairo_surface_destroy(surface);
+
+    return pixbuf;
+}
+
+GdkPixbuf *
 ring_frame_avatar(GdkPixbuf *avatar) {
     int extra_space = 10;
     int offset = extra_space/2;
diff --git a/src/utils/drawing.h b/src/utils/drawing.h
index dd8e54b..fd0881d 100644
--- a/src/utils/drawing.h
+++ b/src/utils/drawing.h
@@ -37,8 +37,10 @@
 
 GdkPixbuf *ring_draw_fallback_avatar(int size);
 
+GdkPixbuf *ring_draw_conference_avatar(int size);
+
 GdkPixbuf *ring_frame_avatar(GdkPixbuf *avatar);
 
 G_END_DECLS
 
-#endif /* _DRAWING */
\ No newline at end of file
+#endif /* _DRAWING */