X-Git-Url: https://git.brokenzipper.com/gitweb?a=blobdiff_plain;f=src%2Fbattery%2Fbattery.c;h=4dcb99a47cffab9755daa5ea7b29599fb69f717d;hb=ddd6fcc40dbe9d4257ff904d5e156b7f612dedc4;hp=222fbc5e1338634936a6ebac5f3edc19ef0aa937;hpb=985e8a8ae0792d1fc2b305830ced5514314473eb;p=chaz%2Ftint2 diff --git a/src/battery/battery.c b/src/battery/battery.c index 222fbc5..4dcb99a 100644 --- a/src/battery/battery.c +++ b/src/battery/battery.c @@ -44,76 +44,6 @@ char *battery_low_cmd; char *path_energy_now, *path_energy_full, *path_current_now, *path_status; -void update_battery(struct batstate *data) { - FILE *fp; - char tmp[25]; - int64_t energy_now = 0, energy_full = 0, current_now = 0; - int seconds = 0; - int8_t new_percentage = 0; - - fp = fopen(path_energy_now, "r"); - if(fp != NULL) { - fgets(tmp, sizeof tmp, fp); - energy_now = atoi(tmp); - fclose(fp); - } - - fp = fopen(path_energy_full, "r"); - if(fp != NULL) { - fgets(tmp, sizeof tmp, fp); - energy_full = atoi(tmp); - fclose(fp); - } - - fp = fopen(path_current_now, "r"); - if(fp != NULL) { - fgets(tmp, sizeof tmp, fp); - current_now = atoi(tmp); - fclose(fp); - } - - fp = fopen(path_status, "r"); - if(fp != NULL) { - fgets(tmp, sizeof tmp, fp); - fclose(fp); - } - - data->state = BATTERY_UNKNOWN; - if(strcasecmp(tmp, "Charging\n")==0) data->state = BATTERY_CHARGING; - if(strcasecmp(tmp, "Discharging\n")==0) data->state = BATTERY_DISCHARGING; - - if(current_now > 0) { - switch(data->state) { - case BATTERY_CHARGING: - seconds = 3600 * (energy_full - energy_now) / current_now; - break; - case BATTERY_DISCHARGING: - seconds = 3600 * energy_now / current_now; - break; - default: - seconds = 0; - break; - } - } else seconds = 0; - - data->time.hours = seconds / 3600; - seconds -= 3600 * data->time.hours; - data->time.minutes = seconds / 60; - seconds -= 60 * data->time.minutes; - data->time.seconds = seconds; - - if(energy_full > 0) - new_percentage = (energy_now*100)/energy_full; - - if(battery_low_status != 0 && battery_low_status == new_percentage && data->percentage > new_percentage) { - printf("battery low, executing: %s\n", battery_low_cmd); - if(battery_low_cmd) system(battery_low_cmd); - } - - data->percentage = new_percentage; -} - - void init_battery() { // check battery @@ -172,13 +102,16 @@ void init_battery() panel = &panel1[i]; battery = &panel->battery; + if (battery_dir == 0) battery->area.on_screen = 0; + if (!battery->area.on_screen) continue; + battery->area.parent = panel; battery->area.panel = panel; battery->area._draw_foreground = draw_battery; battery->area._resize = resize_battery; + battery->area.resize = 1; + battery->area.redraw = 1; - if (battery_dir == 0) panel->battery.area.on_screen = 0; - if (!battery->area.on_screen) continue; if((fp = fopen(path_energy_now, "r")) == NULL) { fprintf(stderr, "ERROR: battery applet can't open energy_now\n"); panel->battery.area.on_screen = 0; @@ -204,26 +137,103 @@ void init_battery() } fclose(fp); - battery->area.posy = panel->area.pix.border.width + panel->area.paddingy; - battery->area.height = panel->area.height - (2 * battery->area.posy); - battery->area.resize = 1; - battery->area.redraw = 1; - update_battery(&battery_state); snprintf(buf_bat_percentage, sizeof(buf_bat_percentage), "%d%%", battery_state.percentage); snprintf(buf_bat_time, sizeof(buf_bat_time), "%02d:%02d", battery_state.time.hours, battery_state.time.minutes); get_text_size(bat1_font_desc, &bat_percentage_height_ink, &bat_percentage_height, panel->area.height, buf_bat_percentage, strlen(buf_bat_percentage)); - battery->bat1_posy = (battery->area.height - bat_percentage_height) / 2; - get_text_size(bat2_font_desc, &bat_time_height_ink, &bat_time_height, panel->area.height, buf_bat_time, strlen(buf_bat_time)); + if (panel_horizontal) { + // panel horizonal => fixed height and posy + battery->area.posy = panel->area.pix.border.width + panel->area.paddingy; + battery->area.height = panel->area.height - (2 * battery->area.posy); + } + else { + // panel vertical => fixed width, height, posy and posx + battery->area.posy = panel->clock.area.posy + panel->clock.area.height + panel->area.paddingx; + battery->area.height = (2 * battery->area.paddingxlr) + (bat_time_height + bat_percentage_height); + battery->area.posx = panel->area.pix.border.width + panel->area.paddingy; + battery->area.width = panel->area.width - (2 * panel->area.pix.border.width) - (2 * panel->area.paddingy); + } + + battery->bat1_posy = (battery->area.height - bat_percentage_height) / 2; battery->bat1_posy -= ((bat_time_height_ink + 2) / 2); battery->bat2_posy = battery->bat1_posy + bat_percentage_height + 2 - (bat_percentage_height - bat_percentage_height_ink)/2 - (bat_time_height - bat_time_height_ink)/2; } } +void update_battery() { + FILE *fp; + char tmp[25]; + int64_t energy_now = 0, energy_full = 0, current_now = 0; + int seconds = 0; + int8_t new_percentage = 0; + + fp = fopen(path_energy_now, "r"); + if(fp != NULL) { + fgets(tmp, sizeof tmp, fp); + energy_now = atoi(tmp); + fclose(fp); + } + + fp = fopen(path_energy_full, "r"); + if(fp != NULL) { + fgets(tmp, sizeof tmp, fp); + energy_full = atoi(tmp); + fclose(fp); + } + + fp = fopen(path_current_now, "r"); + if(fp != NULL) { + fgets(tmp, sizeof tmp, fp); + current_now = atoi(tmp); + fclose(fp); + } + + fp = fopen(path_status, "r"); + if(fp != NULL) { + fgets(tmp, sizeof tmp, fp); + fclose(fp); + } + + battery_state.state = BATTERY_UNKNOWN; + if(strcasecmp(tmp, "Charging\n")==0) battery_state.state = BATTERY_CHARGING; + if(strcasecmp(tmp, "Discharging\n")==0) battery_state.state = BATTERY_DISCHARGING; + + if(current_now > 0) { + switch(battery_state.state) { + case BATTERY_CHARGING: + seconds = 3600 * (energy_full - energy_now) / current_now; + break; + case BATTERY_DISCHARGING: + seconds = 3600 * energy_now / current_now; + break; + default: + seconds = 0; + break; + } + } else seconds = 0; + + battery_state.time.hours = seconds / 3600; + seconds -= 3600 * battery_state.time.hours; + battery_state.time.minutes = seconds / 60; + seconds -= 60 * battery_state.time.minutes; + battery_state.time.seconds = seconds; + + if(energy_full > 0) + new_percentage = (energy_now*100)/energy_full; + + if(battery_low_status != 0 && battery_low_status == new_percentage && battery_state.percentage > new_percentage) { + //printf("battery low, executing: %s\n", battery_low_cmd); + if (battery_low_cmd) system(battery_low_cmd); + } + + battery_state.percentage = new_percentage; +} + + void draw_battery (void *obj, cairo_t *c, int active) { Battery *battery = obj; @@ -267,6 +277,8 @@ void resize_battery(void *obj) snprintf(buf_bat_percentage, sizeof(buf_bat_percentage), "%d%%", battery_state.percentage); snprintf(buf_bat_time, sizeof(buf_bat_time), "%02d:%02d", battery_state.time.hours, battery_state.time.minutes); + // vertical panel doen't adjust width + if (!panel_horizontal) return; cairo_surface_t *cs; cairo_t *c; @@ -304,7 +316,7 @@ void resize_battery(void *obj) if(new_width > old_width || new_width < (old_width-6)) { // refresh and resize other objects on panel // we try to limit the number of refresh - printf("battery_width %d, new_width %d\n", battery->area.width, new_width); + // printf("battery_width %d, new_width %d\n", battery->area.width, new_width); panel->area.resize = 1; systray.area.resize = 1; panel_refresh = 1;