Из Википедии, бесплатной энциклопедии
  (Перенаправлено из Clutter (инструментарий) )
Перейти к навигации Перейти к поиску

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

Автором 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 в своем пользовательском интерфейсе.

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

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

Беспорядок - это холст на основе графа сцены, работающий в сохраненном режиме . Каждый объект на сцене обычно представляет собой 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" :  "Привет, мир!" ,  «цвет» : "черный" ,  "имя-шрифта" :  "Без 48px"  }],  "сигналы" :  [{  "имя" :  "уничтожить" ,  "обработчик" :  "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

Ссылки [ править ]

  1. ^ "Clutter 1.26.4 (выпуск)" . 2020-03-09 . Проверено 23 января 2021 .
  2. ^ «ОБЪЯВЛЕНИЕ: Беспорядок 1.21.8 (снимок)» . 2016-02-18.
  3. ^ a b «Лицензия на беспорядок» .
  4. ^ http://developer.gnome.org/clutter/stable/ClutterCairoTexture.html Справочник по Clutter API: ClutterCairoTexture
  5. ^ "Проекты / Vala / MxSample - GNOME Wiki!" . wiki.gnome.org . Проверено 18 апреля 2018 года .
  6. ^ "Беспорядок-проект / глина" . GitHub . Проверено 18 апреля 2018 года .
  7. ^ «Документация разработчика GNOME» .
  8. Bassi, Emmanuele (31 января 2011 г.). «ОБЪЯВЛЕНИЕ: Clutter 1.6.0 (стабильный)» . Проверено 9 марта +2016 .
  9. Брэдфорд, Роб (16 декабря 2011 г.). «Обновление Clutter & Cogl Wayland» . Проверено 9 марта +2016 .
  10. Bassi, Emmanuele (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 . Проверено 29 июля 2009 .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 в Вайбак Machine Беспорядок API Reference: ClutterScript
  19. ^ "Архивная копия" . Архивировано из оригинала на 2009-08-05 . Проверено 29 июля 2009 .CS1 maint: заархивированная копия как заголовок ( ссылка )
  20. ^ "cogl 1.18.2" . 2014-07-04.

Внешние ссылки [ править ]

  • Беспорядок на домашней странице