Каковы стандартные цвета уведомлений в 11.10? Я пишу приложение с AppIndicator, и мне бы хотелось, чтобы оно соответствовало цветовой схеме рабочего стола.
Есть ли где-нибудь этот материал задокументирован? Я проверил developer.ubuntu.com, но безуспешно.
Предположение, что реальный вопрос дан в комментарии (и Python принятия, так как Вы добавили тег py-appindicator): "1.), Как я получаю цвета из глобального меню? 2.) И как я тяну цвета на изображение для моего appindicator?"
Ваш второй вопрос на самом деле состоит из двух вопросов: 2.a), Как я рисую изображение? 2.b), Как определить знаковую тему Appindicator?
У меня нет ответа на 2.b). Appindicator или чрезвычайно плохо документируется, или документация чрезвычайно хорошо скрыта. Некоторые не так полезный материал могут быть найдены здесь и здесь. Вероятно, необходимо работать myindicator.set_icon_theme_path
но я не нашел названия различных значков, которые используются.
К 1.): Для получения цветов gtk виджета программно для использования в Каире (для привлечения их позже), можно использовать что-то вроде этого (для меню):
import gtk
def get_menubar_colors_for_cairo():
w = gtk.Window()
b = gtk.MenuBar()
w.add(b)
w.show_all()
w.hide()
style = b.get_style()
del(w)
del(b)
bg = {}
fg = {}
for name, state in [("normal", gtk.STATE_NORMAL),
("active", gtk.STATE_ACTIVE),
("prelight", gtk.STATE_PRELIGHT),
("selected", gtk.STATE_SELECTED),
("insensitive", gtk.STATE_INSENSITIVE)]:
bg[name] = (style.bg[state].red / 65535.0, style.bg[state].green / 65535.0, style.bg[state].blue / 65535.0)
fg[name] = (style.fg[state].red / 65535.0, style.fg[state].green / 65535.0, style.fg[state].blue / 65535.0)
return fg, bg
Это дает Вам forground и стиль фона для различных состояний. (Существуют, вероятно, лучшие пути, но это должно все еще работать...),
Обратите внимание, что яркий синий или яркий красный, кажется, не часть цветов стандартного меню. Я не мог узнать, куда они происходят из.
Обратите внимание также, что, если gtk тема изменяется, но Вы оставляете свои значки, как они, они выделятся, так как у них затем могли бы быть неправильные цвета.
К 2.a), можно использовать Каир для рисования изображений на различные поверхности (png, PDF, svg, gtk виджеты...). Вот пример, который тянет некоторые прямоугольники на png, появляется и сохранил файлы в Вашем текущем рабочем каталоге. Каждому прямоугольнику потянули основной цвет на цвет фона данного состояния:
import cairo
def draw_a_rect(fg, bg, state, outfilename):
surf = cairo.ImageSurface(cairo.FORMAT_ARGB32, 200, 200)
context = cairo.Context(surf)
context.rectangle(0, 0, 200, 200)
context.set_source_rgb(*bg[state])
context.fill()
context.rectangle(50, 50, 100, 100)
context.set_source_rgb(*fg[state])
context.fill()
surf.write_to_png(outfilename % state)
fg, bg = get_menubar_colors_for_cairo()
for state_name in ["normal", "active", "prelight", "selected", "insensitive"]:
draw_a_rect(fg, bg, state_name, "test_%s.png")
Последнее примечание: Вы, вероятно, хотите оставить фон своих значков прозрачным, таким образом, у Вас есть один цвет меньше для волнения о.