Доброго времени суток. У меня опять небольшая проблема с печатью. Мне нужно, если изображение не помещается на A4 то его разрезать на несколько частей. Вот код:
static void draw_page (GtkPrintOperation * oper, GtkPrintContext * context,
gint nr, gpointer user_data)
{
MainWin* mw = (MainWin*)user_data;
GdkPixbuf* pixbuf = gdk_pixbuf_new_from_file(image_list_get_current_file_path (mw->img_list),
NULL);
GdkPixbuf* sub_pixbuf = NULL;
cairo_t *cr = gtk_print_context_get_cairo_context (context);
int i = 0;
int j = 0;
int n = 0;
guint width = 0;
guint height = 0;
guint width1 = 0;
guint height1 = 0;
guint x = 210;
guint y = 297;
width = gdk_pixbuf_get_width(pixbuf);
height = gdk_pixbuf_get_height(pixbuf);
width1 = gdk_pixbuf_get_width(pixbuf);
height1 = gdk_pixbuf_get_height(pixbuf);
if (width < 210 && height < 300)
{
gdk_cairo_set_source_pixbuf(cr, pixbuf, 0, 0);
}
else
{
int count = 0;
while (width >= 208)
{
width -= 208;
++count;
}
for (i; i <= count; i++)
{
if (i == count)
{
sub_pixbuf = gdk_pixbuf_new_subpixbuf(pixbuf, j, 0, width - 1 , 295);
list = g_list_prepend (list, sub_pixbuf);
break;
}
else
{
sub_pixbuf = gdk_pixbuf_new_subpixbuf(pixbuf,j, 0, 208, 295);
list = g_list_prepend (list, sub_pixbuf);
j += 208;
}
gdk_cairo_set_source_pixbuf(cr, g_list_nth_data(list,i), 0, 0);
}
}
cairo_paint (cr);
g_object_unref (pixbuf);
}
Разрезать получилось. По ширине режется нормально. Но есть проблема. Допустим если изображение разрезано на 4 части, на печать отправляется только 1 либо какую укажешь в :
gdk_cairo_set_source_pixbuf(cr, g_list_nth_data(list,i), 0, 0);
Как сделать так что бы на печать отправлялись все части изображения а не 1?
Cпасибо.