Gtk +: Как рисовать пользовательские границы окон, такие как Chrome или Steam

Мне было интересно, можно ли рисовать (то есть проектировать) оконные рамы с помощью Cairo в Gtk, чтобы Cairo API можно было использовать для украшения поверхности, например, для добавления градиентов.

Как мне смягчить украшения GTK и переделать их во что-то вроде Каира?


person M Gage Morgan    schedule 24.04.2017    source источник


Ответы (2)


Обычно в Linux оформление окон (границы, строка заголовка, кнопки закрытия и свертывания и т. Д.) Рисуются диспетчером окон, что помогает поддерживать одинаковый внешний вид и поведение для разных окон.

Однако приложение может сигнализировать диспетчеру окон, что оно хочет отключить декорации, предоставляемые диспетчером окон, и нарисовать свои собственные. В Gtk + это можно сделать, вызвав _1 _ на GtkWindow, а затем с помощью Cairo нарисовать собственные границы.

person el.pescado    schedule 25.04.2017
comment
Замечательно, @ el.pescado. Спасибо - person M Gage Morgan; 25.04.2017

Вам нужно будет написать оконный менеджер. Примером оконного менеджера (ныне устаревшего), который использовал GTK и Cairo для рисования оконных украшений, был Metacity.

person ptomato    schedule 25.04.2017
comment
Так как же тогда Steam и другие подобные Chromium могут получить это, не написав полностью новый DE? - person M Gage Morgan; 25.04.2017
comment
WM были вытеснены композиторами Wayland IIRC ... Mutter близок, насколько вы можете понять, но я не могу понять, где живет дизайн в mter wondow-мудром. - person M Gage Morgan; 25.04.2017
comment
Chromium, Steam: они подсказывают оконному менеджеру нарисовать как можно меньше украшений и, по-видимому, сами рисуют их с помощью собственных графических процедур вместо использования существующего набора инструментов. Однако это работает для каждого приложения, что отличается от создания собственной версии GTK, как вы просили. - person ptomato; 25.04.2017
comment
Я отредактировал вопрос - моя теория заключается в том, что если есть способ получить желаемый результат один раз, его можно воспроизвести. Если я смогу научиться делать то, что они сделали с этими двумя приложениями, теоретически я мог бы написать библиотеку, чтобы упростить и повторить ее. - person M Gage Morgan; 25.04.2017
comment
Спасибо за редактирование вопроса, гораздо понятнее, что вы пытаетесь сделать! Вы не отстойны в вопросах. Задать правильный вопрос - это половина дела. - person ptomato; 25.04.2017
comment
Тем не менее, написание библиотеки, чтобы делать то, что делали эти приложения ... на самом деле написание инструментария UI, такого как GTK, снова и снова, но с другим набором предположений. - person ptomato; 25.04.2017