| 12
 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 <stdbool.h>
#include <stdio.h>
#include <string.h>
#include "gtk/gtk.h"
#include <pthread.h>
 
static GtkWidget *window;
static GtkWidget *grid;
static GtkWidget *buttonRead;
static GtkWidget *buttonStart;
 
static GtkCssProvider *provider;
static GdkDisplay *display;
static GdkScreen *screen;
 
static int iret1 = 0;
static pthread_t thread1;
 
static int nb = 0;
 
static void on_destroy (GtkWidget *widget, gpointer data){
	gtk_main_quit ();
}
 
gboolean on_counter_changed (gpointer user_data)
{
	if (nb % 2 == 0)
		gtk_button_set_label(GTK_BUTTON(buttonRead), "Read");
	else
		gtk_button_set_label(GTK_BUTTON(buttonRead), "Write");
 
	g_print(" new label is %s\n", gtk_button_get_label(GTK_BUTTON(buttonRead)));
	provider = gtk_css_provider_new ();
	gtk_style_context_add_provider_for_screen (screen, GTK_STYLE_PROVIDER (provider), GTK_STYLE_PROVIDER_PRIORITY_USER);
	char *css = g_strdup_printf (" GtkButton#buttonRead {\n"
			" color: %s;\n"
			"}\n",
			nb % 2 ? "blue" : "red");
 
	gtk_css_provider_load_from_data (GTK_CSS_PROVIDER (provider), css, -1, NULL);
	g_object_unref (provider);
	g_free (css);
	return TRUE;
}
 
static void *threadRun( )
{
	while (1)
	{
		sleep(1);
		nb +=1;
		g_print(" nb is %d\n", nb);
	}
	return NULL;
}
 
 
static void callbackButtonStart( GtkWidget *widget, gpointer *data ){
	g_timeout_add_seconds (1, on_counter_changed, NULL);
	iret1 = pthread_create( &thread1, NULL, threadRun, (void*) NULL);
}
 
static void initLayout(){
	window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
	gtk_window_maximize (GTK_WINDOW (window));
	gtk_window_set_title (GTK_WINDOW (window), "Test");
	gtk_container_set_border_width (GTK_CONTAINER (window), 20);
	g_signal_connect (window, "destroy", G_CALLBACK (on_destroy), NULL);
 
	grid = gtk_grid_new ();
	gtk_grid_set_column_spacing (GTK_GRID(grid),10);
	gtk_grid_set_row_spacing (GTK_GRID(grid),10);
	gtk_container_add (GTK_CONTAINER (window), grid);
 
	buttonRead = gtk_button_new_with_label ("Read");
	gtk_widget_set_name (GTK_WIDGET(buttonRead), "buttonRead");
	gtk_widget_set_size_request(buttonRead, 90,50);
	gtk_grid_attach(GTK_GRID(grid),buttonRead,1,0,1,1);
 
	buttonStart = gtk_button_new_with_label ("Start");
	gtk_widget_set_size_request(buttonStart, 90,50);
	gtk_grid_attach(GTK_GRID(grid),buttonStart,2,0,1,1);
	g_signal_connect (buttonStart, "clicked", G_CALLBACK (callbackButtonStart), "Read");
 
	gtk_widget_show_all(window);
}
 
int main( int argc, char *argv[] ) {
	gtk_init (&argc, &argv);
	initLayout();
	display = gdk_display_get_default ();
	screen = gdk_display_get_default_screen (display);
 
	printf("screen width is %d\n", gdk_screen_get_width(screen));
	printf("screen height is %d\n\n", gdk_screen_get_height(screen));
 
	gtk_main();
	return 0;
} | 
Partager