static VALUE pj_get_surface(VALUE self) { cairo_surface_t *surface; GError *error = NULL; surface = gtk_print_job_get_surface(_SELF(self), &error); if (error) RAISE_GERROR(error); return CRSURFACE2RVAL(surface); }
static void finish_print (PortalData *portal, GtkPrinter *printer, GtkPageSetup *page_setup, GtkPrintSettings *settings) { GtkPrintOperation *op = portal->op; GtkPrintOperationPrivate *priv = op->priv; GtkPrintJob *job; GtkPrintOperationPortal *op_portal; cairo_t *cr; if (portal->do_print) { gtk_print_operation_set_print_settings (op, settings); priv->print_context = _gtk_print_context_new (op); _gtk_print_context_set_hard_margins (priv->print_context, 0, 0, 0, 0); gtk_print_operation_set_default_page_setup (op, page_setup); _gtk_print_context_set_page_setup (priv->print_context, page_setup); op_portal = g_new0 (GtkPrintOperationPortal, 1); priv->platform_data = op_portal; priv->free_platform_data = (GDestroyNotify) op_portal_free; priv->start_page = portal_start_page; priv->end_page = portal_end_page; priv->end_run = portal_end_run; job = gtk_print_job_new (priv->job_name, printer, settings, page_setup); op_portal->job = job; op_portal->proxy = g_object_ref (portal->proxy); op_portal->token = portal->token; op_portal->surface = gtk_print_job_get_surface (job, &priv->error); if (op_portal->surface == NULL) { portal->result = GTK_PRINT_OPERATION_RESULT_ERROR; portal->do_print = FALSE; goto out; } cr = cairo_create (op_portal->surface); gtk_print_context_set_cairo_context (priv->print_context, cr, 72, 72); cairo_destroy (cr); priv->print_pages = gtk_print_job_get_pages (job); priv->page_ranges = gtk_print_job_get_page_ranges (job, &priv->num_page_ranges); priv->manual_num_copies = gtk_print_job_get_num_copies (job); priv->manual_collation = gtk_print_job_get_collate (job); priv->manual_reverse = gtk_print_job_get_reverse (job); priv->manual_page_set = gtk_print_job_get_page_set (job); priv->manual_scale = gtk_print_job_get_scale (job); priv->manual_orientation = gtk_print_job_get_rotate (job); priv->manual_number_up = gtk_print_job_get_n_up (job); priv->manual_number_up_layout = gtk_print_job_get_n_up_layout (job); } out: if (portal->print_cb) portal->print_cb (op, portal->parent, portal->do_print, portal->result); if (portal->destroy) portal->destroy (portal); }