GTK+

위키백과, 우리 모두의 백과사전.
이동: 둘러보기, 검색
GTK+
GTK+ logo.svg
개발자 그놈 재단
안정화 버전 3.10.6 / 2013년 12월 5일, 136일 경과
미리보기 버전 3.11.2 / 2013년 11월 19일, 152일 경과
운영 체제 크로스 플랫폼
종류 개발 라이브러리
라이선스 LGPL
웹사이트 www.gtk.org

GTK+김프 툴킷(GIMP Toolkit)의 준말로, 초기에 김프를 위해서 만든 툴킷이었으며 X 윈도 시스템을 위한 위젯 툴킷 가운데 하나이다. GTK+와 Qt모티프에 대한 좋은 대안이 되어 주었다. GTK+는 1997년 Spencer Kimball, Peter Mattis, 조시 맥도널드(Josh MacDonald)가 함께 만든 것이다. 그들은 모두 UC 버클리에 있는 eXperimental Computing Facility (XCF) 소속이었다. LGPL로 라이선스되었기 때문에, GTK+는 자유 소프트웨어이자 오픈 소스 소프트웨어이고, GNU 프로젝트의 일부분이다.

설계[편집]

GTK+는 C언어로 작성된 객체지향 위젯 툴킷이다. X11 디스플레이 서버 상에서, GTK+는 위젯들을 그리는데 Xlib를 사용한다. Xlib는 유연하고 X 윈도 시스템이 작동하지 않는 플랫폼에서도 GTK+가 사용될 수 있도록 한다.

GTK+는 Qt와 마찬가지로 (다른 많은 위젯 툴킷들과 달리) Xt에 기반을 두지 않는다. 그래서 GTK+를 많은 다른 환경으로 이식할 수 있었다. 하지만 전통적인 X11 응용 프로그램의 사용자 설정 방식인 X 리소스 데이터베이스에 접근할 수 없다는 단점이 있다.

언어 바인딩[편집]

C++, , 루비, 자바, 파이썬 등으로의 바인딩을 제공한다. 많은 사람들이 에이다, D, 하스켈, 파스칼, PHP, 닷넷 프레임워크로의 바인딩을 작성하였다.

Hello World 프로그램[편집]

C[편집]

  • 소스 코드
#include <gtk/gtk.h>
 
int main (int argc, char *argv[])
{
    GtkWidget *window;
    GtkWidget *label;
 
    gtk_init(&argc, &argv);
 
    /* Create the main, top level window */
    window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
 
    /* Give it the title */
    gtk_window_set_title(GTK_WINDOW(window), "Hello, world!");
 
    /*
    ** Map the destroy signal of the window to gtk_main_quit;
    ** When the window is about to be destroyed, we get a notification and
    ** stop the main GTK+ loop by returning 0
    */
    g_signal_connect(window, "destroy", G_CALLBACK(gtk_main_quit), NULL);
 
    /*
    ** Assign the variable "label" to a new GTK label,
    ** with the text "Hello, world!"
    */
    label = gtk_label_new("Hello, world!");
 
    /* Plot the label onto the main window */
    gtk_container_add(GTK_CONTAINER(window), label);
 
    /* Make sure that everything, window and label, are visible */
    gtk_widget_show_all(window);
 
    /*
    ** Start the main loop, and do nothing (block) until
    ** the application is closed
    */
    gtk_main();
 
    return 0;
}
  • 빌드 명령
$ gcc -Wall helloworld.c -o helloworld $(pkg-config --cflags --libs gtk+-3.0)

Vala[편집]

  • 소스 코드
using Gtk;
 
int main (string[] args) {
    Gtk.init (ref args);
 
    /* Create the main, top level window */
    var window = new Window();
 
    /* Give it the title, border, position, and size */
    window.title = "Hello, World!";
    window.border_width = 10;
    window.window_position = WindowPosition.CENTER;
    window.set_default_size(350, 70);
 
    /*
    ** Map the destroy signal of the window to gtk_main_quit;
    ** When the window is about to be destroyed, we get a notification and
    ** stop the main GTK+ loop by returning 0
    */
    window.destroy.connect(Gtk.main_quit);
 
    /*
    ** Assign the variable "label" to a new GTK label,
    ** with the text "Hello, world!"
    */
    var label = new Label("Hello, World!");
 
    /* Add the label onto the main window */
    window.add(label);
 
    /* Make sure that everything, window and label, are visible */
    window.show_all();
 
    /*
    ** Start the main loop, and do nothing (block) until
    ** the application is closed
    */
    Gtk.main();
    return 0;
}
  • 빌드 명령
$ valac --pkg gtk+-3.0 HelloWorldGtk.vala

모양[편집]

사용자는 디스플레이 엔진으로 툴킷의 모양을 설정할 수 있다. 엔진들은 윈도, 모티프, Qt, 넥스트스텝등의 모양으로 그려줄 수 있다.

GTK+를 사용하는 환경[편집]

Screenshot of the GIMP 2.0 on Xfce4
  • 그놈 환경은 GTK+를 기반으로 사용한다.
  • Xfce 환경도 GTK+를 기반으로 사용한다. 하지만 Xfce용 프로그램은 많은 것에 의존하지 않는다. (이것은 그놈 프로그램과 GTK+ 프로그램을 구분한다)
  • GPE, Maemo (노키아의 인터넷 태블릿 프레임워크), 액세스 리눅스 플랫폼 (새로운 팜 OS 호환 PDA 플랫폼) 도 GTK+를 기반으로 한다.

GTK+ 프로그램은 KDE 같은 다른 데스크톱 환경에서 돌아간다. GTK+는 마이크로소프트 윈도에서도 돌아간다. DirectFBncurses 기반 포팅도 있다.

창 관리자[편집]

그래픽과 관련되지 않은 코드[편집]

GTK+는 초기에 그래픽과 관련되지 않은 코드를 포함했다. 이들은 링크드 리스트 및 바이너리 트리를 제공했다. GObject와 함께 오는 이러한 유틸리티 시스템은 Glib라는 별도의 라이브러리로 쪼개졌고, 이는 그래픽 인터페이스가 필요 없는 프로그래머에게 도움을 준다.

GTK+ 2[편집]

GTK+ 2는 GTK+를 계승하였다. 이것의 새로운 기능은 Pango를 사용하는 새로운 텍스트 렌더링 엔진, 새로운 테마 엔진, 향상된 접근성, 유니코드로의 완전한 전환이 있다. 하지만 GTK+ 2는 GTK+ 1과 호환성이 없으므로 프로그래머들이 소스를 새로 짜야 한다. 몇몇 프로그램들은 GTK+ 1을 그대로 사용한다. GTK+ 1은 GTK+ 2보다 빠르고 덜 복잡하고 임베디드 환경에 더 적합하다.

GTK+ 2.8부터는 카이로 엔진을 사용해서 벡터 그래픽을 처리한다.

차후 개발[편집]

  • Project Ridley는 GTK+가 현재 포함하지 않는 각종의 라이브러리를 포함하려고 하는 시도이다. 이들은 libgnome, libgnomeui, libgnomeprint22, libgnomeprintui22, libglade, libgnomecanvas, libegg, libeel ,gtkglext를 포함한다.

같이 보기[편집]

바깥 고리[편집]