Было бы потрясающе сглаженные заголовки с круглыми углами
Непрямоугольные окна сделаны в X11 с расширением SHAPE.Это расширение позволяет только «этот пиксель находится в окне» или «этот пиксель находится за пределами окна».Таким образом, сглаживание здесь невозможно.https://www.x.org/releases/X11R7.7/doc/xextproto/shape.html
Однако, когда у вас запущен менеджер композитинга, можно добавить альфа-канал в окно.Это позволяет вещам быть, например, 50% прозрачными.Таким образом, при этом возможен альфа-канал.
Итак, в AwesomeWM вы можете сделать внешнюю скругленную границу вокруг клиента, установив ширину границы в ноль и вместо этого добавив заголовок на каждой стороне клиентаэто содержит некоторую «реальную прозрачность».
Дешевый пример, который на самом деле не делает закругленные углы, но показывает прозрачность:
local my_widget = wibox.widget.base.make_widget()
local cairo = require("lgi").cairo
function my_widget:draw(_, cr, width, height)
cr:set_operator(cairo.Operator.SOURCE)
cr:set_source(gears.color.create_linear_pattern{
from = { 0, 0 },
to = { width, 0 },
stops = {
{ 0, "#f000" },
{ 1, "#0f0f" },
},
})
cr:paint()
end
awful.titlebar(c, { position = "bottom" }):set_widget(my_widget)
Таким образом, можно сделать заголовок, который рисует закругленный угол сглаженным способом.Тем не менее, это потребует выполнения нескольких частей, потому что нам нужно создавать каждый заголовок отдельно.
Кроме того, это может сделать только закругленный угол снаружи.Внутри (то есть по отношению к фактическому клиентскому контенту) AwesomeWM предоставляет доступ только к расширению формы.Однако нам нужно было бы нарисовать что-то в реальном окне клиента, чтобы иметь сглаженный закругленный угол.В настоящее время это невозможно.
(Я надеюсь, что этот абзац можно понять. Почему-то я чувствую, что его трудно описать / понять.)
Также другие формы, применяемые к виджетамкак gears.shape.ground_rect или gears.shape.circle.
Ну ... я не уверен, почему вы думаете, что здесь нет сглаживания.
local w = wibox{ x = 10, y = 10, height = 300, width = 300 }
w:setup {
widget = wibox.container.background,
bg = '#f00',
{
widget = wibox.container.background,
shape = gears.shape.circle,
bg = '#0f0',
}
}
w.visible = true
Увеличение полученного изображения ясно показывает сглаживание:
или все остальные, которые округлили что-либо.
Это на самом деле не специфично для формы, но для вещи, которая применяет форму.Например, wibox.container.background
(который «рисует напрямую» и, следовательно, может выполнять сглаживание) по сравнению с awful.client.shape
(который использует расширение формы X11 и, следовательно, не может выполнять сглаживание).