From 3eafd05678e154ef090272537e3ab677286c22c8 Mon Sep 17 00:00:00 2001 From: Kyle K Date: Fri, 21 Feb 2014 13:50:21 -0600 Subject: initial gtk2 examples --- .gitignore | 4 +++ Makefile | 25 ++++++++++++++++ envsetup.sh | 6 ++++ gtkhello1.c | 52 ++++++++++++++++++++++++++++++++++ gtkimgpaint.c | 91 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ gtkkeypress.c | 69 ++++++++++++++++++++++++++++++++++++++++++++ 6 files changed, 247 insertions(+) create mode 100644 .gitignore create mode 100644 Makefile create mode 100755 envsetup.sh create mode 100644 gtkhello1.c create mode 100644 gtkimgpaint.c create mode 100644 gtkkeypress.c diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..336fc6e --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +.cproject +.settings +.project +*.o diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..c76e00b --- /dev/null +++ b/Makefile @@ -0,0 +1,25 @@ +BINS = gtkhello1 gtkkeypress +BINS3 = gtkimgpaint + +CC = gcc +CFLAGS = -Wall -std=gnu99 -pedantic +DBGFLAGS = -g -O0 +ifdef MYDEBUG + CFLAGS += $(DBGFLAGS) -D DEBUG +else + CFLAGS += -O2 -mtune=native -march=native +endif +LDFLAGS = -lm + +all: $(BINS) $(BINS3) + +$(BINS): %: %.c + $(CC) `pkg-config --cflags --libs gtk+-2.0` $(CFLAGS) $(LDFLAGS) $^ -o $@ + +$(BINS3): %: %.c + $(CC) `pkg-config --cflags --libs gtk+-3.0` $(CFLAGS) $(LDFLAGS) $^ -o $@ + +.PHONY: clean + +clean: + @rm -f ./$(BINS) $(BINS3) diff --git a/envsetup.sh b/envsetup.sh new file mode 100755 index 0000000..c0d178c --- /dev/null +++ b/envsetup.sh @@ -0,0 +1,6 @@ +export ACLOCAL="aclocal -I /usr/local/share/aclocal" +export PKG_CONFIG_PATH="/usr/local/lib/pkgconfig:/usr/local/share/pkgconfig" +export LD_LIBRARY_PATH=/usr/local/lib + +export MYDEBUG=1 +export GTK_DEBUG=misc diff --git a/gtkhello1.c b/gtkhello1.c new file mode 100644 index 0000000..a4107a8 --- /dev/null +++ b/gtkhello1.c @@ -0,0 +1,52 @@ +#include +#include + +/* 1st arg is the button widget, second is the win ptr being passed around */ +static void helloWorld(GtkWidget *wid, GtkWidget *win) +{ + GtkWidget *dialog = NULL; + + dialog = gtk_message_dialog_new(GTK_WINDOW (win), GTK_DIALOG_MODAL, GTK_MESSAGE_INFO, GTK_BUTTONS_CLOSE, "Hello World!"); + gtk_window_set_position(GTK_WINDOW (dialog), GTK_WIN_POS_CENTER); + gtk_dialog_run(GTK_DIALOG (dialog)); + gtk_widget_destroy(dialog); +} + +int main(int argc, char *argv[]) +{ + GtkWidget *button = NULL; + GtkWidget *win = NULL; + GtkWidget *vbox = NULL; + + /* Initialize GTK+ */ + g_log_set_handler("Gtk", G_LOG_LEVEL_WARNING, (GLogFunc) gtk_false, NULL); + gtk_init(&argc, &argv); + g_log_set_handler("Gtk", G_LOG_LEVEL_WARNING, g_log_default_handler, NULL); + + /* Create the main window */ + win = gtk_window_new(GTK_WINDOW_TOPLEVEL); + gtk_container_set_border_width(GTK_CONTAINER (win), 8); + gtk_window_set_title(GTK_WINDOW (win), "Hello World"); + gtk_window_set_position(GTK_WINDOW (win), GTK_WIN_POS_CENTER); + gtk_widget_realize(win); + g_signal_connect(win, "destroy", gtk_main_quit, NULL); + + /* Create a vertical box with buttons */ + vbox = gtk_vbox_new(TRUE, 6); + gtk_container_add(GTK_CONTAINER (win), vbox); + + button = gtk_button_new_from_stock(GTK_STOCK_DIALOG_INFO); + g_signal_connect(G_OBJECT (button), "clicked", G_CALLBACK (helloWorld), (gpointer) win); + gtk_box_pack_start(GTK_BOX (vbox), button, TRUE, TRUE, 0); + + button = gtk_button_new_from_stock(GTK_STOCK_CLOSE); + g_signal_connect(button, "clicked", gtk_main_quit, NULL); + gtk_box_pack_start(GTK_BOX (vbox), button, TRUE, TRUE, 0); + + /* Enter the main loop */ + gtk_widget_show_all(win); + gtk_main(); + + return 0; +} + diff --git a/gtkimgpaint.c b/gtkimgpaint.c new file mode 100644 index 0000000..853c03f --- /dev/null +++ b/gtkimgpaint.c @@ -0,0 +1,91 @@ +#include +#include + +static void +on_open_image (GtkButton* button, gpointer user_data) +{ + GtkWidget *image = GTK_WIDGET (user_data); + GtkWidget *toplevel = gtk_widget_get_toplevel (image); + GtkFileFilter *filter = gtk_file_filter_new (); + GtkWidget *dialog = gtk_file_chooser_dialog_new (_("Open image"), + GTK_WINDOW (toplevel), + GTK_FILE_CHOOSER_ACTION_OPEN, + GTK_STOCK_OK, GTK_RESPONSE_ACCEPT, + GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, + NULL); + + gtk_file_filter_add_pixbuf_formats (filter); + gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (dialog), + filter); + + switch (gtk_dialog_run (GTK_DIALOG (dialog))) + { + case GTK_RESPONSE_ACCEPT: + { + gchar *filename = + gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog)); + gtk_image_set_from_file (GTK_IMAGE (image), filename); + break; + } + default: + break; + } + gtk_widget_destroy (dialog); +} + + +static GtkWidget* +create_window (void) +{ + GtkWidget *window; + GtkWidget *button; + GtkWidget *image; + GtkWidget *box; + + /* Set up the UI */ + window = gtk_window_new (GTK_WINDOW_TOPLEVEL); + gtk_window_set_title (GTK_WINDOW (window), "image-viewer-c"); + + box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 5); + button = gtk_button_new_with_label (_("Open image")); + image = gtk_image_new (); + + gtk_box_pack_start (GTK_BOX (box), image, TRUE, TRUE, 0); + gtk_box_pack_start (GTK_BOX (box), button, FALSE, FALSE, 0); + + gtk_container_add (GTK_CONTAINER (window), box); + + /* Connect signals */ + + /* Show open dialog when opening a file */ + g_signal_connect (button, "clicked", G_CALLBACK (on_open_image), image); + + /* Exit when the window is closed */ + g_signal_connect (window, "destroy", G_CALLBACK (gtk_main_quit), NULL); + + return window; +} + + +int +main (int argc, char *argv[]) +{ + GtkWidget *window; + + +#ifdef ENABLE_NLS + bindtextdomain (GETTEXT_PACKAGE, PACKAGE_LOCALE_DIR); + bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8"); + textdomain (GETTEXT_PACKAGE); +#endif + + + gtk_init (&argc, &argv); + + window = create_window (); + gtk_widget_show_all (window); + + gtk_main (); + return 0; +} + diff --git a/gtkkeypress.c b/gtkkeypress.c new file mode 100644 index 0000000..363bd3b --- /dev/null +++ b/gtkkeypress.c @@ -0,0 +1,69 @@ +#include +#include + +gboolean +on_key_press (GtkWidget *widget, GdkEventKey *event, gpointer user_data); + +int main (int argc, char *argv[]) +{ + GtkWidget *window; + + gtk_init (&argc, &argv); + + window = gtk_window_new (GTK_WINDOW_TOPLEVEL); + + g_signal_connect (G_OBJECT (window), "destroy", G_CALLBACK (gtk_main_quit), NULL); + g_signal_connect (G_OBJECT (window), "key_press_event", G_CALLBACK (on_key_press), NULL); + + gtk_widget_show_all (window); + + gtk_main (); + + return 0; +} + +gboolean +on_key_press (GtkWidget *widget, GdkEventKey *event, gpointer user_data) +{ + switch (event->keyval) + { + case GDK_p: + printf("key pressed: %s\n", "p"); + break; + case GDK_S: + case GDK_s: + if (event->state & GDK_SHIFT_MASK) + { + printf("key pressed: %s\n", "shift + s"); + } + else if (event->state & GDK_CONTROL_MASK) + { + printf("key pressed: %s\n", "ctrl + s"); + } + else + { + printf("key pressed: %s\n", "s"); + } + break; + case GDK_m: + if (event->state & GDK_SHIFT_MASK) + { + printf("key pressed: %s\n", "shift + m"); + } + else if (event->state & GDK_CONTROL_MASK) + { + printf("key pressed: %s\n", "ctrl + m"); + } + else + { + printf("key pressed: %s\n", "m"); + } + break; + + default: + return FALSE; + } + + return FALSE; +} + -- cgit v1.2.3