За день до выхода GNOME 3.8 увидел свет стабильный релиз новой ветки многоплатформенного тулкита для создания графического интерфейса пользователя - GTK+ 3.8.0. Ветка GTK+ 3.8 полностью обратно совместима с прошлыми выпусками GTK+ серии 3.x.
В состав тулкита входит полный набор виджетов, позволяющих использовать GTK+ для проектов различного уровня и размера. Код GTK+ развивается в рамках проекта GNU и распространяется под лицензией LGPL, что позволяет использовать GTK+ не только для разработки свободного ПО, но и для создания проприетарных приложений, не требуя от производителей закрытых программ выплаты роялти или покупки специальной лицензии. С тех пор, как GTK+ был разработан в рамках проекта GIMP, тулкит используется в различных проектах, например, GTK+ лежит в основе десктоп-окружений GNOME и Xfce или используется в таких продуктах, как Firefox и OpenOffice/LibreOffice.
GTK+ спроектирован для поддержки не только C/C++, но и других языков программирования, таких как Perl и Python, что в сочетании с использованием визуального построителя интерфейса Glade позволяет существенно упростить разработку и сократить время написания графических интерфейсов. Организация вывода в GTK+ абстрагирована от типа оконных систем, например, поставляется бэкенд, обеспечивающий возможность работы поверх дисплейного сервера Wayland, а также бэкенд, позволяющий отрисовывать вывод библиотеки GTK+ в окне web-браузера (запустив Gtk-приложение на одной машине, можно открыть web-браузер на другой машине и получить доступ к интерфейсу данной программы).
Из добавленных в GTK+ 3.8.0 улучшений можно отметить:
- Обеспечена поддержка протокола Wayland 1.0. Бэкенд, обеспечивающий возможность работы поверх дисплейного сервера Wayland, был доступен и ранее, но поддерживал ранний экспериментальный API Wayland, который был стабилизирован только после выпуска Wayland 1.0;
- Переработка GDK-бэкенда Broadway, позволяющего отрисовывать вывод библиотеки GTK3+ в окне web-браузера. В бэкенд внесены изменения для обработки соединений с использованием отдельного процесса broadwayd, который по аналогии с X-сервером берёт на себя обработку всех задач по взаимодействию с клиентскими приложениями, работа с которыми организована через браузер. Для обработки запросов через HTTP в состав broadwayd включена реализация http-сервера, а также обеспечена возможность запуска дополнительных процессов broadwayd, которые выполняют функции сходные с раздельными X-сессиями при доступе через Web. Таким образом, пользователь теперь может легко запустить broadwayd и реализовать такие схемы как работа в одном окне браузера одновременно с несколькими Gtk-приложениями или открытие нескольких браузерных сессиий.
- Улучшение API для формирования визуальных тем, описание стиля в которых задаётся в CSS-подобном представлении с возможностью смены стиля на лету. В новой версии переработаны и расширены средства для работы со шрифтами: заданные по умолчанию параметры шрифта теперь воспринимаются как начальные значения, а не жесткие настройки, которые нельзя изменить. Добавлена поддержка CSS-свойств для задания таких параметров шрифтов и задания размеров шрифта в относительных величинах (например, xx-small, medium, smaller, larger).
Расширены средства для изменения оформления областей ввода текста с использованием сенсорных экранов, налажен вывод фоновых изображений при отрисовке меню. Отрисовка GtkFrame теперь осуществляется в фоне. Уровень прозрачности отдельно может задаваться для любых экземпляров GtkWidget, на не только для элементов первого уровня.
- Управление геометрией: Размер группы теперь может определяться заданием высоты с автоматическим расчётом ширины. Невидимые виджеты теперь возвращают размер 0, что позволяет использовать GtkWidget::visible по аналогии с "display: none" в CSS (для достижения эффекта "visibility: hidden" в CSS следует использовать GtkNotebook с пустой страницей);
- Добавлена поддержка всплывающих окон, элементы которых можно выводить вместо контекстного меню при использовании на устройствах с сенсорными экранами;
- В диалоге вывода на печать теперь автоматически выводится список доступных принтеров, наличие которых было определено через сервис avahi (действует только при сборке --enable-avahi-browsing);
- В GtkTreeView и GtkIconView добавлена возможности активации по одному клику;
- Добавлена поддержка протокола оконного менеджера для синхронизации кадров, позволяющего учитывать готовность вывода при отрисовке композитным менеджером. Протокол даёт возможность приложениям информировать оконный менеджер о необходимости задержать обновления вывода до завершения отрисовки в буфер элементов интерфейса, что позволяет избежать ситуаций вывода частично отрисованного окна, увеличить гладкость масштабирования и отрисовки;
- Проведена обширная работа по увеличению производительности: оптимизирован рендеринг текста в GtkLabel и других виджетах, сокращено число операций излишней перерисовки при изменении размера группы, для ускорения загрузки пиктограмм задействован кэш GtkIconInfo, для ускорения работы CSS задействован индекса с деревом селекторов;
- Удалена поддержка цветовых схем. Объявлена устаревшей возможность создания собственных свойств CSS. Прекращена поддержка вызовов - gtk_style_provider_get_style, gtk_style_provider_get_icon_factory, gtk_style_context_set_direction, gtk_window_set_opacity, GtkGradient и GtkSymbolicColor;
- Изменена реализация объекта GtkIconInfo, который теперь не привязан к GObject через механизм Boxed Types. Несмотря на то, что технически наблюдается изменение ABI, на практике при использовании Boxed Types весь существующий код будет работать без изменений и GtkIconInfos невозможно использовать вне Gtk.
Одновременно представлена новая стабильная ветка графической библиотеки Clutter - 1.14.0, API и ABI которой обратно совместимы с прошлыми версиями библиотеки. Clutter активно используется для обеспечения работы пользовательского интерфейса в проекте GNOME 3. Функции библиотеки Clutter ориентированы на активное использование анимации и визуальных эффектов, что позволяет применять при создании обычных GUI приложений методы, используемые при разработке игр. При этом сама библиотека напоминает игровой движок, в котором максимальное число операций выносится на плечи GPU. Одним из основных преимуществ Clutter является то, что для создания сложного интерфейса пользователя требуется написание минимума кода. Библиотека может работать поверх OpenGL, GLib, GObject, GLX, SDL, WGL, Quartz, EGL и Pango. Имеются биндинги для языков Perl, Python, C#, C++, Vala и Ruby.
Из изменений в новой ветке Clutter выделяется обеспечение поддержки расширения XInput 2.x в качестве используемой по умолчанию системы обработки ввода при работе поверх X11. С практической стороны, переход на XInput 2.x приведёт к доступности из коробки поддержки распознавания событий и жестов для систем с сенсорным экраном. Добавлен новый класс ClutterTapAction с реализацией простой системы распознавания жестов через касания к сенсорному экрану. Для оптимизации повторной отрисовки задействован отдельный буфер, который позволил добиться увеличения производительности и избавиться от артефактов в процессе обновления содержимого экрана. Добавлена поддержка одновременной сборки бэкендов Wayland с клиентом и композитным сервером.
Дополнительно можно отметить выход новой тестовой ветки Glade 3.15.0, инструментария для быстрой разработки интерфейсов для приложений на основе GTK+. Созданный в Glade интерфейс сохраняется в формате XML, который можно затем динамически загрузить в GTK-приложение при помощи объекта GtkBuilder. XML-файлы с определением интерфейса могут быть использованы в GTK-программах на различных языках программирования, включая C, C++, C#, Vala, Java, Perl и Python. Ключевым улучшением в Glade 3.15 является реализация поддержки интерфейса Drag & Drop - виджеты теперь свободно можно перетаскивать мышью между рабочими областями Glade. Дополнительно отмечается изменение интерфейса редактора свойств, в котором высвобождено больше вертикального экранного пространства, что позволило отобразить одновременно больше доступных свойств.