在 GTK-3 应用程序中使用 'border-radius' 后,窗口的角落变成黑色而不是透明
Posted
技术标签:
【中文标题】在 GTK-3 应用程序中使用 \'border-radius\' 后,窗口的角落变成黑色而不是透明【英文标题】:Corners of window become black instead of transparent after using ' border-radius' in GTK-3 app在 GTK-3 应用程序中使用 'border-radius' 后,窗口的角落变成黑色而不是透明 【发布时间】:2020-03-05 19:06:56 【问题描述】:我正在尝试创建带有圆角的 GTK-3 应用程序,并且我正在尝试使用 CSS 'border-radius' 属性。 但是边界角变成黑色。是什么原因以及如何解决?
这是文件“main.cc”中的 C++ 代码:
#include <gtkmm/application.h>
#include <iostream>
#include <gtkmm.h>
int main (int argc, char *argv[])
auto app = Gtk::Application::create(argc, argv, "org.gtkmm.example");
Gtk::Window window;
window.set_default_size(200, 200);
Glib::RefPtr<Gtk::CssProvider> css_provider = Gtk::CssProvider::create();
Glib::RefPtr<Gtk::StyleContext> styleContext = Gtk::StyleContext::create();
try
css_provider->load_from_path("styles.css");
catch (/*Exeption &e*/...)
std::cout << "exeption " << std::endl;
styleContext->add_provider_for_screen(Gdk::Screen::get_default(), css_provider, GTK_STYLE_PROVIDER_PRIORITY_USER);
return app->run(window);
这是文件“styles.css”中的 CSS 代码:
window
border: 1px solid black;
background: none;
background-color : red;
border-radius: 20px;
编译
g++ `pkg-config --cflags gtkmm-3.0` -o exampl main.cc `pkg-config --libs gtkmm-3.0`
我使用的是 Ubuntu 18.04.3 LTS
这里是结果: https://i.stack.imgur.com/5OvV1.png 我希望角落应该是透明的,而不是黑色!
请帮忙!
【问题讨论】:
【参考方案1】:您的屏幕截图的装饰是由窗口管理器绘制的:在应用程序级别您无法更改它。所以简短的回答是“不可能”。
无论如何,如果您使用client-side decorations,您可以绕过它。看看下面截图的角落:
我刚刚选择了一个使用带有客户端装饰的 GTK3 的随机应用程序,并添加了以下 CSS 片段:
headerbar
border-radius: 0 10px 0 0;
window
border-radius: 0 0 30px 20px;
【讨论】:
嗨!谢谢您的回答!你能提供更多细节吗?你把那个带有客户端装饰的应用程序带到哪里去了?我对所有这些 GTK 东西都很陌生 :( 这是我为工业机械编写的应用程序。您选择哪个应用程序并不重要,但它使用客户端装饰是基本的。如果您的发行版中没有启用客户端装饰,请参阅答案中提供的链接。 再次您好 :) 我已经在我的家用测试 PC(Ubuntu 16.04.3 LTS)上对其进行了测试,我尝试了“export GTK_CSD=1”,它开始运行良好。现在的样子:imgur.com/hJxJels。但有几个问题: 1)我在 CSS 文件中将“window”更改为“GtkWindow”。我不知道为什么,只是“窗口”在这台电脑上不起作用。 2) 当我尝试在其他 Ubuntu PC 上测试此解决方案时,它不起作用。我试过“export GTK_CSD=1”,但没有帮助。两台电脑都是 Ubuntu。版本:18.04.3 LTS 和 16.04.3 LTS。也许我错过了一些东西,我必须安装一些额外的软件包?为什么是“GtkWindow”? 您在图像中显示的内容对我来说看起来不正确:在客户端装饰中,窗口周围的框架(包括标题栏)不应由窗口管理器绘制。尝试启动gtk3-demo
:如果窗口管理器仍然绘制默认标题栏,则意味着它只是拒绝尊重客户端装饰,您无能为力。【参考方案2】:
在你的 CSS 中,你将边框设置为 1px 纯黑色,不应该是 1px 透明吗?
【讨论】:
我尝试使用“边框:1px 透明;”但它不起作用以上是关于在 GTK-3 应用程序中使用 'border-radius' 后,窗口的角落变成黑色而不是透明的主要内容,如果未能解决你的问题,请参考以下文章
如何在没有 MSYS2 的 Windows 上构建 GTK+3 程序?