在 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' 后,窗口的角落变成黑色而不是透明的主要内容,如果未能解决你的问题,请参考以下文章

如何在 GTK 应用程序中使用自定义字体

GTK+ 3.0 编译错误:不能包含 errno.h

在 Python 中构建 Gtk3 应用程序的正确方法

如何在没有 MSYS2 的 Windows 上构建 GTK+3 程序?

GTK+ 3.0:如何将 Gtk.TreeStore 与自定义模型项一起使用?

我应该使用啥 makefile 来构建 gtk-3-examples 应用程序?