Tại sao các biểu tượng biểu tượng Gnome xuất hiện tối hơn trong một ứng dụng đang chạy?


10

Tôi đang tạo một ứng dụng sử dụng các biểu tượng tượng trưng từ chủ đề mặc định.

Tuy nhiên, có một vài biểu tượng mà tôi cần không thể được đại diện bởi những biểu tượng từ chủ đề mặc định, vì vậy tôi đang tạo biểu tượng của riêng mình.

Những gì tôi đã làm chỉ đơn giản là đi đến /usr/share/icons/gnome/scalable/actions/, sao chép một vài cục bộ vào cây nguồn ứng dụng của tôi để làm cơ sở và bắt đầu chỉnh sửa chúng.

Càng xa càng tốt. Nhưng tôi đã nhận thấy như sau: tất cả các biểu tượng tượng trưng có màu xám nhạt khi nhìn vào tệp .svg ban đầu, nhưng khi chúng được đặt vào một tiện ích, chúng sẽ trở nên tối hơn.

Đây là một ví dụ, sử dụng /usr/share/icons/gnome/scalable/actions/view-refresh-symbolic.svgbiểu tượng từ chủ đề mặc định:

  • Đây là những gì nó trông giống như khi mở bản gốc với Inkscape:

xem-refresh-tượng trưng trên Inkscape

  • Và đây là giao diện của thanh công cụ trên ứng dụng đang chạy:

xem-refresh-tượng trưng trên thời gian chạy

Lưu ý rằng biểu tượng tối hơn nhiều khi chạy. Điều đó xảy ra cả với chủ đề Ambiance và Radiance.

Tôi sẽ không bận tâm nhiều, nhưng tôi nhận thấy nó ảnh hưởng đến biểu tượng tùy chỉnh của tôi, theo đó các phần của nó trở nên tối hơn (phần bên trong), trong khi các phần của nó vẫn giữ nguyên màu như bản gốc (nét).

Vậy điều gì khiến các biểu tượng biểu tượng mặc định tối đi và làm thế nào để thực hiện điều đó cho các biểu tượng tùy chỉnh của tôi?


Làm thế nào để bạn tải biểu tượng chính xác, trong ứng dụng?
dobey

Với Glade, trong nút thanh công cụ sử dụng cài đặt 'Tải từ tên biểu tượng'.
David Planella

Sau đó, câu trả lời rất có thể là nó hoàn toàn không tải biểu tượng tùy chỉnh của bạn, mà là một từ một chủ đề biểu tượng trong ngăn xếp có tên phù hợp (hoặc tên dự phòng).
dobey

Câu trả lời:


15
  • Các biểu tượng tượng trưng được tạo ra trong một màu sắc có khóa , màu xám với độ mờ hoàn toàn ( #bebebeff). Sau đó, chúng có thể được tô màu dựa trên fg_colorgiá trị được xác định bởi chủ đề trong settings.ini(GTK3) hoặc gtkrc(GTK2); hoặc trên fg_colorđịnh nghĩa trong CSS (GTK3).
    • ví dụ, đối với Ambiance , màu nền trước ( fg_color) được đặt thành màu xám đậm ( #4c4c4c) /usr/share/themes/Ambiance/gtk-3.0/settings.ini, đó là lý do tại sao các biểu tượng tượng trưng xuất hiện tối hơn.
  • Để làm cho các biểu tượng biểu tượng tùy chỉnh trông giống nhau, bạn phải xóa nét và chỉ sử dụng điền với giá trị RGBA được đặt thành #bebebeff; mặt khác, nét sẽ luôn xuất hiện dưới dạng set (nghĩa là màu xám hoặc bất kỳ màu nào).

    • Trong Inkscape, chỉ cần chọn đối tượng, mở Fill và Stroke và nhấp vào biểu tượng No Paint (x) trong "Stroke Paint":

    nhập mô tả hình ảnh ở đây

  • Điều này mang lại cho chúng ta một biểu tượng tượng trưng "MyRefresh" đẹp và đồng đều:

    nhập mô tả hình ảnh ở đây


Một người dùng chỉ ra rằng một biểu tượng khác, tối hơn đang được mở thay vì biểu tượng biểu tượng gnome mặc định; như bước này cho thấy, khẳng định đó là không chính xác:

nhập mô tả hình ảnh ở đây


Cảm ơn câu trả lời tuyệt vời! Tuy nhiên, vẫn còn một điều tôi không hiểu lắm: tại sao các biểu tượng biểu tượng tùy chỉnh không thể có nét, ngay cả khi chứa đầy #bebebeff?
David Planella

Tôi nghĩ rằng điều đó có liên quan đến cách Gnome biểu hiện (rasterizes) các SVG tượng trưng, ​​dựa trên giá trị của fg_color(nó sử dụng libRSVG ); động cơ rõ ràng phân biệt giữa điền và đột quỵ, và dường như được mã hóa để fg_colorchỉ áp dụng cho điền trong khi để lại đột quỵ như vậy. Nó có thể làm như vậy bởi vì SVG là định dạng được vector hóa (tham số hóa), trong khi đối với các biểu tượng bitmap thông thường, tất cả chỉ là pixel :)
ish

3

Các biểu tượng tượng trưng thường được thiết lập bởi chủ đề bằng cách sử dụng thuộc tính "màu", đó là lợi thế lớn của chúng, chúng trông đẹp trên mọi nền. Tuy nhiên, bạn có thể tải chúng với màu của riêng bạn.

Mã vala ví dụ:

//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);

Thật vậy, được thu lại phù hợp với chủ đề hiện tại, gần như là mục đích chính của các biểu tượng tượng trưng (cái khác đơn giản hơn và dễ đọc hơn, điều này cũng khuyến khích)
underscore_d
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.