2015-01-27 7 views
0

카이로 도면을 새로 고치는 데 문제가 있습니다. 그것은 작동하지 않으며 이유를 모른다. 당신이 나를 도울 수? 분석 기능이 실행될 때마다 새로운 "드로잉"을 만들고 싶습니다. 그런 다음gtk2에서 카이로 그리기를 새로 고치는 방법은 무엇입니까?

gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(formula_scrolled_window), d_area); 

:

d_area = gtk_drawing_area_new(); 

그런 다음 내가 스크롤 창에 포장 :

g_signal_connect(G_OBJECT(d_area), "expose_event", G_CALLBACK(expose_event_callback), NULL); 

하지만 전에 내가 가지고 :

나는 이런 식으로 뭔가를 만들어

g_signal_connect(G_OBJECT(search_entry), "activate", G_CALLBACK(analyse), &window_and_search_entry); 

기능 분석 :

ELEMENT *analyse(GtkWidget *widget, WINDOW_AND_SEARCH_ENTRY *data) 
{ 
    const gchar *text = gtk_entry_get_text(GTK_ENTRY(data->search_entry)); 
    main_window = data->window; 
    d_area = GTK_DRAWING_AREA(data->d_area); //do I nedd it? 


    foo = operate(text, GTK_WIDGET(data->window)); 

    print_on_console_with_new_line(foo); 

    g_signal_connect(G_OBJECT(d_area), "expose_event", G_CALLBACK(expose_event_callback), NULL); //do I need it?? 
    do_drawing(cr, foo); //is it good 
    g_signal_connect(G_OBJECT(d_area), "expose_event", G_CALLBACK(expose_event_callback), NULL); //do I need it?? 


} 

그리고 마지막으로

gboolean expose_event_callback (GtkWidget *widget, GdkEventExpose *event, gpointer data) 
{ 


    cr = gdk_cairo_create (gtk_widget_get_window (widget)); 
    do_drawing(cr, foo); 
    return FALSE; 
} 

:

void do_drawing(cairo_t *cr, ELEMENT *p) 
{ 
gdouble font_size = 20.0; 

cairo_set_source_rgb(cr, 0, 0, 0); 
cairo_select_font_face(cr, "Sans", CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_NORMAL); 
cairo_set_font_size(cr, font_size); 


cairo_move_to(cr, lala, 30.0); 
cairo_show_text(cr, "6"); 
lala += 30; 

} 
+1

작동하지 않는다는 의미는 무엇입니까? 이전 이미지 위에 그리는거야? –

+0

새 이미지를 그리지 않습니다. 나는 여전히 똑같은 것을보고있다. 카이로 이미지를 업데이트하는 기능을 원합니다. – jjpikoov

+0

이 두 가지 솔루션이 작동합니다. 고마워. – jjpikoov

답변

1

시도가 do_drawing() 기능의 시작에서이 추가

cairo_set_source_rgb(cr, 1., 1., 1.); 
cairo_paint(cr); 

및 gtk 위젯에 업데이트 하시겠습니까?

gtk_widget_queue_draw(formula_scrolled_window);