问题描述
我目前正在将一些东西移植到 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 (将#修改为@)