http://uchigo.main.jp/gtk3/index.html を参考にGTK+をさわってみようと思っているのですが、
cr=gdk_cairo_create(gtk_widget_get_window (widget));
を使おうとすると
tester.cpp: In function ‘gboolean cb_expose_event(GtkWidget*, cairo_t*, gpointer)’: tester.cpp:29:55: warning: ‘cairo_t* gdk_cairo_create(GdkWindow*)’ is deprecated: Use 'gdk_window_begin_draw_frame() and gdk_drawing_context_get_cairo_context()' instead [-Wdeprecated-declarations] cr=gdk_cairo_create(gtk_widget_get_window (widget)); ^ In file included from /usr/local/include/gtk-3.0/gdk/gdk.h:33:0, from /usr/local/include/gtk-3.0/gtk/gtk.h:30, from tester.cpp:4: /usr/local/include/gtk-3.0/gdk/gdkcairo.h:35:12: note: declared here cairo_t * gdk_cairo_create (GdkWindow *window); ^~~~~~~~~~~~~~~~
と警告が出てしまいます。
これは関数を使用しない代わりに現在推奨されているgdk_window_begin_draw_frame()
を使えば治るというのですが、
その関数の使い方の詳細が分からず(公式リファレンス等いろいろほじくりましたがそれでも見つからない)困っています。
どのようにしてこの関数を置き換えれば良いのでしょうか?
こちらが現時点でのコード全文です
#include <gtk/gtk.h> #include <gdk/gdk.h> using namespace std; GtkWidget *window; static gboolean cb_expose_event(GtkWidget *widget, cairo_t *cr, gpointer data) { cr=gdk_cairo_create(gtk_widget_get_window (widget)); // ココ! cairo_set_source_rgb(cr, 1.0, 0.0, 0.0); cairo_rectangle(cr, 50.0, 50.0, 50.0, 50.0); cairo_stroke_preserve(cr); cairo_set_source_rgb(cr, 1.0, 0.8, 0.8); cairo_fill(cr); cairo_destroy(cr); return FALSE; } int main(int argc, char** argv) { gtk_init(&argc,&argv); window = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_widget_set_app_paintable(window, TRUE); gtk_widget_add_events (window, GDK_BUTTON_PRESS_MASK); gtk_widget_set_size_request(window, 300, 200); g_signal_connect(G_OBJECT(window), "draw", G_CALLBACK(cb_expose_event), NULL); g_signal_connect(window, "destroy", G_CALLBACK(gtk_main_quit), NULL); gtk_widget_show(window); gtk_main(); return 0; }
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/02/05 03:21