2011-06-24 10 views
9

मेरे क्रॉस-प्लेटफ़ॉर्म एसडब्ल्यूटी जावा एप्लिकेशन पर, मैं डॉक और स्टेटस बार आइकन सेट करने के लिए TrayItem के setImages() फ़ंक्शन का उपयोग कर रहा हूं। आइकन एक 128x128 पारदर्शी पीएनजी है। स्थिति और ट्रे आइकन उचित रूप से दोनों विंडोज और लिनक्स वितरण पर काटा जाता है, लेकिन मैक पर मुझे लगता है कि स्थिति पट्टी आइकन इस तरह दोनों पक्षों पर अजीब गद्दी के साथ प्रदर्शित करने के समस्या है:SWT TrayItem.setImage मैक स्टेटस बार में ठीक से स्केल नहीं करता है

यह करने के लिए अजीब बात है मुझे लगता है कि यह अन्य सभी प्लेटफॉर्म पर काम कर रहा है लेकिन मैक। उदाहरण के लिए, यहाँ मेरी लिनक्स बॉक्स पर समस्या के बिना एक ही स्थिति पट्टी चिह्न है:

किसी को भी कैसे मैक पर इस अतिरिक्त गद्दी को रोकने के लिए किसी भी विचार है?

+0

किसी भी कोड के बिना इसे डीबग करना मुश्किल होगा। कुछ गूगलिंग के आधार पर, ऐसा लगता है कि आपको बिना किसी समस्या के ऐसा करने में सक्षम होना चाहिए। – jtbandes

+0

क्या आपने eclipse.platform.swt पर प्रश्न पूछने और संभावित बग के लिए https://bugs.eclipse.org/bugs/ पर खोज करने का प्रयास किया है? –

+0

एसडब्ल्यूटी स्निपेट 143 कैसे करता है - http://dev.eclipse.org/viewcvs/viewvc.cgi/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet143.java?view=co - देखो तुम्हारे लिए? –

उत्तर

5

मुझे एसडब्ल्यूटी कोको स्रोतों में समस्या मिली।

public void setImage (Image image) { 
    checkWidget(); 
    if (image != null && image.isDisposed()) error (SWT.ERROR_INVALID_ARGUMENT); 
    super.setImage (image); 
    double /*float*/ width = 0; 
    if (image == null) { 
     view.setImage (null); 
    } else { 
     /* 
     * Feature in Cocoa. If the NSImage object being set into the view is 
     * the same NSImage object that is already there then the new image is 
     * not taken. This results in the view's image not changing even if the 
     * NSImage object's content has changed since it was last set into the 
     * view. The workaround is to temporarily set the view's image to null 
     * so that the new image will then be taken. 
     */ 
     NSImage current = view.image(); 
     if (current != null && current.id == image.handle.id) { 
      view.setImage (null); 
     } 
     view.setImage (image.handle); 
     if (visible) { 
      width = image.handle.size().width + BORDER; 
     } 
    } 
    item.setLength (width); 
} 

समस्या लाइन width = image.handle.size().width + BORDER; जो सिर्फ (अपने मामले में यह 128 पिक्सल है में) छवि के शुद्ध आकार लेता है पर है। मुझे कोई उपयुक्त कामकाज नहीं मिला (मैंने देखा कि आपने एसडब्ल्यूटी बगजिला पर बग रिपोर्ट पोस्ट की है)।

तो इस बग से बचने का एकमात्र तरीका (अभी के लिए) आपकी ट्रे छवि को छोटा बनाना है।

+0

आप सही हैं। मैंने कुछ दिन पहले एसडब्ल्यूटी टीम में एक बग रिपोर्ट जमा की थी और इस पोस्ट को प्रतिबिंबित करने के लिए भूल गए थे। यह दुर्भाग्यपूर्ण है कि यह समस्या मौजूद है क्योंकि इसे कोड के एक बड़े हिस्से की तीव्र पुनरावृत्ति की आवश्यकता है। मेरी बग रिपोर्ट देखें [यहां] (https://bugs.eclipse.org/bugs/show_bug.cgi?id=350751) – blimmer

+2

बस एक फॉलो-अप - उन्होंने [बग रिपोर्ट] पर एक पैच सबमिट किया है (https://bugs.eclipse.org/bugs/show_bug.cgi?id=350751) यदि आपको एक ही समस्या हो रही है। – blimmer

संबंधित मुद्दे