클러터(소프트웨어)

Clutter (software)
어수선하다
원저작자Emmanuele Bassi, OpenHand Ltd.
개발자GNOME 프로젝트
초기 릴리즈2006년 6월 22일, 16년 전(2006-06-22)
안정된 릴리스
1.26.4 / 2020년 3월 9일, 2년 전(2020-03-09)[1]
프리뷰 릴리즈
1.25.6 / 2016년 2월 18일, 6년 전(2016-02-18)[2]
저장소
기입처C
운영 체제Linux, BSD, OS X, Microsoft Windows
유형그래픽스 라이브러리
면허증.GNU 약소 일반 공중 사용 허가서[3]
웹 사이트GNOME/프로젝트/클러터

Clutter는 하드웨어 액셀러레이션 사용자 인터페이스를 작성하기 위한 GOBject 기반 그래픽 라이브러리입니다.Clutter는 OpenGL 기반의 '인터랙티브 캔버스' 라이브러리이며 그래픽 제어 요소가 포함되어 있지 않습니다.렌더링에는 OpenGL(1.4+) 또는 OpenGL ES(1.1 또는 2.0)가 필요합니다.[citation needed]GStreamer를 사용한 미디어 재생과 [4]카이로를 사용한 2D 그래픽 렌더링도 지원합니다.

Clutter는 현재 인텔의 일부인 Open Hand Ltd에 의해 작성되었습니다.Clutter는 GNU Lesser General Public License(LGPL) 버전 2.1의 [3]요건을 따르는 무료 오픈 소스 소프트웨어입니다.

2022년 2월 개발팀은 이 프로젝트를 중단한다고 발표했다.더 이상 버전이 출시되지 않으며 Clutter를 사용하는 개발자들은 애플리케이션을 GTK 4 및 libadwaita2에 이식할 것을 권장합니다.

도입

Clutter를 채택한 인기 프로그램은 GNOME 비디오(일명 GNOME Videos)입니다.토템), GNOME 쉘, Pitivi, Compon Desktop 및 GNOME Easy.

Mx는 원래 Moblin/MeeGo 넷북의 그래픽 셸용으로 설계된 Clutter 기반의 위젯 툴킷으로, 독립 프로젝트로 발전했습니다.

위젯 툴킷 Netbook Toolkit(nbtk) 및 Mx는 Clutter를 [5]기반으로 합니다.종종 Clutter는 GTK와 유사하지만 이는 정확하지 않습니다.Mx 또는 Nbtk와 함께 Clutter만 GTK의 범위와 일치할 수 있습니다.GTK와 함께 Clutter를 사용하는 이유이기도 하다.

Clutter는 멀티터치 [citation needed]제스처를 지원합니다.

GSK(GTK Scene Graph Kit)는 2017년 3월에 GTK+ 3.90의 일부로 처음 출시되었으며 UI에서 Clutter를 대체하고자 하는 GTK 기반 애플리케이션을 대상으로 합니다.

소프트웨어 아키텍처

GDK에는 X11, Wayland, Broadway(HTTP), Quartz 및 GDI에 대한 백엔드가 포함되어 있으며 렌더링에는 카이로에 의존합니다.새로운 GSK(SceneGraph)가 진행 중이며 Clutter의 SceneGraph를 사용할 수 있습니다.
Linux 기반 시스템에서 Clutter 사용 예

클러터는 유지 모드에서 작동하는 장면 그래프 기반 캔버스입니다.씬(scene)의 모든 물체는 일반적으로 3D 공간 내에 있는 2D 표면입니다.

Clutter는 백엔드 뒤에 있는 네이티브 창 환경을 추상화합니다.이 환경은 씬 그래프의 메인 컨테이너를 작성하는 역할도 합니다.이 최상위 컨테이너를 스테이지라고 부릅니다.무대 위의 물건들은 배우라고 불린다.

OpenGL과 같이 매트릭스에서 동작하는 대신 Clutter 개발자는 각 액터의 속성을 변경합니다.그러면 Clutter가 변경 사항을 인식하고 그에 따라 장면을 렌더링합니다.

