Автор (ы) | Эммануэль Басси, OpenedHand Ltd |
---|---|
Разработчик ( s) | Проект GNOME |
Первоначальный выпуск | 22 июня 2006 г.; 14 лет назад (22.06.2006) |
Стабильный выпуск | 1.26.2 / 12 мая 2017 г.; 3 года назад (12.05.2017) |
Предварительный выпуск | 1.25.6 / 18 февраля 2016 г.; 4 года назад (18.02.2016) |
Репозиторий | |
Написано на | C |
Операционной системе | Linux, BSD, OS X, Microsoft Windows |
Тип | Графическая библиотека |
Лицензия | Стандартная общественная лицензия ограниченного применения GNU |
Веб-сайт | GNOME / Projects / clutter. |
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 (он же Totem), GNOME Shell, Pitivi, Cinnamon Desktop и.
Mx - это набор инструментов для виджетов, основанный на Clutter, изначально разработанный для графической оболочки Moblin / нетбука MeeGo, но впоследствии превратился в независимый проект..
Наборы инструментов виджетов Netbook Toolkit (nbtk) и Mx основаны на Clutter. Часто беспорядок отображается аналогично GTK +, но это неточно. Только Clutter вместе с Mx или Nbtk может соответствовать экстенту GTK +. Это также причина, по которой Clutter используется вместе с GTK +.
Clutter поддерживает мультитач-жесты.
GTK + Scene Graph Kit (GSK) был изначально выпущен как часть GTK + 3.90 в марте 2017 года и предназначен для приложений на основе GTK, которые хотят заменить Clutter в своем пользовательском интерфейсе.
Clutter is холст на основе графа сцены, работающий в сохраненном режиме. Каждый объект на сцене обычно представляет собой 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, он инкапсулирует положение, размер и преобразования узла в графе.
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 . Привязки доступны для следующих языков:
Clutter можно интегрировать с другими библиотеками и инструментами, например:
Этот пример добавит метку на сцену (написанную на 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 (stage) - clutter_actor_get_width (label)) / 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. Весь граф сцены определяется с использованием типов 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": "Hello, world!", "color ":" черный "," font-name ":" Sans 48px "}]," сигналы ": [{" name ":" destroy "," handler ":" 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 (поведение, метка);
Эквивалентный код, использующий API неявной анимации:
clutter_actor_animate (label, / * актер для анимации * / CLUTTER_LINEAR, / * режим замедления * / 2000, / * продолжительность анимации * / "scale-x", 2.0, / * окончательный коэффициент масштабирования по горизонтали * / "scale-y", 2,0, / * окончательный коэффициент масштабирования по вертикали * / NULL);
Cogl - небольшая программная библиотека с открытым исходным кодом для использования 3D графическое оборудование для рисования красивых картинок. 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 названа в честь Самуэля де Шамплена, французского мореплавателя, исследователя и картографа.