Gtk.Print_Context

Entities

Tagged Types

Access Types

Subprograms

Description

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.

Create_Pango_Context

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

Parameters
Context
Return Value

a new Pango context for Context

Create_Pango_Layout

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

Parameters
Context
Return Value

a new Pango layout for Context

Get_Cairo_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

Parameters
Context
Return Value

the cairo context of Context

Get_Dpi_X

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

Parameters
Context
Return Value

the horizontal resolution of Context

Get_Dpi_Y

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

Parameters
Context
Return Value

the vertical resolution of Context

Get_Hard_Margins

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

Parameters
Context
Top

top hardware printer margin

Bottom

bottom hardware printer margin

Left

left hardware printer margin

Right

right hardware printer margin

Return Value

True if the hard margins were retrieved

Get_Height

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

Parameters
Context
Return Value

the height of Context

Get_Page_Setup

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

Parameters
Context
Return Value

the page setup of Context

Get_Pango_Fontmap

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

Parameters
Context
Return Value

the font map of Context

Get_Type

function Get_Type return Glib.GType
Return Value

Get_Width

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

Parameters
Context
Return Value

the width of Context

Gtk_Print_Context

type Gtk_Print_Context is access all Gtk_Print_Context_Record'Class;

Gtk_Print_Context_Record

type Gtk_Print_Context_Record is new GObject_Record with null record;

Set_Cairo_Context

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

Parameters
Context
Cr

the cairo context

Dpi_X

the horizontal resolution to use with Cr

Dpi_Y

the vertical resolution to use with Cr