3

後でgtkmm3を使用してドラッグアンドドロップアイコン画像で使用するために、gtkウィジェットコンテナをpixbufにレンダリングする方法を探しています。

これを行うためのネイティブgtk3の正しい方法は、私が調査した限りでは、提供されたcairoサーフェスでのgtk_widget_draw()の使用です。

このサーフェスの作成は問題ではありませんが、gtk_widget_draw()自体の呼び出しは問題です。

gtkmm-3.4.2のソースで直接言及されているのは、「保護された」と宣言されているGtk :: Widget :: draw()関数(widget.cc:310)だけです。

だから私の質問は:gtkmm3でそのようなタスク(ウィジェットをpixbufにレンダリングする)を適切に実行するにはどうすればよいですか?

この時点で、2つのオプションが表示されます。

  • 保護されたdraw()関数へのパブリックインターフェイスを提供するサブクラスGtk ::Widget

  • Gtk ::Widgetからgobj*インスタンスを抽出し、このインスタンスでネイティブGtkのgtk_widget_draw()を呼び出します。

問題は、どちらの方法が望ましいのか、そしてその理由は何かということです。それとも、それを行うための他の[より良い]方法がいくつかありますか?

4

1 に答える 1

2

ドキュメントGtkOffscreenWindowから、ウィジェットのpixbufを収集するためにを使用できます。

ウィジェットを取得してその状態を手動で設定し、それをOffscreenWindowに追加してから、スナップショットをGdk::Pixbufとして取得するという考え方です。

および機能:

Glib::RefPtr<Gdk::Pixbuf> Gtk::OffscreenWindow::get_pixbuf  (       )   
Retrieves a snapshot of the contained widget in the form of a Gdk::Pixbuf.

この関連する質問から、いくつかのサンプルコード(Python)と追加のヒントを収集することもできます。

カイロの表面の上にGTKウィジェットを描画する方法

于 2012-10-15T21:31:25.733 に答える