2011-06-24 17 views
9

W mojej wieloplatformowej aplikacji Java SWT używam funkcji setImages() TrayItem do ustawiania ikony paska dokowania i paska stanu. Ikona jest przezroczystym PNG o wymiarach 128 x 128 pikseli. Status i taca ikony są odpowiednio przycięty z obu rozkładów Windows i Linux, ale na Mac Mam problemy, które sprawiają, że bar ikona stanu pojawiają się dziwne obicia po obu stronach jak ta:SWT TrayItem.setImage nie skaluje się prawidłowo na pasku stanu Maca

To dziwne że działa to na wszystkich innych platformach, ale na Macu. Na przykład, tutaj jest ten sam stan bar ikona bez problemu na moim Linuksie:

Czy ktoś ma jakiś pomysł jak zapobiec tej dodatkowej wyściółki na Mac?

+0

Bez żadnego kodu będzie to trudne do debugowania. Na podstawie niektórych Googling wygląda na to, że powinieneś być w stanie to zrobić bez żadnych problemów. – jtbandes

+0

Czy próbowałeś zadać pytanie na eclipse.platform.swt i przeszukując https://bugs.eclipse.org/bugs/ pod kątem możliwego błędu? –

+0

W jaki sposób SWT Snippet 143 - http://dev.eclipse.org/viewcvs/viewvc.cgi/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet143.java?view=co - wygląda dla Ciebie? –

Odpowiedz

5

Znalazłem problem ze źródłami SWT Cocoa.

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

Problem polega na linii width = image.handle.size().width + BORDER; który zajmuje tylko czystą rozmiaru obrazu (w Twoim przypadku jest to 128 px). Nie znalazłem żadnego odpowiedniego obejścia (zobaczyłem, że publikujesz raport o błędzie na SWT bugzilla).

Jedynym sposobem na uniknięcie tego błędu (na razie) jest zmniejszenie rozmiaru obrazu w podajniku.

+0

Masz rację. Przesłałem raport o błędach do zespołu SWT kilka dni temu i zapomniałem zaktualizować ten post odzwierciedlając to. To niefortunne, że problem ten istnieje, ponieważ wymagał on intensywnego przepisania dużej części kodu. Zobacz mój raport o błędzie [tutaj] (https://bugs.eclipse.org/bugs/show_bug.cgi?id=350751) – blimmer

+2

Po przejściu - przesłali łatkę do [zgłoszenia błędu] (https://bugs.eclipse.org/bugs/show_bug.cgi?id=350751) jeśli masz ten sam problem. – blimmer

Powiązane problemy