카이로 (그래픽스)

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

카이로(Cairo)는 키스 패커드와 칼 워스가 X 윈도 시스템에서 사용하기 위해 개발한 2D 그래픽 라이브러리이다. C 언어를 기반으로 하며, C++, C#, 파이썬, 자바 등 다양한 언어 바인딩을 지원한다. FLTK, GTK, SDL 등 그래픽 사용자 인터페이스 툴킷과 통합되어 사용되며, X 윈도 시스템, Win32 GDI, macOS 쿼츠 컴포지터, PNG, PDF, SVG 등 다양한 백엔드 출력을 지원한다. 드로잉 모델은 마스크 생성, 소스 정의, 표면 전송의 세 단계로 이루어지며, GTK, 모노 프로젝트, 모질라, 웹킷, 잉크스케이프 등 오픈 소스 프로젝트에서 널리 사용된다. 복잡한 텍스트 레이아웃을 위해서는 팡고를 함께 사용할 것을 권장한다.

카이로 (그래픽스) - [IT 관련 정보]에 관한 문서
일반 정보
종류그래픽 라이브러리
개발자키스 패커드, 칼 워스
개발칼 워스, 베흐다드 에스파흐보드
초기 릴리스2003년 이전
프로그래밍 언어C 언어
라이선스GNU LGPL 버전 2.1 (단독) 또는 MPL 1.1
웹사이트카이로 그래픽스 공식 웹사이트
저장소카이로 저장소
📚 더 읽어볼만한 페이지
  • GTK - Pango
    Pango는 텍스트 렌더링 라이브러리로, OpenType 기능을 지원하여 텍스트 렌더링의 유연성을 높였으며, 리눅스, GTK 툴킷, 모질라 제품군 등 다양한 소프트웨어에서 사용되고 2006년 Cairo에 통합되어 다양한 플랫폼에서 텍스트와 그래픽 렌더링을 지원한다.
  • GTK - GObject
    GObject는 GNOME 프로젝트의 핵심 객체 지향 시스템으로, GType을 통한 런타임 정보 관리, 클로저와 시그널 기반 메시징 시스템을 갖추고 있으며, 다양한 언어 바인딩을 지원하여 CUI, 서버 애플리케이션 및 자유 소프트웨어 프로젝트에서 활용된다.
  • Freedesktop.org - D-Bus
    D-Bus는 2002년에 시작된 프로세스 간 통신 시스템으로, 시스템 버스와 세션 버스를 통해 정보 공유, 모듈성, 권한 격리를 제공하며, 일대일 요청-응답 및 발행/구독 통신 방식을 지원한다.
  • Freedesktop.org - 메사 (컴퓨터 그래픽스)
    메사는 다양한 운영체제에서 3D 그래픽 하드웨어 가속을 지원하는 자유-오픈 소스 그래픽 라이브러리로, OpenGL, Vulkan, OpenCL 등 다양한 그래픽 API를 지원하며 소프트웨어 렌더링 기능도 제공한다.
  • LGPL 라이선스 소프트웨어 - Qt (소프트웨어)
    Qt는 C++로 작성된 크로스 플랫폼 애플리케이션 개발 프레임워크로, GUI, 멀티미디어, 네트워크 등 다양한 기능을 제공하며, 시그널과 슬롯 메커니즘과 Qt Creator 등의 개발 도구를 통해 데스크톱, 임베디드, 모바일 UI 개발에 널리 사용된다.
  • LGPL 라이선스 소프트웨어 - GTK
    GTK는 GIMP를 위해 개발된 크로스 플랫폼 GUI 툴킷으로, 다양한 운영체제와 프로그래밍 언어를 지원하며 여러 데스크톱 환경 및 애플리케이션에서 활용된다.

2. 역사

키스 패커드와 칼 워스는 X 윈도 시스템에서 사용하기 위해 카이로 프로젝트를 설립했다. 초기에는(최소 2003년까지) Xr 또는 Xr/Xc라고 불렸으나, 디스플레이 서버에 접근하기 위한 X 윈도 시스템에 얽매이지 않는 크로스 플랫폼 라이브러리라는 점을 강조하기 위해 이름이 변경되었다. 카이로라는 이름은 원래 이름 Xr에서 유래되었으며, 그리스 문자 키와 로로 해석된다.

3. 소프트웨어 아키텍처

카이로는 다양한 언어 바인딩을 제공하여 여러 프로그래밍 언어에서 사용할 수 있으며, 그래픽 사용자 인터페이스 툴킷과의 통합을 통해 활용도를 높이고 있다.

3.1. 언어 바인딩

C 언어가 기본 API이지만, C++, C# 및 기타 CLI 언어, 델파이, 에펠, 포트란, 팩터, 하버, 하스켈, 줄리아, 루아, , PHP, 파이썬, 루비, 러스트, Scheme, 스몰토크, Gambas (Visual Basic과 유사) 등 여러 언어에 대한 바인딩을 제공한다. Ada, C++, Common Lisp, Factor, Haskell, Java, Lua, Mono와 .NET, Perl, PHP, Python, Ruby, Scheme, Smalltalk 등의 바인딩도 존재한다.

3.2. 툴킷 바인딩

카이로는 드로잉 라이브러리이므로, 그래픽 사용자 인터페이스 툴킷과 통합하면 매우 유용할 수 있다.

