如何在没有窗口管理器的SWT中制作透明shell?

时间:2013-08-24 12:20:27

标签: java linux swt transparency xorg

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

java -jar program.jar

但是当我在没有窗口管理器shell的情况下在纯X上启动我的java应用程序时,它是不透明的并且具有白色背景。我使用命令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工作吗?

1 个答案:

答案 0 :(得分: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"/>