Mengapa ikon simbol GNOME tampak lebih gelap dalam aplikasi yang sedang berjalan?

10

Saya membuat aplikasi yang menggunakan ikon simbolis dari tema default.

Namun, ada beberapa ikon yang saya butuhkan yang tidak dapat diwakili oleh mereka yang berasal dari tema default, jadi saya membuat yang saya sendiri.

Apa yang saya lakukan hanyalah pergi ke /usr/share/icons/gnome/scalable/actions/, menyalin beberapa secara lokal ke pohon sumber aplikasi saya yang dapat berfungsi sebagai dasar, dan mulai mengeditnya.

Sejauh ini bagus. Tapi saya perhatikan yang berikut ini: semua ikon simbolis berwarna abu-abu terang ketika melihat file .svg asli, tetapi ketika mereka dimasukkan ke widget, mereka menjadi lebih gelap.

Ini sebuah contoh, menggunakan /usr/share/icons/gnome/scalable/actions/view-refresh-symbolic.svgikon dari tema default:

  • Begini tampilannya saat membuka dokumen asli dengan Inkscape:

view-refresh-symbolic pada Inkscape

  • Dan inilah tampilannya pada toolbar di aplikasi yang sedang berjalan:

view-refresh-symbolic aktif pada saat runtime

Perhatikan ikon menjadi lebih gelap saat runtime. Itu terjadi baik dengan tema Suasana dan Cahaya.

Saya tidak terlalu keberatan, tetapi saya perhatikan itu mempengaruhi ikon kebiasaan saya, di mana bagian-bagian itu menjadi lebih gelap (isi bagian dalam), sedangkan bagian-bagiannya tetap berwarna sama seperti aslinya (goresan).

Jadi apa yang menyebabkan ikon simbolis default menjadi gelap dan bagaimana menerapkannya untuk ikon khusus saya?

David Planella
sumber
Bagaimana Anda memuat ikon dengan tepat, dalam aplikasi?
dobey
Dengan Glade, pada tombol bilah alat menggunakan pengaturan 'Muat dari nama ikon'.
David Planella
Maka jawaban yang paling mungkin adalah tidak memuat ikon kustom Anda sama sekali, tetapi satu dari tema ikon di tumpukan, yang memiliki nama yang cocok (atau nama cadangan).
dobey

Jawaban:

15
  • Ikon simbolik dibuat dalam warna kunci-krom , abu-abu dengan opacity penuh ( #bebebeff). Mereka kemudian dapat diwarnai berdasarkan fg_colornilai yang ditentukan oleh tema dalam settings.ini(GTK3) atau gtkrc(GTK2); atau pada yang fg_colordidefinisikan dalam CSS (GTK3).
    • misalnya, untuk Suasana warna latar depan ( fg_color) diatur ke abu-abu gelap ( #4c4c4c) di /usr/share/themes/Ambiance/gtk-3.0/settings.ini, itulah sebabnya ikon simbolik tampak lebih gelap.
  • Untuk membuat ikon simbolis khusus terlihat sama, Anda harus menghapus goresannya dan gunakan hanya isi dengan nilai RGBA yang diatur ke #bebebeff; jika tidak, goresan akan selalu muncul sebagai set (yaitu, abu-abu atau warna apa pun).

    • Di Inkscape, cukup pilih objek, buka Fill dan Stroke , dan klik pada ikon No Paint (x) di bawah "Stroke Paint":

    masukkan deskripsi gambar di sini

  • Ini memberi kita ikon simbolik "MyRefresh" yang bagus dan merata:

    masukkan deskripsi gambar di sini


Satu pengguna menunjukkan bahwa ikon yang berbeda, lebih gelap sedang dibuka daripada ikon simbolis gnome default; seperti yang ditunjukkan oleh strace ini, pernyataan itu tidak benar:

masukkan deskripsi gambar di sini

ish
sumber
Terima kasih atas jawaban yang bagus! Namun, masih ada satu hal yang saya tidak mengerti: mengapa ikon simbolis khusus tidak mengalami stroke, meskipun penuh #bebebeff?
David Planella
Saya pikir itu ada hubungannya dengan bagaimana Gnome merender (rasterizes) SVG simbolis, berdasarkan nilai fg_color(menggunakan libRSVG ); mesin jelas membedakan antara isian dan guratan, dan tampaknya diberi kode untuk diterapkan fg_colorhanya pada isian sambil meninggalkan goresan seperti apa adanya. Itu bisa dilakukan karena SVG adalah format vektor (parameter), sedangkan untuk ikon bitmap yang biasa, semuanya hanya piksel :)
ish
3

Ikon simbolik biasanya diatur oleh tema menggunakan properti "warna", itulah keuntungan besar mereka, mereka terlihat bagus di latar belakang apa pun. Namun Anda dapat memuatnya dengan warna Anda sendiri.

Contoh kode 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
sumber
Memang, menjadi berwarna sesuai dengan tema saat ini, hampir merupakan tujuan utama ikon simbolis (yang lain menjadi lebih sederhana dan lebih terbaca, yang juga mempromosikan)
underscore_d