Clutter - это графическая библиотека на основе GObject для создания пользовательских интерфейсов с аппаратным ускорением. Clutter - это основанная на OpenGL библиотека «интерактивного холста», не содержащая никаких графических элементов управления . Он полагается на OpenGL (1.4+) или OpenGL ES (1.1 или 2.0) для рендеринга [ необходима ссылка ] . Он также поддерживает воспроизведение мультимедиа с использованием GStreamer и рендеринг 2D-графики с использованием Cairo . [4]
Автор (ы) оригинала | Эммануэле Басси, OpenedHand Ltd |
---|---|
Разработчики) | Проект GNOME |
Первый выпуск | 22 июня 2006 г . |
Стабильный выпуск | 1.26.4 / 9 марта 2020 г . [1] |
Предварительный выпуск | 1.25.6 / 18 февраля 2016 г . [2] |
Репозиторий | |
Написано в | C |
Операционная система | Linux , BSD , OS X , Microsoft Windows |
Тип | Графическая библиотека |
Лицензия | Стандартная общественная лицензия ограниченного применения GNU [3] |
Веб-сайт | GNOME / Проекты / беспорядок |
Автором Clutter является компания OpenedHand Ltd , которая сейчас является частью Intel . Clutter - это бесплатное программное обеспечение с открытым исходным кодом , соответствующее требованиям Стандартной общественной лицензии ограниченного применения GNU (LGPL) версии 2.1. [3]
Принятие
Популярными программами, использующими Clutter, являются GNOME Videos (также известные как Totem), GNOME Shell , Pitivi , Cinnamon Desktop и GNOME Ease .
Мй виджет инструментарий основанный на помехах первоначально разработаны для графической оболочки из Moblin / MeeGo нетбук , но превратились в самостоятельный проект.
Наборы инструментов для виджетов Netbook Toolkit (nbtk) и Mx основаны на Clutter. [5] Часто беспорядок встречается аналогично GTK, но это неточно. Только Clutter вместе с Mx или Nbtk может соответствовать размеру GTK. Это также причина, по которой Clutter используется вместе с GTK.
Clutter поддерживает мультитач-жесты . [ необходима цитата ]
- Clayland - это композитор Wayland, использующий Clutter. [6]
- 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 в своем пользовательском интерфейсе.
Архитектура программного обеспечения
Беспорядок - это холст на основе графа сцены, работающий в сохраненном режиме . Каждый объект на сцене обычно представляет собой 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, он инкапсулирует положение, размер и преобразования узла в графе. [7]
- ClutterActor может получать и обрабатывать события устройства ввода, например события указателя и ключевые события.
- Анимация - это основная концепция современных пользовательских интерфейсов; Clutter предоставляет полную и мощную среду анимации, которая автоматически обновляет состояние актера, не требуя прямых покадровых манипуляций из кода вашего приложения.
Поддерживаемые платформы
Clutter разработан для X Window System с использованием GLX, а также Wayland [8] [9] [10] с использованием EGL . Беспорядок также может использовать фреймбуфер . Начиная с версии 0.6, была добавлена встроенная поддержка Mac OS X. [11] Уроженец Microsoft Windows бэкенд поддерживается с момента выпуска 0,8 [12] и Windows , предварительно скомпилированные библиотеки DLL доступны, [13] [14] [15] Однако, можно построить последнюю DLL для Windows , с MinGW и Оболочка Bash для Windows.
Начиная с версии 1.19.4, выпущенной в июне 2014 года, механизм ввода Evdev в Clutter зависит от libinput 0.4.0. [16]
Привязки языков программирования
Беспорядок реализован с использованием языка программирования C с дизайном, основанным на объектной системе GObject . Привязки доступны для следующих языков:
- C ++ (Cluttermm)
- Perl (Perl-Clutter)
- Python (PyClutter)
- Haskell (беспорядок)
- JavaScript (сид и GJS)
- C # (Clutter-sharp (он же Clutter #))?
- Рубин (rbclutter)?
- Вала (Clutter-vala)?
Библиотеки интеграции
Clutter можно интегрировать с другими библиотеками и инструментами, например:
- Приложения GTK могут встраивать этапы Clutter с помощью специального виджета.
- Приложения беспорядка могут встраивать виджеты GTK, используя функцию «клиентских окон» начиная с GTK + 2.18. [17]
- Приложения Clutter могут использовать GStreamer для воспроизведения видео непосредственно в актере текстуры Clutter.
- Приложения Clutter могут использовать Cairo для рисования на текстуре.
- Video Acceleration API
Пример
В этом примере на сцену будет добавлена метка (написанная на C ).
// Получить сцену по умолчанию, которая будет содержать всех актеров сцены. ClutterActor * stage = clutter_stage_get_default ();// Создаем новую метку, используя шрифт Sans высотой 32 пикселя и с текстом «Hello, world», // и поместим ее в рабочую область. ClutterActor * label = clutter_text_new_with_text ( «Без 32 пикселей » , «Привет, мир» ); clutter_container_add_actor ( CLUTTER_CONTAINER ( этап ), метка );// Поместите метку в центр сцены, учитывая сцену и размер метки. float x = ( clutter_actor_get_width ( этап ) - clutter_actor_get_width ( метка )) / 2 ; float y = ( clutter_actor_get_height ( stage ) - clutter_actor_get_height ( label )) / 2 ; clutter_actor_set_position ( метка , x , y );// Показать сцену. Все актеры в Clutter видны, если явно не скрыты, за исключением сцены; // таким образом показ сцена будет // автоматически отображать все его видимые дочерние элементы. clutter_actor_show ( этап );
Конструктор интерфейсов
Clutter позволяет создавать пользовательские интерфейсы с использованием специального диалекта JSON . [18] Весь граф сцены определяется с использованием типов JSON и создается во время выполнения с помощью класса ClutterScript.
Пример
Это определение создаст главное окно и поместит метку с текстом Hello, world! внутри него.
{ "id" : "main-stage" , "type" : "ClutterStage" , "color" : "white" , "width" : 800 , "height" : 600 , "title" : "Демонстрация сценария" , "children " : [{ " id " : " hello-label " , " type " : " ClutterText " , " x " : 400 , " y " : 300 , " text " : " Привет, мир! " , "цвет" : "черный" , "имя-шрифта" : "Без 48 пикселей" }], "сигналы" : [{ "имя" : "уничтожить" , "обработчик" : "clutter_main_quit" }] }
Определение можно сохранить в файл или в виде строки и загрузить с помощью:
ClutterScript * script = clutter_script_new (); GError * error = NULL ; clutter_script_load_from_data ( сценарий , описание , -1 , & ошибка ); if ( error ) { g_warning ( «Невозможно загрузить описание пользовательского интерфейса:% s» , ошибка -> сообщение ); g_error_free ( ошибка ); } else { GObject * stage ; clutter_script_connect_signals ( скрипт , NULL ); / * подключаем обработчики сигналов * / stage = clutter_script_get_object ( script , "main-stage" ); / * получаем объект "основной сцены" * / clutter_actor_show ( CLUTTER_ACTOR ( stage )); }
Анимация
Беспорядок позволяет неявно анимировать каждый элемент на холсте с использованием специальных объектов, называемых поведениями : каждое поведение может применяться к нескольким субъектам, и несколько вариантов поведения могут быть составлены для одного и того же субъекта. Поведение обрабатывает анимацию неявно: разработчик указывает начальное и конечное состояния, время (или количество кадров), необходимое для завершения анимации, функцию времени, которая будет использоваться (линейная, синусоидальная, экспоненциальная и т. Д.), И поведение позаботится о твининге. 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 ( временная шкала , CLUTTER_LINEAR ); ClutterBehaviour * behavior = clutter_behaviour_scale_new ( alpha , 1.0 , 1.0 , / * начальные коэффициенты масштабирования * / 2.0 , 2.0 / * окончательные коэффициенты масштабирования * / ); clutter_behaviour_apply ( поведение , метка );
- Эти утверждения создадут временную шкалу продолжительностью 2 секунды; альфа, привязывающая временную шкалу к линейному режиму замедления; поведение, которое масштабирует любого актера, к которому оно применяется, от коэффициента 1.0 до коэффициента 2.0 (как по горизонтали, так и по вертикали). Наконец, он применяет поведение к актеру.
Эквивалентный код с использованием API неявной анимации:
clutter_actor_animate ( label , / * актер для анимации * / CLUTTER_LINEAR , / * режим замедления * / 2000 , / * продолжительность анимации * / "scale-x" , 2.0 , / * окончательный коэффициент масштабирования по горизонтали * / "scale -y " , 2.0 , / * окончательный коэффициент масштабирования по вертикали * / NULL );
- Этот оператор создаст неявный объект ClutterAnimation [19] , который будет анимировать предоставленные свойства GObject между их текущим значением и указанным конечным значением.
COGL
Cogl - это небольшая программная библиотека с открытым исходным кодом для использования оборудования 3D-графики для рисования красивых изображений. [20] 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
Рекомендации
- ^ "Clutter 1.26.4 (выпуск)" . 2020-03-09 . Проверено 23 января 2021 .
- ^ «ОБЪЯВЛЕНИЕ: Clutter 1.21.8 (снимок)» . 2016-02-18.
- ^ а б «Лицензия на беспорядок» .
- ^ http://developer.gnome.org/clutter/stable/ClutterCairoTexture.html Справочник по Clutter API: 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 . Проверено 29 июля 2009 .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 в Вайбак Machine Беспорядок API Reference: ClutterScript
- ^ «Архивная копия» . Архивировано из оригинала на 2009-08-05 . Проверено 29 июля 2009 .CS1 maint: заархивированная копия как заголовок ( ссылка )
- ^ «cogl 1.18.2» . 2014-07-04.
Внешние ссылки
- Беспорядок на домашней странице