summaryrefslogtreecommitdiff
path: root/gtk/gtkprintoperation-private.h
blob: 6a7b509978e6e0b55ad8cfa453c33de27a15ef44 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
/* GTK - The GIMP Toolkit
 * gtkprintoperation.h: Print Operation
 * Copyright (C) 2006, Red Hat, Inc.
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library. If not, see <http://www.gnu.org/licenses/>.
 */

#ifndef __GTK_PRINT_OPERATION_PRIVATE_H__
#define __GTK_PRINT_OPERATION_PRIVATE_H__

#include "gtkprintoperation.h"

G_BEGIN_DECLS

/* Page drawing states */
typedef enum
{
  GTK_PAGE_DRAWING_STATE_READY,
  GTK_PAGE_DRAWING_STATE_DRAWING,
  GTK_PAGE_DRAWING_STATE_DEFERRED_DRAWING
} GtkPageDrawingState;

struct _GtkPrintOperationPrivate
{
  GtkPrintOperationAction action;
  GtkPrintStatus status;
  GError *error;
  gchar *status_string;
  GtkPageSetup *default_page_setup;
  GtkPrintSettings *print_settings;
  gchar *job_name;
  gint nr_of_pages;
  gint nr_of_pages_to_print;
  gint page_position;
  gint current_page;
  GtkUnit unit;
  gchar *export_filename;
  guint use_full_page      : 1;
  guint track_print_status : 1;
  guint show_progress      : 1;
  guint cancelled          : 1;
  guint allow_async        : 1;
  guint is_sync            : 1;
  guint support_selection  : 1;
  guint has_selection      : 1;
  guint embed_page_setup   : 1;

  GtkPageDrawingState      page_drawing_state;

  guint print_pages_idle_id;
  guint show_progress_timeout_id;

  GtkPrintContext *print_context;
  
  GtkPrintPages print_pages;
  GtkPageRange *page_ranges;
  gint num_page_ranges;
  
  gint manual_num_copies;
  guint manual_collation   : 1;
  guint manual_reverse     : 1;
  guint manual_orientation : 1;
  double manual_scale;
  GtkPageSet manual_page_set;
  guint manual_number_up;
  GtkNumberUpLayout manual_number_up_layout;

  GtkWidget *custom_widget;
  gchar *custom_tab_label;
  
  gpointer platform_data;
  GDestroyNotify free_platform_data;

  GMainLoop *rloop; /* recursive mainloop */

  void (*start_page) (GtkPrintOperation *operation,
		      GtkPrintContext   *print_context,
		      GtkPageSetup      *page_setup);
  void (*end_page)   (GtkPrintOperation *operation,
		      GtkPrintContext   *print_context);
  void (*end_run)    (GtkPrintOperation *operation,
		      gboolean           wait,
		      gboolean           cancelled);
};


typedef void (* GtkPrintOperationPrintFunc) (GtkPrintOperation      *op,
					     GtkWindow              *parent,
					     gboolean                do_print,
					     GtkPrintOperationResult result);

GtkPrintOperationResult _gtk_print_operation_platform_backend_run_dialog             (GtkPrintOperation           *operation,
										      gboolean                     show_dialog,
										      GtkWindow                   *parent,
										      gboolean                    *do_print);
void                    _gtk_print_operation_platform_backend_run_dialog_async       (GtkPrintOperation           *op,
										      gboolean                     show_dialog,
										      GtkWindow                   *parent,
										      GtkPrintOperationPrintFunc   print_cb);
void                    _gtk_print_operation_platform_backend_launch_preview         (GtkPrintOperation           *op,
										      cairo_surface_t             *surface,
										      GtkWindow                   *parent,
										      const char                  *filename);
cairo_surface_t *       _gtk_print_operation_platform_backend_create_preview_surface (GtkPrintOperation           *op,
										      GtkPageSetup                *page_setup,
										      gdouble                     *dpi_x,
										      gdouble                     *dpi_y,
										      gchar                       **target);
void                    _gtk_print_operation_platform_backend_resize_preview_surface (GtkPrintOperation           *op,
										      GtkPageSetup                *page_setup,
										      cairo_surface_t             *surface);
void                    _gtk_print_operation_platform_backend_preview_start_page     (GtkPrintOperation *op,
										      cairo_surface_t *surface,
										      cairo_t *cr);
void                    _gtk_print_operation_platform_backend_preview_end_page       (GtkPrintOperation *op,
										      cairo_surface_t *surface,
										      cairo_t *cr);

void _gtk_print_operation_set_status (GtkPrintOperation *op,
				      GtkPrintStatus     status,
				      const gchar       *string);

/* GtkPrintContext private functions: */

GtkPrintContext *_gtk_print_context_new                             (GtkPrintOperation *op);
void             _gtk_print_context_set_page_setup                  (GtkPrintContext   *context,
								     GtkPageSetup      *page_setup);
void             _gtk_print_context_translate_into_margin           (GtkPrintContext   *context);
void             _gtk_print_context_rotate_according_to_orientation (GtkPrintContext   *context);
void             _gtk_print_context_reverse_according_to_orientation (GtkPrintContext *context);
void             _gtk_print_context_set_hard_margins                (GtkPrintContext   *context,
								     gdouble            top,
								     gdouble            bottom,
								     gdouble            left,
								     gdouble            right);

G_END_DECLS

#endif /* __GTK_PRINT_OPERATION_PRIVATE_H__ */