Цвет фона для GTK_WINDOW_TOPLEVEL Gtk Widget - PullRequest
6 голосов
/ 08 февраля 2010

В следующем коде я хочу, чтобы цвет фона основного GTK_WINDOW_TOPLEVEL был 0xc0deed. Но когда я бегу, он кажется черным. Я даже попробовал gtk_drawing_area_new и добавил его в главное окно. Но все же он выглядит черным, хотя я мог бы получить другие цвета, такие как красный, синий, белый и т. Д.

#include <gtk/gtk.h>

int main( int argc, char *argv[])
{
    GtkWidget *p_s_window = NULL;
    GdkColor color;
    color.red = 0x00C0;
    color.green = 0x00DE;
    color.blue = 0x00ED;
    gtk_init(&argc, &argv);
    p_s_window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
    gtk_window_set_position(GTK_WINDOW(p_s_window), GTK_WIN_POS_CENTER);
    gtk_window_set_title(GTK_WINDOW(p_s_window), "hello");
    gtk_widget_modify_bg(p_s_window, GTK_STATE_NORMAL, &color);
    g_signal_connect_swapped(G_OBJECT(p_s_window), "destroy",
            G_CALLBACK(gtk_main_quit), NULL);
    gtk_widget_show_all(p_s_window);
    gtk_main();
    return 0;
}

Ответы [ 2 ]

6 голосов
/ 08 февраля 2010

Компоненты GdkColor являются 16-разрядными, поэтому имеют диапазон от 0 до 65535. Умножьте значения на 65535/255, и все будет в порядке.

Например, желтый будет:

color.red = 0xffff;
color.green = 0xffff;
color.blue = 0;
2 голосов
/ 02 ноября 2016

Хотя вопрос довольно старый, я хотел бы дать другой ответ, который не требует вычисления.

Вы можете использовать gdk_color_parse() для анализа строкового представления вашего цвета. Как упомянуто в документации , это работает в различных форматах:

Строка может либо [sic!] Быть одним из большого набора стандартных имен (взятых из файла X11 rgb.txt), либо может быть шестнадцатеричным значением в форме «#rgb» «#rrggbb», « #rrrgggbbb »или« #rrrrggggbbbb », где« r »,« g »и« b »- шестнадцатеричные цифры красного, зеленого и синего компонентов цвета соответственно.

Так что в вашем случае это будет просто:

GdkColor color;
if (gdk_color_parse("#c0deed", &color)) {
    gtk_widget_modify_bg(p_s_window, GTK_STATE_NORMAL, &color);
} else {
    // set default color
}

Обратите также внимание, что по состоянию на Gtk 3.0 gtk_widget_modify_bg() устарело. Вместо этого используйте gtk_widget_override_background_color().

...