- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我被迫使用 Gtk+2。所以请不要讨论切换到 3 或 4。
我需要创建类似于 Gtk3s 的东西 GtkOverlay
我需要在其他小部件上绘制透明背景。
我想用 GtkFixed
并将我的“普通”小部件放在那里,然后使用 GtkEventBox
将颜色图(如果支持)设置为透明后,放在顶部并连接其公开事件。
我得到了一些工作,但它没有预期的结果。它导致事件框变得半透明(如我所愿),但现在显示下方的小部件,但显示窗口下方的所有内容。
到目前为止,这是我的代码(抱歉弄乱了):
#include <gtk/gtk.h>
GtkWidget *window;
GtkWidget *button;
GtkWidget *vbox;
GtkWidget *fixed;
GtkWidget *event_overlay;
gboolean supports_alpha = FALSE;
static void screen_changed(GtkWidget *widget, GdkScreen *old_screen, gpointer userdata)
{
/* To check if the display supports alpha channels, get the colormap */
GdkScreen *screen = gtk_widget_get_screen(widget);
GdkColormap *colormap = gdk_screen_get_rgba_colormap(screen);
if (!colormap)
{
printf("Your screen does not support alpha channels!\n");
colormap = gdk_screen_get_rgb_colormap(screen);
supports_alpha = FALSE;
}
else
{
printf("Your screen supports alpha channels!\n");
supports_alpha = TRUE;
}
gtk_widget_set_colormap(widget, colormap);
}
static gboolean exposed (GtkWidget *widget, GdkEvent *event, gpointer user_data)
{
cairo_t *cr = gdk_cairo_create(widget->window);
cairo_set_source_rgba (cr, 0.0, 0.0, 0.0, 0.5); /* transparent */
cairo_set_operator (cr, CAIRO_OPERATOR_SOURCE);
cairo_paint (cr);
cairo_destroy(cr);
return TRUE;
}
static void hello( GtkWidget *widget,
gpointer data )
{
gtk_fixed_put(GTK_FIXED(fixed), event_overlay, 100, 100);
}
static void destroy( GtkWidget *widget,
gpointer data )
{
gtk_main_quit ();
}
int main( int argc,
char *argv[] )
{
gtk_init (&argc, &argv);
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
g_signal_connect (window, "destroy",
G_CALLBACK (destroy), NULL);
button = gtk_button_new_with_label ("Hello World");
g_signal_connect (button, "clicked",
G_CALLBACK (hello), NULL);
vbox = gtk_vbox_new(TRUE, 5);
gtk_box_pack_start(GTK_BOX(vbox), button, TRUE, TRUE, 0);
fixed = gtk_fixed_new();
gtk_fixed_set_has_window(GTK_FIXED(fixed), TRUE);
gtk_widget_set_size_request(button, 500, 500);
gtk_fixed_put(GTK_FIXED(fixed), vbox, 0, 0);
event_overlay = gtk_event_box_new();
gtk_widget_set_size_request(event_overlay, 500, 500);
g_signal_connect(event_overlay, "expose-event", G_CALLBACK(exposed), NULL);
g_signal_connect(G_OBJECT(window), "screen-changed", G_CALLBACK(screen_changed), NULL);
gtk_widget_set_app_paintable(window, TRUE);
gtk_container_add (GTK_CONTAINER (window), fixed);
screen_changed(window, NULL, NULL);
gtk_widget_show_all (window);
gtk_widget_show(event_overlay);
gtk_main ();
return 0;
}
结果如下:
最佳答案
事实证明,GTK+ 2 作者实际上已经预见到了这个用例。有一对非常相似的现成示例包含在 gtk-demo
中。程序,随 GTK+ 2 文档一起分发。两个演示都可以在“屏幕外窗口”节点下找到。
代码有点复杂,所以我不包括在这里;该演示实际上是子类 GtkContainer
创建一个新的小部件类,将事件转发到其子项并将其呈现到屏幕外窗口以对呈现结果执行进一步的转换。但是您应该会发现“效果”示例非常容易满足您的需求:您所要做的就是修改 gtk_mirror_bin_expose
简单地将屏幕外窗口的内容绘制到容器的真实窗口中,然后在其上绘制半透明叠加层;并调整 gtk_mirror_bin_size_request
和 gtk_mirror_bin_size_allocate
简单地将所有与尺寸相关的信号透明地转发给 child 。
关于c - GTK+2 : Drawing above other widgets transparently,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68373996/
我想要一个具有透明背景的图表,因此 PNG 似乎是一个不错的选择。但是当我设置透明背景时,轴标签的质量急剧下降。我该如何解决?请参阅以下代码。就目前而言,图表具有透明背景,正如我所希望的,但文本质量很
我正在尝试制作一个透明的谷歌图表,但它似乎不起作用。它只是绘制纯白色背景。 有没有人在透明度方面取得成功? 难道我做错了什么? 提前致谢! 谷歌图表信息:solid fill 测试网址: Google
我有一个 subview 已添加到我的 UIView 中。这个想法是 subview 是一个带有 uibuttons 的悬停面板。 subview 的 alpha 值为 0.2,因为用户需要能够看到其
如何在不影响表单控件的情况下更改表单的 alphablend? 德尔福XE7 最佳答案 此问题的一个解决方案是使用多设备应用程序(如果无法使用VCL)。 如果您需要保留透明的TForm,只需更改属性T
嗨,我正在用 mvc4 做我的元素。在我的布局页面中,我有一个透明的 div(#wrapper),最重要的是我有许多非透明的 div。为此,我使用了以下 css 和 html 代码。
我有黑色和透明的简单图像,想将其更改为白色和透明。我想保持透明度(80% 黑色和 20% 透明 >> 80% 白色和 20% 透明,30% 黑色和......)。我尝试了填充桶,但没有成功。 据我所知
我有一组位图。它们在某种程度上都是透明的,我事先不知道哪些部分是透明的。我想从排除透明部分但在正方形中的原始位图中创建一个新位图。我认为这张图片解释了这一点: 我知道如何从现有位图中创建位图,但我不知
我整个下午都在尝试第一次使用 expo-cli 运行 expo build:ios,这样我就可以将我的第一个 expo 应用程序放到 TestFlight 上,但我反复收到错误消息:“你的应用程序图标
我想知道为什么在 Mac OS X 上的滚动条有时是白色透明的,有时是黑色透明的,如果您在常规设置中将“显示滚动条”设置为“滚动时”。所有浏览器(Safari、Chrome、Firefox、Opera
这个问题在这里已经有了答案: Difference between "-webkit-text-fill-color" and "color"? (2 个答案) 关闭 4 年前。
我想为我的应用程序开发一个配置文件屏幕。我正在使用 AppCompactActivity,因为我需要我的应用程序也支持非 Lollipop 设备。我只需要为应用程序中的这个特定 Activity 屏幕
第一个场景: h1{ text-align: center; } td{ width: 100px; height: 100px; border-right: 1px solid gray; bord
我在 Google Earth Engine 中工作,正在尝试创建一种无颜色/完全透明的颜色(无边框和无填充)。下面是一行代码,其中第一种颜色应该是透明的“颜色”。基本上我希望我的最小值根本不显示在
我在HTML5 Canvas 上玩createRadialGradient()。除非我要实现(半)透明性,否则它的工作原理就像一种魅力。 我做了这个jsFiddle以使事情更清晰:http://jsf
我需要从 www.webwoods.co.uk/lsss/index.html(黑色和红色的星星)的网站图标中删除白色背景 有没有办法用常用的图形编辑器(Adobe CC、Paint 等)来做到这一点
我需要使用透明度(背景每隔几秒钟更改一次)找到图像(检测游戏中的文本)。我的脚本: #include HotKeySet("s", "Start") $x = 0 $y = 0 Func Start
环境:WebGL,Chrome。将透明png用作模型的纹理时,我有以下行为: 图片A-树将建筑物隐藏在其后,我看到了世界框纹理。它还隐藏自身(后分支不可见) 同时-图片B-正常运行,窗口是透明的,我看
我正在尝试将水印渲染到视频中。一旦水印的图像文件 (.png) 包含透明度,图像就不再渲染到视频中。如果我将该图像转换为 .jpg 然后再转换回 .png,效果很好。如果我创建一个没有透明度的新 pn
我正在使用tilemill来生成mbtile。有人知道如何使mbtiles背景透明吗? 最佳答案 您的默认样式将具有类似的规则 Map { background-color:#f00; } 这为
我有一个奇怪的问题,我在尝试在 WebGL 中进行混合时无法弄清楚。黑色呈现为完全透明,所有带有灰色阴影的内容也呈现为半透明。我已经将它设置为使用 alpha channel 作为透明度的来源,并且在
我是一名优秀的程序员,十分优秀!