[英]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.