我在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工作吗?
答案 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"/>