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 <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;
} |