Kamis, 03 April 2014

GTK Programming : Hello World Window


GTK(GIMP Toolkit) sekarang ini merupakan komponen wajib dalam sistem operasi UNIX, karena sebagian besar aplikasi yang berjalan pada linux dibangun dengan GTK API. Lain halnya dengan Windows, dalam sistem ini sudah disediakan komponen sendiri untuk membangun aplikasi berbasis GUI. Dengan demikian, bisa dibilang GNU/Linux dan Windows memiliki cara tersendiri untuk menangani Window. GTK pada Linux dan Window system pada Windows memiliki keunggulan dan kekurangan masing-masing, tapi karena disini kita lebih membahas GTK, saya hanya akan menunjukkan bagian kelebihan dan kekurangan yang berkaitan GTK.
1. GTK sekarang mendukung Linux, Windows dan MacOS
2. Dokumentasi singkat dan lebih jelas
3. Widget lebih lengkap(menurut saya) dan mudah dikonfigurasi.
4. Dan yang paling saya sukai, GTK mendukung improvisasi desain dengan CSS.

Sejauh ini saya hanya menemukan sedikit hal yang membuat GTK kurang efektif dipakai di Windows:
1. Library tidak di built-in dengan Windows, sehingga bundle GTK harus disertakan dalam satu paket aplikasi. Tapi hal ini tidak seberapa penting, karena program berbasis GTK lebih mudah dikompilasi untuk berbagai sistem operasi.
2. Program harus dimasukkan dalam struktur folder yang sudah ditentukan. Disini program yang kita buat harus ditaruh pada folder 'bin' agar menjadi satu kumpulan direktori dengan library GTK. Ini juga tidak terlalu dipermasalahkan, karena pengguna program nantinya pun tidak akan peduli dengan hal ini.

Let's Start
Oke, untuk mempelajari GTK lebih dekat, sekarang kita akan belajar bagaimana membuat window sederhana dengan gtk.. :)

#include <gtk/gtk.h>

int main(int argc, char *argv[])
{
    GtkWidget *window;
    gtk_init (&argc, &argv);
    window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
    gtk_widget_show (window);
    gtk_main ();
    return 0;
}

Kode pertama yang harus kita tulis adalah kode untuk menyertakan header gtk. cukup tulis #include<gtk/gtk.h>.
Program berbasis GTK harus melakukan inisialisasi sebelum memulai membuat widget. Inisialisasi dilakukan dengan prototype fungsi sebagi berikut :
void gtk_init (int *argc, char ***argv);

Setelah melakukan inisialisasi, kita bisa membuat widget apapun. Pada tulisan kali ini, kita akan membuat sebuah window. Yang harus dibuat pertama kali adalah membuat variabel pointer GtkWidget (GtkWidget* nama). Setiap kita meminta GTK membuatkan widget, kita akan mendapatkan sebuah pointer struktur GtkWidget. Dalam struktur ini terdapat berbagai informasi untuk mengatur penampilan widget.
GtkWidget *window;

Oke, sekarang kita akan membuat sebuah window. Menurut dokumentasi GTK, pembuatan window dapat dilakukan dengan prototype fungsi seperti ini.
GtkWidget * gtk_window_new(GtkWindowType type);

Seperti yang kita lihat, fungsi mengembalikan pointer GtkWidget. Pointer ini akan sangat berguna dalam perancangan tampilan program, misalnya mengubah title bar, mengubah posisi, mengubah ukuran dll. Bukan hanya pada widget window, di widget lain, seperti GtkButton, GtkTextView dan widget lainnya juga demikian.
Parameter yang dibutuhkan untuk membuat window hanya 1, yaitu tipe window yang ingin kita buat. Sejauh ini ada 2 tipe yang bisa kita buat, yaitu GTK_WINDOW_TOPLEVEL dan GTK_WINDOW_POPUP. Secara sederhana perbedaannya adalah, window top level window yang pertama kali dibuat sementara itu window pop up adalah window lain yang dikontrol melalui window top level.

Setelah semua widget yang kita inginkan telah kita buat, sekarang saatnya untuk menampilkannya. :)
Dalam hal ini kita bisa menggunakan fungsi gtk_widget_show, dengan parameter widget yang akan ditampilkan.
void gtk_widget_show (GtkWidget *widget);

Sudah? eits, kita masih kurang 1 hal lagi. Tambahkan fungsi looping untuk membuat window tetap berjalan sesuai yang kita inginkan.

gtk_main ();

O, iya untuk mengubah nama window, silahkan coba sendiri ya :)
void gtk_window_set_title (GtkWindow *window, const gchar *title);

Nih, sekalian saya beri contoh:
gtk_window_set_title (window, "Hello world");


Cara Kompilasi :
1. Linux
gcc base.c -o base `pkg-config --cflags --libs gtk+-2.0`
Sebelumnya jangan lupa instal libgtk2.0-dev
2. Windows
Jalankan "pkg-config --cflags --libs gtk+-2.0" melalui command prompt(pkg-config.exe berada di folder bin pada bundle gtk). Anda nanti akan mendapatkan string semacam ini:
-mms-bitfields -IE:/gtk/include/gtk-3.0 -IE:/gtk/include/cairo -IE:/gtk/include/pango-1.0 -IE:/gtk/include/atk-1.0 -IE:/gtk/include/cairo -IE:/gtk/include/pixman-1 -IE:/gtk/include -IE:/gtk/include/freetype2 -IE:/gtk/include -IE:/gtk/include/libpng15 -IE:/gtk/include/gdk-pixbuf-2.0 -IE:/gtk/include/libpng15 -IE:/gtk/include/glib-2.0 -IE:/gtk/lib/glib-2.0/include -LE:/gtk/lib -lgtk-3 -lgdk-3 -lgdi32 -limm32 -lshell32 -lole32 -Wl,-luuid -lpangocairo-1.0 -lpangoft2-1.0 -lfreetype -lfontconfig -lpangowin32-1.0 -lgdi32 -lpango-1.0 -lm -latk-1.0 -lcairo-gobject -lcairo -lgdk_pixbuf-2.0 -lgio-2.0 -lgobject-2.0 -lglib-2.0 -lintl

Lakukan kompilasi dengan GCC melalui Command prompt.
@path %path%;C:\MinGW-4.8.1\bin
gcc hello.c -o hello.exe -mms-bitfields -IE:/gtk/include/gtk-3.0 -IE:/gtk/include/cairo -IE:/gtk/include/pango-1.0 -IE:/gtk/include/atk-1.0 -IE:/gtk/include/cairo -IE:/gtk/include/pixman-1 -IE:/gtk/include -IE:/gtk/include/freetype2 -IE:/gtk/include -IE:/gtk/include/libpng15 -IE:/gtk/include/gdk-pixbuf-2.0 -IE:/gtk/include/libpng15 -IE:/gtk/include/glib-2.0 -IE:/gtk/lib/glib-2.0/include -LE:/gtk/lib -lgtk-3 -lgdk-3 -lgdi32 -limm32 -lshell32 -lole32 -Wl,-luuid -lpangocairo-1.0 -lpangoft2-1.0 -lfreetype -lfontconfig -lpangowin32-1.0 -lgdi32 -lpango-1.0 -lm -latk-1.0 -lcairo-gobject -lcairo -lgdk_pixbuf-2.0 -lgio-2.0 -lgobject-2.0 -lglib-2.0 -lintl


Hasil




Referensi :
https://developer.gnome.org/gtk3/3.12/GtkWindow.html
http://vega.inp.nsk.su/~pshatuno/books/gtk-tut1.pdf

Load disqus comments

2 comments