Беспорядок (программное обеспечение) - Clutter (software)
Оригинальный автор (ы) | Эммануэле Басси, OpenedHand Ltd |
---|---|
Разработчики) | Проект GNOME |
изначальный выпуск | 22 июня 2006 г. |
Стабильный выпуск | 1.26.2 / 12 мая 2017 г.[1] |
Предварительный выпуск | 1.25.6 / 18 февраля 2016 г.[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 +.
Поддержка беспорядка мультитач-жесты.[нужна цитата ]
- Clayland - это Композитор Wayland используя беспорядок.[6]
- Snappy - это легкий медиаплеер, основанный на Clutter и GStreamer.
- Pinpoint - это простая и легкая программа для презентаций.
- Карты GNOME использует ClutterActor
- Доказательство концепции повседневная видеоигры PillPopper (a Pac-Man клон ) и HappyWombats (an Злые птицы clone) используйте Clutter.
Набор графических изображений GTK + (GSK) был первоначально выпущен как часть GTK + 3.90 в марте 2017 года и предназначен для приложений на основе GTK, которые хотят заменить Clutter для своего пользовательского интерфейса.
Архитектура программного обеспечения
Беспорядок - это граф сцены холст, работающий в сохраненный режим. Каждый объект на сцене обычно представляет собой 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 объектная система. Привязки доступны для следующих языков:
- C ++ (беспорядок мм)
- Perl (Perl-Clutter)
- Python (PyClutter)
- Haskell (беспорядок)
- JavaScript (Сид и GJS)
- C # (резкий беспорядок (он же Clutter #))?
- Рубин (rbclutter)?
- Вала (беспорядок-вала)?
Библиотеки интеграции
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
Рекомендации
- ^ «Clutter 1.26.2 (релиз)». 2017-05-12. Получено 2017-10-16.
- ^ «ОБЪЯВЛЕНИЕ: Clutter 1.21.8 (снимок)». 2016-02-18.
- ^ а б «Лицензия на беспорядок».
- ^ http://developer.gnome.org/clutter/stable/ClutterCairoTexture.html Справочник по API Clutter: ClutterCairoTexture
- ^ "Проекты / Vala / MxSample - GNOME Wiki!". wiki.gnome.org. Получено 18 апреля 2018.
- ^ "беспорядочный проект / глина". GitHub. Получено 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
- ^ «Архивная копия». Архивировано из оригинал на 2009-08-05. Получено 2009-07-29.CS1 maint: заархивированная копия как заголовок (связь)
- ^ "vala-win32 двоичные файлы Vala для Windows". Получено 27 января 2013.
- ^ "Val (a) IDE в Launchpad". Получено 27 января 2013.
- ^ "x6-разработка-доля". Получено 27 января 2013.
- ^ "[ОБЪЯВЛЕНИЕ] libinput 0.4.0". freedesktop.org. 2014-06-24.
- ^ 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 В архиве 2009-08-04 в Wayback Machine Справочник по API Clutter: ClutterScript
- ^ «Архивная копия». Архивировано из оригинал на 2009-08-05. Получено 2009-07-29.CS1 maint: заархивированная копия как заголовок (связь)
- ^ "cogl 1.18.2". 2014-07-04.