class Gtk::PrintContext

Overview

A Gtk::PrintContext 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 Pango::Layout and Pango::Context objects that match the font metrics of the cairo surface.

Gtk::PrintContext objects get passed to the [signal@Gtk.PrintOperation::begin-print], [signal@Gtk.PrintOperation::end-print], [signal@Gtk.PrintOperation::request-page-setup] and [signal@Gtk.PrintOperation::draw-page] signals on the Gtk::PrintOperation object.

Using Gtk::PrintContext in a ::draw-page callback

WARNING ⚠️ The following code is in c ⚠️

static void
draw_page (Gtk::PrintOperation *operation,
           Gtk::PrintContext   *context,
           int                page_nr)
{
  cairo_::t *cr;
  Pango::Layout *layout;
  Pango::FontDescription *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);
}

Defined in:

lib/gi-crystal/src/auto/gtk-4.0/print_context.cr

Constructors

Class Method Summary

Instance Method Summary

Instance methods inherited from class GObject::Object

bind_property(source_property : String, target : GObject::Object, target_property : String, flags : GObject::BindingFlags) : GObject::Binding bind_property, bind_property_full(source_property : String, target : GObject::Object, target_property : String, flags : GObject::BindingFlags, transform_to : GObject::Closure, transform_from : GObject::Closure) : GObject::Binding bind_property_full, data(key : String) : Pointer(Void)? data, finalize finalize, freeze_notify : Nil freeze_notify, getv(names : Enumerable(String), values : Enumerable(_)) : Nil getv, notify(property_name : String) : Nil notify, notify_by_pspec(pspec : GObject::ParamSpec) : Nil notify_by_pspec, notify_signal notify_signal, property(property_name : String, value : _) : Nil property, qdata(quark : UInt32) : Pointer(Void)? qdata, ref_count : UInt32 ref_count, run_dispose : Nil run_dispose, set_data(key : String, data : Pointer(Void)?) : Nil set_data, set_property(property_name : String, value : _) : Nil set_property, steal_data(key : String) : Pointer(Void)? steal_data, steal_qdata(quark : UInt32) : Pointer(Void)? steal_qdata, thaw_notify : Nil thaw_notify, to_unsafe : Pointer(Void) to_unsafe, watch_closure(closure : GObject::Closure) : Nil watch_closure

Constructor methods inherited from class GObject::Object

cast(obj : GObject::Object) : self cast, cast?(obj : GObject::Object) : self? cast?, new(pointer : Pointer(Void), transfer : GICrystal::Transfer)
new
new
, newv(object_type : UInt64, parameters : Enumerable(GObject::Parameter)) : self newv

Class methods inherited from class GObject::Object

compat_control(what : UInt64, data : Pointer(Void)?) : UInt64 compat_control, g_type : UInt64 g_type, interface_find_property(g_iface : GObject::TypeInterface, property_name : String) : GObject::ParamSpec interface_find_property, interface_list_properties(g_iface : GObject::TypeInterface) : Enumerable(GObject::ParamSpec) interface_list_properties

Constructor Detail

def self.new #

Initialize a new PrintContext.


Class Method Detail

def self.g_type : UInt64 #

Returns the type id (GType) registered in GLib type system.


Instance Method Detail

def cairo_context : Cairo::Context #

Obtains the cairo context that is associated with the Gtk::PrintContext.


def create_pango_context : Pango::Context #

Creates a new Pango::Context that can be used with the Gtk::PrintContext.


def create_pango_layout : Pango::Layout #

Creates a new Pango::Layout that is suitable for use with the Gtk::PrintContext.


def dpi_x : Float64 #

Obtains the horizontal resolution of the Gtk::PrintContext, in dots per inch.


def dpi_y : Float64 #

Obtains the vertical resolution of the Gtk::PrintContext, in dots per inch.


def hard_margins(top : Float64, bottom : Float64, left : Float64, right : Float64) : Bool #

Obtains the hardware printer margins of the Gtk::PrintContext, in units.


def height : Float64 #

Obtains the height of the Gtk::PrintContext, in pixels.


def page_setup : Gtk::PageSetup #

Obtains the Gtk::PageSetup that determines the page dimensions of the Gtk::PrintContext.


def pango_fontmap : Pango::FontMap #

Returns a Pango::FontMap that is suitable for use with the Gtk::PrintContext.


def set_cairo_context(cr : Cairo::Context, dpi_x : Float64, dpi_y : Float64) : Nil #

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.


def width : Float64 #

Obtains the width of the Gtk::PrintContext, in pixels.