print multiple PAGES instead of multiple COPIES (workaround for possible bug in gutenprint)
This commit is contained in:
parent
0db8e8537d
commit
59b597d806
1 changed files with 14 additions and 8 deletions
22
photobooth.c
22
photobooth.c
|
@ -1865,18 +1865,17 @@ void photo_booth_copies_value_changed (GtkRange *range, PhotoBoothWindow *win)
|
||||||
static void photo_booth_print (PhotoBooth *pb)
|
static void photo_booth_print (PhotoBooth *pb)
|
||||||
{
|
{
|
||||||
PhotoBoothPrivate *priv;
|
PhotoBoothPrivate *priv;
|
||||||
gint num_copies = 0;
|
|
||||||
priv = photo_booth_get_instance_private (pb);
|
priv = photo_booth_get_instance_private (pb);
|
||||||
GST_DEBUG_BIN_TO_DOT_FILE_WITH_TS (GST_BIN (pb->pipeline), GST_DEBUG_GRAPH_SHOW_ALL, "photo_booth_photo_print");
|
GST_DEBUG_BIN_TO_DOT_FILE_WITH_TS (GST_BIN (pb->pipeline), GST_DEBUG_GRAPH_SHOW_ALL, "photo_booth_photo_print");
|
||||||
photo_booth_get_printer_status (pb);
|
photo_booth_get_printer_status (pb);
|
||||||
GST_INFO_OBJECT (pb, "PRINT! prints_remaining=%i", priv->prints_remaining);
|
GST_INFO_OBJECT (pb, "PRINT! prints_remaining=%i", priv->prints_remaining);
|
||||||
|
priv->print_copies = photo_booth_window_get_copies_hide (priv->win);
|
||||||
gtk_widget_hide (GTK_WIDGET (priv->win->button_print));
|
gtk_widget_hide (GTK_WIDGET (priv->win->button_print));
|
||||||
num_copies = photo_booth_window_get_copies_hide (priv->win);
|
|
||||||
|
|
||||||
#ifdef ALWAYS_PRINT_DIALOG
|
#ifdef ALWAYS_PRINT_DIALOG
|
||||||
if (1)
|
if (1)
|
||||||
#else
|
#else
|
||||||
if (priv->prints_remaining > num_copies)
|
if (priv->prints_remaining > priv->print_copies)
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
gtk_label_set_text (priv->win->status, _("Printing..."));
|
gtk_label_set_text (priv->win->status, _("Printing..."));
|
||||||
|
@ -1901,7 +1900,7 @@ static void photo_booth_print (PhotoBooth *pb)
|
||||||
}
|
}
|
||||||
|
|
||||||
gtk_print_operation_set_print_settings (printop, priv->printer_settings);
|
gtk_print_operation_set_print_settings (printop, priv->printer_settings);
|
||||||
g_signal_connect (printop, "begin_print", G_CALLBACK (photo_booth_begin_print), NULL);
|
g_signal_connect (printop, "begin_print", G_CALLBACK (photo_booth_begin_print), pb);
|
||||||
g_signal_connect (printop, "draw_page", G_CALLBACK (photo_booth_draw_page), pb);
|
g_signal_connect (printop, "draw_page", G_CALLBACK (photo_booth_draw_page), pb);
|
||||||
g_signal_connect (printop, "done", G_CALLBACK (photo_booth_print_done), pb);
|
g_signal_connect (printop, "done", G_CALLBACK (photo_booth_print_done), pb);
|
||||||
|
|
||||||
|
@ -1913,7 +1912,6 @@ static void photo_booth_print (PhotoBooth *pb)
|
||||||
gtk_print_operation_set_default_page_setup (printop, page_setup);
|
gtk_print_operation_set_default_page_setup (printop, page_setup);
|
||||||
gtk_print_operation_set_use_full_page (printop, TRUE);
|
gtk_print_operation_set_use_full_page (printop, TRUE);
|
||||||
gtk_print_operation_set_unit (printop, GTK_UNIT_POINTS);
|
gtk_print_operation_set_unit (printop, GTK_UNIT_POINTS);
|
||||||
gtk_print_settings_set_n_copies (priv->printer_settings, num_copies);
|
|
||||||
|
|
||||||
res = gtk_print_operation_run (printop, action, GTK_WINDOW (priv->win), &print_error);
|
res = gtk_print_operation_run (printop, action, GTK_WINDOW (priv->win), &print_error);
|
||||||
if (res == GTK_PRINT_OPERATION_RESULT_ERROR)
|
if (res == GTK_PRINT_OPERATION_RESULT_ERROR)
|
||||||
|
@ -1944,7 +1942,15 @@ static void photo_booth_print (PhotoBooth *pb)
|
||||||
|
|
||||||
static void photo_booth_begin_print (GtkPrintOperation *operation, GtkPrintContext *context, gpointer user_data)
|
static void photo_booth_begin_print (GtkPrintOperation *operation, GtkPrintContext *context, gpointer user_data)
|
||||||
{
|
{
|
||||||
gtk_print_operation_set_n_pages (operation, 1);
|
PhotoBooth *pb;
|
||||||
|
PhotoBoothPrivate *priv;
|
||||||
|
|
||||||
|
pb = PHOTO_BOOTH (user_data);
|
||||||
|
|
||||||
|
priv = photo_booth_get_instance_private (pb);
|
||||||
|
|
||||||
|
GST_INFO_OBJECT (pb, "photo_booth_begin_print %i copies", priv->print_copies);
|
||||||
|
gtk_print_operation_set_n_pages (operation, priv->print_copies);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void photo_booth_draw_page (GtkPrintOperation *operation, GtkPrintContext *context, int page_nr, gpointer user_data)
|
static void photo_booth_draw_page (GtkPrintOperation *operation, GtkPrintContext *context, int page_nr, gpointer user_data)
|
||||||
|
@ -1961,7 +1967,7 @@ static void photo_booth_draw_page (GtkPrintOperation *operation, GtkPrintContext
|
||||||
GST_ERROR_OBJECT (context, "can't draw because we have no photo buffer!");
|
GST_ERROR_OBJECT (context, "can't draw because we have no photo buffer!");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
GST_DEBUG_OBJECT (context, "draw_page no. %i . %" GST_PTR_FORMAT " size %dx%x, %i dpi, offsets (%.2f, %.2f)", page_nr, priv->print_buffer, priv->print_width, priv->print_height, priv->print_dpi, priv->print_x_offset, priv->print_y_offset);
|
GST_DEBUG_OBJECT (context, "draw_page no. %i . %" GST_PTR_FORMAT " size %dx%d, %i dpi, offsets (%.2f, %.2f)", page_nr, priv->print_buffer, priv->print_width, priv->print_height, priv->print_dpi, priv->print_x_offset, priv->print_y_offset);
|
||||||
|
|
||||||
gst_buffer_map(priv->print_buffer, &map, GST_MAP_READ);
|
gst_buffer_map(priv->print_buffer, &map, GST_MAP_READ);
|
||||||
guint8 *h = map.data;
|
guint8 *h = map.data;
|
||||||
|
@ -2012,7 +2018,7 @@ static void photo_booth_print_done (GtkPrintOperation *operation, GtkPrintOperat
|
||||||
}
|
}
|
||||||
else if (result == GTK_PRINT_OPERATION_RESULT_APPLY)
|
else if (result == GTK_PRINT_OPERATION_RESULT_APPLY)
|
||||||
{
|
{
|
||||||
gint copies = gtk_print_settings_get_n_copies (priv->printer_settings);
|
gint copies = gtk_print_operation_get_n_pages_to_print (operation);
|
||||||
priv->photos_printed += copies;
|
priv->photos_printed += copies;
|
||||||
GST_INFO_OBJECT (user_data, "print_done photos_printed copies=%i total=%i", copies, priv->photos_printed);
|
GST_INFO_OBJECT (user_data, "print_done photos_printed copies=%i total=%i", copies, priv->photos_printed);
|
||||||
photo_booth_led_printer (priv->led, copies);
|
photo_booth_led_printer (priv->led, copies);
|
||||||
|
|
Loading…
Add table
Reference in a new issue