Беспорядок (программное обеспечение) - Clutter (software)

Беспорядок
Оригинальный автор (ы)Эммануэле Басси, OpenedHand Ltd
Разработчики)Проект GNOME
изначальный выпуск22 июня 2006 г.; 14 лет назад (2006-06-22)
Стабильный выпуск
1.26.2 / 12 мая 2017 г.; 3 года назад (2017-05-12)[1]
Предварительный выпуск
1.25.6 / 18 февраля 2016 г.; 4 года назад (2016-02-18)[2]
Репозиторий Отредактируйте это в Викиданных
Написано вC
Операционная системаLinux, BSD, OS X, Майкрософт Виндоус
ТипГрафическая библиотека
ЛицензияСтандартная общественная лицензия ограниченного применения GNU[3]
Интернет сайтGNOME / Проекты / беспорядок

Беспорядок это GObject -основан графическая библиотека для создания пользовательских интерфейсов с аппаратным ускорением. Беспорядок - это OpenGL -на основе библиотеки «интерактивный холст» и не содержит графические элементы управления. Он полагается на OpenGL (1.4+) или OpenGL ES (1.1 или 2.0) для рендеринга,[нужна цитата ]. Он также поддерживает воспроизведение мультимедиа с помощью GStreamer и рендеринг 2D-графики с использованием Каир.[4]

Clutter был автором OpenedHand Ltd, теперь часть Intel. Беспорядок бесплатное программное обеспечение с открытым исходным кодом, с учетом требований Стандартная общественная лицензия ограниченного применения GNU (LGPL), версия 2.1.[3]

Принятие

Популярные программы, использующие Clutter: Видео GNOME (он же Тотем), Оболочка GNOME, Питиви, Корица Рабочий стол и Простота GNOME.

Mx - это набор инструментов для виджетов, основанный на Clutter, изначально разработанный для графическая оболочка из Moblin /Нетбук MeeGo, но превратился в самостоятельный проект.

Наборы инструментов для виджетов Netbook Toolkit (nbtk) и Mx основаны на Clutter.[5] Часто беспорядок рассматривается как аналог GTK + но это неточно. Только беспорядок вместе с Mx или Nbtk может соответствовать степени GTK +. Это также причина, по которой Clutter используется вместе с GTK +.

Поддержка беспорядка мультитач-жесты.[нужна цитата ]

Набор графических изображений GTK + (GSK) был первоначально выпущен как часть GTK + 3.90 в марте 2017 года и предназначен для приложений на основе GTK, которые хотят заменить Clutter для своего пользовательского интерфейса.

Архитектура программного обеспечения

GDK содержит серверные части для X11, Wayland, Бродвей (HTTP ), Кварцевый и GDI и полагается на Каир для рендеринга. Его новый SceneGraph (GSK ) находится в разработке, Беспорядок 's SceneGraph можно использовать.
Пример использования Clutter в системах на базе Linux

Беспорядок - это граф сцены холст, работающий в сохраненный режим. Каждый объект на сцене обычно представляет собой 2D-поверхность внутри 3D-пространства.

Clutter абстрагирует родную оконную среду за серверной частью, которая также отвечает за создание основного контейнера для графа сцены; этот контейнер верхнего уровня называется сцена. Предметы на сцене называются актеры.

Вместо того, чтобы работать с матрицами, как это делает OpenGL, разработчик Clutter изменяет свойства каждого актера. Затем Clutter заметит изменения и соответствующим образом отрендерит сцену.

Clutter в настоящее время разрабатывается OpenedHand для обеспечения визуально насыщенного графического пользовательского интерфейса на настольных компьютерах и встроенном оборудовании. Основная цель - приложения, подобные медиацентрам, пользовательские интерфейсы для небольших устройств и базовый API рисования для наборов пользовательских интерфейсов на основе GL и GL / ES. Беспорядок использует Панго для рендеринга текста (со специальным рендерером GL / GLES) и GdkPixbuf для загрузки изображений в текстуры GL. Взаимодействие с другими библиотеками платформы GNOME осуществляется через несколько интеграционных библиотек, например: clutter-gst (GStreamer), clutter-gtk (для встраивания сцены в приложение GTK +), clutter-cairo (для использования cairo для рисования текстуры). Его API и ABI остаются стабильными в микрорелостях, но могут ломать API во время второстепенных выпусков - пока он не достигнет 1.0, тогда он будет стабильным API и ABI до следующего основного выпуска.

ClutterActor

ClutterActor - это базовый элемент графа сцены Clutter, он инкапсулирует положение, размер и преобразования узла в графе.[7]

  • ClutterActor может получать и обрабатывать события устройства ввода, например события указателя и ключевые события.
  • Анимация - это основная концепция современных пользовательских интерфейсов; Clutter предоставляет полную и мощную среду анимации, которая автоматически подростки состояние актора, не требуя прямого покадрового манипулирования кодом вашего приложения.

Поддерживаемые платформы

