Pourquoi les icônes symboliques GNOME apparaissent-elles plus sombres dans une application en cours d'exécution?

10

Je crée une application qui utilise des icônes symboliques du thème par défaut.

Cependant, il y a quelques icônes dont j'ai besoin qui ne peuvent pas être représentées par celles du thème par défaut, donc je crée mes propres icônes.

Ce que j'ai fait, c'était simplement d'aller /usr/share/icons/gnome/scalable/actions/, d'en copier quelques-uns localement dans l'arborescence source de mon application qui pourrait servir de base, et de commencer à les éditer.

Jusqu'ici tout va bien. Mais j'ai remarqué ce qui suit: toutes les icônes symboliques sont de couleur gris clair en regardant le fichier .svg d'origine, mais lorsqu'elles sont placées dans un widget, elles deviennent plus sombres.

Voici un exemple, en utilisant l' /usr/share/icons/gnome/scalable/actions/view-refresh-symbolic.svgicône du thème par défaut:

  • Voici à quoi cela ressemble lors de l'ouverture de l'original avec Inkscape:

affichage-rafraîchissement-symbolique sur Inkscape

  • Et voici à quoi cela ressemble sur une barre d'outils sur une application en cours d'exécution:

view-refresh-symbolic on lors de l'exécution

Notez que l'icône est beaucoup plus sombre lors de l'exécution. Cela se produit à la fois avec les thèmes Ambiance et Radiance.

Cela ne me dérangerait pas beaucoup, mais j'ai remarqué que cela affecte mon icône personnalisée, où certaines parties deviennent plus sombres (le remplissage intérieur), tandis que certaines parties restent de la même couleur que l'original (le trait).

Alors, qu'est-ce qui provoque l'assombrissement des icônes symboliques par défaut et comment l'implémenter pour mes icônes personnalisées?

David Planella
la source
Comment chargez-vous exactement l'icône dans l'application?
dobey
Avec Glade, dans un bouton de barre d'outils en utilisant le paramètre «Charger depuis le nom de l'icône».
David Planella
Ensuite, la réponse la plus probable est qu'il ne charge pas du tout votre icône personnalisée, mais celle d'un thème d'icône dans la pile, qui a un nom correspondant (ou un nom de secours).
dobey

Réponses:

15
  • Les icônes symboliques sont créées dans une couleur chromée , grise avec une opacité totale ( #bebebeff). Ils peuvent ensuite être colorés en fonction de la fg_colorvaleur définie par le thème dans settings.ini(GTK3) ou gtkrc(GTK2); ou sur le fg_colordéfini dans le CSS (GTK3).
    • Par exemple, pour Ambiance, la couleur de premier plan ( fg_color) est définie sur gris foncé ( #4c4c4c) dans /usr/share/themes/Ambiance/gtk-3.0/settings.ini, c'est pourquoi les icônes symboliques apparaissent plus sombres.
  • Pour que les icônes symboliques personnalisées se ressemblent, vous devez supprimer le trait et utiliser uniquement le remplissage avec la valeur RGBA définie sur #bebebeff; sinon, le trait apparaîtra toujours comme défini (c.-à-d. gris ou quelle que soit la couleur).

    • Dans Inkscape, sélectionnez simplement l'objet, ouvrez Fill and Stroke et cliquez sur l' icône No Paint (x) sous "Stroke Paint":

    entrez la description de l'image ici

  • Cela nous donne une icône symbolique "MyRefresh" agréable et uniforme:

    entrez la description de l'image ici


Un utilisateur a indiqué qu'une icône différente et plus sombre était en train d'être ouverte à la place de l'icône symbolique gnome par défaut; comme le montre cette strace, cette affirmation est incorrecte:

entrez la description de l'image ici

ish
la source
Merci pour l'excellente réponse! Cependant, il y a encore une chose que je ne comprends pas très bien: pourquoi les icônes symboliques personnalisées ne peuvent-elles pas avoir un trait, même si elles sont remplies #bebebeff?
David Planella
Je pense que cela a à voir avec la façon dont Gnome rend (pixellise) les SVG symboliques, en fonction de la valeur de fg_color(il utilise libRSVG ); le moteur fait évidemment la différence entre les remplissages et les traits, et semble être codé pour s'appliquer fg_coloruniquement au remplissage tout en laissant le trait tel quel. Il peut le faire parce que SVG est un format vectorisé (paramétré), tandis que pour les icônes bitmap habituelles, ce ne sont que des pixels :)
ish
3

Les icônes symboliques sont généralement définies par le thème à l'aide de la propriété "couleur", c'est leur grand avantage, elles ont fière allure sur n'importe quel arrière-plan. Vous pouvez cependant les charger avec votre propre couleur.

Exemple de code 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);
À M
la source
En effet, être recoloré en fonction du thème actuel, est presque le but principal des icônes symboliques (l'autre étant d'être plus simple et plus lisible, ce qui favorise également)
underscore_d