Scree Updating - Updating toooo soooow




Hello ,

first of all i'm must say that i'm beginer in GTK, so please be patient.

 Well,

i'm trying write DAQ/Visualisation application using GTk2.x, but i'm little confused , because i can't obtain satisfied efficiency. I written sample code to check this usig signals :

"motion_notify_event" to obtain mouse movement and position, and next i emit "configure_event" where:

...
data_tpgvis->mouse_x = x;
data_tpgvis->mouse_y = y;
g_signal_emit_by_name(GTK_OBJECT(widget),"configure_event",GTK_TYPE_NONE,&ret_val);
return ..


In "configure_event" handler i prepare new GdkPixmap and i draw two filled rectangles ( important thing is that application works in fullscreen mode in 1024x768 up to 1600 x 1200) and two lines from 0 to height ( in x mouse position ) and 0 to width (in y mouse position ) - it will be cursor, next i emit "expose_event" :

...
if(data_tpgvis->main_chart!=NULL){
  gdk_pixmap_unref(data_tpgvis->main_chart);
data_tpgvis->main_chart = gdk_pixmap_new(data_tpgvis->main_wnd->window,data_tpgvis->main_chart_width,data_tpgvis->main_chart_height,-1);

  gdk_draw_rectangle(data_tpgvis->main_chart,
                     data_tpgvis->main_chart_gc,
                     TRUE,
                     0,
                     0

,data_tpgvis->main_chart_width,data_tpgvis->main_chart_height);

  gdk_draw_rectangle(data_tpgvis->main_chart,
                     data_tpgvis->main_chart_wnd_gc,
                     TRUE,
                     100,
                     5

,data_tpgvis->main_chart_width-100-100,data_tpgvis->main_chart_height-50);

  gdk_draw_rectangle(data_tpgvis->main_chart,
                     window->style->black_gc,
                     FALSE,
                     100,
                     5

,data_tpgvis->main_chart_width-100-100,data_tpgvis->main_chart_height-50);
                
 }


if((data_tpgvis->mouse_x >= 100 && data_tpgvis->mouse_x <= data_tpgvis->main_chart_width-100) && (data_tpgvis->mouse_y >= data_tpgvis->main_chart_y && data_tpgvis->mouse_y <= data_tpgvis->main_chart_height-50)){


gdk_draw_line(data_tpgvis->main_chart,data_tpgvis->main_chart_gc,100,data_tpgvis->mouse_y, data_tpgvis->main_chart_width-100, data_tpgvis->mouse_y);

gdk_draw_line(data_tpgvis->main_chart,data_tpgvis->main_chart_gc,data_tpgvis->mouse_x,5, data_tpgvis->mouse_x,data_tpgvis->main_chart_height-45);

sprintf(text," Time : %d, Pressure : %d",data_tpgvis->mouse_x,data_tpgvis->mouse_y);

   layout = gtk_widget_create_pango_layout (data_tpgvis->main_wnd,text);
   desc = pango_font_description_from_string ("Trebuchet MS 9");
   pango_layout_set_font_description (layout, desc);

   gdk_draw_layout_with_colors( data_tpgvis->main_chart,
                                data_tpgvis->main_chart_gc,
                                data_tpgvis->mouse_x+1,
data_tpgvis->mouse_y+1, layout,&(data_tpgvis->mouse_info_label_rgb1),&(data_tpgvis->mouse_info_label_rgb2));

   pango_font_description_free (desc);
}


g_signal_emit_by_name(GTK_OBJECT(window),"expose_event",GTK_TYPE_NONE,&ret_val);
return...



"expose_event" handler you will see below :

...
gdk_draw_drawable(window->window,
                 data_tpgvis->program_name_gc,
                 data_tpgvis->program_name_bar,
                 0,0,
                 0,0,
                 data_tpgvis->width, data_tpgvis->program_name_bar_height);
                
  gdk_draw_drawable(window->window,
                 data_tpgvis->program_name_gc,
                 data_tpgvis->main_chart,
                 0,0,
                 data_tpgvis->main_chart_x,data_tpgvis->main_chart_y,
                 data_tpgvis->main_chart_width,data_tpgvis->main_chart_height);

that's all...


I know that i colud update only lines it probably will be faster but i think that it will not solve my problems, because in future i will need update whole screen ( samples will be received evry 50ms, 100ms etc.. ) . How can i speedup redrawing or drawing on pixmaps ( because i thing drawing on pixmap slows down my app ). Is in gtk fastest drawing metod versus draving on pixmap??

Przemek Wieckowski




[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]