* FLTK는 전체 카이로 지원을 한다(`--enable-cairo` 컴파일 스위치를 통해).
* GTK는 2005년 버전 2.8부터 카이로를 사용하여 대부분의 그래픽 제어 요소를 렌더링하기 시작했으며, 버전 3.0부터 모든 렌더링이 카이로를 통해 수행된다.
* 카이로 개발팀은 SDL에 표면을 렌더링하기 위한 최신 지침을 유지 관리한다.
* 모질라 파이어폭스 - 렌더링 엔진 게코의 그리기에 카이로를 채용.
* Poppler - 카이로를 사용한 PDF 그리기 라이브러리.
* GNU Emacs - 버전 28.1에서 카이로를 채용

3.3. 백엔드

카이로는 코드 내에서 "표면"이라고 하는 다양한 래스터화를 포함한 여러 가지 백 엔드로의 출력을 지원한다. 지원되는 백 엔드에는 XlibXCB를 통한 X 윈도우 시스템, Win32 GDI(마이크로소프트 윈도우), OS X 쿼츠 컴포지터, BeOS API, OS/2, OpenGL 컨텍스트(직접 및 글리츠를 통해), 로컬 이미지 버퍼, PNG 파일, PDF, 포스트스크립트, DirectFB 및 SVG 파일 출력이 포함된다.

OpenVG, Qt, Skia 및 마이크로소프트의 Direct2D 그래픽 API를 대상으로 하는 다른 백 엔드도 개발 중이다. BeOS, OS/2 및 DirectFB 백 엔드는 2022년에 중단되었다.

4. 드로잉 모델

카이로 드로잉 모델
카이로 드로잉 모델

카이로 드로잉 모델은 3계층 모델에 의존한다.

모든 드로잉 프로세스는 다음 세 단계로 진행된다.
# 먼저 원, 사각형, 트루타입 글꼴, 베지어 곡선 등 하나 이상의 벡터 기본 요소 또는 형태를 포함하는 마스크가 생성된다.
# 그런 다음 색상, 색상 그라데이션, 비트맵 또는 일부 벡터 그래픽일 수 있는 소스를 정의하고, 이 소스의 칠해진 부분에서 위에서 정의된 마스크를 사용하여 다이 컷을 만든다.
# 마지막으로 결과는 출력용 백엔드에서 제공하는 대상 또는 표면으로 전송된다.

이것은 CSS(Cascading Style Sheets) 규칙으로 도형의 색상을 지정하는 SVG(Scalable Vector Graphics)와 근본적으로 다른 접근 방식이다. 카이로는 도형의 마스크를 만들고, 소스를 만든 다음 표면으로 전송하는 반면, SVG 파일은 `style` 속성으로 도형을 간단히 지정한다. 즉, 모델이 호환되지 않는 것은 아니며, 많은 SVG 렌더러가 카이로를 사용하여 복잡한 작업을 처리한다.

카이로를 사용하면 단 몇 줄의 소스 코드로 매우 복잡한 "Hello world" 그래픽을 그릴 수 있다.
이 예제에서 생성된 SVG 그림
이 예제에서 생성된 SVG 그림

5. 주요 사용처

* GTK는 2005년 버전 2.8부터 그래픽 컨트롤 요소의 대부분을 렌더링하기 위해 카이로를 사용한다. GTK 버전 3부터는 모든 렌더링이 카이로를 사용하여 수행된다.
* 모질라 프로젝트는 게코 레이아웃 엔진에서 카이로를 사용해 왔다. 게코는 모질라 제품의 그래픽 출력을 렌더링하는 데 사용된다. 파이어폭스 3의 기반이 되는 게코 1.9 릴리스는 웹 페이지 콘텐츠와 사용자 인터페이스를 모두 렌더링하기 위한 그래픽 백엔드로 카이로를 사용한다.
* WebKit 프레임워크는 GTK 및 EFL 포트에서 모든 렌더링에 카이로를 사용한다.
* Poppler 라이브러리는 PDF 문서를 렌더링하기 위해 카이로를 사용하며, 안티앨리어싱된 벡터 그래픽과 투명 객체의 그리기를 가능하게 한다.
* 벡터 그래픽 응용 프로그램인 잉크스케이프는 0.46 릴리스부터 PDF 및 PostScript 내보내기를 위해 카이로 라이브러리를 사용한다.
* Manim의 원래 버전은 ManimCairo라고 불렸다. 이후 OpenGL을 사용하도록 변경되었으며, 이 버전은 ManimGL이라고 한다.
* FontForge는 2008년 10월 중순부터 렌더링에 카이로를 기본적으로 활성화했다.
* R은 카이로를 사용할 수 있는 경우 PDF, PostScript 및 SVG 형식으로 플롯을 출력할 수 있다.
* Gnuplot 4.4는 이제 PDFPNG 출력을 렌더링하기 위해 카이로를 사용한다.
* Synfig 0.64는 이제 선택적으로 카이로 렌더링을 지원한다.
* Graphite에서 시계열 데이터의 온디맨드 그래프를 지원한다.
* SolveSpace는 무료 오픈 소스 2D 및 3D CAD 소프트웨어이다.
* GIMP에서 사용된다.
* GNU Emacs는 버전 28.1에서 카이로를 채용했다.

6. 복잡한 텍스트 레이아웃

카이로는 라틴어 및 CJK 기반 글꼴을 처리하지만, 글리프 셰이핑이 필요한 복잡한 텍스트 레이아웃 글꼴은 직접 지원하지 않는다. 카이로 개발자는 복잡한 텍스트 레이아웃을 제공하고 카이로와 통합될 수 있는 팡고를 사용할 것을 권장한다.