LXF145:GTK3
2sash-kan (обсуждение | вклад) (Новая страница: «==Пересборка GUI== : '''Джон Ламби''' вооружился последней версией инструментария виджетов. …») |
Текущая версия на 16:06, 8 июля 2014
|
|
|
Содержание |
[править] Пересборка GUI
- Джон Ламби вооружился последней версией инструментария виджетов.
Слышите громовые раскаты надвигающейся революции? GTK 3 — первая новая версия инструментария виджетов за последние девять лет, и она повлияет буквально на всех пользователей Linux, работающих в GUI. Если вам это кажется преувеличением, учтите, что на GTK основаны самые популярные рабочие столы Linux, такие как Gnome и Xfce, и GTK используется многими графическими приложениями из других рабочих столов, окружений окон и операционных систем. По сути, GTK можно описать как инструментарий для создания всего графического, работающего где угодно и на любом языке программирования.
GTK – лишь один кирпич в пирамиде связанных инструментариев. Например, GDK обеспечивает обобщенный графический слой, давая независимость от разных оконных систем, GIO предоставляет ввод/вывод, а комбинация GLib и Gobject создает объектно-ориентированную основу с базовыми алгоритмами, утилиты для управления ими и т. д. А на вершине пирамиды расположен Gnome.
GTK требует наличия еще двух других пакетов, которые, строго говоря, не являются частью G-вселенной:
- Cairo обеспечивает прорисовку графики.
- Pango обеспечивает набор шрифтов.
При таком широком размахе GTK в нем неминуемы излишества. Чтобы создать в нем приложение, нужно знать не только GTK, но и многие другие кирпичи, лежащие ниже в пирамиде – и иногда портирование программы в другие окружения требует значительной переработки.
- Метамодернизм в позднем творчестве В.Г. Сорокина
- ЛитРПГ - последняя отрыжка постмодерна
- "Ричард III и семиотика"
- 3D-визуализация обложки Ridero создаем обложку книги при работе над самиздатом.
- Архитектура метамодерна - говоря о современном искусстве, невозможно не поговорить об архитектуре. В данной статье будет отмечено несколько интересных принципов, характерных для построек "новой волны", столь притягательных и скандальных.
- Литература
- Метамодерн
- Рокер-Прометей против изначального зла в «Песне про советскую милицию» Вени Дркина, Автор: Нина Ищенко, к.ф.н, член Союза Писателей ЛНР - перепубликация из журнала "Топос".
- Как избавиться от комаров? Лучшие типы ловушек.
- Что делать если роблокс вылетает на windows
- Что делать, если ребенок смотрит порно?
- Почему собака прыгает на людей при встрече?
- Какое масло лить в Задний дифференциал (мост) Visco diff 38434AA050
- О чем может рассказать хвост вашей кошки?
- Верветки
- Отчетность бюджетных учреждений при закупках по Закону № 223-ФЗ
- Срок исковой давности как правильно рассчитать
- Дмитрий Патрушев минсельхоз будет ли преемником Путина
- Кто такой Владислав Поздняков? Что такое "Мужское Государство" и почему его признали экстремистским в России?
- Как правильно выбрать машинное масло в Димитровграде?
- Как стать богатым и знаменитым в России?
- Почему фильм "Пипец" (Kick-Ass) стал популярен по всему миру?
- Как стать мудрецом?
- Как правильно установить FreeBSD
- Как стать таким как Путин?
- Где лучше жить - в Димитровграде или в Ульяновске?
- Почему город Димитровград так называется?
- Что такое метамодерн?
- ВАЖНО! Временное ограничение движения автотранспортных средств в Димитровграде
- Тарифы на электроэнергию для майнеров предложено повысить
[править] Цели GTK 3
Три года назад идеи об очистке и обновлении GTK были высказаны на Hackfest в Берлине, а около года назад появился и план действий [roadmap] – он приведен на http://www.tuxradar.com/content/gtk-3-plans-laid-out. Одной из самых главных задач было предоставление функций, в которых нуждался Gnome 3 (обратитесь к путеводителю по новому рабочему столу на стр. 24). Главными областями улучшений были:
- Упрощение пирамиды.
- Облегчение портирования приложений.
- Помощь программистам и пользователям достичь желаемых эффектов, особенно с геометрией.
- Добавление метода работы с устройствами ввода XInput 2.
- Добавление нового способа работы с темами в API и пользовательских настроек на основе синтаксиса CSS.
- Обогащение набора виджетов и введение расширений, например, новых базовых классов.
- Оснащение аспектов интеграции с платформой, затрагиваемых при написании приложений.
GTK 3 не является конечным пунктом плана; уже идут разговоры о GTK 4 (он-то выйдет раньше, чем через девять лет!) Если вы интересуетесь его эволюцией, то прогресс отслеживается на http://live.gnome.org/GTK+/Roadmap.
Столь радикальная переработка включает удаление обветшавших функций и изменение других, так что GTK 3 собран так, чтобы сосуществовать с GTK 2, используя другие имена для библиотек. Это и хорошо, и плохо. Хорошо тем, что вы сможете установить и использовать его, не преобразовывая все ваши программы. Фактически библиотеки GTK 3 уже есть в Fedora 14, замаскированные в пакете под названием gtk3-2.90.5-1.fc14. (Не тратьте свое время на испытания этого пакета; мы не смогли ни найти графическую программу, использующую его, ни собрать с ним что-либо). Fedora 15 будет содержать пакет уже «настоящего» GTK 3 – возможно, это будет gtk3-3.0.x – и перейдет на Gnome 3, эксплуатирующий GTK 3. Ожидается, что в Fedora 15 и другие пакеты начнут использовать GTK 3, но не все. Последующие дистрибутивы, вероятно, будут вести себя так же.
В этом пункте у вас может возникнуть смутное подозрение насчет одной из отрицательных сторон таких решений: путаницы. Скажем, как узнать, есть ли у вас GTK? Это не так сложно: просто поищите в менеджере пакетов пакет с именем gtk3**** или библиотеку libgtk***3.***. Потом, как узнать, используется ли GTK 3 в приложении или пакете xyz? Самый простой и легкий способ узнать это – если xyz решил поддерживать и GTK 2, и GTK 3, то в дистрибутиве будут два разных пакета xyz – каждый для своей версии. Есть надежда, что имена пакетов это отразят. Похоже, именно таким методом пользуются пакеты, желающие поддерживать GTK 3, не заставляя пользователей менять версию.
Это выводит нас на другой потенциальный недостаток сосуществования: дублирование. В Fedora 15 вовлечены следующие пакеты:
- PackageKit-gtk-module
- ibus-gtk
- libindicator
- webkitgtk
- spice-gtk
Про те, что вне списка, сказать трудно. Попробуйте идентифицировать главный двоичный файл или файл библиотеки xyz, запустив для него команду:
ldd -v binary_filename
Если в выводе вы увидите ссылку на библиотеку GTK, она может дать ответ на ваш вопрос.
- Метамодернизм в позднем творчестве В.Г. Сорокина
- ЛитРПГ - последняя отрыжка постмодерна
- "Ричард III и семиотика"
- 3D-визуализация обложки Ridero создаем обложку книги при работе над самиздатом.
- Архитектура метамодерна - говоря о современном искусстве, невозможно не поговорить об архитектуре. В данной статье будет отмечено несколько интересных принципов, характерных для построек "новой волны", столь притягательных и скандальных.
- Литература
- Метамодерн
- Рокер-Прометей против изначального зла в «Песне про советскую милицию» Вени Дркина, Автор: Нина Ищенко, к.ф.н, член Союза Писателей ЛНР - перепубликация из журнала "Топос".
- Как избавиться от комаров? Лучшие типы ловушек.
- Что делать если роблокс вылетает на windows
- Что делать, если ребенок смотрит порно?
- Почему собака прыгает на людей при встрече?
- Какое масло лить в Задний дифференциал (мост) Visco diff 38434AA050
- О чем может рассказать хвост вашей кошки?
- Верветки
- Отчетность бюджетных учреждений при закупках по Закону № 223-ФЗ
- Срок исковой давности как правильно рассчитать
- Дмитрий Патрушев минсельхоз будет ли преемником Путина
- Кто такой Владислав Поздняков? Что такое "Мужское Государство" и почему его признали экстремистским в России?
- Как правильно выбрать машинное масло в Димитровграде?
- Как стать богатым и знаменитым в России?
- Почему фильм "Пипец" (Kick-Ass) стал популярен по всему миру?
- Как стать мудрецом?
- Как правильно установить FreeBSD
- Как стать таким как Путин?
- Где лучше жить - в Димитровграде или в Ульяновске?
- Почему город Димитровград так называется?
- Что такое метамодерн?
- ВАЖНО! Временное ограничение движения автотранспортных средств в Димитровграде
- Тарифы на электроэнергию для майнеров предложено повысить
Итак, в отличие от типового обновления, простая установка пакета версии GTK 3 на вашу машину либо не повлияет на все остальное, либо влияние будет незначительным. Фактическое же его подключение требует вмешательства разработчиков программ на его основе.
А надо ли вам заботиться об этом? Может, предоставить это поставщику дистрибутива? Да, возможно, но только если у вас нет чрезмерно перенастроенного внешнего вида GTK через личные настройки, или собственных GTK-приложений. Но если вы заметите изменения, это поможет вам разобраться в происходящем. Ясно, что раз вы создали собственные настройки или изменили системные, то понимали, что делаете.
[править] Особенности GTK 3
Рассмотрим подробнее некоторые из новых функций инструментария виджетов. В GTK 3 есть система управления геометрией «height-for-width» и «width-for-height». Height-for-width значит, что виджет может менять размер требуемого места по вертикали за счет полученного места по горизонтали. Width-for-height работает сходным образом.
Пример работы такой системы – метка, которая «растекается» по ширине в контейнере, благодаря этому «оседая» по высоте. Это происходит полностью автоматически. Виджет должен решить, какое направление считается фиксированным, а какое – растягиваемым, то есть нужен ли height-for-width или width-for-height, а затем производит соответствующие вызовы. Обе функции запроса (на предпочтительную высоту или ширину) и вызовы расположения выполнятся рекурсивно вниз по потомкам виджета, если таковые есть, оценивая минимальный и натуральный размер каждого из них.
Расширения XInput 2 обеспечивают поддержку более широкого класса функций и устройств ввода, таких как множественные устройства ввода, коды 32-разрядных клавиатур и расширенный интерфейс графических планшетов. Эта поддержка не обязательна при установке GTK, но по умолчанию включена. Приложения могут получать одновременный доступ к нескольким устройствам ввода и использовать добавочные «оси», предоставляемые устройствами, такие как сила нажатия и наклон. Координаты событий могут описывать позиции субпикселей, так как теперь их тип – число с плавающей точкой. (Такие интерфейсы – часть Устройств и Событий GDK, а не GTK.)
[править] Введение в stylesheets
GTK 3 прорисовывает виджеты на основе стиля и темы. Конструкция GtkStyle из GTK 2 уже устарела, как и спецификация стилей в пользовательском .gtkrc-2.0. Да и сам файл .gtkrc-xx тоже устарел. Их сменили StyleProvider API и стили типа CSS, задаваемые и настраиваемые пользователем. Имеется новый API для рендеринга и свежий API ThemeEngine. Это сильно улучшает способы, которыми программа и пользователь могут влиять на внешний вид виджета или класса виджетов. Также есть формальная поддержка разработки пользовательского движка тем документацией – хотя легче она от этого не стала.
Ниже перечислены свойства стиля, задаваемые в новом формате CSS:
- engine
- background-color
- color
- border-color
- font
- margin
- padding
- background-image
- border-width
- border-radius
- border-style
- border-image
- registered style properties
Есть две разновидности зарегистрированных свойств стиля: характерные для движка стилевые свойства зарегистрированы в GtkThemingEngines, а характерные для виджета – в Widgets. Имена свойств имеют форму
-namespace-name
В этом примере namespace – имя движка темы или имя класса виджетов, соответственно, а name – имя свойства. Давайте-ка попробуем совместить это – вот пример CSS-подобного стиля в GTK 3:
GtkSwitch { background-color: #122830; color: #66c8fa; font: Comic Sans 12; -GtkSwitch-slider-width: 96; } GtkEntry { background-color: #091929; color: #99A9B9; margin: 5 10 3 8; -GtkEntry-inner-border: 10 3 8 5; -GtkEntry-font: Times New Roman 10 }
В этом пункте следует отметить, что файл под названием .gtkrc или .gtkrc-2.0 в домашнем каталоге пользователя ныне отсутствует. Этот файл содержал спецификации нескольких типов, а сейчас все они определяются иначе, а именно:
- Настройки, простые присваивания в формате name=value Перешли в settings.ini.
- Стили Перешли в стили CSS.
- Привязки клавиш Новый синтаксис в формате CSS, того же типа, что новые стили.
Установки пользователя обычно управляются внешним менеджером окружения XSettings, который поставляется с рабочим столом, однако вы можете разместить их в новом файле settings.ini, расположение которого указано в экспортированной переменной окружения XDG_CONFIG_HOME. Если вы экспортируете XDG_CONFIG_HOME в some_directory,то GTK 3 будет искать файл настроек в
${XDG_CONFIG_HOME}/gtk-3.0/settings.ini
Можно видеть, что синтаксис настроек в нем немного отличается, но тем не менее до боли знаком:
export XDG_CONFIG_HOME=${HOME}/.xsettings cat ${XDG_CONFIG_HOME}/gtk-3.0/settings.ini [Settings] gtk-theme-name=HighContrast gtk-application-prefer-dark-theme=1 gtk-font-name=Times Roman 12
Точно – это ж воскресший INI-файл из MS-DOS! (Рано смеетесь: он мог бы стать и реестром). Формат name=value остался неизменным; новизна состоит в расположении файла и группировании разделов, область установок GTK называется [Settings]. В документации по GTK 3 упоминается про файл .gtkrc-3.0, однако тестирование и обсуждение в списках рассылки указывают, что покамест GTK 3 этот файл игнорирует – не утруждайте себя его созданием.
[править] Свежие виджеты
Появилось несколько новых виджетов, и выполнен ряд усовершествований для виджетов с прокруткой. Перечислим последние виджеты:
- GtkSwitch Переключатель в легком стиле.
- GtkScale Базовый класс для виджетов Horizonal и Vertical Scale.
- GtkCellArea Абстрактный класс, пригодный для раскладки GtkCellRenderers.
- GtkCellAreaBox Область ячейки, отображающая GtkCellRenderers в ряд или столбец.
- GtkCellAreaContext Здесь хранится информация по геометрии рядов в GtkCellArea.
- GtkGrid Распределяет виджеты по рядам и колонкам.
- GtkBox Базовый класс для контейнеров.
- GtkButtonBox Базовый класс для GtkHButtonBox и для GtkVButtonBox.
- GtkPaned Другой базовый класс, для виджетов с двумя регулируемыми панелями.
- GtkSeparator Базовый класс для GtkHSeparator и GtkVSeparator.
- GtkScrollbar И еще один базовый класс – теперь для GtkHScrollbar и GtkVScrollbar.
- GtkScrollable Интерфейс для виджетов с прокруткой.
- GtkAppChooser Виджеты диалога и кнопки для выбора, которое из установленных приложений использовать для обработки конкретного файла.
[править] Интеграция с платформой
- Метамодернизм в позднем творчестве В.Г. Сорокина
- ЛитРПГ - последняя отрыжка постмодерна
- "Ричард III и семиотика"
- 3D-визуализация обложки Ridero создаем обложку книги при работе над самиздатом.
- Архитектура метамодерна - говоря о современном искусстве, невозможно не поговорить об архитектуре. В данной статье будет отмечено несколько интересных принципов, характерных для построек "новой волны", столь притягательных и скандальных.
- Литература
- Метамодерн
- Рокер-Прометей против изначального зла в «Песне про советскую милицию» Вени Дркина, Автор: Нина Ищенко, к.ф.н, член Союза Писателей ЛНР - перепубликация из журнала "Топос".
- Как избавиться от комаров? Лучшие типы ловушек.
- Что делать если роблокс вылетает на windows
- Что делать, если ребенок смотрит порно?
- Почему собака прыгает на людей при встрече?
- Какое масло лить в Задний дифференциал (мост) Visco diff 38434AA050
- О чем может рассказать хвост вашей кошки?
- Верветки
- Отчетность бюджетных учреждений при закупках по Закону № 223-ФЗ
- Срок исковой давности как правильно рассчитать
- Дмитрий Патрушев минсельхоз будет ли преемником Путина
- Кто такой Владислав Поздняков? Что такое "Мужское Государство" и почему его признали экстремистским в России?
- Как правильно выбрать машинное масло в Димитровграде?
- Как стать богатым и знаменитым в России?
- Почему фильм "Пипец" (Kick-Ass) стал популярен по всему миру?
- Как стать мудрецом?
- Как правильно установить FreeBSD
- Как стать таким как Путин?
- Где лучше жить - в Димитровграде или в Ульяновске?
- Почему город Димитровград так называется?
- Что такое метамодерн?
- ВАЖНО! Временное ограничение движения автотранспортных средств в Димитровграде
- Тарифы на электроэнергию для майнеров предложено повысить
Вообще говоря, тема платформенной интеграции охватывает все, что касается установки и использования программы в разных платформах и окружениях. Звучит несколько расплывчато, но для инструментария, которых охватывает столько окружений и должен подстраиваться под многочисленные и разнообразые подсистемы, лежащие в их основе, это действительно важно. Новые особенности GTK 3 упрощают дело. А именно, класс GtkApplication, реализованный как производный от класса GIO GApplication, обеспечивает средства связи окон с процессами и позволяет процессам отслеживать и контролировать друг друга через посредство сигналов и действий.
Термин «приложение» может породить некоторую путаницу – в нашем контексте он означает абстрактный объект, отличный от привычного определения выполняемой программы. Эту последнюю мы будем называть процессом. В частности, имя «приложения» не обязательно совпадает с именем исполняемого файла данного процесса.
Например, некий процесс может идентифицироваться с определенным именем приложения и затем наблюдать за запуском/остановом другого процесса с таким же или другим именем приложения, и предпринимать действия, соответствующие ситуации. На LXFDVD помещен пример подобного случая. Процессы могут также обмениваться друг с другом различными простыми сигналами и более сложными объектно-ориентированными сообщениями, описывающими действия, которые следует выполнить.
В основе здесь лежит технология межпроцессного взаимодействия D-BUS (известная также как MessageBus), и она далеко не нова. Скажем, программный интерфейс для D-BUS уже много лет предоставляется в GLib. Например, вызовы метода, о которых мы упоминали выше, используют интерфейс D-BUS Introspect, который возвращает XML-строку, описывающую интерфейсы, методы и сигналы объекта. По сути, то, что произошло, представляет собой постепенную эволюцию и создание интерфейсов более высокого уровня в GIO и GTK. Данная эволюция не намерена останавливаться, и следующим шагом в ее развитии является новый GtkApplication.
[править] Переход и сосуществование
Теперь займемся проблемами, сопутствующими переходу. Рассмотрим три типа пользователей: пользователь, который не настраивает и не разрабатывает приложения; пользователь, кто делает свои настройки, но не создает приложений; и пользователь, разрабатывающий ПО.
Первый будет приятно удивлен новым внешним видом и содержимым рабочего стола, без необходимости менять что-либо. Пользователь, склонный к настройке приложений, обнаружит, что Settings, Bindings и Styles, которые нужно было задать в .gtkrc или .gtkrc-2.0, видимо, куда-то подевались и (Bindings и Styles) переписаны в формате CSS, как описано выше. Действия третьего пользователя, как мы увидим, сильно зависят от природы его приложения и от языка программирования.
В языках семейства C многие функции были признаны устаревшими, а другие были заменены. Например, при рисовании вместо GDK применяются функции Cairo. Если программа пользователя требует любую из них, она должна быть преобразована, но, вообще говоря, в глобальном переписывании нужды нет. После этого, конечно, нужно пересобрать приложения, включив файлы и библиотеки GTK 3.
С интерпретируемыми языками ситуация менее ясна. В Python, знакомый пакет PyGTK устарел и заменен тандемом PyGobject и Gobject-Introspection. Без переписывания не обойтись, что может вызвать шок у обладателей больших библиотек приложений на PyGTK. В чем тут дело? PyGTK – пример привязки языка вручную («статической»). Разработчики годами считали необходимым доступ к внутренним переменным и приватным полям GTK, что все более усложняло поддержку, особенно при обновлении до GTK 3.
Gobject-Introspection предоставляет уровень, содержащий метаданные в библиотеке Gobject, где они могут быть доступны и из компилируемых, и из интерпретируемых языков, давая также способ полуавтоматического сканирования и распознавания синтаксиса языка программирования и сборки соответствующей библиотеки, которую можно привязать к языку. Для программ на Python это означает, что вместо импорта PyGTK они будут импортировать GDK, GTK и Gobject из репозитория Gobject-Introspection. Для языка Perl работа по переходу на Gobject-Introspection ведется на момент написания этой статьи.
И, наконец, следует переписать движки тем, ради реализации интерфейса GtkThemingEngine из GTK 3.