+static cairo_surface_t*
+draw_text (cairo_t *cr,
+ PangoFontDescription *desc,
+ const gchar *text,
+ gint width,
+ gint *height)
+{
+ PangoLayout *layout;
+ PangoRectangle extent;
+
+ cairo_surface_t *gdk_surface, *result_surface;
+ cairo_t *msg_cr;
+
+ /* Create a PangoLayout, set the font and text */
+ layout = pango_cairo_create_layout (cr);
+ pango_layout_set_text (layout,
+ text,
+ -1);
+ pango_layout_set_font_description (layout, desc);
+
+ pango_layout_set_wrap (layout, PANGO_WRAP_WORD_CHAR);
+ pango_layout_set_width (layout, PANGO_SCALE*width);
+
+ pango_layout_get_pixel_extents (layout, NULL, &extent);
+ *height = extent.height;
+
+ gdk_surface = cairo_get_target (cr);
+ result_surface = cairo_surface_create_similar
+ (gdk_surface,
+ CAIRO_CONTENT_COLOR_ALPHA,
+ width,
+ extent.height);
+ msg_cr = cairo_create (result_surface);
+
+ pango_cairo_update_layout (msg_cr, layout);
+ /* draw shadow */
+ cairo_move_to (msg_cr, 1, 1);
+ cairo_set_source_rgba (msg_cr, 0.2, 0.2, 0.2, 0.8);
+ pango_cairo_show_layout (msg_cr, layout);
+
+ /* draw fg */
+ cairo_move_to (msg_cr, 0, 0);
+ cairo_set_source_rgba (msg_cr, 1.0, 1.0, 1.0, 1.0);
+ pango_cairo_show_layout (msg_cr, layout);
+
+ cairo_destroy (msg_cr);
+ g_object_unref (layout);
+
+ return result_surface;
+}
+
+static void
+stop_scroll_anim (ELHomeAppletPrivate *priv)
+{
+ if (priv->scroll_anim_id > 0) {
+ g_source_remove (priv->scroll_anim_id);
+ priv->scroll_anim_id = 0;
+ priv->scroll_on_click = FALSE;
+ gtk_widget_hide (priv->cut_message);
+ }
+}
+
+static void
+style_set_cb (GtkWidget *widget,
+ GtkStyle *previous_style,
+ ELHomeApplet *self)
+{
+ ELHomeAppletPrivate *priv = self->priv;
+ GdkColor color;
+ GtkStyle *font_style;
+
+ font_style = gtk_rc_get_style_by_paths (gtk_widget_get_settings (widget),
+ "SystemFont",
+ NULL,
+ G_TYPE_NONE);
+ if (font_style && font_style->font_desc) {
+ if (priv->font_desc)
+ pango_font_description_free (priv->font_desc);
+ priv->font_desc = pango_font_description_copy (font_style->font_desc);
+ }
+
+ if (gtk_style_lookup_color (widget->style,
+ "ActiveTextColor",
+ &color)) {
+ priv->active_color.red = color.red/(float)G_MAXUINT16;
+ priv->active_color.green = color.green/(float)G_MAXUINT16;
+ priv->active_color.blue = color.blue/(float)G_MAXUINT16;
+ }
+}
+
+static void
+notify_on_current_desktop (GObject *object,
+ GParamSpec *unused G_GNUC_UNUSED,
+ ELHomeApplet *self)
+{
+ ELHomeAppletPrivate *priv = self->priv;
+ gboolean on;
+
+ g_object_get (object, "is-on-current-desktop", &on, NULL);
+ if (!on) {
+ stop_scroll_anim (self->priv);
+ priv->scroll_on_click = priv->scroll_offset;
+ priv->scroll_offset = 0;
+ if (priv->scroll_on_click)
+ gtk_widget_show (priv->cut_message);
+ gtk_widget_queue_draw (GTK_WIDGET (self));
+ }
+}
+