+static PangoContext *printing_textview_get_pango_context(gpointer data)
+{
+ return gtk_widget_get_pango_context(GTK_WIDGET(data));
+}
+
+static gpointer printing_textview_get_data_to_print(gpointer data, gint sel_start, gint sel_end)
+{
+ GtkTextView *text_view = GTK_TEXT_VIEW(data);
+ GtkTextBuffer *buffer = gtk_text_view_get_buffer(text_view);
+ GtkTextIter start, end;
+
+ if (sel_start < 0 || sel_end <= sel_start) {
+ gtk_text_buffer_get_start_iter(buffer, &start);
+ gtk_text_buffer_get_end_iter(buffer, &end);
+ } else {
+ gtk_text_buffer_get_iter_at_offset(buffer, &start, sel_start);
+ gtk_text_buffer_get_iter_at_offset(buffer, &end, sel_end);
+ }
+
+ return gtk_text_buffer_get_text(buffer, &start, &end, FALSE);
+}
+
+void printing_print(GtkTextView *text_view, GtkWindow *parent, gint sel_start, gint sel_end)
+{
+ PrintRenderer *textview_renderer = g_new0(PrintRenderer, 1);
+
+ textview_renderer->get_pango_context = printing_textview_get_pango_context;
+ textview_renderer->get_data_to_print = printing_textview_get_data_to_print;
+ textview_renderer->cb_begin_print = printing_textview_cb_begin_print;
+ textview_renderer->cb_draw_page = printing_textview_cb_draw_page;
+
+ printing_print_full(parent, textview_renderer, text_view, sel_start, sel_end);
+
+ g_free(textview_renderer);
+}
+