factograf
KO
Sign in

GDK

GDK
All data from the card 10
원저자
김프(GIMP) 개발자들
개발자
그놈 프로젝트
안정화 버전
4.11.5
저장소
gitlab.gnome.org/GNOME/gtk/tree/master/gdk
프로그래밍 언어
C
운영 체제
리눅스, MacOS, 마이크로소프트 윈도우
플랫폼
X 윈도 시스템 코어 프로토콜, Wayland, 쿼츠 및 GDI
종류
소프트웨어 라이브러리
라이선스
GNU 약소 일반 공중 사용 허가서 (LGPL)
웹사이트
developer.gnome.org/gdk3/stable/

GDK(GIMP Drawing Kit)는 기반이 되는 윈도 시스템과 그래픽 시스템이 제공하는 저수준 기능을 감싸는 래퍼 역할을 하는 라이브러리이다. GDK는 디스플레이 서버와 GTK 라이브러리 사이에 위치하며, 그리기 프리미티브, 래스터 그래픽스(비트맵), 커서, 글꼴과 같은 기본적인 렌더링은 물론, 윈도 이벤트와 드래그 앤드 드롭 기능을 처리한다.

GTK 씬 그래프 키트(GSK)와 마찬가지로, GDK는 GTK의 일부이며 GNU 약소 일반 공중 사용 허가서(LGPL)에 따라 라이선스가 부여된다.

소프트웨어 아키텍처

GDK는 X11, Wayland, 브로드웨이(HTTP), 쿼츠 및 GDI를 위한 백엔드를 포함하며, 렌더링을 위해 카이로에 의존한다. 새로운 씬 그래프(캔버스)는 현재 개발 중이며, GTK 4.0에서 도입될 예정이다.
GDK는 X11, Wayland, 브로드웨이(HTTP), 쿼츠 및 GDI를 위한 백엔드를 포함하며, 렌더링을 위해 카이로에 의존한다. 새로운 씬 그래프(캔버스)는 현재 개발 중이며, GTK 4.0에서 도입될 예정이다.

GTK는 GDK라고 하는 추상화 계층 위에 구현되어, GTK가 입력 수집, 드래그 앤드 드롭, 픽셀 형식 변환과 같은 저수준의 고민에서 벗어나게 해준다. GDK는 GTK를 윈도 시스템의 세부 사항으로부터 분리하는 중간 계층이다.

GDK는 GTK의 이식성에 있어 중요한 부분이다. 저수준의 크로스 플랫폼 기능은 이미 GLib에서 제공되기 때문에, GTK를 다른 플랫폼에서 실행하기 위해 필요한 것은 GDK를 해당 운영체제의 그래픽 계층으로 포팅하는 것뿐이다. 따라서 윈도우 API와 쿼츠로의 GDK 포트는 GTK 응용 프로그램이 각각 윈도우와 MacOS에서 실행될 수 있게 한다.

GTK+ 2.8부터 GDK는 카이로를 지원하며, 이는 GDK의 그리기 함수 대신 GTK+ 3과 함께 사용하는 것이 권장된다.

GDK는 GTK를 윈도 시스템의 세부 사항으로부터 격리하는 중간 계층이다. GDK는 Xlib을 감싸는 얇은 래퍼이다. X 윈도 시스템은 Xlib이라는 저수준 라이브러리를 함께 제공한다. GDK의 거의 모든 함수는 해당 Xlib 함수를 감싸는 매우 얇은 래퍼이지만, 프로그래밍을 단순화하고 Wayland나 마이크로소프트 윈도우와 같은 다른 윈도 시스템으로 GDK를 더 쉽게 포팅하기 위해 Xlib의 복잡성(및 기능) 일부는 숨겨져 있다. 제공되는 Xlib 기능은 주로 응용 프로그램을 대상으로 하며, 예를 들어 창 관리자만 사용하는 많은 기능은 GDK에 노출되지 않는다.

GDK는 그래픽스 파이프라인을 더 잘 제어하기 위해 OpenGL(또는 OpenGL ES)을 지원한다.

GdkFrameClock

GdkFrameClock은 GTK 3.8에서 추가되었다.

GTK 응용 프로그램은 여전히 메인 루프 기반으로 동작하지만(참조: Glib 이벤트 루프), 이는 응용 프로그램이 대부분의 시간 동안 메인 루프 안에서 이벤트를 기다리며 유휴 상태로 있다가 이벤트가 발생하면 적절한 서브루틴을 호출함을 의미하며, GdkFrameClock은 응용 프로그램에 창을 언제 업데이트하고 다시 그릴지 알려주는 추가적인 메커니즘을 제공한다. 업데이트 속도는 모니터 재생 빈도와 동기화될 수 있다.

GTK 씬 그래프 키트

