본문 바로가기

Linux/GTK

event mask GDK_NOTHING a special code to indicate a null event. GDK_DELETE the window manager has requested that the toplevel window be hidden or destroyed, usually when the user clicks on a special icon in the title bar. GDK_DESTROY the window has been destroyed. GDK_EXPOSE all or part of the window has become visible and needs to be redrawn. GDK_MOTION_NOTIFY the pointer (usually a mouse) has moved. GDK_.. 더보기
Example 다음 이전 차례 21. 낙서장, 간단한 그리기 예제 21.1 개요 여기서 우리는 간단한 그리기 프로그램을 만들 것이다. 그 과정에서 우리는 마우스 이벤트를 어떻게 다루는지 알아볼 것이고, 윈도 안에 어떻게 그림을 그리는지, 그리고 픽스맵을 배경으로 해서 더 나은 그림을 그리는 방법도 배울 것이다. 간단한 그리기 프로그램을 만든 후에, 우리는 그것에 drawing tablet 같은 XInput device를 지원하는 등의 확장을 시도할 것이다. GTK는 그런 device 들로부터 pressure와 tilt같은, 확장된 정보를 얻어낼 수 있게 하는 support routine을 제공한다. 21.2 이벤트 다루기 우리가 이미 살펴본 GTK의 시그널은 메뉴 아이템 선택처럼 고수준의 동작을 위한 것들이다. 하지만.. 더보기
Create my widget 다음 이전 차례 20. 자신만의 widget 만들기 20.1 개요 비록 GTK 배포판에 포함되어 있는 수많은 widget들이 대부분의 기본적인 요구사항을 충족시켜 주지만, 언젠가 스스로 새로운 widget을 만들어야 할 때가 올 것이다. GTK가 widget의 상속을 광범위하게 이용하고 또 이 만들어져 있는 widget들이 여러분의 요구에 근접한 것들이기 때문에, 유용하고 새로운 widget을 만드는 것도 단지 몇 줄의 코드로써 가능할 수도 있다. 그러나 새로운 widget을 만드는 작업을 시작하기 전에, 먼저 누군가 그것을 이미 만들어 놓지 않았는지 체크하자. 이렇게 해서 노력의 중복을 막고 또 GTK widget의 갯수를 최소한으로 유지할 수 있다. 이것은 서로 다른 어플들 사이에서 코드와 인터페이스.. 더보기
rc file at GTK 다음 이전 차례 19. GTK의 rc 파일 GTK는 rc 파일을 이용해서 어플의 디폴트 환경을 다룬다. 이들은 앞서 설명한 어떤 widget의 색깔은 물론 배경에 넣을 pixmap을 설정할 수도 있다. 19.1 rc 파일을 위한 함수 어플을 시작하는 부분에서 이 함수를 포함시키자. void gtk_rc_parse (char *filename); 인자는 우리 rc 파일의 이름이다. 이것은 GTK가 이 파일을 읽어서 widget들의 스타일을 그곳에 정의된 대로 세팅하도록 한다. 만약 widget들 중에 다른 것들과 구별되어야 할 특별한 스타일을 가져야 할 것이 있다면, 또는 다른 목적으로 widget들을 논리적으로 분류하려면, 이 함수를 이용한다. void gtk_widget_set_name (GtkWidg.. 더보기
glib 다음 이전 차례 18. glib glib는 GDK 및 GTK 어플을 개발할 때 많은 유용한 함수와 정의들을 제공한다. 나는 여기서 그들을 간단한 설명과 함께 보일 것이다. 상당수는 표준의 libc와 중복되기 때문에 그들에 대해 자세히 다루진 않는다. 이것은 주로 하나의 참고로서, 어떤 것을 이용할 수 있는가를 파악하게 할 것이다. 18.1 정의 많은 자료형들에 대한 extreme 값들의 정의는 이렇다. G_MINFLOAT G_MAXFLOAT G_MINDOUBLE G_MAXDOUBLE G_MINSHORT G_MAXSHORT G_MININT G_MAXINT G_MINLONG G_MAXLONG 또한, typedef들도 있다. 왼쪽의 것들은 기계의 architecture에 의해 다르게 세팅된다. 호환성을 유지하.. 더보기
Managing Selection 다음 이전 차례 17. Selection 관리하기 17.1 개요 GTK가 제공하는 프로세스 사이의 통신형태 중 하나는 selection이다. Selection은 사용자가 마우스로 긁거나 해서 선택된 텍스트의 일부같은, 데이터 조각들을 인식한다. 사용자가 어떤 순간에 선택하고 있을 수 있는 어플은 하나 뿐이며, 따라서 어떤 어플에 의해 선택이 요구되었을 때, 이전의 소유자는 selection이 포기되었음을 사용자에게 표시해 주어야 한다. 다른 어플들은 target이라 불리는, 다른 형태의 selection을 요청한다. Selection의 갯수는 제한이 없지만, 대부분의 X윈도 어플들은 primary selection이라고 부르는 단 하나만을 다룬다. 대부분 경우, GTK 어플이 selection 자체를 다.. 더보기
Timeout and I/O and idle functions 다음 이전 차례 16. 타임아웃, 그리고 I/O와 Idle 함수들 16.1 타임아웃 아마 gtk_main에서 어떻게 GTK에게 유용한 작업을 하게 만들지 궁금할 것이다. 여기에는 몇가지 옵션이 있다. 이 함수를 이용하면 매 millisecond마다 호출될 타임아웃 함수를 만들수 있다. gint gtk_timeout_add (guint32 interval, GtkFunction function, gpointer data); 첫번째 인자는 우리가 함수를 호출하는데 걸린 시간이다. 두번째는 부르려 했던 함수고, 세번째는 이 callback함수로 넘겨진 데이터다. 리턴값은 정수형의 "tag"으로 이 함수를 호출함으로써 타임아웃을 중지하기 위해 쓰인다. void gtk_timeout_remove (gint tag.. 더보기
setting Widget properties 다음 이전 차례 15. Widget의 속성을 세팅하기 여기서는 widget들을 조작하기 위한 함수들이 소개된다. 이것들은 style, padding, size 등을 세팅하기 위해 쓰인다. (Accelerator에 대한 별도의 섹션이 필요한 것 같다.) void gtk_widget_install_accelerator (GtkWidget *widget, GtkAcceleratorTable *table, gchar *signal_name, gchar key, guint8 modifiers); void gtk_widget_remove_accelerator (GtkWidget *widget, GtkAcceleratorTable *table, gchar *signal_name); void gtk_widget_act.. 더보기
EventBox Widget 다음 이전 차례 14. 이벤트박스 widget 어떤 GTK widget들은 그들만의 X윈도를 가지지 않고 단지 그들의 parent윈도에 그려질 뿐이다. 이로 인해 그들은 이벤트를 받을 수 없고 또 부정확한 크기로 변했을 때 클립되지 않기 때문에 어지럽게 덧칠되어 버릴 수도 있다. 이런 widget에 대해 좀더 많은 것을 기대하려면 바로 이 EventBox를 이용할 수 있다. 얼핏 보기에, EventBox widget은 전혀 쓸모없을 수도 있다. 이것은 스크린에 아무것도 그리지 않으며 이벤트에도 응답하지 않는다. 하지만 이것은 자신의 child widget으로 X윈도를 제공하는 한 함수를 지원한다. 이것은 많은 GTK widget들이 관련된 X윈도를 가지지 않는다는 점에서 중요하다. X윈도를 가지지 않는 .. 더보기
Text Widget 다음 이전 차례 12. 텍스트 widget 텍스트 widget은 여러 줄의 텍스트를 보여주거나 편집할 수 있게 해준다. 여러가지 색이나 글꼴을 원하는 대로 동시에 섞어서 쓸 수 있다. 또한 키입력에 바탕을 둔 많은 수의 Emacs와 호환 텍스트 편집 명령들도 지원한다. 텍스트 widget은 한 단어나 한줄 전체를 선택(select)하는 더블 클릭, 트리플 클릭을 포함해서 완전한 cut-and-paste 기능을 갖고 있다. 12.1 텍스트 상자 만들기와 설정. 텍스트 widget을 만드는 함수는 단 하나뿐이다. GtkWidget* gtk_text_new (GtkAdjustment *hadj, GtkAdjustment *vadj); 인자들은 현재 widget이 보여주고 있는 텍스트의 위치를 추적할 수 있게 .. 더보기