پروژه گنوم نسخه Libadwaita 1.5 را منتشر کرده است که شامل مجموعهای از مؤلفهها برای استایل رابط کاربری است که از GNOME HIG (دستورالعملهای رابط انسانی) پیروی میکند. این کتابخانه شامل ویجتها و اشیاء آماده برای ساخت برنامههای کاربردی است که با سبک کلی GNOME مطابقت دارند، که رابط آن را میتوان به صورت تطبیقی با صفحههای نمایش با هر اندازه تنظیم کرد. کد کتابخانه به زبان C نوشته شده است و تحت مجوز LGPL 2.1+ توزیع شده است.
کتابخانه libadwaita همراه با GTK4 استفاده میشود و شامل اجزای تم Adwaita است که در GNOME استفاده میشود، که از GTK به یک کتابخانه جداگانه منتقل شدهاند. انتقال عناصر استایل گنوم به یک کتابخانه مجزا باعث می شود تا تغییرات خاص گنوم به طور جداگانه از GTK ایجاد شوند، و به توسعه دهندگان GTK اجازه می دهد تا روی چیزهای اصلی تمرکز کنند و توسعه دهندگان گنوم سریعتر و انعطاف پذیرتر تغییرات استایل مورد نظر خود را بدون تأثیرگذاری بر خود GTK به پیش ببرند.
این کتابخانه شامل ویجتهای استانداردی است که عناصر رابط مختلف را پوشش میدهد، مانند لیستها، پانلها، بلوکهای ویرایش، دکمهها، برگهها، فرمهای جستجو، کادرهای گفتگو و غیره. ویجتهای پیشنهادی به شما امکان میدهند رابطهای جهانی ایجاد کنید که هم بر روی صفحهنمایشهای بزرگ رایانههای شخصی و لپتاپها و هم در صفحههای لمسی کوچک تلفنهای هوشمند بهطور یکپارچه عمل کنند. رابط برنامه به صورت پویا بسته به اندازه صفحه نمایش و دستگاه های ورودی موجود تغییر می کند. این کتابخانه همچنین شامل مجموعهای از سبکهای Adwaita است که بدون نیاز به تطبیق دستی، ظاهر را با دستورالعملهای GNOME مطابقت میدهد.
Основным изменением в libadwaita 1.5 стала переработка адаптивных виджетов для создания диалоговых окон, подстраивающихся под размер видимой области. В отличие от традиционных диалогов, которые размещаются в отдельных окнах, новые диалоги формируются на стороне клиента, отрисовываются внутри существующих окон и не могут выходить за пределы родительского окна. Подобный подход упрощает создание универсальных диалогов, сочетаемых с интерфейсами для мобильных и настольных систем, а также предоставляет дополнительные возможности для управления диалогами (например, не нужно отслеживать выход за границу окна, можно выбирать поведение в отношении кнопок закрытия, обеспечивается автоматическое развёртывание на весь экран в мобильных версиях приложений, учитывается стиль текущего окна, а не системы, при затемнении диалога).
В дальнейшем планируется реализовать ещё один вариант подобных диалогов, привязанных не к окнам, а ко вкладкам внутри окна, что может быть востребовано в таких приложениях, как браузеры для того, чтобы связанные со вкладкой диалоги не перекрывали основное окно при переключении между вкладками.
Для мобильных устройств реализована поддержка размещения диалогов в форме листов, закреплённых в нижней части экрана (bottom sheets), а не в форме листов, выровненных по центру. Прикреплённые к нижней части диалоги избавляют пользователей от путаницы с закрытием окон — в подобных диалогах часть родительского окна остаётся видимой и кнопки закрытия родительского окна и самого диалога явно разделены, поэтому их теперь трудно спутать.
Управление новыми диалогами производится при помощи класса AdwDialog, работа с которым в большинстве ситуаций походит на использование класса GtkWindow, а различия сводятся к операциям отображения и закрытию. Например, свойство «:transient-for» заменено на параметр в функции adw_dialog_present(), добавлен новый сигнал «::close-attempt», изменена обработка параметра «:can-close». Вместо классов AdwPreferencesWindow, AdwAboutWindow и AdwMessageDialog с новыми диалогами предложено использовать классы AdwPreferencesDialog, AdwAboutDialog и AdwAlertDialog.
Диалоги, которые не имеют родительского окна, по-прежнему будут обрабатываться в форме отдельных окон. Как окна также будут функционировать диалоги, родительские окна которых не могут быть использованы для размещения диалогов, например, если они не допускают изменения размера или для них отсутствуют классы AdwWindow и AdwApplicationWindow.
Не связанные с переработкой диалогов изменения в Libadwaita 1.5:
- В класс AdwEntryRow добавлено свойство «:text-length» для ограничения размера текста в поле ввода.
- В класс AdwMessageDialog добавлен метод remove_response().
- В класс AdwBreakpointBin, позволяющий менять интерфейс пользователя произвольным образом в зависимости от размера окна, добавлена возможность программного удаления точек останова.
- В класс AdwSwipeTracker добавлен флаг «:allow-window-handle», допускающий пролистывание поверх верхней панели (используется в листах, прикреплённых к нижнему краю).
- Повышена яркость цветов, используемых при затенении окон при тёмном стиле оформления.
منبع: opennet.ru