SWT TrayItem.setImage неправильно масштабируется в строке состояния Mac - PullRequest
10 голосов
/ 25 июня 2011

В моем кроссплатформенном Java-приложении SWT я использую функцию setImages () TrayItem, чтобы установить значок док-станции и строки состояния. Значок представляет собой прозрачный PNG размером 128x128. Значки состояния и панели задач соответствующим образом обрезаются в дистрибутивах Windows и Linux, но на Mac у меня возникают проблемы, из-за которых значок строки состояния отображается со странным заполнением с обеих сторон, например так:

Мне странно, что это работает на всех других платформах, кроме Mac. Например, вот та же иконка в строке состояния без проблем на моем компьютере с Linux:

Кто-нибудь знает, как предотвратить этот дополнительный отступ на Mac?

1 Ответ

5 голосов
/ 01 июля 2011

Я нашел проблему в источниках 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);
}

Проблема в строке width = image.handle.size ().width + BORDER;, которая просто берет чистый размер изображения (в вашем случае это 128 пикселей).Я не нашел подходящего обходного пути (я видел, как вы опубликовали отчет об ошибке в SWZ bugzilla).

Так что единственный способ избежать этой ошибки (пока) - уменьшить изображение в трее.

...