如何使用 CSS(C 代码)在 gtk+3 中使用 .svg 背景?当我尝试这个时,我得到了错误:
(test1:2604): Gtk-WARNING **: Theme parsing error: teststyle.css:2:40: Couldn't recognize the image file format for file '/home/mike/gtk/programming/Tests/gtkScalable.svg'
我的环境是:
- Ubuntu natty(经典无效果模式)
- gtk+-3.2.3、gdk-pixbuf-2.24.1、pango-1.29.1、atk-2.1.5
- librsvg2-2 2.32.1-0ubuntu3.1
- librsvg2-dev 2.32.1-0ubuntu3.1
- librsvg2-common 2.32.1-0ubuntu3.1
- libpixbufloader-svg.so 在:/usr/lib/gdk-pixbuf-2.0/2.10.0/loaders
- libpixbufloader-svg.so 在:/usr/lib32/gdk-pixbuf-2.0/2.10.0/loaders
这是我的测试文件:
/* COMPILE WITH:
gcc -Wall -o test1 `pkg-config --cflags --libs gtk+-3.0` test1.c
*/
#include <gtk/gtk.h>
#include <string.h>
int main (int argc, char *argv[]) {
gtk_init(&argc, &argv);
GtkWidget *window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
gtk_widget_set_size_request(window, 270, 250);
g_signal_connect(G_OBJECT (window), "destroy",
G_CALLBACK(gtk_main_quit), NULL);
GtkCssProvider *provider = gtk_css_provider_new ();
GdkDisplay *display = gdk_display_get_default ()
GdkScreen *screen = gdk_display_get_default_screen (display);
gtk_style_context_add_provider_for_screen (screen,
GTK_STYLE_PROVIDER (provider),
GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
gsize bytes_written, bytes_read;
const gchar* home = "/home/mike/gtk/programming/Tests/teststyle.css";
GError *error = 0;
gtk_css_provider_load_from_path (provider,
g_filename_to_utf8(home, strlen(home),
&bytes_read,
&bytes_written,
&error),
NULL);
g_object_unref (provider);
gtk_widget_show_all(window);
gtk_main ();
return 0;
}
这是我的样式表:teststyle.css,以及我正在使用的图像:
http://www.clker.com/cliparts/b/0/0/b/11949995711012521407gtk.svg
GtkWindow {
background-image: url('/home/mike/gtk/programming/Tests/gtkScalable.svg');
}
我还尝试按照其他一些站点上的建议使用此命令更新缓存,但它不起作用并且实际上损坏了我的一些 .c 文件,我不得不重新开始:
gdk-pixbuf-query-loaders --update-cache
更新:我尝试在 Unity 下运行它,但它仍然不起作用。当我选择了 Gorilla 主题(Gtk2-engines)时,我也尝试过它本身使用 .svg 图像但仍然没有运气。我需要 Gtk3 引擎吗?我看过有关 Sugar-toolkit-gtk3 的示例。但它是 Python,目前尚不清楚这是如何完成的。
http://erikos.sweettimez.de/2011/12/09/gtk3-code-sprint-rosario-3/