Monday, October 18, 2010

Use Graphical Libray of GTK+ 2.0 in C programs and Complie with GCC / G++.

In ubuntu (10.10, Lucid Lynx), you can use GTK+ graphical libraries along with gcc / g++ to write graphical applications. There are 2 ways to install Gtk+ in ubuntu.


1. Download Source code and install using ./configure, make, make install. You need to ensure that some dependant packages are already installed (pango, cairo, atk, pixman, glib, gdk-pixbuff, etc).


2. Second method is to use the binary (.deb) packages available on Ubuntu repositories.


In order to Install GTK+-2.0 package under ubuntu, you need to install all below packages, which will install all libraries needed for GTK+ to work.


* gir1.0-gtk-2.0_2.20.1-0ubuntu2_i386.deb (543.7 KiB)

* gtk2-engines-pixbuf_2.20.1-0ubuntu2_i386.deb (718.8 KiB)

* gtk2.0-examples_2.20.1-0ubuntu2_i386.deb (977.7 KiB)

* libgail-common_2.20.1-0ubuntu2_i386.deb (442.7 KiB)

* libgail-dbg_2.20.1-0ubuntu2_i386.deb (869.5 KiB)

* libgail-dev_2.20.1-0ubuntu2_i386.deb (333.2 KiB)

* libgail-doc_2.20.1-0ubuntu2_all.deb (333.1 KiB)

* libgail18_2.20.1-0ubuntu2_i386.deb (332.6 KiB)

* libgtk-directfb-2.0-0_2.20.1-0ubuntu2_i386.deb (2.1 MiB)

* libgtk-directfb-2.0-0-udeb_2.20.1-0ubuntu2_i386.udeb (1.8 MiB)

* libgtk-directfb-2.0-dev_2.20.1-0ubuntu2_i386.deb (327.3 KiB)

* libgtk2.0-0_2.20.1-0ubuntu2_i386.deb (2.4 MiB)

* libgtk2.0-0-dbg_2.20.1-0ubuntu2_i386.deb (10.2 MiB)

* libgtk2.0-bin_2.20.1-0ubuntu2_all.deb (328.9 KiB)

* libgtk2.0-common_2.20.1-0ubuntu2_all.deb (706.0 KiB)

* libgtk2.0-dev_2.20.1-0ubuntu2_i386.deb (3.6 MiB)

* libgtk2.0-doc_2.20.1-0ubuntu2_all.deb (3.8 MiB)


Note : The package libgtk-directfb-2.0-0-udeb_2.20.1-0ubuntu2_i386.udeb may fail to install. You may ignore it.


3. Write a simple Program in C (sample given below),

#include

/* This is a callback function. The data arguments are ignored
* in this example. More on callbacks below. */

static void hello( GtkWidget *widget, gpointer data )
{
   g_print ("Hello World\n");
}

static gboolean delete_event( GtkWidget *widget, GdkEvent *event, gpointer data )
{
/* If you return FALSE in the "delete-event" signal handler,
* GTK will emit the "destroy" signal. Returning TRUE means
* you don't want the window to be destroyed.
* This is useful for popping up 'are you sure you want to quit?'
* type dialogs. */

g_print ("delete event occurred\n");

/* Change TRUE to FALSE and the main window will be destroyed with
* a "delete-event". */
return TRUE;
}

/* Another callback */
static void destroy( GtkWidget *widget, gpointer data )
{
gtk_main_quit ();
}

int main( int argc, char *argv[] )
{
/* GtkWidget is the storage type for widgets */
GtkWidget *window;
GtkWidget *button;

/* This is called in all GTK applications. Arguments are parsed
* from the command line and are returned to the application. */
gtk_init (&argc, &argv);

/* create a new window */
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);

/* When the window is given the "delete-event" signal (this is given
* by the window manager, usually by the "close" option, or on the
* titlebar), we ask it to call the delete_event () function
* as defined above. The data passed to the callback
* function is NULL and is ignored in the callback function. */
g_signal_connect (window, "delete-event",G_CALLBACK (delete_event), NULL);

/* Here we connect the "destroy" event to a signal handler.
* This event occurs when we call gtk_widget_destroy() on the window,
* or if we return FALSE in the "delete-event" callback. */
g_signal_connect (window, "destroy",G_CALLBACK (destroy), NULL);

/* Sets the border width of the window. */
gtk_container_set_border_width (GTK_CONTAINER (window), 10);

/* Creates a new button with the label "Hello World". */
button = gtk_button_new_with_label ("Hello World");

/* When the button receives the "clicked" signal, it will call the
* function hello() passing it NULL as its argument. The hello()
* function is defined above. */
g_signal_connect (button, "clicked",G_CALLBACK (hello), NULL);

/* This will cause the window to be destroyed by calling
* gtk_widget_destroy(window) when "clicked". Again, the destroy
* signal could come from here, or the window manager. */
g_signal_connect_swapped (button, "clicked",G_CALLBACK (gtk_widget_destroy), window);

/* This packs the button into the window (a gtk container). */
gtk_container_add (GTK_CONTAINER (window), button);

/* The final step is to display this newly created widget. */
gtk_widget_show (button);

/* and the window */
gtk_widget_show (window);

/* All GTK applications must have a gtk_main(). Control ends here
* and waits for an event to occur (like a key press or
* mouse event). */
gtk_main ();
return 0;
}
4.Compile using below command,
gcc -Wall -g HellowWorld.c -o HellowWorld `pkg-config --cflags gtk+-2.0` `pkg-config --libs gtk+-2.0`

 
5.To run the output file, ./HellowWorld


No comments:

Post a Comment