역사적으로 GDK는 몇 가지 다른 캔버스를 포함하고 연결해 왔다.

  • https://wiki.gnome.org/Attic/ProjectRidley/CanvasOverview
    • https://wiki.gnome.org/Attic/ProjectRidley/CanvasOverview/Canvases
  • https://wiki.gnome.org/Projects/GooCanvas

개발자들은 또한 더 이상 사용되지 않는 API 구성 요소를 제거하고, 클러터(Clutter) 그래픽 라이브러리와 유사한 통합 씬 그래프(캔버스) 시스템을 추가하여 GTK를 OpenGL 및 벌칸과 효과적으로 통합하는 등 라이브러리를 위한 새로운 방향을 고려하고 있었다.

  • GTK 씬 그래프 키트(GSK)

GTK+ 씬 그래프 키트(GSK)는 2017년 3월 GTK+ 3.90의 일부로 출시되었다. 이는 GTK를 위한 씬 그래프 및 렌더링 API이다. GSK는 GDK(이 역시 GTK의 일부)와 더 이상 통합되지 않고 자체 디렉토리에 유지된다.

윈도 시스템

GDK는 몇 가지 윈도 시스템에 대한 백엔드를 포함하고 있는데, 구체적으로 X11 및 Wayland 프로토콜, 쿼츠 및 GDI, 그리고 심지어 하이퍼텍스트 전송 프로토콜(HTTP) 엔진인 브로드웨이(Broadway)에 대한 백엔드가 있다.

2015년 3월 그놈 3.16 출시와 함께, GDK는 미르 디스플레이 서버 프로토콜을 위한 실험적인 백엔드를 확보했다. 미르 디스플레이 서버 프로토콜은 캐노니컬이 자사의 리눅스 배포판인 우분투를 위해 만든 제품으로, Wayland 디스플레이 서버 프로토콜과 경쟁하려는 의도로 만들어졌으며, 현재까지는 우분투에서만 구현되어 있다.

현재로서는 KMS를 위한 백엔드는 존재하지 않는다.

환경 변수 GDK_BACKEND를 사용하여 응용 프로그램을 시작하고 해당 인스턴스가 특정 윈도 시스템을 사용하도록 강제할 수 있다.
GDK_BACKEND=wayland gnome-calculator
GDK_BACKEND=wayland CLUTTER_BACKEND=wayland cheese

gdk-pixbuf

gdk-pixbuf는 이미지 로딩 및 픽셀 버퍼 조작을 위한 툴킷이다. 이 라이브러리는 이미지 로딩 및 저장 기능, 픽스버퍼(pixbuf)의 빠른 크기 조정 및 합성, 간단한 애니메이션 로딩(예: 애니메이션 GIF), 그리고 libart 이미지 버퍼를 GdkDrawable 인스턴스로 렌더링하는 기능을 제공한다.

gdk-pixbuf는 상당히 방대한 API를 가지고 있다.

gdk-pixbuf 라이브러리의 근본적인 구조는 GdkPixbuf인데, 이는 ArtPixBuf가 지원하는 많은 개념을 반영하는 비공개 불투명 데이터 구조이다. 사실, GdkPixbuf의 대부분의 비공개 데이터 필드는 대응하는 ArtPixBuf의 필드와 동일한 이름과 데이터 유형을 가진다. 이러한 유사성은 gdk-pixbuf가 libart를 감싸던 초기 시절로 거슬러 올라간다. 그 이후 libart 의존성은 제거되었고, gdk-pixbuf는 GTK+ 2.0 코드 베이스에 병합되었다. 따라서 독립형 라이브러리로서 gdk-pixbuf의 시대는 그놈 1 릴리스로 한정된다.

2010년 9월 23일 GTK+ 2.22가 출시되면서, gdk-pixbuf는 gtk+ 2.0 이후 GTK+의 일부로 제공되던 것에서 다시 독립형 라이브러리로 전환되었다. 이는 GTK+ 3으로의 전환을 준비하기 위한 것이었다.

  • https://git.gnome.org/browse/gdk-pixbuf/

최초의 독립형 릴리스는 2010년 9월 21일의 2.22이며, 개발은 2010년 6월 23일 2.21.3부터 시작되었다.

역사

GDK는 원래 김프(GIMP) 래스터 그래픽스 편집기를 위해 X 윈도 시스템에서 개발되었다.

외부 링크

  • GDK code from release GTK+ 3.19.0
  • The modern Gtk drawing model – Alexander Larsson, 2013/11/04
  • Overview of GTK and its Libraries 보관됨 2019-03-12 - 웨이백 머신 - The GTK Project
  • https://git.gnome.org/browse/gtk-web/plain/images/architecture.svg

틀:GTK

Read next

In 9 languages

Text from Wikipedia, CC BY-SA 4.0 · Source article