[英]How to create a window like Google Chrome in GTK+
我是GTK库的新手,并尝试使用其C API开发GTK + 2中的小项目。 要求是在Google-Chrome类型窗口中执行此操作 。 它将拥有自己的标题栏和不同颜色的控件。
任何人都可以帮我解决任何教程或参考或任何已实现此功能的开源代码吗?
我感谢您的帮助。
由于Crhomium浏览器是一个开源项目,其源代码可在此处获取: http ://src.chromium.org/viewvc/chrome/trunk/
根据定义你应该找到什么:)
你想要做的是定制装饰。
我的理解是你必须在窗口上set_decorated False,以便WM不会将边框/标题栏本身添加到你的窗口,然后拥有自己的自定义Window子类,它可以在paint()
方法中手动处理它的装饰本身。
不是微不足道的。
您可能正在寻找的是gtk独轮车示例。 它向您展示了如何使用xpm文件创建一个整形窗口。这是C,Perl和Python中的一个示例。 几年前我做了其中一个,但现在已经有一段时间没用过了。
这是C版 ......
Python示例就在这里 ......
只需使用Gimp创建您的图像并将其另存为xpm文件。
添加到246tNt的答案,Chrome使用Skia。 这是一个例子(Gtk + 3,cairo,skia):
g_signal_connect(window_container_, "draw",
G_CALLBACK(OnWindowContainerDraw), NULL);
gboolean OnWindowContainerDraw(GtkWidget* widget,
cairo_t *cr) {
SkBitmap bitmap;
bitmap.setConfig(SkBitmap::kARGB_8888_Config, 100, 100);
bitmap.allocPixels();
SkDevice device(bitmap);
SkCanvas canvas(&device);
SkPaint paint;
SkRect r;
paint.setARGB(255, 255, 255, 255);
r.set(10, 10, 20, 20);
canvas.drawRect(r, paint);
cairo_surface_t* surface = cairo_image_surface_create_for_data(
(unsigned char*)bitmap.getPixels(), CAIRO_FORMAT_ARGB32,
bitmap.width(), bitmap.height(), bitmap.rowBytes());
cairo_surface_mark_dirty(surface);
cairo_set_source_surface(cr, surface, 0, 0);
cairo_paint(cr);
return FALSE;
}
我对你真正想要的东西感到有点困惑,但我认为你想要的是一个在你的窗口内提供Web浏览器的控件。
WebKitGTK +就是这样一个控件: http ://webkitgtk.org/
GtkMozEmbed是另一个: http : //www.mozilla.org/unix/gtk-embedding.html
上次我这样做,我不得不尝试一些找到一个有效的。 控件有不同的错误和HTML(和Flash)支持。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.