2
* Copyright (c) 2007 Rodney Cryderman <rcryderman@gmail.com>
4
* This library is free software; you can redistribute it and/or
5
* modify it under the terms of the GNU Lesser General Public
6
* License as published by the Free Software Foundation; either
7
* version 2 of the License, or (at your option) any later version.
9
* This library is distributed in the hope that it will be useful,
10
* but WITHOUT ANY WARRANTY; without even the implied warranty of
11
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12
* Lesser General Public License for more details.
14
* You should have received a copy of the GNU Lesser General Public
15
* License along with this library; if not, write to the
16
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
17
* Boston, MA 02111-1307, USA.
20
#include <libawn/awn-applet.h>
21
#include <glib/gmacros.h>
22
#include <glib/gerror.h>
23
#include <gconf/gconf-value.h>
25
#include <libawn/awn-dialog.h>
26
#include <libawn/awn-applet-simple.h>
33
#include <glibtop/mem.h>
34
#include <glibtop/cpu.h>
37
#include "cairo-utils.h"
38
//#include <libawn/awn-title.h>
39
#include <libawn/awn-tooltip.h>
43
#include "cpu_component.h"
44
#include "dashboard_util.h"
45
#include "dashboard.h"
47
#include "gconf-config.h"
48
#define GCONF_CPU_REFRESH GCONF_PATH "/component_cpu_refresh_rate"
49
#define GCONF_CPU_METER GCONF_PATH "/component_cpu_shiny_meter"
50
#define GCONF_CPU_SIZE_MULT GCONF_PATH "/component_cpu_scale"
51
#define GCONF_CPU_METER_START_COLOUR GCONF_PATH "/component_cpu_meter_start_c"
52
#define GCONF_CPU_METER_STOP_COLOUR GCONF_PATH "/component_cpu_meter_end_c"
53
#define GCONF_CPU_METER_MIDDLE_COLOUR GCONF_PATH "/component_cpu_meter_middle_c"
54
#define GCONF_CPU_METER_USE_2_COLOUR_GRADIENT GCONF_PATH "/component_cpu_use_2_colour_gradient"
56
#define GCONF_CPU_METER_NO_GTK_FG GCONF_PATH "/component_cpu_fg"
57
#define GCONF_CPU_METER_NO_GTK_BG GCONF_PATH "/component_cpu_bg"
64
double max_width_left;
65
double max_width_right;
71
long accum_user, accum_sys, accum_idle, accum_iowait ;
77
cairo_pattern_t *pats[4];
78
gboolean shiny_graphs;
79
AwnColor colour_meter_start;
80
AwnColor colour_meter_end;
81
AwnColor colour_meter_middle;
82
gboolean two_colour_gradient;
83
AwnColor bg; /*colours if gtk colours are overridden */
85
gboolean emotive_text;
88
static gboolean render(GtkWidget ** pwidget, gint interval, CPU_plug_data **p);
89
static gboolean query_support_multiple(void);
90
static void destruct(CPU_plug_data **p);
91
static void construct(CPU_plug_data **p);
92
static gboolean decrease_step(CPU_plug_data **p);
93
static gboolean increase_step(CPU_plug_data **p);
94
static GtkWidget* attach_right_click_menu(CPU_plug_data **p);
95
static const char* get_component_name(void *);
96
static const char* get_component_friendly_name(void *);
98
static gboolean _toggle_2_gradient(GtkWidget *widget, GdkEventButton *event, CPU_plug_data *p);
99
static gboolean _toggle_shiny(GtkWidget *widget, GdkEventButton *event, CPU_plug_data *p);
101
static gboolean _set_100(GtkWidget *widget, GdkEventButton *event, CPU_plug_data *p);
102
static gboolean _set_200(GtkWidget *widget, GdkEventButton *event, CPU_plug_data *p);
103
static gboolean _set_500(GtkWidget *widget, GdkEventButton *event, CPU_plug_data *p);
104
static gboolean _set_1000(GtkWidget *widget, GdkEventButton *event, CPU_plug_data *p);
105
static gboolean _set_5000(GtkWidget *widget, GdkEventButton *event, CPU_plug_data *p);
107
static gboolean _set_good(GtkWidget *widget, GdkEventButton *event, CPU_plug_data *p);
108
static gboolean _set_bad(GtkWidget *widget, GdkEventButton *event, CPU_plug_data *p);
109
static gboolean _set_middling(GtkWidget *widget, GdkEventButton *event, CPU_plug_data *p);
110
static gboolean _set_fg(GtkWidget *widget, GdkEventButton *event, CPU_plug_data *p);
111
static gboolean _set_bg(GtkWidget *widget, GdkEventButton *event, CPU_plug_data *p);
113
static void set_colour_gradient(CPU_plug_data *p, AwnColor* colour, const char * mess, const char * gconf_key);
115
static void _notify_color_change(void *);
117
static void _fn_set_bg(AwnColor * new_bg, CPU_plug_data **p);
118
static void _fn_set_fg(AwnColor * new_fg, CPU_plug_data **p);
121
static void * plug_fns[MAX_CALLBACK_FN] =
126
query_support_multiple,
130
attach_right_click_menu,
132
get_component_friendly_name,
139
void * cpu_plug_lookup(int fn_id)
141
assert(fn_id < MAX_CALLBACK_FN);
142
return plug_fns[fn_id];
145
static void _fn_set_bg(AwnColor * new_bg, CPU_plug_data **p)
148
CPU_plug_data * plug_data = *p;
149
plug_data->bg = *new_bg;
150
svalue = dashboard_cairo_colour_to_string(new_bg);
151
gconf_client_set_string(get_dashboard_gconf(), GCONF_CPU_METER_NO_GTK_BG, svalue , NULL);
156
static void _fn_set_fg(AwnColor * new_fg, CPU_plug_data **p)
159
CPU_plug_data * plug_data = *p;
160
plug_data->fg = *new_fg;
161
svalue = dashboard_cairo_colour_to_string(new_fg);
162
gconf_client_set_string(get_dashboard_gconf(), GCONF_CPU_METER_NO_GTK_FG, svalue , NULL);
167
static const char* get_component_name(void *d)
169
const char * name = "component_cpu";
173
static const char* get_component_friendly_name(void *d)
175
const char * name = "CPU Stats";
181
static GtkWidget* attach_right_click_menu(CPU_plug_data **p)
183
CPU_plug_data * plug_data = *p;
184
GtkWidget * menu_items;
185
GtkWidget *menu = gtk_menu_new();
186
// GtkWidget *graphs_sub_menu = gtk_menu_new ();
187
GtkWidget *graphs_refresh_menu = gtk_menu_new();
188
GtkWidget *graphs_colour_menu = gtk_menu_new();
190
dashboard_build_clickable_menu_item(menu, G_CALLBACK(_toggle_shiny), "Shiny On/Off", plug_data);
191
dashboard_build_clickable_menu_item(menu, G_CALLBACK(_set_fg), "Foreground", plug_data);
192
dashboard_build_clickable_menu_item(menu, G_CALLBACK(_set_bg), "Background", plug_data);
193
dashboard_build_clickable_menu_item(menu, G_CALLBACK(_toggle_2_gradient), "2 Colour Gradient", plug_data);
194
dashboard_build_clickable_menu_item(graphs_refresh_menu, G_CALLBACK(_set_100), "100ms", plug_data);
195
dashboard_build_clickable_menu_item(graphs_refresh_menu, G_CALLBACK(_set_200), "200ms", plug_data);
196
dashboard_build_clickable_menu_item(graphs_refresh_menu, G_CALLBACK(_set_500), "500ms", plug_data);
197
dashboard_build_clickable_menu_item(graphs_refresh_menu, G_CALLBACK(_set_1000), "1000ms", plug_data);
198
dashboard_build_clickable_menu_item(graphs_refresh_menu, G_CALLBACK(_set_5000), "5000ms", plug_data);
199
menu_items = gtk_menu_item_new_with_label("Refresh");
200
gtk_menu_shell_append(GTK_MENU_SHELL(menu), menu_items);
201
gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu_items), graphs_refresh_menu);
202
gtk_widget_show(menu_items);
203
dashboard_build_clickable_menu_item(graphs_colour_menu, G_CALLBACK(_set_good), "Good", plug_data);
204
dashboard_build_clickable_menu_item(graphs_colour_menu, G_CALLBACK(_set_middling), "Middling", plug_data);
205
dashboard_build_clickable_menu_item(graphs_colour_menu, G_CALLBACK(_set_bad), "Bad", plug_data);
206
gtk_widget_show(menu_items);
207
menu_items = gtk_menu_item_new_with_label("Meter Colours");
208
gtk_menu_shell_append(GTK_MENU_SHELL(menu), menu_items);
209
gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu_items), graphs_colour_menu);
210
gtk_widget_show(menu_items);
215
static gboolean _toggle_shiny(GtkWidget *widget, GdkEventButton *event, CPU_plug_data *p)
217
p->shiny_graphs = !p->shiny_graphs;
218
gconf_client_set_bool(get_dashboard_gconf(), GCONF_CPU_METER, p->shiny_graphs, NULL);
222
static gboolean _toggle_2_gradient(GtkWidget *widget, GdkEventButton *event, CPU_plug_data *p)
224
p->two_colour_gradient = !p->two_colour_gradient;
225
gconf_client_set_bool(get_dashboard_gconf(), GCONF_CPU_METER_USE_2_COLOUR_GRADIENT, p->two_colour_gradient, NULL);
226
_notify_color_change(p);
230
static gboolean set_refresh(CPU_plug_data *p, int val)
233
gconf_client_set_int(get_dashboard_gconf(), GCONF_CPU_REFRESH, p->refresh, NULL);
237
static gboolean _set_100(GtkWidget *widget, GdkEventButton *event, CPU_plug_data *p)
239
return set_refresh(p, 100);
242
static gboolean _set_200(GtkWidget *widget, GdkEventButton *event, CPU_plug_data *p)
244
return set_refresh(p, 200);
247
static gboolean _set_500(GtkWidget *widget, GdkEventButton *event, CPU_plug_data *p)
249
return set_refresh(p, 500);
252
static gboolean _set_1000(GtkWidget *widget, GdkEventButton *event, CPU_plug_data *p)
254
return set_refresh(p, 1000);
257
static gboolean _set_5000(GtkWidget *widget, GdkEventButton *event, CPU_plug_data *p)
259
return set_refresh(p, 5000);
263
static void _notify_color_change(void *p)
265
CPU_plug_data *data = p;
267
data->max_width_left = -1;
271
static void set_colour_gradient(CPU_plug_data *p, AwnColor* colour, const char * mess, const char * gconf_key)
274
enable_suppress_hide_main();
275
pick_awn_color(colour, mess, p, _notify_color_change);
276
svalue = dashboard_cairo_colour_to_string(colour);
277
gconf_client_set_string(get_dashboard_gconf(), gconf_key, svalue , NULL);
283
static gboolean _set_fg(GtkWidget *widget, GdkEventButton *event, CPU_plug_data *p)
285
set_colour_gradient(p, &p->fg, "Foreground Colour if Ignore gtk", GCONF_CPU_METER_NO_GTK_FG);
289
static gboolean _set_bg(GtkWidget *widget, GdkEventButton *event, CPU_plug_data *p)
291
set_colour_gradient(p, &p->bg, "Foreground Colour if Ignore gtk", GCONF_CPU_METER_NO_GTK_BG);
296
static gboolean _set_good(GtkWidget *widget, GdkEventButton *event, CPU_plug_data *p)
298
set_colour_gradient(p, &p->colour_meter_start, "Changing Good Colour", GCONF_CPU_METER_START_COLOUR);
303
static gboolean _set_bad(GtkWidget *widget, GdkEventButton *event, CPU_plug_data *p)
305
set_colour_gradient(p, &p->colour_meter_end, "Changing Bad Colour", GCONF_CPU_METER_STOP_COLOUR);
309
static gboolean _set_middling(GtkWidget *widget, GdkEventButton *event, CPU_plug_data *p)
311
set_colour_gradient(p, &p->colour_meter_middle, "Changing Middle Colour", GCONF_CPU_METER_MIDDLE_COLOUR);
315
static gboolean decrease_step(CPU_plug_data **p)
317
CPU_plug_data *data = *p;
318
data->size_mult = data->size_mult * 5.0 / 6.0;
319
data->max_width_left = -1;
320
gconf_client_set_float(get_dashboard_gconf(), GCONF_CPU_SIZE_MULT, data->size_mult, NULL);
324
static gboolean increase_step(CPU_plug_data **p)
326
CPU_plug_data *data = *p;
327
data->size_mult = data->size_mult * 1.2;
328
data->max_width_left = -1;
329
gconf_client_set_float(get_dashboard_gconf(), GCONF_CPU_SIZE_MULT, data->size_mult, NULL);
335
static gboolean query_support_multiple(void)
340
static void construct(CPU_plug_data **p)
343
*p = g_malloc(sizeof(CPU_plug_data));
344
CPU_plug_data * data = *p;
346
data->max_width_left = -1;
347
data->max_width_right = -1;
354
data->emotive_text = FALSE;
356
svalue = gconf_client_get_string(get_dashboard_gconf(), GCONF_CPU_METER_NO_GTK_BG, NULL);
360
gconf_client_set_string(get_dashboard_gconf(), GCONF_CPU_METER_NO_GTK_BG, svalue = g_strdup("999999ee"), NULL);
363
awn_cairo_string_to_color(svalue, &data->bg);
367
svalue = gconf_client_get_string(get_dashboard_gconf(), GCONF_CPU_METER_NO_GTK_FG, NULL);
371
gconf_client_set_string(get_dashboard_gconf(), GCONF_CPU_METER_NO_GTK_FG, svalue = g_strdup("000000ff"), NULL);
374
awn_cairo_string_to_color(svalue, &data->fg);
378
value = gconf_client_get(get_dashboard_gconf(), GCONF_CPU_SIZE_MULT, NULL);
382
data->size_mult = gconf_client_get_float(get_dashboard_gconf(), GCONF_CPU_SIZE_MULT, NULL);
386
data->size_mult = 1.72;
387
gconf_client_set_float(get_dashboard_gconf(), GCONF_CPU_SIZE_MULT, data->size_mult, NULL);
390
value = gconf_client_get(get_dashboard_gconf(), GCONF_CPU_REFRESH, NULL);
394
data->refresh = gconf_client_get_int(get_dashboard_gconf(), GCONF_CPU_REFRESH, NULL);
399
set_refresh(*p, data->refresh);
402
value = gconf_client_get(get_dashboard_gconf(), GCONF_CPU_METER, NULL);
406
data->shiny_graphs = gconf_client_get_bool(get_dashboard_gconf(), GCONF_CPU_METER, NULL);
410
data->shiny_graphs = TRUE;
411
gconf_client_set_bool(get_dashboard_gconf(), GCONF_CPU_METER,
412
data->shiny_graphs, NULL);
415
value = gconf_client_get(get_dashboard_gconf(), GCONF_CPU_METER_USE_2_COLOUR_GRADIENT , NULL);
419
data->two_colour_gradient = gconf_client_get_bool(get_dashboard_gconf(), GCONF_CPU_METER_USE_2_COLOUR_GRADIENT , NULL);
423
data->two_colour_gradient = FALSE;
424
gconf_client_set_bool(get_dashboard_gconf(), GCONF_CPU_METER_USE_2_COLOUR_GRADIENT, data->two_colour_gradient, NULL);
427
svalue = gconf_client_get_string(get_dashboard_gconf(), GCONF_CPU_METER_START_COLOUR, NULL);
431
gconf_client_set_string(get_dashboard_gconf(), GCONF_CPU_METER_START_COLOUR, svalue = g_strdup("00FF10bb"), NULL);
434
awn_cairo_string_to_color(svalue, &data->colour_meter_start);
437
svalue = gconf_client_get_string(get_dashboard_gconf(), GCONF_CPU_METER_MIDDLE_COLOUR, NULL);
441
gconf_client_set_string(get_dashboard_gconf(), GCONF_CPU_METER_MIDDLE_COLOUR, svalue = g_strdup("EEC83177"), NULL);
444
awn_cairo_string_to_color(svalue, &data->colour_meter_middle);
447
svalue = gconf_client_get_string(get_dashboard_gconf(), GCONF_CPU_METER_STOP_COLOUR, NULL);
451
gconf_client_set_string(get_dashboard_gconf(), GCONF_CPU_METER_STOP_COLOUR, svalue = g_strdup("FF0010ee"), NULL);
454
awn_cairo_string_to_color(svalue, &data->colour_meter_end);
457
//data->pats[] is initialized once i render.. then needs to be free'd in constructor
461
static void destruct(CPU_plug_data **p)
463
CPU_plug_data *data = *p;
466
for (i = 0;i < 4;i++)
468
cairo_pattern_destroy(data->pats[i]);
474
static gboolean render(GtkWidget ** pwidget, gint interval, CPU_plug_data **p)
476
CPU_plug_data * data = *p;
479
static gdouble old_time = -1;
480
float old_user, old_sys, old_idle, old_iowait;
481
dashboard_cairo_widget c_widge;
482
char * content[2][4];
484
cairo_text_extents_t extents;
492
old_time = time(NULL);
496
data->timer = data->timer - interval;
497
if (data->timer <= 0)
500
g_get_current_time (&timeval);
501
newtime = timeval.tv_sec + timeval.tv_usec / 1000000.0;
502
cpu_mult = (1.0 / (newtime - old_time) );
504
glibtop_get_cpu(&cpu); //could as easily do this in render icon. seems more appropriate here. FIXME
506
old_user = data->user;
507
data->user = (cpu.user - data->accum_user) * cpu_mult;
508
data->accum_user = cpu.user;
511
data->sys = (cpu.sys - data->accum_sys) * cpu_mult;
512
data->accum_sys = cpu.sys;
514
old_idle = data->idle;
515
data->idle = (cpu.idle - data->accum_idle) * cpu_mult;
516
data->accum_idle = cpu.idle;
518
old_iowait = data->iowait;
519
data->iowait = (cpu.iowait - data->accum_iowait) * cpu_mult ;
520
data->accum_iowait = cpu.iowait;
522
data->user = (data->user > 100) ? (100 + old_user) / 2 : (data->user + old_user) / 2;
523
data->sys = (data->sys > 100) ? (100 + old_sys) / 2 : (data->sys + old_sys) / 2;
524
data->idle = (data->idle > 100) ? (100 + old_idle) / 2 : (data->idle + old_idle) / 2;
525
data->iowait = (data->iowait > 100) ? (100 + old_iowait) / 2 : (data->iowait + old_iowait) / 2;
527
tot = data->user + data->sys + data->idle + data->iowait;
528
if (data->user + data->sys + data->idle + data->iowait > 100)
530
data->idle = data->idle * 100.0 / tot;
531
data->sys = data->sys * 100.0 / tot;
532
data->user = data->user* 100.0 / tot;
533
data->iowait = data->iowait * 100.0 / tot;
536
content[0][0] = strdup("User");
538
content[0][1] = strdup("Sys");
539
content[0][2] = strdup("Wait");
540
content[0][3] = strdup("Idle");
542
snprintf(buf, sizeof(buf), "%3.1f%%", data->user);
543
content[1][0] = strdup(buf);
545
snprintf(buf, sizeof(buf), "%3.1f%%", data->sys);
546
content[1][1] = strdup(buf);
548
snprintf(buf, sizeof(buf), "%3.1f%%", data->iowait);
549
content[1][2] = strdup(buf);
551
snprintf(buf, sizeof(buf), "%3.1f%%", data->idle);
552
content[1][3] = strdup(buf);
556
if (data->max_width_left < 0)
558
*pwidget = get_cairo_widget(&c_widge, dashboard_get_font_size(DASHBOARD_FONT_SMALL) * 9 * data->size_mult, dashboard_get_font_size(DASHBOARD_FONT_SMALL) * 4 * data->size_mult);
559
use_bg_rgba_colour(c_widge.cr);
560
cairo_set_operator(c_widge.cr, CAIRO_OPERATOR_SOURCE);
561
cairo_paint(c_widge.cr);
565
*pwidget = get_cairo_widget(&c_widge, data->width, data->height);
566
cairo_rectangle(c_widge.cr, 0, 0, data->width, data->height);
568
cairo_set_source_rgba(c_widge.cr, data->bg.red, data->bg.green, data->bg.blue, data->bg.alpha);
570
cairo_fill(c_widge.cr);
573
cairo_select_font_face(c_widge.cr, "Sans", CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_NORMAL);
575
cairo_set_font_size(c_widge.cr, dashboard_get_font_size(DASHBOARD_FONT_SMALL)*data->size_mult);
578
cairo_set_source_rgba(c_widge.cr, data->fg.red, data->fg.green, data->fg.blue, data->fg.alpha);
580
cairo_move_to(c_widge.cr, 10.0*data->size_mult, 15.0*data->size_mult);
582
if (data->max_width_left < 0)
584
for (i = 0;i < 4;i++)
586
cairo_text_extents(c_widge.cr, content[0][i], &extents);
588
if (extents.width > data->max_width_left)
590
data->max_width_left = extents.width;
595
data->move_down = extents.height * 1.4;
597
for (i = 0;i < 4;i++)
599
cairo_text_extents(c_widge.cr, content[1][i], &extents);
601
if (extents.width > data->max_width_right)
603
data->max_width_right = extents.width;
607
data->width = (data->max_width_right + data->max_width_left) * 1.25 + 100 * data->size_mult;
609
data->height = extents.height * 6.8;
610
del_cairo_widget(&c_widge);
611
y = dashboard_get_font_size(DASHBOARD_FONT_SMALL) * data->size_mult ;
612
data->pats[0] = cairo_pattern_create_linear(data->width - 100 * data->size_mult, y - data->move_down * 0.8, data->width, data->move_down * 0.6);
613
cairo_pattern_add_color_stop_rgba(data->pats[0], 0, data->colour_meter_start.red ,
614
data->colour_meter_start.green,
615
data->colour_meter_start.blue,
616
data->colour_meter_start.alpha);
618
if (!data->two_colour_gradient)
619
cairo_pattern_add_color_stop_rgba(data->pats[0], 0.5, data->colour_meter_middle.red ,
620
data->colour_meter_middle.green,
621
data->colour_meter_middle.blue,
622
data->colour_meter_middle.alpha);
624
cairo_pattern_add_color_stop_rgba(data->pats[0], 1, data->colour_meter_end.red ,
625
data->colour_meter_end.green,
626
data->colour_meter_end.blue,
627
data->colour_meter_end.alpha);
629
data->pats[1] = cairo_pattern_create_linear(data->width - 100 * data->size_mult, y - data->move_down * 0.8, data->width, data->move_down * 0.6);
631
cairo_pattern_add_color_stop_rgba(data->pats[1], 0, data->colour_meter_start.red ,
632
data->colour_meter_start.green,
633
data->colour_meter_start.blue,
634
data->colour_meter_start.alpha);
636
if (!data->two_colour_gradient)
637
cairo_pattern_add_color_stop_rgba(data->pats[1], 0.5, data->colour_meter_middle.red ,
638
data->colour_meter_middle.green,
639
data->colour_meter_middle.blue,
640
data->colour_meter_middle.alpha);
642
cairo_pattern_add_color_stop_rgba(data->pats[1], 1, data->colour_meter_end.red ,
643
data->colour_meter_end.green,
644
data->colour_meter_end.blue,
645
data->colour_meter_end.alpha);
647
data->pats[2] = cairo_pattern_create_linear(data->width - 100 * data->size_mult, y - data->move_down * 0.8, data->width, data->move_down * 0.6);
649
cairo_pattern_add_color_stop_rgba(data->pats[2], 0, data->colour_meter_start.red ,
650
data->colour_meter_start.green,
651
data->colour_meter_start.blue,
652
data->colour_meter_start.alpha);
654
if (!data->two_colour_gradient)
655
cairo_pattern_add_color_stop_rgba(data->pats[2], 0.5, data->colour_meter_middle.red ,
656
data->colour_meter_middle.green,
657
data->colour_meter_middle.blue,
658
data->colour_meter_middle.alpha);
660
cairo_pattern_add_color_stop_rgba(data->pats[2], 1, data->colour_meter_end.red ,
661
data->colour_meter_end.green,
662
data->colour_meter_end.blue,
663
data->colour_meter_end.alpha);
665
data->pats[3] = cairo_pattern_create_linear(data->width - 100 * data->size_mult, y - data->move_down * 0.8 , data->width, data->move_down * 0.6);
667
cairo_pattern_add_color_stop_rgba(data->pats[3], 0, data->colour_meter_end.red ,
668
data->colour_meter_end.green,
669
data->colour_meter_end.blue,
670
data->colour_meter_end.alpha);
672
if (!data->two_colour_gradient)
673
cairo_pattern_add_color_stop_rgba(data->pats[3], 0.5, data->colour_meter_middle.red ,
674
data->colour_meter_middle.green,
675
data->colour_meter_middle.blue,
676
data->colour_meter_middle.alpha);
678
cairo_pattern_add_color_stop_rgba(data->pats[3], 1, data->colour_meter_start.red ,
679
data->colour_meter_start.green,
680
data->colour_meter_start.blue,
681
data->colour_meter_start.alpha);
686
cairo_move_to(c_widge.cr, x = dashboard_get_font_size(DASHBOARD_FONT_SMALL) * data->size_mult, y = dashboard_get_font_size(DASHBOARD_FONT_SMALL) * data->size_mult);
688
for (i = 0;i < 4;i++)
690
cairo_show_text(c_widge.cr, content[0][i]);
691
x = x + data->max_width_left * 1.1;
692
cairo_text_extents(c_widge.cr, content[1][i], &extents);
694
if (data->emotive_text)
700
cairo_set_source_rgb(c_widge.cr, data->user / 100.0, 1.0 - data->user / 100.0, 0.4);
705
cairo_set_source_rgb(c_widge.cr, (data->sys) / 100.0, 1.0 - (data->sys) / 100.0, 0.4);
709
cairo_set_source_rgb(c_widge.cr, (data->iowait) / 100.0, 1.0 - (data->iowait) / 100.0, 0.4);
713
cairo_set_source_rgb(c_widge.cr, 1.0 - data->idle / 100.0, data->idle / 100.0, 0.4);
719
cairo_set_source_rgba(c_widge.cr, data->fg.red, data->fg.green, data->fg.blue, data->fg.alpha);
722
cairo_move_to(c_widge.cr,
724
x + (data->max_width_right - extents.width)
726
cairo_show_text(c_widge.cr, content[1][i]);
727
// cairo_pattern_t *pat;
729
// pat = cairo_pattern_create_linear (0.0, 0.0, 0.0, 256.0);
738
cairo_rectangle(c_widge.cr, data->width - 100*data->size_mult, y - data->move_down*0.6, data->user*data->size_mult, data->move_down*0.6);
740
if (data->shiny_graphs)
741
cairo_set_source(c_widge.cr, data->pats[i]);
743
cairo_fill(c_widge.cr);
753
cairo_rectangle(c_widge.cr, data->width - 100*data->size_mult, y - data->move_down*0.6, data->sys*data->size_mult, data->move_down*0.6);
755
if (data->shiny_graphs)
756
cairo_set_source(c_widge.cr, data->pats[i]);
758
cairo_fill(c_widge.cr);
768
cairo_rectangle(c_widge.cr, data->width - 100*data->size_mult, y - data->move_down*0.6, data->iowait*data->size_mult, data->move_down*0.6);
770
if (data->shiny_graphs)
771
cairo_set_source(c_widge.cr, data->pats[i]);
773
cairo_fill(c_widge.cr);
783
cairo_rectangle(c_widge.cr, data->width - 100*data->size_mult, y - data->move_down*0.6, data->idle*data->size_mult, data->move_down*0.6);
785
if (data->shiny_graphs)
786
cairo_set_source(c_widge.cr, data->pats[i]);
788
cairo_fill(c_widge.cr);
794
cairo_set_source_rgba(c_widge.cr, data->fg.red, data->fg.green, data->fg.blue, data->fg.alpha);
796
x = dashboard_get_font_size(DASHBOARD_FONT_SMALL) * data->size_mult;
797
y = y + data->move_down;
798
cairo_move_to(c_widge.cr, x, y);
801
del_cairo_widget(&c_widge);
803
data->timer = data->refresh;
805
for (i = 0;i < 4;i++)