2011-06-24 63 views
9

在我的跨平臺SWT Java應用程序中,我使用TrayItem的setImages()函數來設置停靠欄和狀態欄圖標。該圖標是一個128x128透明PNG。狀態和托盤圖標適當地夾在Windows和Linux發行版,但在Mac上我有使狀態欄圖標出現在兩側奇怪的填充這樣的問題:SWT TrayItem.setImage無法在Mac狀態欄中正確縮放

很奇怪我認爲這是在所有其他平臺上工作,但Mac。舉例來說,這裏是一樣的狀態欄圖標沒有在我的Linux機器的問題:

沒有人有任何想法如何防止Mac上這個微胖?

+0

沒有任何代碼,這將很難調試。基於一些谷歌搜索,看起來你應該能夠做到這一點,沒有任何問題。 – jtbandes

+0

您是否嘗試過在eclipse.platform.swt上提問並搜索https://bugs.eclipse.org/bugs/以查找可能的錯誤? –

+0

SWT片段143如何 - http://dev.eclipse.org/viewcvs/viewvc.cgi/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet143.java?view=co - look爲你? –

回答

5

我在SWT可可源中發現了這個問題。

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

的問題是其只需要像純尺寸(在你的情況下,它是128像素)的行width = image.handle.size().width + BORDER;。我沒有找到任何合適的解決方法(我看到你發佈SWT bugzilla的bug報告)。

所以只有這樣才能避免這個錯誤(現在)是讓你的托盤圖像變小。

+0

你說得對。我幾天前向SWT小組提交了一份錯誤報告,並忘記更新這篇文章反映了這一點。不幸的是,這個問題存在,因爲它需要大量的代碼重寫。看到我的錯誤報告[這裏](https://bugs.eclipse.org/bugs/show_bug.cgi?id=350751) – blimmer

+2

只是一個後續行動 - 他們已經提交了一個補丁[錯誤報告](https:/ /bugs.eclipse.org/bugs/show_bug.cgi?id=350751),如果你有同樣的問題。 – blimmer