ทำไมไอคอนสัญลักษณ์ของ GNOME ถึงมืดกว่าในแอปพลิเคชันที่ทำงานอยู่


10

ฉันกำลังสร้างแอปพลิเคชันที่ใช้ไอคอนสัญลักษณ์จากชุดรูปแบบเริ่มต้น

อย่างไรก็ตามมีไอคอนบางอย่างที่ฉันต้องการซึ่งไม่สามารถแสดงโดยไอคอนเหล่านั้นได้จากธีมเริ่มต้นดังนั้นฉันจึงสร้างไอคอนของตัวเองขึ้นมา

สิ่งที่ฉันทำคือเพียงไปที่/usr/share/icons/gnome/scalable/actions/คัดลอกเฉพาะบางส่วนลงในแผนภูมิแหล่งที่มาของแอปที่สามารถใช้เป็นพื้นฐานและเริ่มแก้ไขได้

จนถึงตอนนี้ดีมาก แต่ฉันสังเกตเห็นสิ่งต่อไปนี้: ไอคอนสัญลักษณ์ทั้งหมดมีสีเทาอ่อนเมื่อดูที่ไฟล์. svg ดั้งเดิม แต่เมื่อวางลงบนวิดเจ็ตพวกเขาจะเข้มขึ้น

นี่คือตัวอย่างการใช้/usr/share/icons/gnome/scalable/actions/view-refresh-symbolic.svgไอคอนจากชุดรูปแบบเริ่มต้น:

  • นี่คือสิ่งที่ดูเหมือนว่าเมื่อเปิดต้นฉบับด้วย Inkscape:

ดู - รีเฟรช - สัญลักษณ์บน Inkscape

  • และนี่คือลักษณะที่ปรากฏบนแถบเครื่องมือบนแอปพลิเคชันที่ทำงานอยู่:

ดู - รีเฟรช - สัญลักษณ์บนรันไทม์

สังเกตุไอคอนมืดกว่าปกติขณะใช้งานจริง ที่เกิดขึ้นทั้งกับธีม Ambiance และ Radiance

ฉันจะไม่รังเกียจอะไรมาก แต่ฉันสังเกตเห็นว่ามันมีผลกับไอคอนที่กำหนดเองของฉันซึ่งส่วนต่าง ๆ ของมันจะมืดกว่า (เติมด้านใน) ในขณะที่บางส่วนของมันยังคงมีสีเดียวกับต้นฉบับ (จังหวะ)

ดังนั้นสิ่งที่ทำให้ไอคอนสัญลักษณ์เริ่มต้นมืดลงและวิธีการที่จะใช้สำหรับไอคอนที่กำหนดเองของฉันได้อย่างไร


คุณโหลดไอคอนอย่างไรในแอปพลิเคชั่น
dobey

ด้วย Glade ในปุ่มแถบเครื่องมือโดยใช้การตั้งค่า 'โหลดจากชื่อไอคอน'
David Planella

ดังนั้นคำตอบที่เป็นไปได้มากที่สุดคือมันไม่ได้โหลดไอคอนที่คุณกำหนดเองเลย แต่อย่างใดอย่างหนึ่งจากชุดไอคอนในสแต็กซึ่งมีชื่อที่ตรงกัน (หรือชื่อทางเลือก)
dobey

คำตอบ:


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) ใต้ "Stroke Paint":

    ป้อนคำอธิบายรูปภาพที่นี่

  • สิ่งนี้ทำให้เรามีไอคอนสัญลักษณ์ "MyRefresh" ที่สวยงามและดูดี:

    ป้อนคำอธิบายรูปภาพที่นี่


ผู้ใช้รายหนึ่งระบุว่ามีการเปิดไอคอนที่มืดกว่าที่แตกต่างกันแทนไอคอนสัญลักษณ์ gnome เริ่มต้น ตามที่ strace นี้แสดงการยืนยันนั้นไม่ถูกต้อง:

ป้อนคำอธิบายรูปภาพที่นี่


ขอบคุณสำหรับคำตอบที่ยอดเยี่ยม! อย่างไรก็ตามยังมีอีกสิ่งหนึ่งที่ฉันไม่ค่อยเข้าใจ: ทำไมไอคอนสัญลักษณ์ที่กำหนดเองจึงไม่สามารถเป็นเส้นขีดได้ถึงแม้ว่าเต็มไปด้วย#bebebeff?
David Planella

ฉันคิดว่าเกี่ยวข้องกับวิธีการที่ Gnome แสดงผล (rasterizes) สัญลักษณ์ SVGs ตามค่าของfg_color(ใช้libRSVG ) เห็นได้ชัดว่าเครื่องยนต์แตกต่างระหว่างการเติมและจังหวะและดูเหมือนว่าจะถูกเข้ารหัสเพื่อใช้fg_colorเฉพาะกับการเติมในขณะที่ปล่อยจังหวะตามที่เป็นอยู่ มันสามารถทำเช่นนั้นเพราะ SVG เป็น vectorized (แปร) รูปแบบในขณะที่สำหรับไอคอนบิตแมปปกติก็ทั้งหมดเพียงพิกเซล :)
ish

3

ไอคอนสัญลักษณ์มักจะถูกกำหนดโดยชุดรูปแบบโดยใช้คุณสมบัติ "สี" ซึ่งเป็นข้อได้เปรียบที่ยอดเยี่ยมพวกเขาดูดีบนพื้นหลังใด ๆ อย่างไรก็ตามคุณสามารถโหลดด้วยสีของคุณเอง

ตัวอย่างรหัสวาลา:

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

จริง ๆ แล้วการ recoloured ที่เหมาะสมกับชุดรูปแบบปัจจุบันเกือบจะเป็นจุดประสงค์หลักของไอคอนสัญลักษณ์ (อีกอย่างที่ง่ายกว่าและอ่านง่ายกว่าซึ่งก็ส่งเสริม)
underscore_d
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.