Por que os ícones simbólicos do GNOME parecem mais escuros em um aplicativo em execução?

10

Estou criando um aplicativo que usa ícones simbólicos do tema padrão.

No entanto, existem alguns ícones que eu preciso que não podem ser representados por aqueles do tema padrão, então estou criando meus próprios.

O que fiz foi simplesmente acessar /usr/share/icons/gnome/scalable/actions/, copiar alguns localmente na árvore de fontes do meu aplicativo que poderia servir de base e começar a editá-los.

Por enquanto, tudo bem. Mas notei o seguinte: todos os ícones simbólicos são de cor cinza claro quando se olha para o arquivo .svg original, mas quando são colocados em um widget, ficam mais escuros.

Aqui está um exemplo, usando o /usr/share/icons/gnome/scalable/actions/view-refresh-symbolic.svgícone do tema padrão:

  • Aqui está o que parece ao abrir o original com o Inkscape:

view-refresh-simbólico no Inkscape

  • E aqui está o que parece em uma barra de ferramentas em um aplicativo em execução:

view-refresh-simbólico ativado em tempo de execução

Observe o ícone sendo muito mais escuro no tempo de execução. Isso acontece tanto com os temas Ambiance quanto Radiance.

Eu não me importaria muito, mas notei que isso afeta meu ícone personalizado, em que partes dele ficam mais escuras (preenchimento interno), enquanto outras permanecem da mesma cor que o original (o traço).

Então, o que faz os ícones simbólicos padrão escurecerem e como implementar isso nos meus ícones personalizados?

David Planella
fonte
Como você está carregando exatamente o ícone no aplicativo?
Dobey
Com o Glade, em um botão da barra de ferramentas, usando a configuração 'Carregar do nome do ícone'.
precisa
A resposta mais provável é que ele não está carregando seu ícone personalizado, mas um de um tema de ícone na pilha, que tem um nome correspondente (ou nome de fallback).
Dobey

Respostas:

15
  • Os ícones simbólicos são criados em cores cromadas , cinza com total opacidade ( #bebebeff). Eles podem ser coloridos com base no fg_colorvalor definido pelo tema em settings.ini(GTK3) ou gtkrc(GTK2); ou no fg_colordefinido no CSS (GTK3).
    • por exemplo, para Ambiente, a cor do primeiro plano ( fg_color) é definida como cinza escuro ( #4c4c4c) /usr/share/themes/Ambiance/gtk-3.0/settings.ini, motivo pelo qual os ícones simbólicos parecem mais escuros.
  • Para que os ícones simbólicos personalizados tenham a mesma aparência, remova o traçado e use apenas preenchimento com o valor RGBA definido como #bebebeff; caso contrário, o traçado sempre aparecerá como definido (por exemplo, cinza ou qualquer cor).

    • No Inkscape, selecione o objeto, abra Preenchimento e traçado e clique no ícone Sem pintura (x) em "Pintura de traço":

    insira a descrição da imagem aqui

  • Isso nos fornece um ícone simbólico "MyRefresh" bonito e com aparência uniforme:

    insira a descrição da imagem aqui


Um usuário indicou que um ícone diferente e mais escuro estava sendo aberto em vez do ícone simbólico padrão do gnome; como esse traço mostra, essa afirmação está incorreta:

insira a descrição da imagem aqui

ish
fonte
Obrigado pela excelente resposta! No entanto, ainda há uma coisa que não entendo: por que os ícones simbólicos personalizados não podem ter um traçado, mesmo se preenchidos #bebebeff?
David Planella
Eu acho que isso tem a ver com como o Gnome renderiza (rasteriza) SVGs simbólicos, com base no valor de fg_color(ele usa libRSVG ); obviamente, o mecanismo diferencia os preenchimentos e os traços e parece ser codificado para aplicar-se fg_colorapenas ao preenchimento, deixando o traço como está. Ele pode fazê-lo porque SVG é um formato vetorizado (parametrizada), enquanto que para os ícones de bitmap de costume, é todos os pixels apenas :)
ish
3

Ícones simbólicos geralmente são definidos pelo tema usando a propriedade "color", que é sua grande vantagem, eles ficam bem em qualquer fundo. No entanto, você pode carregá-los com sua própria cor.

Exemplo de código vala:

//get the icon theme and lookup the icon we want by name, here at a size of 64px
var info = Gtk.IconTheme.get_default ().lookup_icon ("view-refresh-symbolic", 64, 0);

//now load the icon as a symbolic with a color set in the brackets as RGBA, here as plain red
var pixbuf = info.load_symbolic ({1, 0, 0, 1});

//finally we just put in a GtkImage to render it
var image_widget = new Gtk.Image.from_pixbuf (pixbuf);
Tom
fonte
Apropriada, de fato, sendo recoloured ao tema atual, é quase a finalidade principal de ícones simbólicos (o outro é para ser mais simples e legíveis, o que que também promove)
underscore_d