最近使用GTK4开发应用,发现使用CSS无法改变GtkInfoBar的背景颜色,查看了源码中GtkInfoBar的CSS层级,如下:
/**************
* GtkInfoBar *
**************/
infobar {
> revealer > box {
padding: 8px;
border-spacing: 12px;
}
&.action:hover > revealer > box {
background-color: if($variant == 'light', desaturate(lighten(invert($selected_bg_color), 47%), 30%),
desaturate(darken(invert($selected_bg_color), 42%), 70%));
}
&.info,
&.question,
&.warning,
&.error {
> revealer > box {
border-bottom: 1px solid lighten($borders_color, 5%);
background-color: if($variant == 'light', desaturate(lighten(invert($selected_bg_color), 45%), 30%),
desaturate(darken(invert($selected_bg_color), 40%), 70%));
}
}
}
在GTK4 code中创建 CssProvider给GtkInfoBar添加 Style Context,如下:
......
const char* css="infobar.info > revealer > box {background:#F00;}";
GtkCssProvider *cssProvider = gtk_css_provider_new();
gtk_css_provider_load_from_data(cssProvider,css,-1);
GtkWidget *bar = gtk_info_bar_new ();
gtk_style_context_add_provider(gtk_widget_get_style_context(bar),
GTK_STYLE_PROVIDER(cssProvider),
GTK_STYLE_PROVIDER_PRIORITY_USER);
gtk_box_append (GTK_BOX (vbox), bar); //vbox是window的child
gtk_info_bar_set_message_type (GTK_INFO_BAR (bar), GTK_MESSAGE_INFO);
GtkWidget *label = gtk_label_new ("This is an info bar with message type GTK_MESSAGE_INFO");
gtk_info_bar_add_child (GTK_INFO_BAR (bar), label);
......
结果如下图:
使用GtkInspector查看 发现GtkInfoBar的CSS修改无效:
有知道怎么修改的同学一定要告诉我,我是一个CSS小白
有知道怎么修改的同学一定要告诉我,我是一个CSS小白
有知道怎么修改的同学一定要告诉我,我是一个CSS小白
我们发现GTK4 只对 info、warning、error、question设置了CSS,没有对other设置CSS,
所以我们可以通过设置 infobar的背景颜色来实现需求(其它消息类型即使设置了 infobar的背景颜色也会被它的子控件覆盖),如下code
......
const char* css="infobar {background:#F00;}";
GtkCssProvider *cssProvider = gtk_css_provider_new();
gtk_css_provider_load_from_data(cssProvider,css,-1);
GtkWidget *bar = gtk_info_bar_new ();
gtk_style_context_add_provider(gtk_widget_get_style_context(bar),
GTK_STYLE_PROVIDER(cssProvider),
GTK_STYLE_PROVIDER_PRIORITY_USER);
gtk_box_append (GTK_BOX (vbox), bar); //vbox是window的child
gtk_info_bar_set_message_type (GTK_INFO_BAR (bar), GTK_MESSAGE_OTHER);
GtkWidget *label = gtk_label_new ("This is an info bar with message type GTK_MESSAGE_INFO");
gtk_info_bar_add_child (GTK_INFO_BAR (bar), label);
......
结果如下图:
通过源码或者 GtkInspector可以清晰的看到InfoBar层级关系为:
GtkInfoBar–>GtkRevealer–>GtkBox
那么我们可以直接获取box控件设置其背景颜色,如下:
......
const char* css="box{background:#F00;}";
GtkCssProvider *cssProvider = gtk_css_provider_new();
gtk_css_provider_load_from_data(cssProvider,css,-1);
GtkWidget *bar = gtk_info_bar_new ();
GtkWidget *bar_reveal_box = gtk_widget_get_first_child(gtk_widget_get_first_child(bar));
gtk_style_context_add_provider(gtk_widget_get_style_context(bar_reveal_box),
GTK_STYLE_PROVIDER(cssProvider),
GTK_STYLE_PROVIDER_PRIORITY_USER);
gtk_box_append (GTK_BOX (vbox), bar); //vbox是window的child
gtk_info_bar_set_message_type (GTK_INFO_BAR (bar), GTK_MESSAGE_INFO);
GtkWidget *label = gtk_label_new ("This is an info bar with message type GTK_MESSAGE_INFO");
gtk_info_bar_add_child (GTK_INFO_BAR (bar), label);
......
效果如下图:
GtkInspector截图如下:
这种方式感觉不够专业,还是希望有知道怎么通过CSS直接修改的小伙伴告诉我
我是一个CSS小白
我是一个CSS小白
我是一个CSS小白
题目链接:https://acm.zcmu.edu.cn/JudgeOnline/problem.php?id=1374题目大意忍者影分身。忍者有n点脉轮,当脉轮数量超过1的时候可以进行影分身,制造幻象,并且分他ai点脉轮,剩下bi点脉轮,同时主体疲劳值增加|ai-bi|,幻象和主体还能继续影分身,直到脉轮数等于1。问在幻象最多的情况下使得疲劳值最小,求这个最小疲劳值。范围:(0 < N < 1e7)思路dfs递归求解。首先他一共有n-1个幻象这个毋庸置疑,那么现在就要降低疲_1374 greatest naruto army
CVTE一面图片缓存你如何去设计 LRU算法原理 了解过View的绘制 了解过事件分发 多线程有使用吗 线程池有使用吗 java虚拟机内存管理有哪些? 堆跟栈的区别 hashmap和hashtable的区别?hashmap中如何解决冲突?hashmap只有链表去解决冲突?hashmap如何计算hash值? 线程有几种状态,怎么去停止一个线程 sleep和wait的区别 设..._merryzoe
1、搭建西门子S7仿真环境基于PLCSIM-Advanced搭建西门子S7仿真环境注意事项:1、通过公众号后台发送PLCSIM-Advanced获取软件2、安装软件要先安装WinPcap软件3、安装WinPcap可能会出现下面的问题解决方案是右击WinPcap属性,设置兼容性和管理员权限4、使用过程参考下方链接基于S7-PLCSIM Advanced搭建S7通信仿真环境2、搭建MySQL数据库环境【MySQL环境】虚拟机或Windows系统部署过程严格按照下._log4net sqlsugar
一、基本环境搭建服务器:阿里云 => 云服务器ECS服务器系统:centOSpython版本:python3.8python框架:flask可视化面板:宝塔面板二、搭建简单介绍1、安装python2、在python项目管理器安装完毕后点击设置进入设置面板,而后点击版本管理安装python3、点击添加python项目,弹出弹窗,按照提示填入即可4、使用宝塔面板终端测试python文件,步骤为:cd命令进入python文件夹下,而后使用命令python3 文件名.py 运行p_宝塔运行python项目
目录前言通过建表语句来指定通过 `navicat` 的可视化界面直接操作前言mysql 数据库有时候会给表中加上 create_time 和 update_time 这两个字段,这两个字段可以设置为 datetime 或 timestamp 类型,那么如何为其设置默认值并根据当前时间来更新呢?如何做到通过 mysql 数据库的设置来实现上述字段的自动化填充呢,而不用在 sql 语句中手动来填充呢。解决办法如下通过建表语句来指定CREATE TABLE `test` ( `text` var_mysql createtime default
终于要开始写代码了,好激动。 在一个典型的package目录下,你会看到三个东西: package/Makefile package/patches目录,可选 package/files目录,可选 patches目录顾名思..._openwrt package
花了很长时间整理的,感觉用起来很方便,共享一下。我的vim配置主要有以下优点:1.按F5可以直接编译并执行C、C++、java代码以及执行shell脚本,按“F8”可进行C、C++代码的调试2.自动插入文件头 ,新建C、C++源文件时自动插入表头:包括文件名、作者、联系方式、建立时间等,读者可根据需求自行更改3.映射“Ctrl + A”为全选并复制快捷键,方便复制代码4.按“F
1.import matplotlib.pyplot as pltimport seaborn as sns画子图: plt.subplot(m,n) (m,n)个子图fig,(ax1,ax2)=plt.subplot(1,2,1):第一个子图子图设置标题:ax1.set_title(name)matplotlib画子图时设置总标题:fig.suptitle(name)...
今天来看看git对象数据库(object database)的相关内容:1 首先要弄明白什么是object database,我们先建一个git仓库.#mkdir test#cd test#git init#vim file.txt//在文件中输入Hi, zhm #git add file.txt#git comm
为什么80%的码农都做不了架构师?>>> ..._官方iee的oui文件
本文是对 flink 1.14 官网中读写 hive 部分内容的翻译整理。_flink 创建hive表
题目原文: Convert a non-negative integer to its english words representation. Given input is guaranteed to be less than 231 - 1.For example, 123 -> “One Hundred Twenty Three” 12345 -> “Twelve Thousand T