Беспорядок разработан для X Window System с помощью GLX а также Wayland[8][9][10] с помощью EGL. Clutter также может использовать кадровый буфер. Начиная с версии 0.6, встроенная поддержка Mac OS X был добавлен.[11] Уроженец Майкрософт Виндоус бэкэнд поддерживается с выпуска 0.8[12] и Windows предварительно скомпилирована DLL доступны,[13][14][15] однако можно создать последнюю версию DLL для Windows с помощью MinGW и оболочка Bash для Windows.

Начиная с версии 1.19.4 от июня 2014 г., Clutter's бэкэнд ввода evdev зависит от libinput 0.4.0.[16]

Привязки языков программирования

Беспорядок реализован с помощью Язык программирования C с дизайном, основанным на GObject объектная система. Привязки доступны для следующих языков:

Библиотеки интеграции

Clutter можно интегрировать с другими библиотеками и инструментами, например:

  • GTK + приложения могут встраивать этапы Clutter с помощью специального виджета.
  • Приложения беспорядка могут встраивать виджеты GTK + с помощью функции «клиентских окон» начиная с GTK + 2.18.[17]
  • Приложения беспорядка могут использовать GStreamer для воспроизведения видео непосредственно в актере текстуры Clutter.
  • Приложения беспорядка могут использовать Каир рисовать на текстуре.
  • Video Acceleration API

Пример

В этом примере на сцене будет добавлена ​​метка (написанная на C ).

// Получить сцену по умолчанию, которая будет содержать всех актеров сцены.ClutterActor *сцена = clutter_stage_get_default ();// Создаем новую метку, используя шрифт Sans высотой 32 пикселя и с текстом «Hello, world»,// и поместим его в сцену.ClutterActor *метка = clutter_text_new_with_text ("Sans 32px", "Привет, мир");clutter_container_add_actor (CLUTTER_CONTAINER (сцена), метка);// Поместите этикетку в центр сцены, учитывая сцену и размер этикетки.плавать Икс = (clutter_actor_get_width (сцена) - clutter_actor_get_width (метка)) / 2;плавать у = (clutter_actor_get_height (сцена) - clutter_actor_get_height (метка)) / 2;clutter_actor_set_position (метка, Икс, у);// Показать сцену. Все актеры в Clutter видны, если явно не скрыты, за исключением сцены;// таким образом показывая, что сцена будет// автоматически отображаем все его видимые дочерние элементы.clutter_actor_show (сцена);

Конструктор интерфейсов

Clutter может создавать пользовательские интерфейсы, используя специализированные JSON диалект.[18] Весь граф сцены определяется с использованием типов JSON и создается во время выполнения с помощью класса ClutterScript.

Пример

Это определение создаст главное окно и поместит метку с текстом Привет, мир! внутри него.

{    "я бы": "основной этап",    "тип": "ClutterStage",    "цвет": "белый",    "ширина": 800,    "высота": 600,    "заглавие": "Демо скрипта",    "дети": [{        "я бы": "привет-лейбл",        "тип": "ClutterText",        "Икс": 400,        "у": 300,        "текст": "Привет, мир!",        "цвет": "чернить",        "имя-шрифта": "Sans 48px"    }],    "сигналы": [{        "имя": "разрушать",        "обработчик": "clutter_main_quit"    }]}

Определение можно сохранить в файл или в виде строки и загрузить с помощью:

ClutterScript *сценарий = clutter_script_new ();GError *ошибка = НОЛЬ;clutter_script_load_from_data (сценарий, описание, -1, &ошибка);если (ошибка){    g_warning («Не удалось загрузить описание пользовательского интерфейса:% s», ошибка->сообщение);    g_error_free (ошибка);}еще{    GObject *сцена;    clutter_script_connect_signals (сценарий, НОЛЬ); / * подключаем обработчики сигналов * /    сцена = clutter_script_get_object (сценарий, "основной этап"); / * получаем объект "основной сцены" * /    clutter_actor_show (CLUTTER_ACTOR (сцена));}

Анимация

Clutter позволяет неявно анимировать каждый элемент на холсте с помощью специальных объектов, называемых поведение: каждое поведение может быть применено к нескольким субъектам, и несколько вариантов поведения могут быть составлены для одного и того же субъекта. Поведение обрабатывает анимацию неявно: разработчик указывает начальное и конечное состояния, время (или количество кадров), необходимое для завершения анимации, функцию времени, которая будет использоваться (линейная, синусоидальная, экспоненциальная и т. Д.), И поведение. позаботится о твининге. Беспорядок обеспечивает общую основу учебный класс для разработчиков для реализации настраиваемого поведения и различных простых классов, обрабатывающих простые свойства, такие как непрозрачность, положение по оси Z (глубина), положение по пути, поворот и т. д.

Начиная с Clutter 1.0, также можно создавать простые одноразовые анимации, используя класс ClutterAnimation и вспомогательную функцию clutter_actor_animate (). Функция clutter_actor_animate () анимирует свойства актора между их текущим состоянием и указанным конечным состоянием.

