【问题标题】:GTK3 - textview transparency to show applications behindGTK3 - textview 透明度以显示背后的应用程序
【发布时间】:2013-11-05 02:43:52
【问题描述】:

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

我有一个带有 gtk_textview 的(顶层)gtk_window。 如果使用函数 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 设置为某种透明度,则整个小部件,包括窗口装饰将(部分)透明。

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

任何人有任何想法如何使 textview 背景透明,而不使窗口装饰透明,所以我可以看到这个应用程序背后的任何东西?

【问题讨论】:

    标签: c textview transparency gtk3


    【解决方案1】:

    为小部件设置适当的 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);
    

    【讨论】:

    • 你好 Drahnr!我试图在我的颜色更新器功能中实现上述功能,但没有成功。这可能是我有限的编程技能。你介意帮助我吗?您可以使用 bzr(某种 GIT)检查代码:“bzr branch lp:~arthurborsboom/xpad/xpad-4.3”
    • 现在不能,我至少还有 2 周没有记录。
    猜你喜欢
    • 2011-02-15
    • 1970-01-01
    • 1970-01-01
    • 2016-09-17
    • 1970-01-01
    • 2021-10-24
    • 1970-01-01
    • 2014-12-18
    • 1970-01-01
    相关资源
    最近更新 更多