From: Artem Garmash Date: Sat, 7 Nov 2009 19:59:21 +0000 (+0200) Subject: Lookup logical colors and fonts from style-set signal X-Git-Url: https://vcs.maemo.org/git/?p=conv-inbox;a=commitdiff_plain;h=b8a4765da62f286ec592adf09e7d7671a865c4a2 Lookup logical colors and fonts from style-set signal --- diff --git a/src/el-home-applet.c b/src/el-home-applet.c index d478567..7f2e9dc 100644 --- a/src/el-home-applet.c +++ b/src/el-home-applet.c @@ -63,7 +63,12 @@ struct _ELHomeAppletPrivate guint unread_count; - const gchar *current_font; + struct { + float red; + float green; + float blue; + } active_color; + PangoFontDescription *font_desc; guint idle_id; @@ -134,6 +139,7 @@ rounded_rectangle (cairo_t *cr, static gboolean draw_text (cairo_t *cr, + PangoFontDescription *desc, const gchar *text, double x, double y, @@ -142,7 +148,6 @@ draw_text (cairo_t *cr, int offset) { PangoLayout *layout; - PangoFontDescription *desc; gboolean result; PangoRectangle extent; @@ -156,9 +161,7 @@ draw_text (cairo_t *cr, pango_layout_set_text (layout, text, -1); - desc = pango_font_description_from_string ("Sans 17"); pango_layout_set_font_description (layout, desc); - pango_font_description_free (desc); pango_layout_set_wrap (layout, PANGO_WRAP_WORD_CHAR); if (!offset) @@ -198,24 +201,43 @@ stop_scroll_anim (ELHomeAppletPrivate *priv) } } +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 gboolean expose_event (GtkWidget *self, GdkEventExpose *event) { ELHomeAppletPrivate *priv = EL_HOME_APPLET(self)->priv; - 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); - red = color.red/(float)G_MAXUINT16; - green = color.green/(float)G_MAXUINT16; - blue = color.blue/(float)G_MAXUINT16; - cr = gdk_cairo_create (self->window); gdk_cairo_region (cr, event->region); cairo_clip (cr); @@ -252,7 +274,11 @@ expose_event (GtkWidget *self, GdkEventExpose *event) cairo_set_source_rgba (cr, 0.2f, 0.2f, 0.2f, 0.8f); cairo_fill_preserve (cr); - cairo_set_source_rgba (cr, red, green, blue, 1.0f); + cairo_set_source_rgba (cr, + priv->active_color.red, + priv->active_color.green, + priv->active_color.blue, + 1.0f); cairo_stroke (cr); /* draw body */ @@ -271,10 +297,18 @@ expose_event (GtkWidget *self, GdkEventExpose *event) 0, C_HEIGHT); if (priv->active){ - cairo_pattern_add_color_stop_rgba (grad, 0.5f, - red, green, blue, 0.8f); - cairo_pattern_add_color_stop_rgba (grad, 1.0f, - red/2, green/2, blue/2, 0.8f); + cairo_pattern_add_color_stop_rgba (grad, + 0.5f, + priv->active_color.red, + priv->active_color.green, + priv->active_color.blue, + 0.8f); + cairo_pattern_add_color_stop_rgba (grad, + 1.0f, + priv->active_color.red/2, + priv->active_color.green/2, + priv->active_color.blue/2, + 0.8f); } else { cairo_pattern_add_color_stop_rgba (grad, 0.5f, @@ -298,7 +332,9 @@ expose_event (GtkWidget *self, GdkEventExpose *event) /* draw message */ gboolean ellipsized; - ellipsized = draw_text (cr, priv->message, + ellipsized = draw_text (cr, + priv->font_desc, + priv->message, 2*C_X, HEADER_HEIGHT, MESSAGE_WIDTH, message_height, @@ -334,6 +370,10 @@ dispose (GObject *self) g_free (priv->message); priv->message = NULL; } + if (priv->font_desc){ + pango_font_description_free (priv->font_desc); + priv->font_desc = NULL; + } G_OBJECT_CLASS (el_home_applet_parent_class)->dispose (self); } @@ -429,6 +469,7 @@ show_event (ELHomeApplet *self, RTComElIter *it) g_free (remote); + stop_scroll_anim (self->priv); priv->scroll_offset = 0; gtk_widget_queue_draw (GTK_WIDGET (self)); } @@ -737,6 +778,8 @@ el_home_applet_init (ELHomeApplet *self) g_signal_connect (event_box, "leave-notify-event", G_CALLBACK (leave_notify_event_cb), self); + g_signal_connect (event_box, "style-set", G_CALLBACK (style_set_cb), self); + gtk_widget_show_all (GTK_WIDGET (event_box)); #ifndef DEBUG_LAYOUT