Чому символьні значки GNOME виглядають темнішими в запущеній програмі?


10

Я створюю додаток, який використовує символьні значки з теми за замовчуванням.

Однак є кілька значків, які мені потрібні, які не можуть бути представлені тими з теми за замовчуванням, тому я створюю свої власні.

Що я зробив, це просто перейти /usr/share/icons/gnome/scalable/actions/, скопіювавши декілька локально у вихідне дерево мого додатка, яке могло б послужити основою, і почав їх редагувати.

Все йде нормально. Але я помітив наступне: всі символьні значки мають світло-сірий колір при перегляді оригінального файлу .svg, але коли їх розміщують на віджеті, вони стають темнішими.

Ось приклад використання /usr/share/icons/gnome/scalable/actions/view-refresh-symbolic.svgпіктограми з теми за замовчуванням:

  • Ось як це виглядає під час відкриття оригіналу за допомогою Inkscape:

перегляд-оновлення-символічний на Inkscape

  • А ось як це виглядає на панелі інструментів запущеного додатка:

перегляд-оновлення-символічне включення під час виконання

Зауважте, що піктограма значно темніша під час виконання. Це трапляється як з темами Ambiance, так і з радіацією.

Я б не заперечував проти цього, але помітив, що це впливає на мою власну піктограму, завдяки чому її частини стають темнішими (внутрішня заливка), тоді як частини її залишаються того ж кольору, що і оригінальні (обведення).

Отже, що змушує потемніти символьні значки за замовчуванням і як це слід застосувати для моїх спеціальних іконок?


Як ви точно завантажуєте піктограму у програмі?
добі

За допомогою Glade, на кнопці на панелі інструментів, використовуючи налаштування "Завантажити від імені іконки".
Девід Планелла

Тоді найімовірнішою відповіддю є те, що він взагалі не завантажує ваш власний значок, а один із теми значка в стеку, який має відповідне ім’я (або запасне ім’я).
добі

Відповіді:


15
  • Символічні значки створені в кольоровому кольорі, сірий з повною непрозорістю ( #bebebeff). Потім їх можна забарвити на основі fg_colorзначення, визначеного темою в settings.ini(GTK3) або gtkrc(GTK2); або на fg_colorвизначеному в CSS (GTK3).
    • наприклад, для Ambiance колір переднього плану ( fg_color) встановлений у темно-сірий ( #4c4c4c) /usr/share/themes/Ambiance/gtk-3.0/settings.ini, тому символічні значки виглядають темнішими.
  • Щоб нестандартні символьні значки виглядали однаково, потрібно видалити обведення та використовувати лише заповнення зі значенням RGBA #bebebeff; в іншому випадку обведення завжди буде виглядати заданим (тобто сірим або будь-яким кольором).

    • У Inkscape просто виберіть об’єкт, відкрийте Fill and Stroke та натисніть на значок No Paint (x) у розділі "Paint Paint":

    введіть тут опис зображення

  • Це дає нам симпатичну і рівномірну символічну піктограму "MyRefresh":

    введіть тут опис зображення


Один користувач вказав, що замість символічної піктограми гнома за замовчуванням відкривається інша, більш темна піктограма; як показує ця страза, це твердження неправильне:

введіть тут опис зображення


Дякую за відмінну відповідь! Однак є ще одне, що я не зовсім розумію: чому не можуть користувацькі символьні значки не мати обведення, навіть якщо вони заповнені #bebebeff?
Девід Планелла

Я думаю, що це стосується того, як Gnome надає (растерізує) символічні SVG, виходячи із значення fg_color(він використовує libRSVG ); двигун, очевидно, розрізняє заливки та штрихи, і, здається, закодований, застосовуючи fg_colorлише до заливки, залишаючи обведення таким, яким є. Це можна зробити, тому що SVG - це векторизований (параметризований) формат, тоді як для звичайних растрових піктограм - це все лише пікселі :)
останній

3

Символічні значки зазвичай задаються темою за допомогою властивості "color", це їх велика перевага, вони добре виглядають на будь-якому тлі. Однак ви можете завантажити їх своїм кольором.

Приклад коду 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);

Дійсно, відновлення відповідно до поточної теми - це майже головне призначення символічних іконок (інша історія - простішою та розбірливішою, що також сприяє)
підкреслюйте
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.