gpt4 book ai didi

java - SWT TrayItem.setImage 在 Mac 状态栏中无法正确缩放

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:00:11 26 4
gpt4 key购买 nike

在我的跨平台 SWT Java 应用程序中,我使用 TrayItem 的 setImages() 函数来设置停靠栏和状态栏图标。图标是 128x128 透明 PNG。状态和托盘图标在 Windows 和 Linux 发行版上都被适本地剪裁了,但在 Mac 上我有问题使状态栏图标在两边出现奇怪的填充,如下所示:

令我感到奇怪的是,这适用于除 Mac 以外的所有其他平台。例如,这是在我的 Linux 机器上没有问题的相同状态栏图标:

有谁知道如何在 Mac 上防止这种额外的填充?

最佳答案

我在 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 像素)。我没有找到任何合适的解决方法(我看到您在 SWT bugzilla 上发布了错误报告)。

因此(目前)避免此错误的唯一方法是缩小托盘图像。

关于java - SWT TrayItem.setImage 在 Mac 状态栏中无法正确缩放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6474260/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com