:right-sidebar: True PrintContext =================================================================== .. currentmodule:: gi.repository.Gtk .. class:: PrintContext(**properties: ~typing.Any) :no-contents-entry: Superclasses: :class:`~gi.repository.GObject.Object` A ``GtkPrintContext`` encapsulates context information that is required when drawing pages for printing. This includes the cairo context and important parameters like page size and resolution. It also lets you easily create :obj:`~gi.repository.Pango.Layout` and :obj:`~gi.repository.Pango.Context` objects that match the font metrics of the cairo surface. ``GtkPrintContext`` objects get passed to the :obj:`~gi.repository.Gtk.PrintOperation.signals.begin_print`, :obj:`~gi.repository.Gtk.PrintOperation.signals.end_print`, :obj:`~gi.repository.Gtk.PrintOperation.signals.request_page_setup` and :obj:`~gi.repository.Gtk.PrintOperation.signals.draw_page` signals on the :obj:`~gi.repository.Gtk.PrintOperation` object. Using GtkPrintContext in a ::draw-page callback ----------------------------------------------- .. code-block:: :dedent: 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); } Methods ------- .. rst-class:: interim-class .. class:: PrintContext :no-index: .. method:: create_pango_context() -> ~gi.repository.Pango.Context Creates a new ``PangoContext`` that can be used with the ``GtkPrintContext``. .. method:: create_pango_layout() -> ~gi.repository.Pango.Layout Creates a new ``PangoLayout`` that is suitable for use with the ``GtkPrintContext``. .. method:: get_cairo_context() -> ~gi.repository.cairo.Context Obtains the cairo context that is associated with the ``GtkPrintContext``. .. method:: get_dpi_x() -> float Obtains the horizontal resolution of the ``GtkPrintContext``, in dots per inch. .. method:: get_dpi_y() -> float Obtains the vertical resolution of the ``GtkPrintContext``, in dots per inch. .. method:: get_hard_margins() -> tuple[bool, float, float, float, float] Obtains the hardware printer margins of the ``GtkPrintContext``, in units. .. method:: get_height() -> float Obtains the height of the ``GtkPrintContext``, in pixels. .. method:: get_page_setup() -> ~gi.repository.Gtk.PageSetup Obtains the ``GtkPageSetup`` that determines the page dimensions of the ``GtkPrintContext``. .. method:: get_pango_fontmap() -> ~gi.repository.Pango.FontMap Returns a ``PangoFontMap`` that is suitable for use with the ``GtkPrintContext``. .. method:: get_width() -> float Obtains the width of the ``GtkPrintContext``, in pixels. .. method:: set_cairo_context(cr: ~cairo.Context, dpi_x: float, dpi_y: float) -> None 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. :param cr: the cairo context :param dpi_x: the horizontal resolution to use with ``cr`` :param dpi_y: the vertical resolution to use with ``cr``