Dlaczego symboliczne ikony GNOME wydają się ciemniejsze w uruchomionej aplikacji?

10

Tworzę aplikację, która korzysta z symbolicznych ikon z domyślnego motywu.

Jest jednak kilka ikon, których potrzebuję, których nie mogą reprezentować ikony z domyślnego motywu, więc tworzę własne.

Po prostu poszedłem do /usr/share/icons/gnome/scalable/actions/, skopiowałem kilka plików lokalnych do drzewa źródłowego mojej aplikacji, które mogłyby służyć jako podstawa, i zacząłem je edytować.

Na razie w porządku. Zauważyłem jednak: wszystkie ikony symboliczne mają jasnoszary kolor, gdy patrzy się na oryginalny plik .svg, ale po umieszczeniu w widżecie stają się ciemniejsze.

Oto przykład, używając /usr/share/icons/gnome/scalable/actions/view-refresh-symbolic.svgikony z domyślnego motywu:

  • Oto jak to wygląda podczas otwierania oryginału w Inkscape:

view-refresh-symbolic w Inkscape

  • A oto jak to wygląda na pasku narzędzi uruchomionej aplikacji:

symbol odświeżania widoku włączony w czasie wykonywania

Zauważ, że ikona jest znacznie ciemniejsza w czasie wykonywania. Dzieje się tak zarówno w przypadku motywów Ambiance, jak i Radiance.

Nie miałbym nic przeciwko, ale zauważyłem, że wpływa na moją ikonę niestandardową, przez co jej części stają się ciemniejsze (wewnętrzne wypełnienie), podczas gdy niektóre z nich pozostają tego samego koloru co oryginał (obrys).

Co więc powoduje, że domyślne ikony symboliczne przyciemniają się i jak zaimplementować to w moich ikonach niestandardowych?

David Planella
źródło
Jak dokładnie ładujesz ikonę w aplikacji?
dobey
W przypadku Glade w przycisku paska narzędzi przy użyciu ustawienia „Wczytaj z nazwy ikony”.
David Planella,
Zatem najbardziej prawdopodobną odpowiedzią jest to, że wcale nie ładuje twojej niestandardowej ikony, ale jedną z motywu ikony w stosie, który ma pasującą nazwę (lub nazwę zastępczą).
dobey

Odpowiedzi:

15
  • Ikony symboliczne są tworzone w kolorze kluczowym kolorem, szarym z pełnym kryciem ( #bebebeff). Można je następnie pokolorować na podstawie fg_colorwartości zdefiniowanej przez motyw w settings.ini(GTK3) lub gtkrc(GTK2); lub na fg_colorzdefiniowanym w CSS (GTK3).
    • np. dla Ambiance kolor pierwszego planu ( fg_color) jest ustawiony na ciemnoszary ( #4c4c4c) /usr/share/themes/Ambiance/gtk-3.0/settings.ini, dlatego symboliczne ikony wydają się ciemniejsze.
  • Aby niestandardowe ikony symboliczne wyglądały tak samo, musisz usunąć obrys i użyć tylko wypełnienia z wartością RGBA ustawioną na #bebebeff; w przeciwnym razie obrys będzie zawsze wyświetlany jako ustawiony (tj. szary lub inny kolor).

    • W Inkscape po prostu wybierz obiekt, otwórz Wypełnienie i obrys i kliknij ikonę Bez farby (x) w obszarze „Obrysuj farbą”:

    wprowadź opis zdjęcia tutaj

  • To daje nam ładną i równą ikonę symboliczną „MyRefresh”:

    wprowadź opis zdjęcia tutaj


Jeden użytkownik wskazał, że otwiera się inna, ciemniejsza ikona zamiast domyślnej ikony symbolicznej gnoma; jak pokazuje ta struga, twierdzenie to jest niepoprawne:

wprowadź opis zdjęcia tutaj

ish
źródło
Dzięki za doskonałą odpowiedź! Jest jednak jedna rzecz, której nie do końca rozumiem: dlaczego niestandardowe ikony symboliczne nie mają obrysu, nawet jeśli są wypełnione #bebebeff?
David Planella
Myślę, że ma to związek z tym, jak Gnome renderuje (rasteryzuje) symboliczne pliki SVG, w oparciu o wartość fg_color(używa libRSVG ); silnik oczywiście rozróżnia napełnienia od skoków i wydaje się, że jest zakodowany tak, aby dotyczył fg_colortylko wypełnienia, pozostawiając suw bez zmian . Może to zrobić, ponieważ SVG jest wektoryzowanym (sparametryzowanym) formatem, podczas gdy dla zwykłych ikon bitmapowych są to tylko piksele :)
ish
3

Ikony symboliczne są zwykle ustawiane przez motyw za pomocą właściwości „kolor”, co jest ich wielką zaletą, dobrze wyglądają na dowolnym tle. Możesz jednak załadować je własnym kolorem.

Przykładowy kod 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);
Tomek
źródło
Rzeczywiście, zmiana koloru zgodnie z aktualnym tematem, jest prawie głównym celem ikon symbolicznych (druga ma być prostsza i bardziej czytelna, co również promuje)
podkreślenie_d