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 93 94 95 96 97 98 99 100 101
| #include <stdlib.h>
#include <stdio.h>
#include <gtk/gtk.h>
#define SPEED 100
gboolean TimeoutAccelfunc(GtkWidget *LabelValue)
{
guint value=(guint)g_strtod(gtk_label_get_label(GTK_LABEL(LabelValue)), NULL);
if (value<200)
{
value++;
gchar *NewValue=g_strdup_printf("%d", value);
gtk_label_set_label(GTK_LABEL(LabelValue), NewValue);
g_free(NewValue);
}
return TRUE;
}
gboolean TimeoutDecelfunc(GtkWidget *LabelValue)
{
guint value=(guint)g_strtod(gtk_label_get_label(GTK_LABEL(LabelValue)), NULL);
if (value>=0)
{
value--;
gchar *NewValue=g_strdup_printf("%d", value);
gtk_label_set_label(GTK_LABEL(LabelValue), NewValue);
g_free(NewValue);
}
return TRUE;
}
void DecelPressedFunc(GtkButton *button, GtkWidget *ValueLabel)
{
guint *source=(guint*)g_malloc(sizeof(guint));
*source=g_timeout_add(SPEED, (GSourceFunc)TimeoutDecelfunc, ValueLabel);
g_object_set_data(G_OBJECT(button), "source", source);
}
void AccelPressedFunc(GtkButton *button, GtkWidget *ValueLabel)
{
guint *source=(guint*)g_malloc(sizeof(guint));
*source=g_timeout_add(SPEED, (GSourceFunc)TimeoutAccelfunc, ValueLabel);
g_object_set_data(G_OBJECT(button), "source", source);
}
void DecelReleaseFunc(GtkButton *button, GtkWidget *ValueLabel)
{
guint *source=(guint*)g_object_get_data(G_OBJECT(button), "source");
if (g_source_remove(*source))
g_free(source);
}
void AccelReleaseFunc(GtkButton *button, GtkWidget *ValueLabel)
{
guint *source=(guint*)g_object_get_data(G_OBJECT(button), "source");
if (g_source_remove(*source))
g_free(source);
}
void start_gtk(int argc,char **argv)
{
gtk_init (&argc, &argv);
GtkWidget *win = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_container_set_border_width (GTK_CONTAINER (win), 0);
gtk_window_set_title (GTK_WINDOW (win), "test bouton");
gtk_window_set_position (GTK_WINDOW (win), GTK_WIN_POS_CENTER);
g_signal_connect (win, "destroy", gtk_main_quit, NULL);
GtkWidget *table = gtk_table_new (3, 2, FALSE);
gtk_container_add (GTK_CONTAINER (win), table);
/* Création des boutons et du label */
GtkWidget *AccelButton=gtk_button_new_from_stock(GTK_STOCK_ADD);
GtkWidget *DecelButton=gtk_button_new_from_stock(GTK_STOCK_REMOVE);
GtkWidget *ValueLabel=gtk_label_new("100");
/* Insertion du tout dans la table */
gtk_table_attach_defaults(GTK_TABLE(table), ValueLabel, 0, 2, 0, 1);
gtk_table_attach_defaults(GTK_TABLE(table), DecelButton, 0, 1, 1, 2);
gtk_table_attach_defaults(GTK_TABLE(table), AccelButton, 1, 2, 1, 2);
/* Attachement des différents signaux. */
g_signal_connect(G_OBJECT(DecelButton), "pressed", (GCallback)DecelPressedFunc, ValueLabel);
g_signal_connect(G_OBJECT(AccelButton), "pressed", (GCallback)AccelPressedFunc, ValueLabel);
g_signal_connect(G_OBJECT(DecelButton), "released", (GCallback)DecelReleaseFunc, ValueLabel);
g_signal_connect(G_OBJECT(AccelButton), "released", (GCallback)AccelReleaseFunc, ValueLabel);
gtk_widget_show_all (win);
gtk_main ();
}
int main(int argc,char **argv)
{
start_gtk(argc,argv);
return 0;
} |
Partager