2011-01-31 16 views
4

でGoogle Chromeのようなウィンドウを作成し、そのCのAPIのでGTK + 2の小さなプロジェクトを開発しようとする方法。要件は、Google-Chromeタイプのウィンドウで行うことです。それは、それが自分のタイトルバーと異なる色のコントロールを持っているでしょう。私はGTKライブラリにはかなり新しいですGTK +

誰もが任意のチュートリアルやリファレンスまたはすでにこれを実装する任意のオープンソースのコードで私を助けることはできますか?

ご協力いただきありがとうございます。

+0

これはMS Windowsでも実行する必要がありますか、それともGTK +がX-Windowsを使用するプラットフォームで実行する必要がありますか? – Oswald

+1

この時点で私はLinuxのみを探しています。したがって、MS Windowsの部分は必要ありません。ありがとうオズワルド。 – intellidiot

答えて

5

をあなたが何をしたいのか、カスタム装飾です。

私は、WMが枠線/タイトルバー自体をあなたのウインドウに追加しないようにするために、ウインドウにset_decorated Falseを設定しなければならないことを理解しています。paint()方法。

自明ではありません。あなたが探しているかもしれないもの

5

Crhomiumブラウザはオープンソースプロジェクトであるので、そのソースがここにあります:http://src.chromium.org/viewvc/chrome/trunk/

定義によってそこに利用可能であるべきであるあなたが求めて何:)

+0

あなたが言ったことは@kiguraiですが、非常に厳しいだけでなく、その技術をあまり知らずにこのような膨大な量のコードを検索するのに時間がかかります。私は基本的には、このようなことを偶然にしたWeb開発者です:) – intellidiot

+2

@intellidiot本質的に難しいです。他のデベロッパーがそれをどのように実装しているかを読むことはおそらく、最も早く学ぶ方法です。ショートカットはありません! –

+1

デビッドはそうです、これはかなり難しいです。あなたがXとGTK +のものをたくさん作っていないのであれば、これで数週間と数週間を簡単に過ごすことができ、まだまだ問題があります。 –

-1

私は何にとして少し混乱しています実際に探していますが、あなたが望むのはあなたのウィンドウ内にWebブラウザを提供するコントロールだと思います。 http://webkitgtk.org/

GtkMozEmbedは別です:

WebKitGTK +は、1つのそのような制御である私はこれをしなかったhttp://www.mozilla.org/unix/gtk-embedding.html

前回、私が働いていたものを見つけるためにいくつかを試してみました。コントロールが別のバグやHTMLのサポートを持っている(とFlashを。)

+0

あなたの時間に感謝しますが、興味があるのはカスタムxwindowです。デスクトップマネージャーのタイトルバーとボーダーはありません。私は例としてGoogle Chromeを使用しました。私はウェブブラウザの機能は必要ありませんが、リンクに感謝します。いつか将来的に彼らは必要になるかもしれません、誰が知っているか:) – intellidiot

2

はGTKの手押し車の一例です。これは、xpmファイルを使用してシェイプウィンドウを作成する方法を示しています.C、Perl、およびPythonの例があります。私はこれらのうちの1つを数年前に返しましたが、今のところそれを使用していません。

Here is the C version ...

The Python Example is Here ...

Here is a tutorial on pixmaps and GTK+

だけのGimpを使用してイメージを作成して、XPMファイルとして保存します。 246tNtの答えに追加

0

は、Chromeは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; 
} 
関連する問題