Пример

В этом примере метка будет масштабироваться от ее размера до коэффициента 2 за 2 секунды, используя линейную функцию времени и поведения:

Беспорядок *график = clutter_timeline_new (2000);ClutterAlpha *альфа = clutter_alpha_new_full (график, CLUTTER_LINEAR);Беспорядок *поведение = clutter_behaviour_scale_new (альфа,                                                           1.0, 1.0, / * начальные коэффициенты масштабирования * /                                                           2.0, 2.0  / * окончательные коэффициенты масштабирования * / );clutter_behaviour_apply (поведение, метка);
Эти утверждения создадут временную шкалу продолжительностью 2 секунды; альфа, привязывающая временную шкалу к линейному режиму замедления; поведение, которое будет масштабировать любого актера, к которому оно применяется, от коэффициента 1.0 до коэффициента 2.0 (как по горизонтали, так и по вертикали). Наконец, он применяет поведение к актеру.

Эквивалентный код с использованием API неявной анимации:

clutter_actor_animate (метка,          / * актер для анимации * /                       CLUTTER_LINEAR, / * режим замедления * /                       2000,           / * продолжительность анимации * /                       "масштаб-х", 2.0, / * окончательный коэффициент горизонтального масштабирования * /                       "масштаб-у", 2.0, / * окончательный коэффициент вертикального масштабирования * /                       НОЛЬ);
Этот оператор создаст неявный ClutterAnimation[19] объект, который будет анимировать предоставленные свойства GObject между их текущим значением и указанным окончательным значением.

COGL

Cogl - это небольшая программная библиотека с открытым исходным кодом для использования оборудования 3D-графики для рисования красивых картинок.[20] API отходит от стиля OpenGL с плоскими конечными автоматами и разработан, чтобы упростить написание ортогональных компонентов, которые могут отображаться, не наступая друг другу на пятки. Cogl в настоящее время поддерживает OpenGL ES 1.1 / 2.0 и OpenGL> 1.3 (или 1.2, если у вас есть расширение GL_ARB_multitexture) и наличие Галлий3D или серверные части D3D - это варианты на будущее.

libchamplain

libchamplain - это библиотека C, предоставляющая ClutterActor для отображения карт. Он также предоставляет виджет Gtk + для отображения карт в приложениях Gtk +. Libchamplain назван в честь Самуэль де Шамплен, французский мореплаватель, исследователь и картограф.

Смотрите также

  • Основная анимация - API визуализации данных, используемый Mac OS X 10.5 и новее
  • Qt Quick - аналогичная прикладная структура на основе Qt и QML

Рекомендации

  1. ^ «Clutter 1.26.2 (релиз)». 2017-05-12. Получено 2017-10-16.
  2. ^ «ОБЪЯВЛЕНИЕ: Clutter 1.21.8 (снимок)». 2016-02-18.
  3. ^ а б «Лицензия на беспорядок».
  4. ^ http://developer.gnome.org/clutter/stable/ClutterCairoTexture.html Справочник по API Clutter: ClutterCairoTexture
  5. ^ "Проекты / Vala / MxSample - GNOME Wiki!". wiki.gnome.org. Получено 18 апреля 2018.
  6. ^ "беспорядочный проект / глина". GitHub. Получено 18 апреля 2018.
  7. ^ «Документация разработчика GNOME».
  8. ^ Басси, Эммануэле (31 января 2011 г.). "ОБЪЯВЛЕНИЕ: Clutter 1.6.0 (стабильный)". Получено 9 марта 2016.
  9. ^ Брэдфорд, Роб (16 декабря 2011 г.). "Обновление Clutter & Cogl Wayland". Получено 9 марта 2016.
  10. ^ Басси, Эммануэле (24 сентября 2013 г.). "ОБЪЯВЛЕНИЕ: Clutter 1.16.0 (стабильный)".
  11. ^ http://blogs.gnome.org/tko/2008/05/26/three-steps-forward-one-giant-step-back/ Жизнь с беспорядком на OSX
  12. ^ «Архивная копия». Архивировано из оригинал на 2009-08-05. Получено 2009-07-29.CS1 maint: заархивированная копия как заголовок (связь)
  13. ^ "vala-win32 двоичные файлы Vala для Windows". Получено 27 января 2013.
  14. ^ "Val (a) IDE в Launchpad". Получено 27 января 2013.
  15. ^ "x6-разработка-доля". Получено 27 января 2013.
  16. ^ "[ОБЪЯВЛЕНИЕ] 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 Справочник по API Clutter: ClutterScript
  19. ^ «Архивная копия». Архивировано из оригинал на 2009-08-05. Получено 2009-07-29.CS1 maint: заархивированная копия как заголовок (связь)
  20. ^ "cogl 1.18.2". 2014-07-04.

внешняя ссылка