Perché le icone simboliche di GNOME appaiono più scure in un'applicazione in esecuzione?


10

Sto creando un'applicazione che utilizza icone simboliche dal tema predefinito.

Tuttavia, ci sono alcune icone di cui ho bisogno che non possono essere rappresentate da quelle del tema predefinito, quindi sto creando le mie.

Quello che ho fatto è stato semplicemente andare a /usr/share/icons/gnome/scalable/actions/, copiarne alcuni localmente nell'albero dei sorgenti della mia app che poteva servire come base e iniziare a modificarli.

Fin qui tutto bene. Ma ho notato quanto segue: tutte le icone simboliche sono di colore grigio chiaro quando si guarda il file .svg originale, ma quando vengono inserite in un widget, diventano più scure.

Ecco un esempio, usando l' /usr/share/icons/gnome/scalable/actions/view-refresh-symbolic.svgicona dal tema predefinito:

  • Ecco come appare quando si apre l'originale con Inkscape:

view-refresh-symbolic su Inkscape

  • Ed ecco come appare su una barra degli strumenti in un'applicazione in esecuzione:

view-refresh-symbolic on in fase di runtime

Si noti che l'icona è molto più scura in fase di esecuzione. Ciò accade sia con i temi Ambiance che Radiance.

Non mi dispiacerebbe molto, ma ho notato che influenza la mia icona personalizzata, per cui parti di essa diventano più scure (il riempimento interno), mentre parti di esso rimangono dello stesso colore dell'originale (il tratto).

Quindi cosa causa l'oscuramento delle icone simboliche predefinite e come dovrebbe essere implementato per le mie icone personalizzate?


Come stai caricando esattamente l'icona, nell'applicazione?
Dobey,

Con Glade, in un pulsante della barra degli strumenti che utilizza l'impostazione "Carica dal nome dell'icona".
David Planella,

Quindi la risposta più probabile è che non sta caricando affatto la tua icona personalizzata, ma una da un tema di icone nello stack, che ha un nome corrispondente (o nome di fallback).
Dobey,

Risposte:


15
  • Le icone simboliche sono create in un colore con cromaticità, grigio con opacità completa ( #bebebeff). Possono quindi essere colorati in base al fg_colorvalore definito dal tema in settings.ini(GTK3) o gtkrc(GTK2); o sul fg_colordefinito nel CSS (GTK3).
    • ad esempio, per Ambiance il colore di primo piano ( fg_color) è impostato su grigio scuro ( #4c4c4c) in /usr/share/themes/Ambiance/gtk-3.0/settings.ini, motivo per cui le icone simboliche appaiono più scure.
  • Per rendere le icone simboliche personalizzate uguali, è necessario rimuovere il tratto e utilizzare solo il riempimento con il valore RGBA impostato su #bebebeff; in caso contrario, il tratto apparirà sempre come impostato (ad es. grigio o di qualsiasi colore).

    • In Inkscape, seleziona l'oggetto, apri Fill and Stroke e fai clic sull'icona No Paint (x) in "Paint Stroke":

    inserisci qui la descrizione dell'immagine

  • Questo ci dà un'icona simbolica "MyRefresh" piacevole e dall'aspetto uniforme:

    inserisci qui la descrizione dell'immagine


Un utente ha indicato che veniva aperta un'icona diversa, più scura invece dell'icona simbolica di gnome predefinita; come mostra questa stringa, tale affermazione non è corretta:

inserisci qui la descrizione dell'immagine


Grazie per l'ottima risposta! Tuttavia, c'è ancora una cosa che non capisco bene: perché le icone simboliche personalizzate non possono avere un tratto, anche se riempite #bebebeff?
David Planella,

Penso che abbia a che fare con il modo in cui Gnome rende (rasterizza) SVG simbolici, in base al valore di fg_color(usa libRSVG ); il motore ovviamente differenzia tra i riempimenti e i tratti e sembra essere codificato per applicarsi fg_colorsolo al riempimento lasciando la corsa così com'è. Può farlo perché SVG è un formato vettoriale (parametrizzato), mentre per le solite icone bitmap, è tutto solo pixel :)
ish

3

Le icone simboliche sono solitamente impostate dal tema usando la proprietà "color", questo è il loro grande vantaggio, stanno bene su qualsiasi sfondo. Puoi comunque caricarli con il tuo colore.

Esempio di codice 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);

In effetti, essendo ricolorato appropriato al tema attuale, è quasi lo scopo principale delle icone simboliche (l'altro essere più semplice e leggibile, che promuove anche)
underscore_d
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.