Беспорядок (программное обеспечение)
Оригинальный автор(ы) | Эммануэле Басси, OpenedHand Ltd. |
---|---|
Разработчик(и) | Проект GNOME |
Первоначальный выпуск | 22 июня 2006 г |
Стабильная версия | 1.26.4
/ 9 марта 2020 г [ 1 ] |
Предварительный выпуск | 1.25.6
/ 18 февраля 2016 г [ 2 ] |
Репозиторий | |
Написано в | С |
Операционная система | Linux , BSD , OS X , Microsoft Windows |
Тип | Графическая библиотека |
Лицензия | Меньшая стандартная общественная лицензия GNU [ 3 ] |
Веб-сайт | GNOME/Проекты/беспорядок |
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 поддерживает мультитач-жесты . [ нужна ссылка ]
- Клейланд — композитор Wayland, использующий Clutter. [ 7 ]
- Snappy — легкий медиаплеер, основанный на Clutter и GStreamer .
- Pinpoint — это простая и легкая программа для презентаций.
- Карты GNOME используют ClutterActor
- Доказательство концепции казуальных видеоигр PillPopper ( Pac-Man клон ) и HappyWombats ( клон Angry Birds ) использует 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 ]
- ClutterActor может получать и обрабатывать события устройства ввода, например события указателя и события клавиш.
- Анимация — это основная концепция современных пользовательских интерфейсов; Clutter предоставляет полную и мощную среду анимации, которая автоматически анимирует состояние актера, не требуя прямых покадровых манипуляций со стороны кода приложения.
Поддерживаемые платформы
[ редактировать ]Clutter разработан для системы X Window с использованием GLX, а также Wayland. [ 9 ] [ 10 ] [ 11 ] с помощью ЭГЛ . Clutter также может использовать фреймбуфер . Начиная с версии 0.6 встроенная поддержка Mac OS X. была добавлена [ 12 ] Собственный бэкэнд Microsoft Windows поддерживается с версии 0.8. [ 13 ] и предварительно скомпилированные библиотеки DLL для Windows доступны, [ 14 ] [ 15 ] [ 16 ] однако можно собрать последнюю версию DLL для Windows с помощью оболочки MinGW и Bash для Windows.
Clutter Начиная с версии 1.19.4 от июня 2014 года, серверная часть ввода evdev зависит от libinput 0.4.0. [ 17 ]
Привязки языков программирования
[ редактировать ]Clutter реализован с помощью языка программирования C с дизайном, основанным на GObject объектной системе . Привязки доступны для следующих языков:
- C++ (Клаттермм)
- Перл (Perl-Беспорядок)
- Питон (PyClutter)
- Хаскель (беспорядок)
- JavaScript (начальное число и GJS)
- C# (Clutter-sharp (он же Clutter#)) ?
- Руби (rbclutter) ?
- ValaБеспорядок
Интеграционные библиотеки
[ редактировать ]Clutter можно интегрировать с другими библиотеками и наборами инструментов, например:
- Приложения GTK могут встраивать этапы Clutter с помощью специального виджета.
- Приложения Clutter могут встраивать виджеты GTK, используя функцию «окна на стороне клиента», начиная с GTK+ 2.18. [ 18 ]
- Приложения Clutter могут использовать GStreamer для воспроизведения видео непосредственно в актере текстуры Clutter.
- Приложения Clutter могут использовать Cairo для рисования на текстуре.
- API ускорения видео
Пример
[ редактировать ]В этом примере на сцену будет добавлена метка (написанная на C ).
// Retrieve the default stage, which will contain all the actors on the scene.
ClutterActor *stage = clutter_stage_get_default ();
// Create a new label, using the Sans font 32 pixels high, and with the "Hello, world" text,
// and will place it into the stage.
ClutterActor *label = clutter_text_new_with_text ("Sans 32px", "Hello, world");
clutter_container_add_actor (CLUTTER_CONTAINER (stage), label);
// Position the label at the center of the stage, taking into account the stage and the label size.
float x = (clutter_actor_get_width (stage) - clutter_actor_get_width (label)) / 2;
float y = (clutter_actor_get_height (stage) - clutter_actor_get_height (label)) / 2;
clutter_actor_set_position (label, x, y);
// Show the stage. All actors in Clutter are visible unless explicitly hidden, except for the stage;
// thus showing the stage will
// automatically display all of its visible children.
clutter_actor_show (stage);
Конструктор интерфейсов
[ редактировать ]Clutter может создавать пользовательские интерфейсы, используя специализированный диалект JSON . [ 19 ] Весь граф сцены определяется с использованием типов JSON и строится во время выполнения с помощью класса ClutterScript.
Пример
[ редактировать ]Это определение создаст главное окно и поместит метку с текстом Hello, world! внутри него.
{
"id": "main-stage",
"type": "ClutterStage",
"color": "white",
"width": 800,
"height": 600,
"title": "Script demo",
"children": [{
"id": "hello-label",
"type": "ClutterText",
"x": 400,
"y": 300,
"text": "Hello, world!",
"color": "black",
"font-name": "Sans 48px"
}],
"signals": [{
"name": "destroy",
"handler": "clutter_main_quit"
}]
}
Определение можно сохранить в файл или в виде строки и загрузить с помощью:
ClutterScript *script = clutter_script_new ();
GError *error = NULL;
clutter_script_load_from_data (script, description, -1, &error);
if (error)
{
g_warning ("Unable to load UI description: %s", error->message);
g_error_free (error);
}
else
{
GObject *stage;
clutter_script_connect_signals (script, NULL); /* connect the signal handlers */
stage = clutter_script_get_object (script, "main-stage"); /* get the "main-stage" object */
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 *alpha = clutter_alpha_new_full (timeline, CLUTTER_LINEAR);
ClutterBehaviour *behaviour = clutter_behaviour_scale_new (alpha,
1.0, 1.0, /* initial scaling factors */
2.0, 2.0 /* final scaling factors */ );
clutter_behaviour_apply (behaviour, label);
- Эти операторы создадут временную шкалу продолжительностью 2 секунды; альфа, привязывающая временную шкалу к режиму линейного замедления; поведение, которое будет масштабировать любого актера, к которому оно применяется, между коэффициентом 1,0 и коэффициентом 2,0 (как по горизонтали, так и по вертикали). Наконец, он применяет поведение к актеру.
Эквивалентный код, использующий API неявной анимации:
clutter_actor_animate (label, /* the actor to animate */
CLUTTER_LINEAR, /* the easing mode */
2000, /* the duration of the animation */
"scale-x", 2.0, /* final horizontal scaling factor */
"scale-y", 2.0, /* final vertical scaling factor */
NULL);
- Этот оператор создаст неявный ClutterAnimation. [ 20 ] объект, который будет анимировать предоставленные свойства GObject между их текущим значением и указанным окончательным значением.
КОГЛ
[ редактировать ]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 назван в честь Самуэля де Шамплена , французского мореплавателя, исследователя и картографа.
См. также
[ редактировать ]- Core Animation — API визуализации данных, используемый Mac OS X 10.5 и более поздних версий.
- Qt Quick — аналогичная платформа приложений, основанная на Qt и QML.
Ссылки
[ редактировать ]- ^ «Хлам 1.26.4 (релиз)» . 09.03.2020 . Проверено 23 января 2021 г.
- ^ «АНОНС: Clutter 1.21.8 (снимок)» . 18 февраля 2016 г.
- ^ Перейти обратно: а б «Лицензия на беспорядок» .
- ^ http://developer.gnome.org/clutter/stable/ClutterCairoTexture.html. Архивировано 14 сентября 2015 г. в справочнике API Wayback Machine Clutter: ClutterCairoTexture.
- ^ «Устранение беспорядка – проект беспорядка» . Блог проекта Clutter . 16 февраля 2022 г. Проверено 14 июня 2023 г.
- ^ "Проекты/Vala/MxSample — GNOME Wiki!" . Wiki.gnome.org . Проверено 18 апреля 2018 г.
- ^ "беспорядок-проект/глиняная земля" . Гитхаб . Проверено 18 апреля 2018 г.
- ^ «Документация разработчика GNOME» .
- ^ Басси, Эммануэле (31 января 2011 г.). «АНОНС: Clutter 1.6.0 (стабильная)» . Проверено 9 марта 2016 г.
- ^ Брэдфорд, Роб (16 декабря 2011 г.). «Обновление Clutter & Cogl Wayland» . Проверено 9 марта 2016 г. [ постоянная мертвая ссылка ]
- ^ Басси, Эммануэле (24 сентября 2013 г.). «АНОНС: Clutter 1.16.0 (стабильная)» .
- ^ http://blogs.gnome.org/tko/2008/05/26/three-steps-forward-one-giant-step-back/ Жизнь с беспорядком на OSX
- ^ «Специальная поддержка Win32» . Архивировано из оригинала 5 августа 2009 г. Проверено 29 июля 2009 г.
- ^ «vala-win32 Бинарные файлы Vala для Windows» . Проверено 27 января 2013 г.
- ^ «Val(a)IDE в Launchpad» . Проверено 27 января 2013 г.
- ^ «x6-развитие-доля» . Проверено 27 января 2013 г.
- ^ «[ОБЪЯВЛЕНИЕ] libinput 0.4.0» . сайт freedesktop.org . 24 июня 2014 г.
- ^ http://mail.gnome.org/archives/gnome-announce-list/2009-September/msg00099.html Списки рассылки GNOME: выпущен GTK+ 2.18.0
- ^ http://www.clutter-project.org/docs/clutter/stable/ClutterScript.html#ClutterScript.description. Архивировано 4 августа 2009 г.. Справка по API Wayback Machine Clutter: ClutterScript.
- ^ «Неявная анимация» . Архивировано из оригинала 5 августа 2009 г. Проверено 29 июля 2009 г.
- ^ "когл 1.18.2" . 04.07.2014.