/* called when mouse button pressed */ static void switch_light(void) { switch(backlight) { case LIGHTOFF: backlight = LIGHTON; dockapp_copyarea(backdrop_on, pixmap, 0, 0, 58, 58, 0, 0); break; case LIGHTON: backlight = LIGHTOFF; dockapp_copyarea(backdrop_off, pixmap, 0, 0, 58, 58, 0, 0); break; } /* redraw digit */ i.update(); if(i.valid()) i.update_statistics(); else i.ignore_statistics(); i.save(); draw_timedigit(); draw_pcdigit(); draw_statusdigit(); draw_pcgraph(); /* show */ dockapp_copy2window(pixmap); }
static void draw_digit(int per) { int v100, v10, v1; int y = 0; if (per < 0) per = 0; if (per > 100) per = 100; v100 = per / 100; v10 = (per - v100 * 100) / 10; v1 = (per - v100 * 100 - v10 * 10); if (backlight == LIGHTON) { y = 20; } /* draw digit */ dockapp_copyarea(parts, pixmap, v1 * 10, y, 10, 20, 29, 7); if (v10 != 0) { dockapp_copyarea(parts, pixmap, v10 * 10, y, 10, 20, 17, 7); } if (v100 == 1) { dockapp_copyarea(parts, pixmap, 10, y, 10, 20, 5, 7); dockapp_copyarea(parts, pixmap, 0, y, 10, 20, 17, 7); dockapp_copyarea(parts, pixmap, 0, y, 10, 20, 29, 7); } }
/* called by timer */ static void update() { static light pre_backlight; static Bool in_alarm_mode = False; /* get current ibam data */ i.update(); if(i.valid()) i.update_statistics(); else i.ignore_statistics(); i.save(); /* alarm mode */ if((unsigned int)i.percent_battery() < alarm_level) { if(!in_alarm_mode) { in_alarm_mode = True; pre_backlight = backlight; my_system(notif_cmd); } if((switch_authorized) || ((!switch_authorized) && (backlight != pre_backlight))) { switch_light(); return; } } else { if(in_alarm_mode) { in_alarm_mode = False; if(backlight != pre_backlight) { switch_light(); return; } } } /* all clear */ if(backlight == LIGHTON) dockapp_copyarea(backdrop_on, pixmap, 0, 0, 58, 58, 0, 0); else dockapp_copyarea(backdrop_off, pixmap, 0, 0, 58, 58, 0, 0); /* draw digit */ draw_timedigit(); draw_pcdigit(); draw_statusdigit(); draw_pcgraph(); /* show */ dockapp_copy2window(pixmap); }
static void draw_cpunumber(void) { int x_offset = 0; int v10 = 0, v1 = 0; v10 = cpu_opts.cpu_number / 10; v1 = cpu_opts.cpu_number - v10 * 10; if (backlight == LIGHTON) { x_offset = 50; } if (v10) { dockapp_copyarea(parts, pixmap, x_offset + v10 * 5, 40, 5, 9, 44, 10); } dockapp_copyarea(parts, pixmap, x_offset + v1 * 5, 40, 5, 9, 50, 10); }
static void draw_timedigit(void) { int y = 0; int time_left, hour_left, min_left; if(backlight == LIGHTON) y = 20; time_left = (i.onBattery() || (!i.onBattery() && !i.charging())) ? i.seconds_left_battery_adaptive() : i.seconds_left_charge_adaptive(); time_left /= 60; hour_left = time_left / 60; min_left = time_left % 60; dockapp_copyarea(parts, pixmap, (hour_left / 10) * 10, y, 10, 20, 5, 7); dockapp_copyarea(parts, pixmap, (hour_left % 10) * 10, y, 10, 20, 17, 7); dockapp_copyarea(parts, pixmap, (min_left / 10) * 10, y, 10, 20, 32, 7); dockapp_copyarea(parts, pixmap, (min_left % 10) * 10, y, 10, 20, 44, 7); }
static void draw_statusdigit(void) { int xd = 0; int y = 31; if(backlight == LIGHTON) { y = 40; xd = 50; } /* draw digit */ if(i.charging()) dockapp_copyarea(parts, pixmap, 100, y, 4, 9, 41, 45); if(i.onBattery()) dockapp_copyarea(parts, pixmap, 5 + xd, 49, 5, 9, 48, 45); else dockapp_copyarea(parts, pixmap, 0 + xd, 49, 5, 9, 34, 45); }
/* called when mouse button pressed */ static void switch_light(void) { int h, i, j = hindex; int x = 0; switch (backlight) { case LIGHTOFF: backlight = LIGHTON; dockapp_copyarea(backdrop_on, pixmap, 0, 0, 58, 58, 0, 0); x = 2; break; case LIGHTON: backlight = LIGHTOFF; dockapp_copyarea(backdrop_off, pixmap, 0, 0, 58, 58, 0, 0); x = 0; break; } /* redraw digit */ draw_digit(history[hindex]); #ifdef USE_SMP /* draw cpu number */ if (cpu_opts.cpu_number != CPUNUM_NONE) draw_cpunumber(); #endif /* redraw chart */ for (i = 0; i < MAX_HISTORY; i++) { h = (21 * history[j]) / 100; dockapp_copyarea(parts, pixmap, 100+x, 21-h, 2, h, 51-3*i, 54-h); j--; if (j < 0) j = MAX_HISTORY - 1; } /* show */ dockapp_copy2window(pixmap); }
static void draw_pcgraph(void) { int xd = 100; int nb; int num = (int)(i.percent_battery() / 6.25); if(num < 0) num = 0; if(backlight == LIGHTON) xd = 102; /* draw digit */ for(nb = 0; nb < num; nb++) dockapp_copyarea(parts, pixmap, xd, 0, 2, 9, 6 + nb * 3, 33); }
static void draw_pcdigit(void) { int v100, v10, v1; int xd = 0; int num = i.percent_battery(); if(num < 0) num = 0; v100 = num / 100; v10 = (num - v100 * 100) / 10; v1 = (num - v100 * 100 - v10 * 10); if(backlight == LIGHTON) xd = 50; /* draw digit */ dockapp_copyarea(parts, pixmap, v1 * 5 + xd, 40, 5, 9, 17, 45); if(v10 != 0) dockapp_copyarea(parts, pixmap, v10 * 5 + xd, 40, 5, 9, 11, 45); if(v100 == 1) { dockapp_copyarea(parts, pixmap, 5 + xd, 40, 5, 9, 5, 45); dockapp_copyarea(parts, pixmap, 0 + xd, 40, 5, 9, 11, 45); } }
int main(int argc, char **argv) { XEvent event; XpmColorSymbol colors[2] = { {"Back0", NULL, 0}, {"Back1", NULL, 0} }; int ncolor = 0; /* Parse Command-Line */ cpu_opts.ignore_nice = False; cpu_opts.cpu_number = CPUNUM_NONE; cpu_opts.ignore_procs = 0; parse_arguments(argc, argv); /* Initialize Application */ cpu_init(); dockapp_open_window(display_name, title == NULL ? PACKAGE : title, SIZE, SIZE, argc, argv); dockapp_set_eventmask(ButtonPressMask); if (light_color) { colors[0].pixel = dockapp_getcolor_pixel(light_color); colors[1].pixel = dockapp_blendedcolor(light_color, -24, -24, -24, 1.0); ncolor = 2; } /* change raw xpm data to pixmap */ if (dockapp_stat == WINDOWED_WITH_PANEL) { backlight_on_xpm[1] = backlight_off_xpm[1] = WINDOWED_BG; } dockapp_xpm2pixmap(backlight_on_xpm, &backdrop_on, &mask, colors, ncolor); dockapp_xpm2pixmap(backlight_off_xpm, &backdrop_off, NULL, NULL, 0); dockapp_xpm2pixmap(parts_xpm, &parts, NULL, colors, ncolor); /* shape window */ if (dockapp_stat == DOCKABLE_ICON || dockapp_stat == WINDOWED) { dockapp_setshape(mask, 0, 0); } if (mask) XFreePixmap(display, mask); /* pixmap : draw area */ pixmap = dockapp_XCreatePixmap(SIZE, SIZE); pix_chartbuf = dockapp_XCreatePixmap(SIZE, SIZE); /* Initialize pixmap */ if (backlight == LIGHTON) { dockapp_copyarea(backdrop_on, pixmap, 0, 0, SIZE, SIZE, 0, 0); } else { dockapp_copyarea(backdrop_off, pixmap, 0, 0, SIZE, SIZE, 0, 0); } dockapp_set_background(pixmap); dockapp_show(); /* Main loop */ for (;;) { if (dockapp_nextevent_or_timeout(&event, update_interval * 1000)) { /* Next Event */ switch(event.type) { case ButtonPress: switch_light(); break; default: /* make gcc happy */ break; } } else { /* Time Out */ update(); } } return 0; }
/* called by timer */ static void update(void) { int usage; int x, h; static light pre_backlight; static Bool in_alarm_mode = False; /* get current cpu usage in percent */ usage = cpu_get_usage(&cpu_opts); hindex++; if (hindex >= MAX_HISTORY) { hindex = 0; } history[hindex] = usage; /* alarm mode */ if (usage >= alarm_threshold) { if (!in_alarm_mode) { in_alarm_mode = True; pre_backlight = backlight; } if (backlight == LIGHTOFF) { switch_light(); return; } } else { if (in_alarm_mode) { in_alarm_mode = False; if (backlight != pre_backlight) { switch_light(); return; } } } /* save current chart */ dockapp_copyarea(pixmap, pix_chartbuf, 9, 33, 44, 21, 0, 0); /* all clear */ if (backlight == LIGHTON) { dockapp_copyarea(backdrop_on, pixmap, 0, 0, 58, 58, 0, 0); x = 2; } else { dockapp_copyarea(backdrop_off, pixmap, 0, 0, 58, 58, 0, 0); x = 0; } /* draw digit */ draw_digit(usage); #ifdef USE_SMP /* draw cpu number */ if (cpu_opts.cpu_number != CPUNUM_NONE) draw_cpunumber(); #endif /* draw chart */ h = (21 * usage) / 100; dockapp_copyarea(pix_chartbuf, pixmap, 0, 0, 44, 21, 6, 33); dockapp_copyarea(parts, pixmap,100+x, 21-h, 2, h, 51, 54-h); /* show */ dockapp_copy2window(pixmap); }
static void update(void) { static int percent; /* LongRun performance level */ static int flags; /* LongRun flags */ static int mhz; /* LongRun frequency */ static int voltz; /* LongRun voltage */ int digit1 = 0, digit10 = 0, digit100 = 0; longrun_get_stat(&percent, &flags, &mhz, &voltz); digit100 = mhz / 100; digit10 = (mhz - digit100 * 100) / 10; digit1 = mhz - digit100 * 100 - digit10 * 10; /* LCD interface */ if (!is_led_style) { int y_lrmode = 0, y_gauge = 0, y_digit = 0; /* clear */ switch (backlight) { case LIGHTON: dockapp_copyarea(backdrop_on, pixmap, 0, 0, 58, 58, 0, 0); y_lrmode = 11; y_gauge = 14; y_digit = 13; break; case LIGHTOFF: dockapp_copyarea(backdrop_off, pixmap, 0, 0, 58, 58, 0, 0); break; } /* longrun flags (performance or economy) */ switch (flags) { case LONGRUN_FLAGS_PEFORMANCE: dockapp_copyarea(parts, pixmap, 24, y_lrmode, 24, 11, 31, 5); break; case LONGRUN_FLAGS_ECONOMY: dockapp_copyarea(parts, pixmap, 0, y_lrmode, 24, 11, 5, 5); break; default: break; /* make gcc happy */ } /* draw digit (frequency) */ dockapp_copyarea(parts, pixmap, digit100*7,y_digit+33, 7,13, 6,22); dockapp_copyarea(parts, pixmap, digit10*7,y_digit+33, 7,13, 15,22); dockapp_copyarea(parts, pixmap, digit1*7,y_digit+33, 7,13, 24,22); /* draw level gauge */ dockapp_copyarea(parts, pixmap, 0,y_gauge+72, 49*percent/100,14,5,40); } /* LED interface */ else { dockapp_copyarea(backdrop_led, pixmap, 0, 0, 58, 58, 0, 0); /* longrun flags (performance or economy) */ switch (flags) { case LONGRUN_FLAGS_PEFORMANCE: dockapp_copyarea(parts, pixmap, 24, 22, 24, 11, 30, 3); break; case LONGRUN_FLAGS_ECONOMY: dockapp_copyarea(parts, pixmap, 0, 22, 24, 11, 3, 3); break; default: break; /* make gcc happy */ } /* draw digit (frequency) */ dockapp_copyarea(parts, pixmap, digit100*7,59, 7,13, 4,22); dockapp_copyarea(parts, pixmap, digit10*7,59, 7,13, 13,22); dockapp_copyarea(parts, pixmap, digit1*7,59, 7,13, 22,22); /* draw level gauge */ dockapp_copyarea(parts, pixmap, 0, 100, 56 * percent / 100, 16, 1, 41); } /* show */ dockapp_copy2window(pixmap); }
int main(int argc, char **argv) { XEvent event; XpmColorSymbol colors[2] = { {"Back0", NULL, 0}, {"Back1", NULL, 0} }; int ncolor = 0; struct sigaction sa; sa.sa_handler = SIG_IGN; sa.sa_flags = SA_NOCLDWAIT; sigemptyset(&sa.sa_mask); sigaction(SIGCHLD, &sa, NULL); /* Parse CommandLine */ parse_arguments(argc, argv); /* Initialize Application */ dockapp_open_window(display_name, PACKAGE, SIZE, SIZE, argc, argv); dockapp_set_eventmask(ButtonPressMask); if(light_color) { colors[0].pixel = dockapp_getcolor(light_color); colors[1].pixel = dockapp_blendedcolor(light_color, -24, -24, -24, 1.0); ncolor = 2; } /* change raw xpm data to pixmap */ if(dockapp_iswindowed) backlight_on_xpm[1] = backlight_off_xpm[1] = WINDOWED_BG; if(!dockapp_xpm2pixmap(backlight_on_xpm, &backdrop_on, &mask, colors, ncolor)) { fprintf(stderr, "Error initializing backlit background image.\n"); exit(1); } if(!dockapp_xpm2pixmap(backlight_off_xpm, &backdrop_off, NULL, NULL, 0)) { fprintf(stderr, "Error initializing background image.\n"); exit(1); } if(!dockapp_xpm2pixmap(parts_xpm, &parts, NULL, colors, ncolor)) { fprintf(stderr, "Error initializing parts image.\n"); exit(1); } /* shape window */ if(!dockapp_iswindowed) dockapp_setshape(mask, 0, 0); if(mask) XFreePixmap(display, mask); /* pixmap : draw area */ pixmap = dockapp_XCreatePixmap(SIZE, SIZE); /* Initialize pixmap */ if(backlight == LIGHTON) dockapp_copyarea(backdrop_on, pixmap, 0, 0, SIZE, SIZE, 0, 0); else dockapp_copyarea(backdrop_off, pixmap, 0, 0, SIZE, SIZE, 0, 0); dockapp_set_background(pixmap); dockapp_show(); /* initialize ibam */ i.update(); if(i.valid()) i.update_statistics(); else i.ignore_statistics(); i.save(); update(); /* Main loop */ while(1) { if(dockapp_nextevent_or_timeout(&event, update_interval * 1000)) { /* Next Event */ switch(event.type) { case ButtonPress: switch(event.xbutton.button) { case 1: switch_light(); break; case 2: if(event.xbutton.state == ControlMask) my_system((char *)(suspend_cmd ? suspend_cmd : SUSPEND_CMD)); /* Suspend */ else my_system((char *)(standby_cmd ? standby_cmd : STANDBY_CMD)); /* Standby */ break; case 3: switch_authorized = !switch_authorized; break; default: break; } break; default: break; } } else { /* Time Out */ update(); } } return 0; }