Кинул на форму GtkTextView, у него отпределил событие expose-event, пытаясь добавить нумерацию строк, нумерация работает, но почему-то, когда загружаешь текст, хотя бы в пару сотен строк, субъективно подтормаживает(прокручиваю скролом вверх-вниз) :( В чём может быть проблема? Может идеи подкините (за основу брал код из mousepad)
gboolean textview_expose(GtkWidget *widget, GdkEventExpose *event, gpointer data)
{
GdkWindow * win;
GtkTextIter iter;
GtkTextView * textview = GTK_TEXT_VIEW(widget);
cairo_t * cr = gdk_cairo_create(event->window);
int layout_width = 30;
int yrange;
int line_height;
PangoLayout * layout = gtk_widget_create_pango_layout(widget, "");
*/
win = gtk_text_view_get_window(textview, GTK_TEXT_WINDOW_LEFT);
if (event->window != win) {
g_object_unref(G_OBJECT(layout));
cairo_destroy(cr);
return FALSE;
}
/* draw line numbers */
cairo_set_source_rgb(cr,0.5,0.5,0.5);
gtk_text_view_get_line_at_y(textview, &iter, event->area.y, NULL);
while(!gtk_text_iter_is_end(&iter)) {
gtk_text_view_get_line_yrange(textview, &iter, &yrange, &line_height);
gtk_text_view_buffer_to_window_coords(textview, GTK_TEXT_WINDOW_TEXT, 0, yrange, NULL, &yrange);
int line_number = gtk_text_iter_get_line(&iter);
char * line_num_str = g_strdup_printf ("%d", line_number+1);
pango_layout_set_text(layout, line_num_str, -1);
int ph = pango_layout_get_height(layout);
int pw = pango_layout_get_width(layout);
pango_layout_get_pixel_size(layout, &pw, NULL);
cairo_move_to(cr, layout_width-pw-5, yrange-ph);
pango_cairo_show_layout(cr, layout);
gtk_text_iter_forward_line(&iter);
g_free(line_num_str);
}
g_object_unref(G_OBJECT(layout));
cairo_destroy(cr);
return FALSE;
}