A GtkPrintContext encapsulates context information that is required when drawing pages for printing, such as the cairo context and important parameters like page size and resolution. It also lets you easily create Pango.Layout.Pango_Layout and Pango.Context.Pango_Context objects that match the font metrics of the cairo surface.
GtkPrintContext objects gets passed to the Gtk.Print_Operation.Gtk_Print_Operation::begin-print, Gtk.Print_Operation.Gtk_Print_Operation::end-print, Gtk.Print_Operation.Gtk_Print_Operation::request-page-setup and Gtk.Print_Operation.Gtk_Print_Operation::draw-page signals on the Gtk.Print_Operation.Gtk_Print_Operation.
## Using GtkPrintContext in a Gtk.Print_Operation.Gtk_Print_Operation::draw-page callback
static void
draw_page (GtkPrintOperation *operation,
GtkPrintContext *context,
int page_nr)
{
cairo_t *cr;
PangoLayout *layout;
PangoFontDescription *desc;
cr = gtk_print_context_get_cairo_context (context);
// Draw a red rectangle, as wide as the paper (inside the margins)
cairo_set_source_rgb (cr, 1.0, 0, 0);
cairo_rectangle (cr, 0, 0, gtk_print_context_get_width (context), 50);
cairo_fill (cr);
// Draw some lines
cairo_move_to (cr, 20, 10);
cairo_line_to (cr, 40, 20);
cairo_arc (cr, 60, 60, 20, 0, M_PI);
cairo_line_to (cr, 80, 20);
cairo_set_source_rgb (cr, 0, 0, 0);
cairo_set_line_width (cr, 5);
cairo_set_line_cap (cr, CAIRO_LINE_CAP_ROUND);
cairo_set_line_join (cr, CAIRO_LINE_JOIN_ROUND);
cairo_stroke (cr);
// Draw some text
layout = gtk_print_context_create_pango_layout (context);
pango_layout_set_text (layout, "Hello World! Printing is easy", -1);
desc = pango_font_description_from_string ("sans 28");
pango_layout_set_font_description (layout, desc);
pango_font_description_free (desc);
cairo_move_to (cr, 30, 20);
pango_cairo_layout_path (cr, layout);
// Font Outline
cairo_set_source_rgb (cr, 0.93, 1.0, 0.47);
cairo_set_line_width (cr, 0.5);
cairo_stroke_preserve (cr);
// Font Fill
cairo_set_source_rgb (cr, 0, 0.0, 1.0);
cairo_fill (cr);
g_object_unref (layout);
}
Printing support was added in GTK+ 2.10.
function Create_Pango_Context
(Context : not null access Gtk_Print_Context_Record)
return Pango.Context.Pango_Context
Creates a new Pango.Context.Pango_Context that can be used with the Gtk.Print_Context.Gtk_Print_Context. Since: gtk+ 2.10
a new Pango context for Context
function Create_Pango_Layout
(Context : not null access Gtk_Print_Context_Record)
return Pango.Layout.Pango_Layout
Creates a new Pango.Layout.Pango_Layout that is suitable for use with the Gtk.Print_Context.Gtk_Print_Context. Since: gtk+ 2.10
a new Pango layout for Context
function Get_Cairo_Context
(Context : not null access Gtk_Print_Context_Record)
return Cairo.Cairo_Context
Obtains the cairo context that is associated with the Gtk.Print_Context.Gtk_Print_Context. Since: gtk+ 2.10
the cairo context of Context
function Get_Dpi_X
(Context : not null access Gtk_Print_Context_Record) return Gdouble
Obtains the horizontal resolution of the Gtk.Print_Context.Gtk_Print_Context, in dots per inch. Since: gtk+ 2.10
the horizontal resolution of Context
function Get_Dpi_Y
(Context : not null access Gtk_Print_Context_Record) return Gdouble
Obtains the vertical resolution of the Gtk.Print_Context.Gtk_Print_Context, in dots per inch. Since: gtk+ 2.10
the vertical resolution of Context
function Get_Hard_Margins
(Context : not null access Gtk_Print_Context_Record;
Top : access Gdouble;
Bottom : access Gdouble;
Left : access Gdouble;
Right : access Gdouble) return Boolean
Obtains the hardware printer margins of the Gtk.Print_Context.Gtk_Print_Context, in units. Since: gtk+ 2.20
top hardware printer margin
bottom hardware printer margin
left hardware printer margin
right hardware printer margin
True if the hard margins were retrieved
function Get_Height
(Context : not null access Gtk_Print_Context_Record) return Gdouble
Obtains the height of the Gtk.Print_Context.Gtk_Print_Context, in pixels. Since: gtk+ 2.10
the height of Context
function Get_Page_Setup
(Context : not null access Gtk_Print_Context_Record)
return Gtk.Page_Setup.Gtk_Page_Setup
Obtains the Gtk.Page_Setup.Gtk_Page_Setup that determines the page dimensions of the Gtk.Print_Context.Gtk_Print_Context. Since: gtk+ 2.10
the page setup of Context
function Get_Pango_Fontmap
(Context : not null access Gtk_Print_Context_Record)
return Pango.Font_Map.Pango_Font_Map
Returns a Pango.Font_Map.Pango_Font_Map that is suitable for use with the Gtk.Print_Context.Gtk_Print_Context. Since: gtk+ 2.10
the font map of Context
function Get_Type return Glib.GType
function Get_Width
(Context : not null access Gtk_Print_Context_Record) return Gdouble
Obtains the width of the Gtk.Print_Context.Gtk_Print_Context, in pixels. Since: gtk+ 2.10
the width of Context
type Gtk_Print_Context is access all Gtk_Print_Context_Record'Class;
type Gtk_Print_Context_Record is new GObject_Record with null record;
procedure Set_Cairo_Context
(Context : not null access Gtk_Print_Context_Record;
Cr : Cairo.Cairo_Context;
Dpi_X : Gdouble;
Dpi_Y : Gdouble)
Sets a new cairo context on a print context. This function is intended to be used when implementing an internal print preview, it is not needed for printing, since GTK+ itself creates a suitable cairo context in that case. Since: gtk+ 2.10
the cairo context
the horizontal resolution to use with Cr
the vertical resolution to use with Cr