void update_clocks() { if (time1_format) strftime(buf_time, sizeof(buf_time), time1_format, clock_gettime_for_tz(time1_timezone)); if (time2_format) strftime(buf_date, sizeof(buf_date), time2_format, clock_gettime_for_tz(time2_timezone)); if (time1_format || time2_format) { for (int i = 0; i < num_panels; i++) panels[i].clock.area.resize_needed = 1; } schedule_panel_redraw(); }
void init_clock_panel(void *p) { Panel *panel =(Panel*)p; Clock *clock = &panel->clock; if (!time1_font_desc) time1_font_desc = pango_font_description_from_string(DEFAULT_FONT); if (!time2_font_desc) time2_font_desc = pango_font_description_from_string(DEFAULT_FONT); if (!clock->area.bg) clock->area.bg = &g_array_index(backgrounds, Background, 0); clock->area.parent = p; clock->area.panel = p; clock->area._draw_foreground = draw_clock; clock->area.size_mode = SIZE_BY_CONTENT; clock->area._resize = resize_clock; // check consistency if (!time1_format) return; clock->area.resize = 1; clock->area.on_screen = 1; if (time_tooltip_format) { clock->area._get_tooltip_text = clock_get_tooltip; strftime(buf_tooltip, sizeof(buf_tooltip), time_tooltip_format, clock_gettime_for_tz(time_tooltip_timezone)); } }
void init_clock_panel(void *p) { Panel *panel = (Panel *)p; Clock *clock = &panel->clock; if (!clock->area.bg) clock->area.bg = &g_array_index(backgrounds, Background, 0); clock_init_fonts(); clock->area.parent = p; clock->area.panel = p; snprintf(clock->area.name, sizeof(clock->area.name), "Clock"); clock->area._is_under_mouse = full_width_area_is_under_mouse; clock->area.has_mouse_press_effect = clock->area.has_mouse_over_effect = panel_config.mouse_effects && (clock_lclick_command || clock_mclick_command || clock_rclick_command || clock_uwheel_command || clock_dwheel_command); clock->area._draw_foreground = draw_clock; clock->area.size_mode = LAYOUT_FIXED; clock->area._resize = resize_clock; clock->area._compute_desired_size = clock_compute_desired_size; clock->area._dump_geometry = clock_dump_geometry; // check consistency if (!time1_format) return; clock->area.resize_needed = 1; clock->area.on_screen = TRUE; instantiate_area_gradients(&clock->area); if (time_tooltip_format) { clock->area._get_tooltip_text = clock_get_tooltip; strftime(buf_tooltip, sizeof(buf_tooltip), time_tooltip_format, clock_gettime_for_tz(time_tooltip_timezone)); } }
int resize_clock (void *obj) { Clock *clock = obj; Panel *panel = clock->area.panel; int time_height_ink, time_height, time_width, date_height_ink, date_height, date_width, ret = 0; clock->area.redraw = 1; date_height = date_width = 0; strftime(buf_time, sizeof(buf_time), time1_format, clock_gettime_for_tz(time1_timezone)); get_text_size2(time1_font_desc, &time_height_ink, &time_height, &time_width, panel->area.height, panel->area.width, buf_time, strlen(buf_time)); if (time2_format) { strftime(buf_date, sizeof(buf_date), time2_format, clock_gettime_for_tz(time2_timezone)); get_text_size2(time2_font_desc, &date_height_ink, &date_height, &date_width, panel->area.height, panel->area.width, buf_date, strlen(buf_date)); } if (panel_horizontal) { int new_size = (time_width > date_width) ? time_width : date_width; new_size += (2*clock->area.paddingxlr) + (2*clock->area.bg->border.width); if (new_size > clock->area.width || new_size < (clock->area.width-6)) { // we try to limit the number of resize clock->area.width = new_size + 1; clock->time1_posy = (clock->area.height - time_height) / 2; if (time2_format) { clock->time1_posy -= (date_height)/2; clock->time2_posy = clock->time1_posy + time_height; } ret = 1; } } else { int new_size = time_height + date_height + (2 * (clock->area.paddingxlr + clock->area.bg->border.width)); if (new_size != clock->area.height) { // we try to limit the number of resize clock->area.height = new_size; clock->time1_posy = (clock->area.height - time_height) / 2; if (time2_format) { clock->time1_posy -= (date_height)/2; clock->time2_posy = clock->time1_posy + time_height; } ret = 1; } } return ret; }
void clock_compute_text_geometry(Panel *panel, int *time_height_ink, int *time_height, int *time_width, int *date_height_ink, int *date_height, int *date_width) { *date_height = *date_width = 0; strftime(buf_time, sizeof(buf_time), time1_format, clock_gettime_for_tz(time1_timezone)); get_text_size2(time1_font_desc, time_height_ink, time_height, time_width, panel->area.height, panel->area.width, buf_time, strlen(buf_time), PANGO_WRAP_WORD_CHAR, PANGO_ELLIPSIZE_NONE, FALSE); if (time2_format) { strftime(buf_date, sizeof(buf_date), time2_format, clock_gettime_for_tz(time2_timezone)); get_text_size2(time2_font_desc, date_height_ink, date_height, date_width, panel->area.height, panel->area.width, buf_date, strlen(buf_date), PANGO_WRAP_WORD_CHAR, PANGO_ELLIPSIZE_NONE, FALSE); } }
char *clock_get_tooltip(void *obj) { strftime(buf_tooltip, sizeof(buf_tooltip), time_tooltip_format, clock_gettime_for_tz(time_tooltip_timezone)); return strdup(buf_tooltip); }
const char* clock_get_tooltip(void* obj) { UNUSED (obj); strftime(buf_tooltip, sizeof(buf_tooltip), time_tooltip_format, clock_gettime_for_tz(time_tooltip_timezone)); return buf_tooltip; }