¿Por qué los iconos simbólicos de GNOME aparecen más oscuros en una aplicación en ejecución?

10

Estoy creando una aplicación que usa iconos simbólicos del tema predeterminado.

Sin embargo, hay algunos íconos que necesito que no pueden ser representados por los del tema predeterminado, así que estoy creando los míos.

Lo que hice fue simplemente ir /usr/share/icons/gnome/scalable/actions/, copiar algunas localmente en el árbol fuente de mi aplicación que podría servir como base, y comencé a editarlas.

Hasta ahora tan bueno. Pero he notado lo siguiente: todos los íconos simbólicos son de un color gris claro al mirar el archivo .svg original, pero cuando se colocan en un widget, se vuelven más oscuros.

Aquí hay un ejemplo, usando el /usr/share/icons/gnome/scalable/actions/view-refresh-symbolic.svgícono del tema predeterminado:

  • Así es como se ve al abrir el original con Inkscape:

ver-actualizar-simbólico en Inkscape

  • Y así es como se ve en una barra de herramientas en una aplicación en ejecución:

ver-actualizar-simbólico en tiempo de ejecución

Observe que el ícono es mucho más oscuro en tiempo de ejecución. Eso sucede tanto con los temas Ambiance como Radiance.

No me importaría mucho, pero noté que afecta mi ícono personalizado, por lo que partes de él se vuelven más oscuras (el relleno interno), mientras que algunas partes permanecen del mismo color que el original (el trazo).

Entonces, ¿qué causa que los iconos simbólicos predeterminados se oscurezcan y cómo debería implementar eso para mis iconos personalizados?

David Planella
fuente
¿Cómo está cargando el icono exactamente, en la aplicación?
dobey
Con Glade, en un botón de la barra de herramientas usando la configuración 'Cargar desde nombre de icono'.
David Planella
Entonces, la respuesta más probable es que no está cargando su ícono personalizado, sino uno de un tema de ícono en la pila, que tiene un nombre coincidente (o nombre alternativo).
dobey

Respuestas:

15
  • Los iconos simbólicos se crean en un color con croma , gris con opacidad total ( #bebebeff). Luego se pueden colorear según el fg_colorvalor definido por el tema en settings.ini(GTK3) o gtkrc(GTK2); o en el fg_colordefinido en el CSS (GTK3).
    • por ejemplo, para Ambiance, el color de primer plano ( fg_color) está configurado en gris oscuro ( #4c4c4c) /usr/share/themes/Ambiance/gtk-3.0/settings.ini, por lo que los iconos simbólicos aparecen más oscuros.
  • Para que los iconos simbólicos personalizados se vean iguales, debe eliminar el trazo y usar solo relleno con el valor RGBA establecido en #bebebeff; de lo contrario, el trazo siempre aparecerá como conjunto (es decir, gris o cualquier color).

    • En Inkscape, simplemente seleccione el objeto, abra Relleno y trazo , y haga clic en el icono Sin pintura (x) debajo de "Trazo de pintura":

    ingrese la descripción de la imagen aquí

  • Esto nos da un bonito y simbólico icono simbólico "MyRefresh":

    ingrese la descripción de la imagen aquí


Un usuario indicó que se estaba abriendo un icono diferente y más oscuro en lugar del icono simbólico predeterminado del gnomo; Como muestra esta versión, esa afirmación es incorrecta:

ingrese la descripción de la imagen aquí

ish
fuente
Gracias por la excelente respuesta! Sin embargo, todavía hay una cosa que no entiendo: ¿por qué los iconos simbólicos personalizados no pueden tener un trazo, incluso si están llenos #bebebeff?
David Planella
Creo que tiene que ver con cómo Gnome representa (rasteriza) SVG simbólicos, en función del valor de fg_color(usa libRSVG ); el motor obviamente diferencia entre los rellenos y los trazos, y parece estar codificado para aplicarse fg_colorsolo al relleno mientras deja el trazo como está. Puede hacerlo porque SVG es un formato vectorizado (parametrizado), mientras que para los iconos de mapa de bits habituales, todo son solo píxeles :)
ish
3

Los iconos simbólicos generalmente se configuran por el tema utilizando la propiedad "color", esa es su gran ventaja, se ven bien en cualquier fondo. Sin embargo, puede cargarlos con su propio color.

Ejemplo 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
fuente
En efecto, siendo recoloreados apropiado para el tema actual, es casi el propósito principal de iconos simbólicos (el otro es para ser más simple, legible, que que también promueve)
underscore_d