Clutter는 현재 OpenHand에 의해 개발되고 있으며 데스크톱 및 임베디드 하드웨어에 시각적으로 풍부한 그래픽 사용자 인터페이스를 제공합니다.주요 타깃은 GL 및 GL/ES 기반 UI 툴킷을 위한 Media Center와 유사한 애플리케이션, 소형 디바이스 UI 및 기본 도면 API입니다.Clutter는 텍스트 렌더링에 Pango를 사용하고(특수 GL/GLES 렌더러를 사용), GdkPixbuf를 사용하여 이미지를 GL 텍스처로 로드합니다.다른 GNOME 플랫폼 라이브러리와의 상호작용은 여러 통합 라이브러리(예: clutter-gst(GStreamer), clutter-gtk(GTK 애플리케이션에 스테이지를 내장하기 위한), clutter-cairo(texture에 그리기 위한 카이로))를 통해 이루어집니다.API와 ABI는 마이크로 릴리즈 내에서 안정적으로 유지되지만 마이너 릴리즈에서는 API가 깨질 수 있습니다.1.0에 도달할 때까지 API와 ABI는 다음 메이저릴리즈까지 안정적입니다.

ClutterActor

ClutterActor는 Clutter 장면 그래프의 기본 요소로, [7]그래프에 노드의 위치, 크기 및 변환을 캡슐화합니다.

  • ClutterActor는 포인터 이벤트나 키이벤트 등의 입력 디바이스이벤트를 수신 및 처리할 수 있습니다.
  • 애니메이션은 최신 사용자 인터페이스의 핵심 개념입니다.Clutter는 배우의 상태를 자동으로 조정하는 완전하고 강력한 애니메이션 프레임워크를 제공합니다.어플리케이션 코드에서 프레임 단위로 직접 조작할 필요는 없습니다.

지원되는 플랫폼

Clutter는 GLX를 사용하는 X Window 시스템과 EGL을[8][9][10] 사용하는 Wayland용으로 개발되었습니다.클러터는 프레임 버퍼도 사용할 수 있습니다.릴리스 0.6부터 Mac OS X에 대한 네이티브 지원이 추가되었습니다.[11]0.8 릴리스[12] 이후 네이티브 Microsoft Windows 백엔드가 지원되며 Windows 사전 컴파일 DLL을 사용할 [13][14][15]수 있지만 Windows용 MinGW 및 Bash 쉘을 사용하여 Windows용 최신 DLL을 구축할 수 있습니다.

2014년 6월부터 버전 1.19.4 이후 Clutter의 evdev 입력 백엔드는 libinput 0.4.[16]0에 의존합니다.

프로그래밍 언어 바인딩

클러터는 GObject 객체 시스템에 기초한 설계와 함께 C 프로그래밍 언어를 사용하여 구현된다.바인딩은 다음 언어로 사용할 수 있습니다.

통합 라이브러리

Clutter는 다음과 같은 다른 라이브러리 및 툴킷과 통합할 수 있습니다.

  • GTK 어플리케이션은 특별한 위젯을 사용하여 Clutter 스테이지를 내장할 수 있습니다.
  • GTK+ 2.18 [17]이후 클라이언트 측 윈도 기능을 사용하여 클러터 어플리케이션에서 GTK 위젯을 삽입할 수 있습니다.
  • 클러터 애플리케이션은 GStreamer를 사용하여 동영상을 클러터 텍스처 액터에 직접 재생할 수 있습니다.
  • 클러터 애플리케이션은 카이로를 사용하여 텍스처를 그릴 수 있습니다.
  • 비디오 액셀러레이션 API

예

이 예에서는 스테이지에 라벨을 추가합니다(C로 작성).

// 장면의 모든 액터가 포함된 기본 스테이지를 가져옵니다. ClutterActor *단계. = clutter_stage_get_default ();  // 32픽셀 높이의 Sans 글꼴과 "Hello, world" 텍스트를 사용하여 새 라벨을 만듭니다. // 스테이지에 배치합니다. ClutterActor *라벨. = clutter_text_new_with_text ("Sans 32px", "안녕, 세상아"); clutter_cluter_add_actor (클루터_컨테이너 (단계.), 라벨.);  // 스테이지와 라벨 크기를 고려하여 라벨을 스테이지 중앙에 배치합니다. 흘러가다 x = (clutter_actor_get_width (단계.) - clutter_actor_get_width (라벨.)) / 2; 흘러가다 y = (clutter_actor_get_높이 (단계.) - clutter_actor_get_높이 (라벨.)) / 2; clutter_actor_set_position (라벨., x, y);  // 스테이지를 표시합니다.Clutter의 모든 배우는 무대를 제외하고 명시적으로 숨기지 않는 한 표시됩니다. // 이렇게 해서 스테이지는 // 표시되는 모든 하위 항목을 자동으로 표시합니다. clutter_actor_show (단계.); 

