public virtual signal void draw_page (PrintContext context, int page_nr)

Emitted for every page that is printed.

The signal handler must render the page_nr's page onto the cairo context obtained from context using get_cairo_context.

static void
draw_page (GtkPrintOperation *operation,
GtkPrintContext *context,
int page_nr,
gpointer user_data)
cairo_t *cr;
PangoLayout *layout;
double width, text_height;
int layout_height;
PangoFontDescription *desc;

cr = gtk_print_context_get_cairo_context (context);
width = gtk_print_context_get_width (context);

cairo_rectangle (cr, 0, 0, width, HEADER_HEIGHT);

cairo_set_source_rgb (cr, 0.8, 0.8, 0.8);
cairo_fill (cr);

layout = gtk_print_context_create_pango_layout (context);

desc = pango_font_description_from_string ("sans 14");
pango_layout_set_font_description (layout, desc);
pango_font_description_free (desc);

pango_layout_set_text (layout, "some text", -1);
pango_layout_set_width (layout, width * PANGO_SCALE);
pango_layout_set_alignment (layout, PANGO_ALIGN_CENTER);

pango_layout_get_size (layout, NULL, &layout_height);
text_height = (double)layout_height / PANGO_SCALE;

cairo_move_to (cr, width / 2, (HEADER_HEIGHT - text_height) / 2);
pango_cairo_show_layout (cr, layout);

g_object_unref (layout);

Use set_use_full_page and set_unit before starting the print operation to set up the transformation of the cairo context according to your needs.



the PrintContext for the current operation


the number of the currently printed page (0-based)