static gboolean gtk_clock_draw (GtkWidget *widget, cairo_t *ctx) { struct tm *tms; time_t t; GtkClockPrivate *priv = GTK_CLOCK(widget)->priv; g_free(priv->time); t = time (NULL); tms = localtime(&t); priv->time = g_strdup_printf ("%.2d%c%.2d", tms->tm_hour, priv->secflash ? ':' : ' ', tms->tm_min); priv->date = g_strdup_printf ("%s %s , %s", month[tms->tm_mon], day[tms->tm_mday], weekday[tms->tm_wday]); cairo_set_source_rgba (ctx, 0.0, 0.0, 0.0, 0.6); cairo_paint (ctx); cairo_move_to (ctx, 20, 50); cairo_select_font_face (ctx, "Sans", CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_BOLD); cairo_set_font_size (ctx, 45); cairo_set_source_rgb (ctx, 1.0, 1.0, 1.0); cairo_show_text (ctx, priv->time); cairo_select_font_face (ctx, "Sans", CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_NORMAL); cairo_set_font_size (ctx, 24); cairo_move_to (ctx, 20, 84); cairo_show_text (ctx, priv->date); return FALSE; }
static gboolean gtk_clock_update (gpointer data) { GtkClock *clock = GTK_CLOCK (data); GtkClockPrivate *priv = GTK_CLOCK_GET_PRIVATE (clock); time_t timet; time (&timet); localtime_r (&timet, &priv->time); gtk_clock_redraw_canvas (clock); return TRUE; }
static void gtk_clock_realize (GtkWidget *widget) { GtkClock *clock = GTK_CLOCK(widget); GTK_WIDGET_CLASS(gtk_clock_parent_class)->realize (widget); clock->priv->timeout_id = g_timeout_add(60000, (GSourceFunc)update_time, clock); }