Stop scrolling when whole message was displayed
authorArtem Garmash <artemgarmash@gmail.com>
Tue, 3 Nov 2009 15:23:08 +0000 (17:23 +0200)
committerArtem Garmash <artem.garmash@nokia.com>
Sun, 27 Jun 2010 19:13:40 +0000 (22:13 +0300)
src/el-home-applet.c

index 78e8491..c585390 100644 (file)
@@ -146,6 +146,7 @@ draw_text (cairo_t *cr,
         PangoLayout *layout;
         PangoFontDescription *desc;
         gboolean result;
+        PangoRectangle extent;
 
         cairo_save (cr);
         cairo_rectangle (cr,
@@ -177,7 +178,11 @@ draw_text (cairo_t *cr,
         cairo_set_source_rgba (cr, 1.0, 1.0, 1.0, 1.0);
         pango_cairo_show_layout (cr, layout);
 
-        result = !offset && pango_layout_is_ellipsized (layout);
+        pango_layout_get_pixel_extents (layout, NULL, &extent);
+        if (offset)
+                result = height < (extent.height - offset);
+        else
+                result = pango_layout_is_ellipsized (layout);
 
         g_object_unref (layout);
         cairo_restore (cr);
@@ -185,6 +190,17 @@ draw_text (cairo_t *cr,
         return result;
 }
 
+static void
+stop_scroll_anim (ELHomeAppletPrivate *priv)
+{
+        priv->scroll_on_click = FALSE;
+        priv->scroll_offset = 0;
+        if (priv->scroll_anim_id > 0) {
+                g_source_remove (priv->scroll_anim_id);
+                priv->scroll_anim_id = 0;
+        }
+}
+
 static gboolean
 expose_event (GtkWidget *self, GdkEventExpose *event)
 {
@@ -193,6 +209,9 @@ expose_event (GtkWidget *self, GdkEventExpose *event)
         cairo_t *cr;
         GdkColor color;
         float red, green, blue;
+        int message_height;
+
+        message_height = C_HEIGHT - priv->received->allocation.height - HEADER_HEIGHT;
 
         /* find theme active color */
         gtk_style_lookup_color (self->style, "ActiveTextColor", &color);
@@ -285,7 +304,7 @@ expose_event (GtkWidget *self, GdkEventExpose *event)
         ellipsized = draw_text (cr, priv->message,
                                 2*C_X, HEADER_HEIGHT,
                                 MESSAGE_WIDTH,
-                                MESSAGE_HEIGHT - 2*C_Y,
+                                message_height,
                                 priv->scroll_offset);
         if (!priv->scroll_offset && !priv->active)
                 priv->scroll_on_click = ellipsized;
@@ -293,18 +312,10 @@ expose_event (GtkWidget *self, GdkEventExpose *event)
         cairo_pattern_destroy (grad);
         cairo_destroy (cr);
 
-        return GTK_WIDGET_CLASS (el_home_applet_parent_class)->expose_event (self, event);
-}
+        if (!priv->scroll_on_click && !ellipsized && priv->scroll_offset)
+                stop_scroll_anim (priv);
 
-static void
-stop_scroll_anim (ELHomeAppletPrivate *priv)
-{
-        priv->scroll_on_click = FALSE;
-        priv->scroll_offset = 0;
-        if (priv->scroll_anim_id > 0) {
-                g_source_remove (priv->scroll_anim_id);
-                priv->scroll_anim_id = 0;
-        }
+        return GTK_WIDGET_CLASS (el_home_applet_parent_class)->expose_event (self, event);
 }
 
 static void