1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92
| #include <stdlib.h>
#include <gtk/gtk.h>
#include <strings.h>
int flag_depart=1;
char format_sortie[50];
typedef struct
{
GtkWidget *widget1;
GTimer *widget2;
} MyStruct; /* une structure pour passer plusieurs argument à un callback */
int main(int argc, char **argv)
{
/* déclaration des widgets */
[...]
GtkWidget *pLabel; /* un label */
GTimer *timer; /* un chronomètre */
gchar* sUtf8; /* pour formater des chaines de characteres */
[...]
MyStruct struct_tempo; /* une struct pour passer plusieurs arguments à une fonction callback */
[...]
gboolean OnExpose(GtkWidget *pWidget, GdkEvent *event, gpointer pData); /* fonction call back expose-event */
[...]
/* création du label */
pLabel=gtk_label_new(NULL);
(void)sprintf(format_sortie, "<span font_desc=\"25\"><b>00 : 00 : 00</b></span>");
sUtf8 = g_locale_to_utf8(format_sortie, -1, NULL, NULL, NULL);
gtk_label_set_markup(GTK_LABEL(pLabel), sUtf8);
g_free(sUtf8);
/* on verse le label dans la struct */
struct_tempo.widget1=pLabel;
/* création du timer */
timer=g_timer_new();
/* on verse le time dans la struct */
struct_tempo.widget2=timer;
/* Connexion des signaux */
g_signal_connect(G_OBJECT(pWindow), "expose-event", G_CALLBACK(OnExpose), (gpointer )&struct_tempo);
[...]
return EXIT_SUCCESS;
}
gboolean OnExpose(GtkWidget *pWidget, GdkEvent *event, gpointer pData)
{
/* Mise a jour du label */
char tempo[1000],h[3],m[3],s[3];
int heures=0, minutes=0;
GTimeSpan secondes=0;
gchar* sUtf8;
MyStruct *struct_tempo2;
struct_tempo2= (MyStruct *)pData;
float convertir(GTimeSpan *secondes, int *minutes, int *heures);
if (flag_depart)
{
secondes=(GTimeSpan)g_timer_elapsed(struct_tempo2->widget2, NULL);
convertir(&secondes, &minutes, &heures);
if (secondes>9)
(void)sprintf(s, "%d",secondes);
else
(void)sprintf(s, "0%d",secondes);
if (minutes>9)
(void)sprintf(m, "%d",minutes);
else
(void)sprintf(m, "0%d",minutes);
if (heures>9)
(void)sprintf(h, "%d",heures);
else
(void)sprintf(h, "0%d",heures);
(void)sprintf(tempo, "<span font_desc=\"25\"><b>%s : %s : %s</b></span>",h, m, s);
sUtf8 = g_locale_to_utf8(tempo, -1, NULL, NULL, NULL);
gtk_label_set_markup(GTK_LABEL(struct_tempo2->widget1), tempo);
}
g_free(sUtf8);
return FALSE;
}
float convertir(GTimeSpan *secondes, int *minutes, int * heures)
{
/* converti des secondes en heures, minutes et secondes */
while (*secondes>59)
{
*minutes=*minutes+1;
*secondes=*secondes-60;
}
while (*minutes>59)
{
*heures=*heures+1;
*minutes=*minutes-60;
}
} |
Partager