gtk - terminales - sistemas rfid mexico
¿Obtener el nombre del ícono para una identificación de stock? (2)
Pregunta
Estoy tratando de recuperar el (los) nombre (s) del icono (s) correspondiente (s) a un (Gtk) ID de stock dado.
Ejemplo
Gtk stock id ''gtk-go-forward'' tiene dos nombres de iconos correspondientes, ''gtk-go-forward-ltr'' y ''gtk-go-forward-rtl''. Me gustaría recuperar, ya sea:
- ambos nombres de iconos ''gtk-go-forward-ltr'' y ''gtk-go-forward-rtl'' dado el ID ''gtk-go-forward''; O
- solo el nombre del icono ''gtk-go-forward-ltr'' (el "apropiado" para la dirección de mi texto).
Restricciones potenciales
Estoy usando la API de introspección de objetos, no la base C
Justificación (opcional para leer)
Estoy intentando hacer un St.Icon
para el ícono especificado por el ID de stock, pero en un tamaño bastante grande (96 px).
Puedo usar gtk_icon_set_render_icon
con el ID de inventario ''gtk-go-forward'' directamente así (elige la versión LTR) (la sintaxis es GNOME javscript pero esto es irrelevante para el quesiton; estoy usando la API de introspección de GObject):
let style = Gtk.Widget.get_default_style();
let iconset = style.lookup_icon_set(''gtk-go-forward'');
let icon = new St.Icon({
gicon: iconset.render_icon(gtkStyle, Gtk.TextDirection.LTR,
Gtk.StateType.NORMAL, Gtk.IconSize.DIALOG,
null, null),
icon_type: St.IconType.FULLCOLOR,
icon_size: 96
});
Esto me dará un ícono para el ID de inventario ''gtk-go-forward'' (escoge ''gtk-go-forward-ltr''), pero el ícono es muy borroso.
Alternativamente, si introduzco el nombre del icono ''gtk-go-forward-ltr'' directamente, el icono no es borroso:
let icon = new St.Icon({
gicon: Gio.ThemedIcon.new_with_default_fallbacks(''gtk-go-forward-ltr''),
icon_type: St.IconType.FULLCOLOR,
icon_size: 96
});
Entonces, en resumen, creo que mi mejor apuesta para obtener un ícono grande y no difuso es encontrar el nombre del ícono para el ID de stock, en lugar de usar el ID de stock (alimentar a gtk-go-forward
al segundo método anterior produce el el icono "icono faltante" ya que no es un nombre de icono válido).
En la imagen de arriba, el icono superior utiliza el primer método (ID de stock con render_icon) y el icono inferior utiliza el segundo método (utilice el nombre del icono directamente). Gran diferencia de claridad.
Nombres de iconos de valores generales
Esta pregunta es un poco antigua ahora, pero para futuras referencias: es mejor usar "go-next"
lugar de "gtk-go-forward"
: este es el nombre correcto de acuerdo con la especificación de nombres de iconos , y se recomienda desde los desarrolladores de GTK están planeando despreciar los iconos de valores en breve .
Para responder directamente a la pregunta como se indica en el título: aquí hay una útil hoja de cálculo de Google Docs que proporciona los nombres de las especificaciones de los iconos equivalentes para los íconos de GTK.
Versiones grandes y no borrosas de GTK Icons
En cuanto a obtener versiones no difusas de los iconos predeterminados, la mejor manera que he encontrado para representar un icono a 96px en GTK es cargarlo en un GdkPixbuf
, y luego usarlo en lugar de un GtkIcon
(que está limitado a 48px, que siendo el GtkIconSize
más GtkIconSize
, como j__m señaló). Un ejemplo de cómo hacer esto en Vala (fácilmente convertido a JS o Python, etc.):
var icon_theme = Gtk.IconTheme.get_default();
try {
var pixbuf = icon_theme.load_icon("go-next", 96, Gtk.IconLookupFlags.USE_BUILTIN);
// Do something with the pixbuf, for example use it with a CellRendererPixbuf,
// or a GtkButton or whatever
catch (GLib.Error e) {
GLib.critical("Could not load icon: %s", e.message);
}
También es posible que desee experimentar con Gtk.IconLookupFlags.FORCE_SIZE
y / o FORCE_SVG
, especialmente si desea iconos realmente grandes.
Me temo que nunca he usado el Kit de herramientas de Shell, así que no sé si necesita un St.Icon
particular, pero en GTK simple puede usar un GdkPixbuf
prácticamente en cualquier lugar, puede usar un ícono de valores, por lo que este es un Solución que he encontrado muy útil.
GTK_ICON_SIZE_DIALOG
( Gtk.IconSize.DIALOG
en Javascript) es más pequeño que 96px. Estás renderizando un pequeño icono y luego explotándolo; naturalmente va a quedar mal
Como recuerdo, el valor -1
devuelve el icono en cualquier tamaño original. Luego puede usar St.Icon para establecer el tamaño en el que desea dibujarlo, ya que parece ser así como quiere usarlo de todos modos.