인터페이스 빌더

Clutter는 특수 JSON [18]사투리를 사용하여 사용자 인터페이스를 구축할 수 있습니다.전체 장면 그래프는 JSON 유형을 사용하여 정의되며 ClutterScript 클래스를 통해 런타임에 구축됩니다.

예

이 정의에 따라 메인 창이 생성되고 그 안에 Hello, world!라는 텍스트가 포함된 라벨이 배치됩니다.

{     "id": "메인 스테이지',     "타입": "Clutter Stage",     "컬러": "흰색",     '폭': 800,     "높이': 600,     "실패": "스크립트 데모",     "자녀": [{         "id": "hello-label",         "타입": "ClutterText",         "x": 400,         "y": 300,         "텍스트": "안녕, 세상아!",         "컬러": "검은색",         "이름": "Sans 48px"     }],     "실패": [{         "이름: "실패",         "실패": "contracter_main_contrace"     }] } 

정의는 파일 또는 문자열로 저장하고 다음을 사용하여 로드할 수 있습니다.

ClutterScript *대본 = clutter_script_new (); GERROR *에러 = 특수한 순서; clutter_script_load_from_data (대본, 묘사, -1, &에러); 한다면 (에러) {     경고 ("UI 설명을 로드할 수 없습니다: %s", 에러->메세지);     g_error_free (에러); } 또 다른 {     GOBject *단계.;      clutter_script_connect_module (대본, 특수한 순서); /* 신호 핸들러를 연결합니다*/     단계. = clutter_script_get_object (대본, "메인 스테이지'); /* "메인 스테이지" 오브젝트를 가져옵니다.* /     clutter_actor_show (클러터_액터 (단계.)); } 

애니매이션

클러터는 캔버스에 있는 모든 항목의 암묵적인 애니메이션을 가능하게 합니다.각 동작은 여러 배우에게 적용될 수 있고, 여러 행동을 한 배우에게 합성할 수 있습니다.행동은 암묵적으로 애니메이션을 처리합니다. 개발자는 초기 및 최종 상태, 애니메이션을 완료하는 데 필요한 시간(또는 프레임 수), 사용할 시간의 함수(선형, 사인파, 지수 등)를 지정하며, 동작이 조정을 처리합니다.Clutter는 개발자가 커스텀 동작을 구현하기 위한 일반적인 기본 클래스 및 불투명도, Z축상의 위치(깊이), 경로상의 위치, 회전 등과 같은 간단한 속성을 처리하는 다양한 클래스를 제공합니다.

Clutter 1.0 이후 Clutter Animation 클래스와 clutter_actor_animate() 편의 함수를 사용하여 간단한 일회성 애니메이션을 만들 수도 있습니다.clutter_actor_animate() 함수는 현재 상태와 지정된 최종 상태 사이의 액터 속성을 애니메이션화합니다.

예

이 예에서는 시간과 동작의 선형 함수를 사용하여 레이블 크기를 2초 만에 2배로 조정합니다.

클루터 타임라인 *타임라인 = clutter_cluter_new (2000); Clutter Alpha *알파 = clutter_alpha_new_full (타임라인, 혼탁_선형); 불규칙한 행동 *행동 = clutter_clot_scale_new (알파,                                                            1.0, 1.0, /* 초기 스케일링 팩터 */                                                            2.0, 2.0  /* 최종 스케일링 팩터 */ ); clutter_cluter_cluter (행동, 라벨.); 
이러한 문장은 2초 지속 시간, 선형 완화 모드로 시간 표시줄을 바인딩하는 알파, 요인 1.0과 요인 2.0 사이에 적용되는 모든 액터를 스케일링하는 동작(수평 및 수직 모두)을 생성합니다.마지막으로, 그것은 배우에게 그 행동을 적용합니다.

암묵적인 애니메이션 API를 사용하는 동등한 코드는 다음과 같습니다.

clutter_actor_animate (라벨.,          /* 애니메이션화할 배우 */                        혼탁_선형, /* 완화 모드 */                        2000,           /* 애니메이션 기간 */                        "스케일 x", 2.0, /* 최종 수평 스케일링 계수 */                        "스케일 y", 2.0, /* 최종 수직 스케일 팩터 */                        특수한 순서); 
이 문은 현재 값과 지정된 최종 값 사이에서[19] 제공된 GObject 속성을 애니메이션으로 만드는 암묵적인 ClutterAnimation 개체를 만듭니다.

코글

Cogl은 3D 그래픽 하드웨어를 사용하여 예쁜 [20]그림을 그릴 수 있는 작은 오픈 소스 소프트웨어 라이브러리입니다.API는 OpenGL의 플랫스테이트 머신 스타일에서 벗어나 서로의 발끝을 밟지 않고 렌더링할 수 있는 직교 컴포넌트를 쉽게 쓸 수 있도록 설계되어 있습니다.CoGL은 현재 OpenGL ES 1.1/2.0 및 OpenGL > 1.3(또는 GL_ARB_multitestracture 확장의 경우 1.2)을 지원하며 Galium 3D 또는 D3D 백엔드를 사용할 수 있습니다.

libchamplain(라이브 챔플레인)

libchamplain은 지도를 표시하는 ClutterActor를 제공하는 C 라이브러리입니다.또한 GTK 응용 프로그램에서 지도를 표시하는 GTK 위젯도 제공합니다.libchamplain은 프랑스 항해사, 탐험가, 지도 제작자인 Samuel de Champlain의 이름을 따서 지어졌다.

「 」를 참조해 주세요.

  • 코어 애니메이션 – Mac OS X 10.5 이상에서 사용되는 데이터 시각화 API
  • Qt Quick – Qt와 QML을 기반으로 하는 유사한 애플리케이션 프레임워크

레퍼런스

  1. ^ "Clutter 1.26.4 (release)". 2020-03-09. Retrieved 2021-01-23.
  2. ^ "ANNOUNCE: Clutter 1.21.8 (snapshot)". 2016-02-18.
  3. ^ a b "Clutter license".
  4. ^ http://developer.gnome.org/clutter/stable/ClutterCairoTexture.html Clutter API 레퍼런스:ClutterCairoTexture
  5. ^ "Projects/Vala/MxSample - GNOME Wiki!". wiki.gnome.org. Retrieved 18 April 2018.
  6. ^ "clutter-project/clayland". GitHub. Retrieved 18 April 2018.
  7. ^ "GNOME developer documentation".
  8. ^ Bassi, Emmanuele (31 January 2011). "ANNOUNCE: Clutter 1.6.0 (stable)". Retrieved 9 March 2016.
  9. ^ Bradford, Rob (16 December 2011). "Clutter & Cogl Wayland update". Retrieved 9 March 2016.
  10. ^ Bassi, Emmanuele (24 September 2013). "ANNOUNCE: Clutter 1.16.0 (stable)".
  11. ^ http://blogs.gnome.org/tko/2008/05/26/three-steps-forward-one-giant-step-back/ OSX에서의 Life with Clutter
  12. ^ "Archived copy". Archived from the original on 2009-08-05. Retrieved 2009-07-29.{{cite web}}: CS1 maint: 제목으로 아카이브된 복사(링크)
  13. ^ "vala-win32 Vala binaries for Windows". Retrieved 27 January 2013.
  14. ^ "Val(a)IDE in Launchpad". Retrieved 27 January 2013.
  15. ^ "x6-development-share". Retrieved 27 January 2013.
  16. ^ "[ANNOUNCE] libinput 0.4.0". freedesktop.org. 2014-06-24.
  17. ^ http://mail.gnome.org/archives/gnome-announce-list/2009-September/msg00099.html GNOME 메일링 리스트: GTK+ 2.18.0 출시
  18. ^ http://www.clutter-project.org/docs/clutter/stable/ClutterScript.html#ClutterScript.description 2009-08-04 Wayback Machine Clutter API 레퍼런스:ClutterScript
  19. ^ "Archived copy". Archived from the original on 2009-08-05. Retrieved 2009-07-29.{{cite web}}: CS1 maint: 제목으로 아카이브된 복사(링크)
  20. ^ "cogl 1.18.2". 2014-07-04.

외부 링크