1

シェルで SWT setAlpha() メソッドを使用しています。透過性は、KDE ​​および GNOME 環境で正しく機能します。つまり、ターミナルで次のように入力します。

java -jar program.jar

しかし、ウィンドウマネージャーシェルなしで純粋な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 で動作する、もう少し軽量なウィンドウ マネージャーを知っている人がいるでしょうか?

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 に答える