Draw avatar manually with cairo
authorArtem Garmash <artemgarmash@gmail.com>
Wed, 27 Jan 2010 15:56:35 +0000 (17:56 +0200)
committerArtem Garmash <artem.garmash@nokia.com>
Sun, 27 Jun 2010 19:13:45 +0000 (22:13 +0300)
src/el-home-applet.c

index 761072e..a2f2923 100644 (file)
 #define MESSAGE_WIDTH (C_WIDTH - 2*HILDON_MARGIN_DEFAULT)
 
 #define SERVICE_ICON_SIZE 64
+#define AVATAR_SIZE HILDON_ICON_PIXEL_SIZE_THUMB
+
+#define AVATAR_X (C_WIDTH - AVATAR_SIZE - HILDON_MARGIN_DEFAULT)
+#define AVATAR_Y 3*HILDON_MARGIN_HALF
 
 #define BOX_RADIOUS 20
 
@@ -473,6 +477,29 @@ expose_event (GtkWidget *self, GdkEventExpose *event)
 
         cairo_pattern_destroy (grad);
 
+        /* draw avatar */
+        if (priv->avatar_pixbuf) {
+                rounded_rectangle (cr,
+                                   AVATAR_X, -AVATAR_Y,
+                                   AVATAR_SIZE, AVATAR_SIZE,
+                                   BOX_RADIOUS,
+                                   ROUND_CORNER_ALL);
+                cairo_close_path (cr);
+
+                gdk_cairo_set_source_pixbuf (cr,
+                                             priv->avatar_pixbuf,
+                                             AVATAR_X,
+                                             -AVATAR_Y);
+                cairo_fill_preserve (cr);
+
+                cairo_set_source_rgba (cr,
+                                       priv->active_color.red,
+                                       priv->active_color.green,
+                                       priv->active_color.blue,
+                                       1.0f);
+                cairo_stroke (cr);
+        }
+
         if (priv->message) {
                 if (priv->service_pixbuf) {
                         cairo_set_operator (cr, CAIRO_OPERATOR_OVER);
@@ -558,6 +585,10 @@ clean_state (ELHomeApplet *self)
 {
         ELHomeAppletPrivate *priv = self->priv;
 
+        gtk_widget_set_size_request (priv->sender,
+                                     C_WIDTH,
+                                     HILDON_ICON_PIXEL_SIZE_THUMB);
+
         if (priv->service_pixbuf) {
                 g_object_unref (priv->service_pixbuf);
                 priv->service_pixbuf = NULL;
@@ -644,7 +675,7 @@ aggregator_ready_cb (OssoABookWaitable *waitable,
         ELHomeApplet *self = EL_HOME_APPLET(userdata);
         ELHomeAppletPrivate *priv = self->priv;
         GList *contacts = NULL;
-
+                g_warning (G_STRFUNC);
         priv->aggregator_ready_closure = NULL;
 
         if (error) {
@@ -690,13 +721,21 @@ aggregator_ready_cb (OssoABookWaitable *waitable,
                          TRUE);
                          /* -1, */
                          /* priv->border_color); */
+                g_warning ("HAVE avatar");
+                if (priv->avatar_pixbuf) {
+                        gtk_widget_set_size_request (priv->sender,
+                                                     C_WIDTH - AVATAR_SIZE - HILDON_MARGIN_DEFAULT,
+                                                     HILDON_ICON_PIXEL_SIZE_THUMB);
 
-                /* if (priv->avatar_image) { */
-                /*         gtk_image_set_from_pixbuf (GTK_IMAGE (priv->avatar), */
-                /*                                    priv->avatar_image); */
-                /*         gtk_widget_show (priv->avatar); */
+                }
+#if 0
+                if (priv->avatar_pixbuf) {
+                        gtk_image_set_from_pixbuf (GTK_IMAGE (priv->avatar),
+                                                   priv->avatar_pixbuf);
+                        gtk_widget_show (priv->avatar);
                         /* g_object_unref (avatar_image); */
-                /* } */
+                }
+#endif
                 gtk_widget_queue_draw (GTK_WIDGET (self));
         }
 }
@@ -708,8 +747,6 @@ resolve_contact (ELHomeApplet *self)
         EBookQuery *query = NULL;
         GError *error = NULL;
 
-
-
         if (priv->local_id && priv->remote_id) {
                 const gchar *vcard = osso_abook_account_manager_get_vcard_field
                         (NULL, priv->local_id);
@@ -720,7 +757,7 @@ resolve_contact (ELHomeApplet *self)
                 else
                         query = e_book_query_any_field_contains (priv->remote_id);
         }
-
+        g_warning ("%s query %p", G_STRFUNC, query);
         if (query) {
                 priv->aggregator = osso_abook_aggregator_new_with_query (NULL,
                                                                          query,
@@ -736,6 +773,7 @@ resolve_contact (ELHomeApplet *self)
         }
 
         if (priv->aggregator) {
+                g_warning ("%s start aggr", G_STRFUNC);
                 priv->aggregator_ready_closure = osso_abook_waitable_call_when_ready
                         (OSSO_ABOOK_WAITABLE (priv->aggregator),
                          aggregator_ready_cb,
@@ -1107,6 +1145,8 @@ read_new_event (ELHomeApplet *self)
 {
         ELHomeAppletPrivate *priv = self->priv;
 
+        g_warning ("read_new_event");
+
         read_event (self);
         priv->unread_count = query_unread_events (priv->eventlogger);
         update_unread_label (self);
@@ -1120,7 +1160,7 @@ static void
 add_new_idle (ELHomeApplet *self)
 {
         ELHomeAppletPrivate *priv = self->priv;
-
+        g_warning ("add_new_idle");
         if (priv->idle_id)
                 g_source_remove (priv->idle_id);
         priv->idle_id = g_idle_add ((GSourceFunc)read_new_event,
@@ -1137,15 +1177,21 @@ new_event_cb (RTComEl      *backend,
               const gchar  *service,
               ELHomeApplet *self)
 {
+        g_warning ("%s %s %s %s", local_uid, remote_uid, remote_ebook_uid, service);
+#if 0
         const gchar** conv_service = conv_services;
-
+                g_warning ("%s", service);
         do {
+                g_warning ("%s", *conv_service);
                 if (!g_strcmp0 (*conv_service, service)) {
                         add_new_idle (self);
                         return;
                 }
         }
-        while(++conv_service);
+        while(*++conv_service);
+#else
+        add_new_idle (self);
+#endif
 }
 
 static gboolean
@@ -1324,17 +1370,6 @@ leave_notify_event_cb (GtkWidget        *widget,
 }
 
 static void
-abook_acount_manager_ready (OssoABookAccountManager *manager,
-                            const GError            *error,
-                            gpointer                 user_data)
-{
-        ELHomeApplet *self = EL_HOME_APPLET (user_data);
-
-        /* ignore error, continue in any case */
-        read_new_event (self);
-}
-
-static void
 el_home_applet_init (ELHomeApplet *self)
 {
         ELHomeAppletPrivate *priv;
@@ -1375,7 +1410,7 @@ el_home_applet_init (ELHomeApplet *self)
         gtk_widget_set_name (priv->sender, "hildon-shadow-label");
         hildon_helper_set_logical_font (priv->sender, "SystemFont");
         gtk_widget_set_size_request (priv->sender,
-                                     -1,
+                                     C_WIDTH,
                                      HILDON_ICON_PIXEL_SIZE_THUMB);
 
         priv->message = g_strdup ("One two three four five six seven eight nine ten");
@@ -1403,8 +1438,8 @@ el_home_applet_init (ELHomeApplet *self)
 
         hbox = gtk_hbox_new (FALSE, 0);
         /* gtk_box_pack_start (GTK_BOX (hbox), priv->icon, FALSE, FALSE, 0); */
-        gtk_box_pack_start (GTK_BOX (hbox), priv->sender, TRUE, TRUE, 0);
-        gtk_box_pack_start (GTK_BOX (hbox), priv->avatar, FALSE, FALSE, 0);
+        gtk_box_pack_start (GTK_BOX (hbox), priv->sender, FALSE, FALSE, 0);
+        /* gtk_box_pack_start (GTK_BOX (hbox), priv->avatar, FALSE, FALSE, 0); */
 
         footer = gtk_hbox_new (FALSE, HILDON_MARGIN_DEFAULT);
         gtk_box_pack_start (GTK_BOX (footer), priv->unread, FALSE, FALSE, 0);
@@ -1467,10 +1502,7 @@ el_home_applet_init (ELHomeApplet *self)
 
         osso_abook_init_with_name (PACKAGE, NULL);
 
-        osso_abook_account_manager_call_when_ready  (NULL,
-                                                     abook_acount_manager_ready,
-                                                     self,
-                                                     NULL);
+        read_new_event (self);
 #endif
 }