Como faço para alterar as cores de um widget arbitrário em GTK +?

StackOverflow https://stackoverflow.com/questions/99488

  •  01-07-2019
  •  | 
  •  

Pergunta

Se eu estou escrevendo um aplicativo que deseja se comunicar algumas informações através do uso de cores, como eu posso mudar as cores de um determinado widget fundo eo primeiro plano? Eu gostaria de saber como fazer isso na clareira se é possível, bem como de programação (para uma cor computadorizada).

Eu quero saber como fazer isso a um item complexo, bem como, por exemplo, um HBox que contém um VBox que contém alguns Labels.

Idealmente, isso incluiria também uma solução solução que me permite tonalidade cores existentes do widget, e identificar as cores médias de todas as imagens em uso pelo tema, para que eu possa programaticamente compensar qualquer opções de cores que pode tornar o texto ilegível ou não colidindo -. mas eu ficaria feliz se eu pudesse girar um botão vermelho

Foi útil?

Solução

Exemplo de programa:

#include <gtk/gtk.h>

static void on_destroy(GtkWidget* widget, gpointer data)
{
        gtk_main_quit ();
}

int main (int argc, char* argv[])
{
        GtkWidget* window;
        GtkWidget* button;

        gtk_init(&argc, &argv);
        window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
        g_signal_connect(G_OBJECT (window), "destroy",
                G_CALLBACK (on_destroy), NULL);
        button = gtk_button_new_with_label("Hello world!");
        GdkColor red = {0, 0xffff, 0x0000, 0x0000};
        GdkColor green = {0, 0x0000, 0xffff, 0x0000};
        GdkColor blue = {0, 0x0000, 0x0000, 0xffff};
        gtk_widget_modify_bg(button, GTK_STATE_NORMAL, &red);
        gtk_widget_modify_bg(button, GTK_STATE_PRELIGHT, &green);
        gtk_widget_modify_bg(button, GTK_STATE_ACTIVE, &blue);
        gtk_container_add(GTK_CONTAINER(window), button);
        gtk_widget_show_all(window);
        gtk_main();
        return 0;
}

Outras dicas

A melhor documentação que eu conheço é o único disponível aqui: http://ometer.com/ gtk-colors.html

Você sempre pode usar gtk_widget_override_color () gtk_widget_override_background_color () . Estas duas funções permitem mudar a cor de um widget. Mas é melhor usar classes CSS e regiões no seu widget de implementação / recipiente através gtk_style_context_add_class() e gtk_style_context_add_region().

Para modificar a cor de um widget que você pode inicializar uma cor e usá-lo para modificar a cor do widget:

GdkColor color;
gdk_color_parse("#00FF7F", &color);
gtk_widget_modify_bg(widget, GTK_STATE_NORMAL, &color);

Para usar uma imagem em vez de cor:

GdkPixbuf *image = NULL;
GdkPixmap *background = NULL;
GtkStyle *style = NULL;

image = gdk_pixbuf_new_from_file ("background.jpg", NULL);
gdk_pixbuf_render_pixmap_and_mask (image, &background, NULL, 0);
style = gtk_style_new ();
style->bg_pixmap [0] = background;

gtk_widget_set_style (GTK_WIDGET(widget), GTK_STYLE (style));
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top