aboutsummaryrefslogtreecommitdiffstats
path: root/libempathy-gtk/gossip-chat-view.c
diff options
context:
space:
mode:
Diffstat (limited to 'libempathy-gtk/gossip-chat-view.c')
-rw-r--r--libempathy-gtk/gossip-chat-view.c53
1 files changed, 51 insertions, 2 deletions
diff --git a/libempathy-gtk/gossip-chat-view.c b/libempathy-gtk/gossip-chat-view.c
index cc6482ee8..046a5507c 100644
--- a/libempathy-gtk/gossip-chat-view.c
+++ b/libempathy-gtk/gossip-chat-view.c
@@ -246,6 +246,10 @@ static void chat_view_append_irc_message (GossipChatView *
GossipMessage *msg);
static void chat_view_append_fancy_message (GossipChatView *view,
GossipMessage *msg);
+static GdkPixbuf *chat_view_pad_to_size (GdkPixbuf *pixbuf,
+ gint width,
+ gint height,
+ gint extra_padding_right);
G_DEFINE_TYPE (GossipChatView, gossip_chat_view, GTK_TYPE_TEXT_VIEW);
@@ -1055,7 +1059,8 @@ chat_view_maybe_append_fancy_header (GossipChatView *view,
const gchar *line_top_tag;
const gchar *line_bottom_tag;
gboolean from_self;
- GdkPixbuf *avatar;
+ GdkPixbuf *pixbuf = NULL;
+ GdkPixbuf *avatar = NULL;
priv = GET_PRIV (view);
@@ -1111,7 +1116,12 @@ chat_view_maybe_append_fancy_header (GossipChatView *view,
line_top_tag,
NULL);
- avatar = gossip_pixbuf_avatar_from_contact_scaled (sender, 32, 32);
+ /* FIXME: we should have a cash of avatar pixbufs */
+ pixbuf = gossip_pixbuf_avatar_from_contact_scaled (sender, 32, 32);
+ if (pixbuf) {
+ avatar = chat_view_pad_to_size (pixbuf, 32, 32, 6);
+ g_object_unref (pixbuf);
+ }
if (avatar) {
GtkTextIter start;
@@ -1369,6 +1379,45 @@ chat_view_theme_changed_cb (GossipThemeManager *manager,
gossip_theme_manager_update_show_avatars (manager, view, show_avatars);
}
+/* Pads a pixbuf to the specified size, by centering it in a larger transparent
+ * pixbuf. Returns a new ref.
+ */
+static GdkPixbuf *
+chat_view_pad_to_size (GdkPixbuf *pixbuf,
+ gint width,
+ gint height,
+ gint extra_padding_right)
+{
+ gint src_width, src_height;
+ GdkPixbuf *padded;
+ gint x_offset, y_offset;
+
+ src_width = gdk_pixbuf_get_width (pixbuf);
+ src_height = gdk_pixbuf_get_height (pixbuf);
+
+ x_offset = (width - src_width) / 2;
+ y_offset = (height - src_height) / 2;
+
+ padded = gdk_pixbuf_new (gdk_pixbuf_get_colorspace (pixbuf),
+ TRUE, /* alpha */
+ gdk_pixbuf_get_bits_per_sample (pixbuf),
+ width + extra_padding_right,
+ height);
+
+ gdk_pixbuf_fill (padded, 0);
+
+ gdk_pixbuf_copy_area (pixbuf,
+ 0, /* source coords */
+ 0,
+ src_width,
+ src_height,
+ padded,
+ x_offset, /* dest coords */
+ y_offset);
+
+ return padded;
+}
+
GossipChatView *
gossip_chat_view_new (void)
{