Reverse the order of ranges when printing in reverse. (#341578)

2006-05-15  Matthias Clasen  <mclasen@redhat.com>

	* gtk/gtkprintoperation.c: Reverse the order of
	ranges when printing in reverse.  (#341578)
This commit is contained in:
Matthias Clasen
2006-05-15 18:33:41 +00:00
committed by Matthias Clasen
parent f6ce5b643c
commit 6560161713
3 changed files with 37 additions and 19 deletions

View File

@ -1,3 +1,8 @@
2006-05-15 Matthias Clasen <mclasen@redhat.com>
* gtk/gtkprintoperation.c: Reverse the order of
ranges when printing in reverse. (#341578)
2006-05-15 Alexander Larsson <alexl@redhat.com> 2006-05-15 Alexander Larsson <alexl@redhat.com>
* gtk/gtkprintjob.[ch]: * gtk/gtkprintjob.[ch]:

View File

@ -1,3 +1,8 @@
2006-05-15 Matthias Clasen <mclasen@redhat.com>
* gtk/gtkprintoperation.c: Reverse the order of
ranges when printing in reverse. (#341578)
2006-05-15 Alexander Larsson <alexl@redhat.com> 2006-05-15 Alexander Larsson <alexl@redhat.com>
* gtk/gtkprintjob.[ch]: * gtk/gtkprintjob.[ch]:

View File

@ -1256,23 +1256,21 @@ typedef struct
} PrintPagesData; } PrintPagesData;
static void static void
find_range (gboolean reverse, find_range (PrintPagesData *data)
GtkPageRange *range,
gint *start,
gint *end,
gint *inc)
{ {
if (reverse) GtkPageRange *range;
range = &data->ranges[data->range];
if (data->inc < 0)
{ {
*start = range->end; data->start = range->end;
*end = range->start - 1; data->end = range->start - 1;
*inc = -1;
} }
else else
{ {
*start = range->start; data->start = range->start;
*end = range->end + 1; data->end = range->end + 1;
*inc = 1;
} }
} }
@ -1285,16 +1283,16 @@ increment_page_sequence (PrintPagesData *data)
data->page += data->inc; data->page += data->inc;
if (data->page == data->end) if (data->page == data->end)
{ {
data->range++; data->range += data->inc;
if (data->range == data->num_ranges) if (data->range == -1 || data->range == data->num_ranges)
{ {
data->uncollated++; data->uncollated++;
if (data->uncollated == data->uncollated_copies) if (data->uncollated == data->uncollated_copies)
return FALSE; return FALSE;
data->range = 0;
data->range = data->inc < 0 ? data->num_ranges - 1 : 0;
} }
find_range (priv->manual_reverse, &data->ranges[data->range], find_range (data);
&data->start, &data->end, &data->inc);
data->page = data->start; data->page = data->start;
} }
} }
@ -1444,8 +1442,18 @@ print_pages (GtkPrintOperation *op,
data->print_context = print_context; data->print_context = print_context;
data->uncollated = 0; data->uncollated = 0;
data->range = 0; if (data->op->priv->manual_reverse)
find_range (data->op->priv->manual_reverse, &data->ranges[0], &data->start, &data->end, &data->inc); {
data->range = data->num_ranges - 1;
data->inc = -1;
}
else
{
data->range = 0;
data->inc = 1;
}
find_range (data);
data->page = data->start - data->inc; data->page = data->start - data->inc;
data->collated = data->collated_copies - 1; data->collated = data->collated_copies - 1;