示例#1
0
/* 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);
}
示例#2
0
文件: main.c 项目: bbidulock/dockapps
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);
    }
}
示例#3
0
/* 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);
}
示例#4
0
文件: main.c 项目: bbidulock/dockapps
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);
}
示例#5
0
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);
}
示例#6
0
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);

}
示例#7
0
文件: main.c 项目: bbidulock/dockapps
/* 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);
}
示例#8
0
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);
}
示例#9
0
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);
    }
}
示例#10
0
文件: main.c 项目: bbidulock/dockapps
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;
}
示例#11
0
文件: main.c 项目: bbidulock/dockapps
/* 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);

}
示例#12
0
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);
}
示例#13
0
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;
}