रनिंग एप्लिकेशन में GNOME प्रतीकात्मक चिह्न अधिक गहरे क्यों दिखाई देते हैं?


10

मैं एक एप्लिकेशन बना रहा हूं जो डिफ़ॉल्ट थीम से प्रतीकात्मक आइकन का उपयोग करता है।

हालाँकि, कुछ आइकन हैं जिनकी मुझे आवश्यकता है जो कि डिफ़ॉल्ट थीम के लोगों द्वारा प्रस्तुत नहीं किए जा सकते हैं, इसलिए मैं अपने खुद के बना रहा हूं।

मैंने जो कुछ भी किया था, उसने /usr/share/icons/gnome/scalable/actions/अपने ऐप के सोर्स ट्री में कुछ स्थानीय रूप से कॉपी किया , जो एक आधार के रूप में काम कर सकता था, और उन्हें संपादित करना शुरू कर दिया।

अब तक सब ठीक है। लेकिन मैंने निम्नलिखित पर ध्यान दिया है: सभी प्रतीकात्मक चिह्न मूल .svg फ़ाइल को देखते समय हल्के भूरे रंग के होते हैं, लेकिन जब उन्हें विजेट पर रखा जाता है, तो वे गहरे रंग के हो जाते हैं।

यहां एक उदाहरण है, /usr/share/icons/gnome/scalable/actions/view-refresh-symbolic.svgडिफ़ॉल्ट थीम से आइकन का उपयोग करना :

  • यहाँ यह कैसा दिखता है जब Inkscape के साथ मूल खोलते हैं:

Inkscape पर दृश्य-ताज़ा-प्रतीकात्मक

  • और यहां एक रनिंग एप्लिकेशन पर एक टूलबार जैसा दिखता है:

रन-टाइम पर दृश्य-ताज़ा-प्रतीकात्मक

ध्यान दें कि रनटाइम के दौरान आइकन अधिक गहरा हो रहा है। यह दोनों एंबियंस और रेडिएंस थीम के साथ होता है।

मैं ज्यादा बुरा नहीं मानूंगा, लेकिन मैंने देखा कि यह मेरे कस्टम आइकन को प्रभावित करता है, जिससे इसके कुछ हिस्से गहरे (अंदरूनी भराव) हो जाते हैं, जबकि इसके कुछ हिस्से मूल (स्ट्रोक) के समान रंग के बने रहते हैं।

तो क्या डिफ़ॉल्ट प्रतीकात्मक प्रतीकों को काला करने का कारण बनता है और मेरे कस्टम आइकन के लिए इसे कैसे लागू किया जाना चाहिए?


आप एप्लिकेशन में आइकन कैसे लोड कर रहे हैं?
डोबे

ग्लेड के साथ, टूलबार बटन में 'आइकन नाम से लोड' सेटिंग का उपयोग करते हुए।
डेविड प्लेनेला

तब सबसे संभावित उत्तर यह है कि यह आपके कस्टम आइकन को बिल्कुल भी लोड नहीं कर रहा है, लेकिन स्टैक में एक आइकन थीम से एक, जिसका मिलान नाम (या फ़ॉलबैक नाम) है।
dobey

जवाबों:


15
  • प्रतीकात्मक चिह्न एक क्रोमा-कुंजी रंग में बनाए जाते हैं , पूर्ण अस्पष्टता ( #bebebeff) के साथ ग्रे । फिर (जीटीके 3) या (जीटीके 2) fg_colorमें थीम द्वारा परिभाषित मूल्य के आधार पर उन्हें रंगीन किया जा सकता है ; या सीएसएस (GTK3) में परिभाषित पर । settings.inigtkrcfg_color
    • उदाहरण के लिए, एंबियंस के लिए अग्रभूमि का रंग ( fg_color) गहरे भूरे ( #4c4c4c) में सेट है /usr/share/themes/Ambiance/gtk-3.0/settings.ini, यही वजह है कि प्रतीकात्मक चिह्न गहरे रंग के दिखाई देते हैं।
  • कस्टम प्रतीकात्मक चिह्न समान दिखने के लिए, आपको स्ट्रोक को हटाना होगा और केवल RGBA मान के साथ भरने का उपयोग करना होगा #bebebeff; अन्यथा, स्ट्रोक हमेशा सेट (यानी, ग्रे या जो भी रंग) के रूप में दिखाई देगा।

    • Inkscape में, केवल ऑब्जेक्ट चुनें, Fill और Stroke खोलें , और "Stroke Paint" के तहत No Paint (x) आइकन पर क्लिक करें :

    यहाँ छवि विवरण दर्ज करें

  • यह हमें एक अच्छा और समान दिखने वाला "MyRefresh" प्रतीकात्मक आइकन देता है:

    यहाँ छवि विवरण दर्ज करें


एक उपयोगकर्ता ने संकेत दिया कि डिफ़ॉल्ट सूक्ति प्रतीक के बजाय एक अलग, गहरा आइकन खोला जा रहा था; जैसा कि यह स्ट्रेस दिखाता है कि यह दावा गलत है:

यहाँ छवि विवरण दर्ज करें


उत्कृष्ट उत्तर के लिए धन्यवाद! हालांकि, अभी भी एक बात है जो मुझे बिल्कुल समझ में नहीं आती है: कस्टम प्रतीकात्मक चिह्न एक स्ट्रोक क्यों नहीं हो सकते हैं, भले ही भरा हो #bebebeff?
डेविड प्लेनेला

मुझे लगता है कि इसके मूल्य के आधार पर गनोम रेंडर (रिस्तेरीज़) प्रतीकात्मक SVGs के साथ क्या करना है fg_color(यह libRSVG का उपयोग करता है ); इंजन स्पष्ट रूप से भरता है और स्ट्रोक के बीच अंतर करता है, और fg_colorकेवल स्ट्रोक को छोड़ते समय इसे भरने के लिए लागू करने के लिए कोडित किया गया प्रतीत होता है। ऐसा इसलिए कर सकते हैं क्योंकि एसवीजी एक वेक्टरकृत (पैरामीटरयुक्त) प्रारूप है, जबकि सामान्य बिटमैप वाले आइकनों के लिए, यह सब सिर्फ पिक्सेल है :)
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);

वास्तव में, वर्तमान विषय के लिए उपयुक्त याद किया जा रहा है, लगभग प्रतीकात्मक प्रतीक का मुख्य उद्देश्य है (दूसरे को सरल और अधिक सुपाठ्य होना चाहिए, जो भी बढ़ावा देता है)
अंडरस्कोर_ड
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.