gtk4 透明绘图区

问题描述

我目前正在将一些东西移植到 GTK4,大部分已经完成。但是,我根本无法获得透明度。大多数事情发生在需要透明的绘图区域内(对桌面的其余部分)。

我试图让绘图区域示例使用透明度,但它不起作用。 这是我当前的代码

#include <gtk/gtk.h>

/* Surface to store current scribbles */
static cairo_surface_t *surface = NULL;

static void
clear_surface(void)
{
    cairo_t *cr;

    cr = cairo_create(surface);

    cairo_set_source_rgba(cr,1,0.5,0.5);
    cairo_paint_with_alpha(cr,0.5);

    cairo_destroy(cr);
}

/* Create a new surface of the appropriate size to store our scribbles */
static void
resize_cb(GtkWidget *widget,int width,int height,gpointer data)
{
    if (surface)
    {
        cairo_surface_destroy(surface);
        surface = NULL;
    }

    if (gtk_native_get_surface(gtk_widget_get_native(widget)))
    {
        surface = gdk_surface_create_similar_surface(gtk_native_get_surface(gtk_widget_get_native(widget)),CAIRO_CONTENT_COLOR_ALPHA,gtk_widget_get_width(widget),gtk_widget_get_height(widget));

        /* Initialize the surface to white */
        clear_surface();
    }
}

static void
draw_cb(GtkDrawingArea *drawing_area,cairo_t *cr,gpointer data)
{
    cairo_set_source_surface(cr,surface,0);
    cairo_paint(cr);
}

static void
activate(GtkApplication *app,gpointer user_data)
{
    GtkWidget *window;
    GtkWidget *frame;
    GtkWidget *drawing_area;

    window = gtk_application_window_new(app);
    gtk_window_set_title(GTK_WINDOW(window),"Drawing Area");
    frame = gtk_frame_new(NULL);
    gtk_window_set_child(GTK_WINDOW(window),frame);
    drawing_area = gtk_drawing_area_new();
    gtk_frame_set_child(GTK_FRAME(frame),drawing_area);
    gtk_drawing_area_set_draw_func(GTK_DRAWING_AREA(drawing_area),draw_cb,NULL,NULL);
    g_signal_connect_after(drawing_area,"resize",G_CALLBACK(resize_cb),NULL);
    gtk_widget_show(window);
}

int main(int argc,char **argv)
{
    GtkApplication *app;
    int status;

    app = gtk_application_new("org.gtk.example",G_APPLICATION_FLAGS_NONE);
    g_signal_connect(app,"activate",G_CALLBACK(activate),NULL);
    status = g_application_run(G_APPLICATION(app),argc,argv);
    g_object_unref(app);

    return status;
}

在 GTK3 中,您需要将视觉效果设置为 RGB,但在 gtk4 (https://developer.gnome.org/gtk4/stable/gtk-migrating-3-to-4.html#id-1.7.4.3.10) 中应该没有。

有谁知道为什么这段代码在 GTK4 中没有产生透明窗口?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)