Clutter — это устаревшая графическая библиотека на основе GObject для создания пользовательских интерфейсов с аппаратным ускорением. Clutter — это библиотека «интерактивного холста» на основе OpenGL , не содержащая никаких графических элементов управления . Для рендеринга он использует OpenGL (1.4+) или OpenGL ES (1.1 или 2.0 ) . Он также поддерживает воспроизведение мультимедиа с помощью GStreamer и рендеринг 2D-графики с помощью Cairo . [4]
Clutter был создан компанией OpenedHand Ltd , которая сейчас является частью Intel . Clutter — это бесплатное программное обеспечение с открытым исходным кодом , на которое распространяются требования GNU Lesser General Public License (LGPL) версии 2.1. [3]
В феврале 2022 года команда разработчиков объявила о прекращении проекта. Больше версий выпускаться не будет, и разработчикам, использующим Clutter, рекомендуется портировать свои приложения на GTK 4 и libadwaita . [5]
Популярными программами, использующими Clutter, являются GNOME Videos (также известный как Totem), GNOME Shell , Pitivi , Cinnamon Desktop и GNOME Ease.
Mx — набор инструментов для виджетов, основанный на Clutter, изначально разработанный для графической оболочки нетбуков Moblin / MeeGo , но развившийся в самостоятельный проект.
Наборы инструментов виджетов Netbook Toolkit (nbtk) и Mx основаны на Clutter. [6] Часто Clutter рассматривают как аналог GTK , но это неточно. Только Clutter вместе с Mx или Nbtk могут сравниться с GTK. Это также причина, по которой Clutter необходимо использовать вместе с GTK.
Clutter поддерживает мультитач-жесты . [ нужна цитата ]
GTK Scene Graph Kit (GSK) изначально был выпущен как часть GTK+ 3.90 в марте 2017 года и предназначен для приложений на базе GTK, которые хотят заменить Clutter в своем пользовательском интерфейсе.
Clutter — это холст на основе графа сцены , работающий в сохраненном режиме . Каждый объект на сцене обычно представляет собой 2D-поверхность внутри 3D-пространства.
Clutter абстрагирует собственную оконную среду позади серверной части, которая также отвечает за создание основного контейнера для графа сцены; этот контейнер верхнего уровня называется сценой . Предметы на сцене называются актерами .
Вместо того, чтобы работать с матрицами, как это делает OpenGL , разработчик Clutter изменяет свойства каждого актера. Clutter заметит изменения и соответствующим образом визуализирует сцену.
Clutter в настоящее время разрабатывается OpenedHand для обеспечения визуально богатых графических пользовательских интерфейсов на настольных компьютерах и встроенном оборудовании. Основной целью являются приложения, подобные медиацентрам, пользовательские интерфейсы для небольших устройств и базовый API рисования для наборов инструментов пользовательского интерфейса на основе GL и GL/ES. Clutter использует Pango для рендеринга текста (со специальным рендерером GL/GLES) и GdkPixbuf для загрузки изображений в текстуры GL. Взаимодействие с другими библиотеками платформы GNOME осуществляется через несколько интеграционных библиотек, например: clutter-gst (GStreamer), clutter-gtk (для встраивания сцены в приложение GTK), clutter-cairo (для использования cairo для рисования в текстуре). Его API и ABI остаются стабильными в микро-выпусках, но могут нарушать API во время второстепенных выпусков — пока он не достигнет версии 1.0, тогда API и ABI будут стабильными до следующего основного выпуска.
ClutterActor — это базовый элемент графа сцены Clutter, он инкапсулирует положение, размер и преобразования узла в графе. [8]
Clutter разработан для X Window System с использованием GLX , а также Wayland [9] [10] [11] с использованием EGL . Clutter также может использовать фреймбуфер . Начиная с версии 0.6 была добавлена встроенная поддержка Mac OS X. [12] Собственная серверная часть Microsoft Windows поддерживается с версии 0.8 [13] и доступны предварительно скомпилированные библиотеки DLL для Windows, [14] [15] [16] однако можно собрать последнюю версию DLL для Windows с помощью MinGW и Оболочка Bash для Windows.
Начиная с версии 1.19.4 от июня 2014 года, серверная часть ввода evdev Clutter зависит от libinput 0.4.0. [17]
Clutter реализован с помощью языка программирования C с дизайном, основанным на объектной системе GObject . Привязки доступны для следующих языков:
Clutter можно интегрировать с другими библиотеками и наборами инструментов, например:
В этом примере на сцену будет добавлена метка (написанная на C ).
// Получить сцену по умолчанию, которая будет содержать всех актеров на сцене. ClutterActor * stage = clutter_stage_get_default (); // Создайте новую метку, используя шрифт Sans высотой 32 пикселя и текст «Hello, world», // и поместим ее на сцену. ClutterActor * label = clutter_text_new_with_text ( «Sans 32px» , «Привет, мир» ); clutter_container_add_actor ( CLUTTER_CONTAINER ( стадия ), метка ); // Размещаем метку в центре сцены, учитывая сцену и размер метки. float x = ( clutter_actor_get_width ( сцена ) - clutter_actor_get_width ( метка )) / 2 ; float y = ( clutter_actor_get_height ( сцена ) - clutter_actor_get_height ( метка )) / 2 ; clutter_actor_set_position ( метка , x , y ); // Показ сцены. Все актеры в Clutter видны, если они явно не скрыты, за исключением сцены; // таким образом, отображая сцену, // автоматически отобразятся все ее видимые дочерние элементы. clutter_actor_show ( сцена );
Clutter может создавать пользовательские интерфейсы, используя специализированный диалект JSON . [19] Весь граф сцены определяется с использованием типов JSON и строится во время выполнения с помощью класса ClutterScript.
Это определение создаст главное окно и поместит метку с текстом Hello, world! внутри него.
{ "id" : "main-stage" , "type" : "ClutterStage" , "color" : "white" , "width" : 800 , "height" : 600 , "title" : "демонстрационный сценарий" , "дети" " : [{ "id" : "hello-label" , "type" : "ClutterText" , "x" : 400 , "y" : 300 , "text" : "Привет, мир!" , "color" : "black" , "font-name" : "Sans 48px" }], "signals" : [{ "name" : "destroy" , "handler" : "clutter_main_quit" }] }
Определение можно сохранить в файл или в виде строки и загрузить с помощью:
ClutterScript * скрипт = clutter_script_new (); GError * ошибка = NULL ; clutter_script_load_from_data ( скрипт , описание , -1 и ошибка ) ; if ( error ) { g_warning ( «Невозможно загрузить описание пользовательского интерфейса: %s» , ошибка -> сообщение ); g_error_free ( ошибка ); } Еще { GObject * этап ; clutter_script_connect_signals ( скрипт , NULL ); /* подключаем обработчики сигналов */ stage = clutter_script_get_object ( script , "main-stage" ); /* получаем объект «основной сцены» */ clutter_actor_show ( CLUTTER_ACTOR ( stage )); }
Clutter позволяет неявно анимировать каждый элемент на холсте, используя специальные объекты, называемые поведениями : каждое поведение может быть применено к нескольким актерам, и несколько вариантов поведения могут быть составлены для одного и того же актера. Поведения обрабатывают анимацию неявно: разработчик указывает начальное и конечное состояния, время (или количество кадров), необходимое для завершения анимации, используемую функцию времени (линейную, синусоидальную, экспоненциальную и т. д.) и поведение. позаботится об анимации. Clutter предоставляет разработчикам общий базовый класс для реализации пользовательского поведения, а также различные простые классы, обрабатывающие простые свойства, такие как непрозрачность, положение по оси Z (глубина), положение вдоль пути, вращение и т. д.
Начиная с Clutter 1.0, также можно создавать простые одноразовые анимации, используя класс ClutterAnimation и удобную функцию clutter_actor_animate(). Функция clutter_actor_animate() анимирует свойства актера между их текущим состоянием и указанным конечным состоянием.
В этом примере метка будет масштабироваться от ее размера до коэффициента 2 за 2 секунды, используя линейную функцию времени и поведения:
ClutterTimeline * timeline = clutter_timeline_new ( 2000 ); ClutterAlpha * альфа = clutter_alpha_new_full ( временная шкала , CLUTTER_LINEAR ); ClutterBehaviour * поведение = clutter_behaviour_scale_new ( alpha , 1.0 , 1.0 , /* начальные коэффициенты масштабирования */ 2.0 , 2.0 /* окончательные коэффициенты масштабирования */ ); clutter_behaviour_apply ( поведение , метка );
Эквивалентный код, использующий API неявной анимации:
clutter_actor_animate ( label , /* анимируемый актер */ CLUTTER_LINEAR , /* режим замедления */ 2000 , /* продолжительность анимации */ "scale-x" , 2.0 , /* окончательный коэффициент горизонтального масштабирования */ "scale -y" , 2.0 , /* окончательный коэффициент вертикального масштабирования */ NULL );
Cogl — это небольшая программная библиотека с открытым исходным кодом, позволяющая использовать аппаратное обеспечение 3D-графики для рисования красивых изображений. [21] API отличается от стиля плоских конечных автоматов OpenGL и предназначен для упрощения написания ортогональных компонентов, которые могут визуализироваться, не наступая друг другу на ногу. Cogl в настоящее время поддерживает OpenGL ES 1.1/2.0 и OpenGL > 1.3 (или 1.2, если у вас есть расширение GL_ARB_multitexture), а использование серверных частей Gallium3D или D3D — вариант на будущее.
libchamplain — это библиотека C, предоставляющая ClutterActor для отображения карт. Он также предоставляет виджет GTK для отображения карт в приложениях GTK. libchamplain назван в честь Самуэля де Шамплена , французского мореплавателя, исследователя и картографа.