Изменение размера виджета текстового поля в соответствии с содержимым

Я создаю виджет, чтобы указать использование процессора в процентах. Виджет представляет собой график с текстовым полем, нарисованным поверх него. Поскольку текст имеет тот же цвет, что и график, я хочу дать тексту фон. Итак, я попробовал что-то вроде этого:

cpu_graph = wibox.widget {
    widget = wibox.widget.graph,
    width = 40,
}
vicious.cache(vicious.widgets.cpu)
vicious.register(cpu_graph, vicious.widgets.cpu, "$1", 2)
cpu_text = wibox.widget {
    align = 'center',
    widget = wibox.widget.textbox
}
vicious.register(cpu_text, vicious.widgets.cpu, "$1%", 2)
cpu_txt_bg = wibox.container.background(
    cpu_text,
    '#ff0000',
    gears.shape.rectangle
)
cpu_graph_s = wibox.widget {
    wibox.container.mirror(cpu_graph, { horizontal = true }),
    cpu_txt_bg,
    layout = wibox.layout.stack
}

К сожалению, кажется, что фон покрывает весь график следующим образом:

введите здесь описание изображения

Я предполагаю, что это связано с тем, что текстовое поле имеет тот же размер, что и график, поэтому я думаю, что размер текстового поля должен быть изменен, чтобы соответствовать только его содержимому.

Используя маржинальный контейнер, я получаю то, что хочу:

cpu_graph_s = wibox.widget {
    wibox.container.mirror(cpu_graph, { horizontal = true }),
    wibox.container.margin(cpu_txt_bg, 12, 12, 5, 5)
    layout = wibox.layout.stack
}

Результат намного лучше:

введите здесь описание изображения

К сожалению, это, кажется, изменяет размер всего графика, когда размер текста изменяется:

введите здесь описание изображения

Есть ли лучшее решение для изменения размера текстового поля без изменения размера всего графика?


person siebz0r    schedule 22.07.2017    source источник


Ответы (1)