1
2@c %start of fragment
3
4@node GtkPrintContext
5@chapter GtkPrintContext
6Encapsulates context for drawing pages
7
8@section Overview
9A GtkPrintContext encapsulates context information that is required when drawing
10pages for printing, such as the cairo context and important parameters like page
11size and resolution. It also lets you easily create @code{<pango-layout>} and
12@code{<pango-context>} objects that match the font metrics of the cairo surface.
13
14GtkPrintContext objects gets passed to the ::begin-print, ::end-print,
15::request-page-setup and ::draw-page signals on the
16@code{<gtk-print-operation>}.
17
18@example
19
20static void
21draw_page (GtkPrintOperation *operation,
22	   GtkPrintContext   *context,
23	   int                page_nr)
24@{
25  cairo_t *cr;
26  PangoLayout *layout;
27  PangoFontDescription *desc;
28
29  cr = gtk_print_context_get_cairo_context (context);
30
31  /* Draw a red rectangle, as wide as the paper (inside the margins) */
32  cairo_set_source_rgb (cr, 1.0, 0, 0);
33  cairo_rectangle (cr, 0, 0, gtk_print_context_get_width (context), 50);
34
35  cairo_fill (cr);
36
37  /* Draw some lines */
38  cairo_move_to (cr, 20, 10);
39  cairo_line_to (cr, 40, 20);
40  cairo_arc (cr, 60, 60, 20, 0, M_PI);
41  cairo_line_to (cr, 80, 20);
42
43  cairo_set_source_rgb (cr, 0, 0, 0);
44  cairo_set_line_width (cr, 5);
45  cairo_set_line_cap (cr, CAIRO_LINE_CAP_ROUND);
46  cairo_set_line_join (cr, CAIRO_LINE_JOIN_ROUND);
47
48  cairo_stroke (cr);
49
50  /* Draw some text */
51  layout = gtk_print_context_create_layout (context);
52  pango_layout_set_text (layout, "Hello World! Printing is easy", -1);
53  desc = pango_font_description_from_string ("sans 28");
54  pango_layout_set_font_description (layout, desc);
55  pango_font_description_free (desc);
56
57  cairo_move_to (cr, 30, 20);
58  pango_cairo_layout_path (cr, layout);
59
60  /* Font Outline */
61  cairo_set_source_rgb (cr, 0.93, 1.0, 0.47);
62  cairo_set_line_width (cr, 0.5);
63  cairo_stroke_preserve (cr);
64
65  /* Font Fill */
66  cairo_set_source_rgb (cr, 0, 0.0, 1.0);
67  cairo_fill (cr);
68
69  g_object_unref (layout);
70@}
71@end example
72
73Printing support was added in GTK+ 2.10.
74
75@section Usage
76@include defuns-gtkprintcontext.xml.texi
77
78@c %end of fragment
79