GtkSharp 設置窗口背景透明

本文告訴大家如何在 GTK Sharp 裏面設置窗口背景透明

在 GTK 裏面設置窗口背景透明十分簡單,只需使用如下代碼即可

        this.AppPaintable = true;
        var screen = this.Screen;
        var visual = screen.RgbaVisual;
        if (visual is not null && screen.IsComposited)
        {
            this.Visual = visual;
        }

感謝 walterlv 大佬提供此方法,我只是代爲記錄的工具人

上面代碼一般是放在窗口的構造函數裏面,如以下示例

internal sealed class DemoWindow : global::Gtk.Window
{
    public DemoWindow() : base(global::Gtk.WindowType.Toplevel)
    {
        Title = "Walterlv Blank Gtk App";
        SetDefaultSize(800, 600);
        Add(new Area());

        this.AppPaintable = true;
        var screen = this.Screen;
        var visual = screen.RgbaVisual;
        if (visual is not null && screen.IsComposited)
        {
            this.Visual = visual;
        }
    }

    protected override bool OnDeleteEvent(Event evnt)
    {
        global::Gtk.Application.Quit();
        return base.OnDeleteEvent(evnt);
    }
}

如果你運行代碼沒有看到窗口背景透明,那可能是你的系統裏面的桌面窗口合成管理不正確或沒安裝,請自行解決,如安裝 compiz 窗口合成管理器。詳細請看 dotnet C# 設置 X11 應用窗口背景透明 這篇博客的窗口合成管理器處理部分

本文代碼放在 https://github.com/walterlv/Walterlv.BlankUnoApp 倉庫裏,歡迎大家拉取代碼運行

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章