1

我在 shell 上使用 SWT setAlpha() 方法。透明度在 KDE 和 GNOME 环境中正常工作,即在终端中输入:

java -jar program.jar

但是当我在没有窗口管理器的纯 X 上启动我的 java 应用程序时,shell 不透明并且具有白色背景。我使用命令 startx 和 X 执行我的 ~/.xinitrc 脚本,其中包含:

cd /home/user
java -jar ./program.jar

下面是方法的代码:

public void showTransparentShell() {
    transparentShell = new Shell(shell, SWT.NO_TRIM);
    transparentShell.setAlpha(120);
    transparentShell.setBackground(Display.getDefault().getSystemColor(SWT.COLOR_WHITE));
    transparentShell.setBounds(shell.getBounds());
    AlphaEffect.fadeOnClose(transparentShell, 900, new ExpoOut(), animationRunner);
    transparentShell.open();
    AlphaEffect.setAlpha(animationRunner, transparentShell, 160, 900, new ExpoOut(), null, null);
}

我正在使用 swt-3.7-2 和 gtk-3.2.0

Linux 中的透明度需要什么?必须安装哪些组件/库/包才能使“透明效果”起作用?

编辑:经过数小时的谷歌搜索,我遇到了解决方案,我只是在我的 java 程序之前启动了 Kwin:

kwin&
cd /home/user
java -jar ./program.jar

唯一的问题是 Kwin 相当大并且有很多依赖项。我必须在具有 256 MB RAM 的计算机上运行我的程序,所以也许有人知道支持透明度的更轻量级的窗口管理器,并且可以像 Kwin 一样使用 SWT?

4

1 回答 1

3

我终于找到了如何解决我的问题。也许它会对其他人有所帮助。linux中的SWT使用cairo绘制透明效果,需要以下库:

libswt-cairo-gtk-3-jni
libcairo2
libxcomposite1
libxdamage1

必须加载以下 XOrg 扩展:

Composite
DAMAGE

GDK 需要合成窗口来绘制透明度,所以我需要使用窗口管理器。KWin 太重了,我用 xfwm4 代替。xfwm4 具有必须启用的内置合成器。要在 xfwm4 中启用合成,只需编辑属性文件:

~/.config/xfce4/xfconf/xfce-perchannel-xml/xfwm4.xml

并设置:

<property name="use_compositing" type="bool" value="true"/>
于 2013-08-28T08:46:28.890 回答