diff -ru xfce4-cpufreq-plugin-1.1.2/panel-plugin/xfce4-cpufreq-plugin.c xfce4-cpufreq-plugin-1.1.2.new/panel-plugin/xfce4-cpufreq-plugin.c --- xfce4-cpufreq-plugin-1.1.2/panel-plugin/xfce4-cpufreq-plugin.c 2014-12-22 18:50:31.000000000 +0100 +++ xfce4-cpufreq-plugin-1.1.2.new/panel-plugin/xfce4-cpufreq-plugin.c 2015-08-08 15:14:29.980868947 +0200 @@ -26,6 +26,7 @@ #include #endif +#include #include #include #ifndef _ @@ -42,6 +43,56 @@ #include "xfce4-cpufreq-utils.h" +void +cpufreq_update_icon_color (CpuInfo* cpu) +{ + GdkPixbuf* pixbuf; + int width, height, rowstride, n_channels; + int x, y; + guchar *pixels, *p; + float value; + float delta; + guchar red; + + int help; + if(!cpu->icon) + return; + + pixbuf = gtk_image_get_pixbuf(GTK_IMAGE(cpu->icon)); + if (!pixbuf) { + return; + } + + n_channels = gdk_pixbuf_get_n_channels (pixbuf); + + g_assert (gdk_pixbuf_get_colorspace (pixbuf) == GDK_COLORSPACE_RGB); + + width = gdk_pixbuf_get_width (pixbuf); + height = gdk_pixbuf_get_height (pixbuf); + + rowstride = gdk_pixbuf_get_rowstride (pixbuf); + pixels = gdk_pixbuf_get_pixels (pixbuf); + + delta = cpu->max_freq - cpu->min_freq; + if (delta == 0) + delta = 1; + + value = (255.0 * (cpu->cur_freq - cpu->min_freq) ) / delta; + red = (value > 255.0) ? 255 : (guchar)value; + + + for (y = 0; y < height; ++y) { + p = pixels + y * rowstride; + for (x = 0; x < height; ++x, p+= n_channels) { + if (abs(p[1]- p[2]) < 5) { + p[0] = red; + } + } + } + gtk_widget_queue_draw_area(GTK_WIDGET(cpu->icon), 0, 0, width, height); +} + + CpuInfo * cpufreq_cpus_calc_min (void) { @@ -309,6 +360,7 @@ gboolean ret; cpu = cpufreq_current_cpu (); + cpufreq_update_icon_color (cpu); if (reset_label_size) { cpuFreq->label_max_width = -1; @@ -403,7 +455,7 @@ } if (cpufreq->options->show_icon) { - GdkPixbuf *buf; + GdkPixbuf *buf, *buf2; gint icon_size; icon_size = cpuFreq->panel_size / cpuFreq->panel_rows; @@ -416,7 +468,9 @@ "xfce4-cpufreq-plugin", icon_size, 0, NULL); if (buf) { - cpufreq->icon = gtk_image_new_from_pixbuf (buf); + buf2 = gdk_pixbuf_copy(buf); + cpufreq->icon = gtk_image_new_from_pixbuf (buf2); + g_object_unref (G_OBJECT (buf2)); g_object_unref (G_OBJECT (buf)); } else { cpufreq->icon = gtk_image_new_from_icon_name @@ -425,6 +479,7 @@ gtk_box_pack_start (GTK_BOX (cpufreq->box), cpufreq->icon, FALSE, FALSE, 0); gtk_widget_show (cpufreq->icon); } + cpufreq_current_cpu ()->icon = cpufreq->icon; } void diff -ru xfce4-cpufreq-plugin-1.1.2/panel-plugin/xfce4-cpufreq-plugin.h xfce4-cpufreq-plugin-1.1.2.new/panel-plugin/xfce4-cpufreq-plugin.h --- xfce4-cpufreq-plugin-1.1.2/panel-plugin/xfce4-cpufreq-plugin.h 2014-12-22 18:50:31.000000000 +0100 +++ xfce4-cpufreq-plugin-1.1.2.new/panel-plugin/xfce4-cpufreq-plugin.h 2015-08-08 15:12:49.373879476 +0200 @@ -38,6 +38,7 @@ guint min_freq; gchar *cur_governor; gchar *scaling_driver; + GtkWidget *icon; GList* available_freqs; GList* available_governors;