c - GTK3 - TextView 透明度以显示后面的应用程序

标签 c textview transparency gtk3

我目前正在开发一个名为 Xpad 的现有 Linux 应用程序,这是一个用 C 语言编写的便签应用程序。我尝试实现透明度,但我很难实现我想要的。便签看起来像这样。

Example of one pad

我有一个(顶级)gtk_window 和一个 gtk_textview。 如果使用函数 gtk_widget_override_background_color() 将 TextView 的背景颜色设置为透明颜色(GdkRGBA,其中 alpha 值小于 1),其后面的 gtk_window 的颜色将变得更加明显。

但是,我不想看到gtk_window,而是gtk_window背后的应用程序,比如浏览器,libreoffice,或者桌面。

如果使用 gtk_widget_override_background_color() 或 gtk_widget_set_opacity() 将 gtk_window 设置为特定的透明度,则整个小部件,包括窗口装饰(部分)变得透明。

为了使可见对象之间的关系更加清晰,我创建了不同部分的图表,并标记了我认为发生透明度问题的地方。

Relationships of xpad objects

有没有人知道如何使 textview 背景透明,而不使窗口装饰透明,这样我就可以看到这个应用程序背后的内容?

最佳答案

为小部件设置适当的 RGBA 视觉效果

w = //some GtkWidget or GtkWidget derived klass (i.e. GtkWindow)
gtk_widget_set_app_paintable (w, TRUE); // important or you will get solid color

// the next 3 lines should be wrapped in a func which is also hooked to "screen-changed"
GdkScreen *screen = gtk_widget_get_screen (w);
GdkVisual *visual = gdk_screen_get_rgba_visual (screen);
gtk_widget_set_visual(w, visual);

gtk_widget_show_all(w);



g_signal_connect(G_OBJECT(w), "screen-changed", G_CALLBACK(screen_changed_contaniing_above_code), NULL);

关于c - GTK3 - TextView 透明度以显示后面的应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19781079/

相关文章:

css - 透明的 div 背景,带有淡淡的颜色?

html - 403 禁止错误 cgi

c - 如何将矩阵的一行元素传递给函数?

c++ - 解码 JPEG 以获得未压缩的数据

c - 三点运算符 "..."用于初始化数组

Android TextView 用省略号剪辑文本的开头?

android - Xamarin.Android TextView 编号不同的字体大小

在 xml 中具有可绘制背景的 Android TextView 填充

android - 如何从另一个图像创建位图并保持透明背景?

webkit - 是否可以使用 WebKit 在清晰的背景上呈现网页内容?