LINUX.ORG.RU

Gtk & colors


0

0

Запаковываю в vbox пару виджетов, один из них - GTK_LABEL.

Хочу изменить этому GTK_LABEL 1. цвет шрифта 2. background

1-е я сделал так: GdkColor color; color.red = color.green = 0; color.blue = 65535; gtk_widget_modify_fg(my_label, GTK_STATE_NORMAL, &color);

А вот 2-е не получается. Вот мои неудачные попытки: //------------------ GdkColor color; color.red = color.green = color.blue = 1111; gtk_widget_modify_bg(my_label, GTK_STATE_NORMAL, &color); //------------------- GtkStyle *style_x; GdkColor bg_x; GdkColormap *palet_x; style_x = gtk_widget_get_style(my_label); palet_x = style_x->colormap; bg_x.red = bg_x.green = bg_x.blue = 1111; style_x->bg[GTK_STATE_NORMAL] = bg_x; gtk_widget_set_style(my_label, style_x);

Подскажите, как реализовать закраску заднего фона?

И еще вопрос, наверное дурацкий. Можно получить цвет выделения? Например есть виджет с текстом, выделяешь его мышью и background меняется. Вот этот цвет я и имею в виду. Или например лист, а в нем активная ячейка - имеет тотже background. Он меняется в зависимости от того, какая тема установлена.

anonymous

Запаковываю в vbox пару виджетов, один из них - GTK_LABEL.

Хочу изменить этому GTK_LABEL 1. цвет шрифта 2. background

1-е я сделал так:
	GdkColor color;
	color.red = color.green = 0;
	color.blue = 65535;
	
	gtk_widget_modify_fg(my_label, GTK_STATE_NORMAL, &color);

А вот 2-е не получается. Вот мои неудачные попытки:
	//------------------	
	GdkColor color;
	color.red = color.green = color.blue = 1111;
	gtk_widget_modify_bg(my_label, GTK_STATE_NORMAL, &color);
	//-------------------
	GtkStyle *style_x;
	GdkColor bg_x;
	GdkColormap *palet_x;
	
	style_x = gtk_widget_get_style(my_label);
	palet_x = style_x->colormap;
	
	bg_x.red = bg_x.green = bg_x.blue = 1111;
	style_x->bg[GTK_STATE_NORMAL] = bg_x;
	
	gtk_widget_set_style(my_label, style_x);

Подскажите, как реализовать закраску заднего фона?



И еще вопрос, наверное дурацкий.
Можно получить цвет выделения?
Например есть виджет с текстом, выделяешь его мышью 
и background меняется. Вот этот цвет я и имею в виду.
Или например лист, а в нем активная ячейка - имеет тотже
background.
Он меняется в зависимости от того, какая тема установлена.

anonymous
()
Ответ на: комментарий от anonymous

Не знаю, может я тебя не понял, а может я идиот, но под какую GTK пишешь? Если под 2.0, тогда можно всё сделать через Pango.

anonymous
()
Ответ на: комментарий от anonymous

Во второй GTK свойства GtkLabel меняются так:

gtk_label_set_markup (GTK_LABEL (some_label), "<span foreground=red background=blue> Text </span>");

anonymous
()
Ответ на: комментарий от anonymous

у GtkLabel нет заднего фона, и события она тоже принимать не может, это сделано для оптимизации. Поэтому менять цвет ее фона не получается. Для того, чтобы изменить цвет фона метки, нужно запаковать ее в какой-нибудь другой виджет, например, в GtkEventBox, и уже потом изменять цвет фона GtkEventBox. Это, насколько я помню, описано в одном из ответов в GTK FAQ.

Цвета все-таки лучше не менять, а если и менять, то через тему, используя GtkRcStyle, недавно в этом форуме была куча примеров на эту тему.

Цвета выделения задаются в стиле виджета.

widget->style->fg[SELECTED]

widget->style->bg[SELECTED]

anonymous
()
Ответ на: комментарий от anonymous

Можно на примере показать, как взять цвет из стиля?

Допустим надо взять из gtk_label foreground для состояний GTK_STATE_NORMAL и GTK_STATE_SELECTED,
а также из gtk_event_box - background для состояния GTK_STATE_NORMAL.


И еще вопрос. Есть функция gdk_color_parse, в которой в качестве первого параметра идет
название цвета в виде строки, например "aquamarine". Где можно посмотреть названия
всех доступных для использования цветов?  

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.