Беспорядок (программное обеспечение) - Clutter (software)
Оригинальный автор (ы) | Эммануэль Басси, OpenedHand Ltd |
---|---|
Разработчики) | Проект GNOME |
Первый выпуск | 22 июня 2006 г . |
Стабильный выпуск | 1.26.4 / 9 марта 2020 г .
|
Предварительный выпуск | 1.25.6 / 18 февраля 2016 г .
|
Репозиторий | |
Написано в | C |
Операционная система | Linux , BSD , OS X , Microsoft Windows |
Тип | Графическая библиотека |
Лицензия | Стандартная общественная лицензия ограниченного применения GNU |
Веб-сайт |
GNOME / Проекты / беспорядок |
Clutter - это графическая библиотека на основе GObject для создания пользовательских интерфейсов с аппаратным ускорением. Clutter - это основанная на OpenGL библиотека «интерактивного холста», не содержащая никаких графических элементов управления . Для рендеринга он использует OpenGL (1.4+) или OpenGL ES (1.1 или 2.0). Он также поддерживает воспроизведение мультимедиа с использованием GStreamer и рендеринг 2D-графики с использованием Cairo .
Автором Clutter является компания OpenedHand Ltd , которая сейчас является частью Intel . Clutter - бесплатное программное обеспечение с открытым исходным кодом , соответствующее требованиям Стандартной общественной лицензии ограниченного применения GNU (LGPL) версии 2.1.
Принятие
Популярными программами, использующими Clutter, являются GNOME Videos (также известные как Totem), GNOME Shell , Pitivi , Cinnamon Desktop и GNOME Ease .
Мй виджет инструментарий основанный на помехах первоначально разработаны для графической оболочки из Moblin / MeeGo нетбук , но превратились в самостоятельный проект.
Наборы инструментов для виджетов Netbook Toolkit (nbtk) и Mx основаны на Clutter. Часто беспорядок встречается аналогично GTK, но это неточно. Только Clutter вместе с Mx или Nbtk может соответствовать размеру GTK. Это также причина, по которой Clutter используется вместе с GTK.
Clutter поддерживает мультитач-жесты .
- Clayland - это композитор Wayland, использующий Clutter.
- Snappy - это легкий медиаплеер, основанный на Clutter и GStreamer .
- Pinpoint - это простая и легкая программа для презентаций.
- GNOME Maps использует 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
ClutterActor - это базовый элемент графа сцены Clutter, он инкапсулирует положение, размер и преобразования узла в графе.
- ClutterActor может получать и обрабатывать события устройства ввода, например события указателя и ключевые события.
- Анимация - это основная концепция современных пользовательских интерфейсов; Clutter предоставляет полную и мощную среду анимации, которая автоматически обновляет состояние актера, не требуя прямого покадрового манипулирования кодом вашего приложения.
Поддерживаемые платформы
Clutter разработан для X Window System с использованием GLX, а также Wayland с использованием EGL . Беспорядок также может использовать фреймбуфер . Начиная с версии 0.6, была добавлена встроенная поддержка Mac OS X. Собственная серверная часть Microsoft Windows поддерживается с выпуска 0.8, и доступны предварительно скомпилированные библиотеки DLL Windows , однако можно создать последнюю версию DLL для Windows с помощью MinGW и оболочки Bash для Windows.
Начиная с версии 1.19.4, выпущенной в июне 2014 года, механизм ввода Evdev в Clutter зависит от libinput 0.4.0.
Привязки языков программирования
Беспорядок реализован на языке программирования C с дизайном, основанным на объектной системе GObject . Привязки доступны для следующих языков:
- C ++ (Cluttermm)
- Perl (Perl-Clutter)
- Python (PyClutter)
- Haskell (беспорядок)
- JavaScript (сид и GJS)
- C # (Clutter-sharp (он же Clutter #))?
- Рубин (rbclutter)?
- Вала (Беспорядок)
Библиотеки интеграции
Clutter можно интегрировать с другими библиотеками и инструментами, например:
- Приложения GTK могут встраивать этапы Clutter с помощью специального виджета.
- Приложения беспорядка могут встраивать виджеты GTK, используя функцию «клиентских окон» начиная с GTK + 2.18.
- Приложения Clutter могут использовать GStreamer для воспроизведения видео непосредственно в актере текстуры Clutter.
- Приложения Clutter могут использовать Cairo для рисования на текстуре.
- Video Acceleration 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 . Весь граф сцены определяется с использованием типов 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, который будет анимировать предоставленные свойства GObject между их текущим значением и указанным окончательным значением.
COGL
Cogl - это небольшая программная библиотека с открытым исходным кодом для использования оборудования 3D-графики для рисования красивых изображений. API отходит от стиля OpenGL с автоматом с плоскими состояниями и разработан, чтобы упростить написание ортогональных компонентов, которые могут отображаться, не наступая друг другу на пятки. В настоящее время Cogl поддерживает OpenGL ES 1.1 / 2.0 и OpenGL> 1.3 (или 1.2, если у вас есть расширение GL_ARB_multitexture), а наличие Gallium3D или D3D - это варианты на будущее.
libchamplain
libchamplain - это библиотека C, предоставляющая ClutterActor для отображения карт. Он также предоставляет виджет GTK для отображения карт в приложениях GTK. Библиотека libchamplain названа в честь Сэмюэля де Шамплена , французского мореплавателя, исследователя и картографа.
Смотрите также
- Core Animation - API визуализации данных, используемый в Mac OS X 10.5 и более поздних версиях.
- Qt Quick - аналогичный фреймворк на основе Qt и QML