1 /* GTK - The GIMP Toolkit
2 * gtkpagesetup.c: Page Setup
3 * Copyright (C) 2006, Red Hat, Inc.
5 * This library is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU Lesser General Public
7 * License as published by the Free Software Foundation; either
8 * version 2 of the License, or (at your option) any later version.
10 * This library is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * Lesser General Public License for more details.
15 * You should have received a copy of the GNU Lesser General Public
16 * License along with this library; if not, write to the
17 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
18 * Boston, MA 02111-1307, USA.
23 #include "gtkpagesetup.h"
26 #define MM_PER_INCH 25.4
27 #define POINTS_PER_INCH 72
29 typedef struct _GtkPageSetupClass GtkPageSetupClass;
31 #define GTK_IS_PAGE_SETUP_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GTK_TYPE_PAGE_SETUP))
32 #define GTK_PAGE_SETUP_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GTK_TYPE_PAGE_SETUP, GtkPageSetupClass))
33 #define GTK_PAGE_SETUP_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_PAGE_SETUP, GtkPageSetupClass))
37 GObject parent_instance;
39 GtkPageOrientation orientation;
40 GtkPaperSize *paper_size;
41 /* These are stored in mm */
42 double top_margin, bottom_margin, left_margin, right_margin;
45 struct _GtkPageSetupClass
47 GObjectClass parent_class;
50 G_DEFINE_TYPE (GtkPageSetup, gtk_page_setup, G_TYPE_OBJECT)
53 to_mm (double len, GtkUnit unit)
60 return len * MM_PER_INCH;
63 g_warning ("Unsupported unit");
66 return len * (MM_PER_INCH / POINTS_PER_INCH);
72 from_mm (double len, GtkUnit unit)
79 return len / MM_PER_INCH;
82 g_warning ("Unsupported unit");
85 return len / (MM_PER_INCH / POINTS_PER_INCH);
91 gtk_page_setup_finalize (GObject *object)
93 GtkPageSetup *setup = GTK_PAGE_SETUP (object);
95 gtk_paper_size_free (setup->paper_size);
97 G_OBJECT_CLASS (gtk_page_setup_parent_class)->finalize (object);
101 gtk_page_setup_init (GtkPageSetup *setup)
103 setup->paper_size = gtk_paper_size_new (NULL);
104 setup->orientation = GTK_PAGE_ORIENTATION_PORTRAIT;
105 setup->top_margin = gtk_paper_size_get_default_top_margin (setup->paper_size, GTK_UNIT_MM);
106 setup->bottom_margin = gtk_paper_size_get_default_bottom_margin (setup->paper_size, GTK_UNIT_MM);
107 setup->left_margin = gtk_paper_size_get_default_left_margin (setup->paper_size, GTK_UNIT_MM);
108 setup->right_margin = gtk_paper_size_get_default_right_margin (setup->paper_size, GTK_UNIT_MM);
112 gtk_page_setup_class_init (GtkPageSetupClass *class)
114 GObjectClass *gobject_class = (GObjectClass *)class;
116 gobject_class->finalize = gtk_page_setup_finalize;
120 gtk_page_setup_new (void)
122 return g_object_new (GTK_TYPE_PAGE_SETUP, NULL);
126 gtk_page_setup_copy (GtkPageSetup *other)
130 copy = gtk_page_setup_new ();
131 copy->orientation = other->orientation;
132 copy->paper_size = gtk_paper_size_copy (other->paper_size);
133 copy->top_margin = other->top_margin;
134 copy->bottom_margin = other->bottom_margin;
135 copy->left_margin = other->left_margin;
136 copy->right_margin = other->right_margin;
142 gtk_page_setup_get_orientation (GtkPageSetup *setup)
144 return setup->orientation;
148 gtk_page_setup_set_orientation (GtkPageSetup *setup,
149 GtkPageOrientation orientation)
151 setup->orientation = orientation;
155 gtk_page_setup_get_paper_size (GtkPageSetup *setup)
157 return setup->paper_size;
161 gtk_page_setup_set_paper_size (GtkPageSetup *setup,
164 setup->paper_size = gtk_paper_size_copy (size);
168 gtk_page_setup_set_paper_size_and_default_margins (GtkPageSetup *setup,
171 setup->paper_size = gtk_paper_size_copy (size);
172 setup->top_margin = gtk_paper_size_get_default_top_margin (setup->paper_size, GTK_UNIT_MM);
173 setup->bottom_margin = gtk_paper_size_get_default_bottom_margin (setup->paper_size, GTK_UNIT_MM);
174 setup->left_margin = gtk_paper_size_get_default_left_margin (setup->paper_size, GTK_UNIT_MM);
175 setup->right_margin = gtk_paper_size_get_default_right_margin (setup->paper_size, GTK_UNIT_MM);
179 gtk_page_setup_get_top_margin (GtkPageSetup *setup,
182 return from_mm (setup->top_margin, unit);
186 gtk_page_setup_set_top_margin (GtkPageSetup *setup,
190 setup->top_margin = to_mm (margin, unit);
194 gtk_page_setup_get_bottom_margin (GtkPageSetup *setup,
197 return from_mm (setup->bottom_margin, unit);
201 gtk_page_setup_set_bottom_margin (GtkPageSetup *setup,
205 setup->bottom_margin = to_mm (margin, unit);
209 gtk_page_setup_get_left_margin (GtkPageSetup *setup,
212 return from_mm (setup->left_margin, unit);
216 gtk_page_setup_set_left_margin (GtkPageSetup *setup,
220 setup->left_margin = to_mm (margin, unit);
224 gtk_page_setup_get_right_margin (GtkPageSetup *setup,
227 return from_mm (setup->right_margin, unit);
231 gtk_page_setup_set_right_margin (GtkPageSetup *setup,
235 setup->right_margin = to_mm (margin, unit);
238 /* These take orientation, but not margins into consideration */
240 gtk_page_setup_get_paper_width (GtkPageSetup *setup,
243 if (setup->orientation == GTK_PAGE_ORIENTATION_PORTRAIT ||
244 setup->orientation == GTK_PAGE_ORIENTATION_REVERSE_PORTRAIT)
245 return gtk_paper_size_get_width (setup->paper_size, unit);
247 return gtk_paper_size_get_height (setup->paper_size, unit);
251 gtk_page_setup_get_paper_height (GtkPageSetup *setup,
254 if (setup->orientation == GTK_PAGE_ORIENTATION_PORTRAIT ||
255 setup->orientation == GTK_PAGE_ORIENTATION_REVERSE_PORTRAIT)
256 return gtk_paper_size_get_height (setup->paper_size, unit);
258 return gtk_paper_size_get_width (setup->paper_size, unit);
261 /* These take orientation, and margins into consideration */
263 gtk_page_setup_get_page_width (GtkPageSetup *setup,
268 width = gtk_page_setup_get_paper_width (setup, GTK_UNIT_MM);
269 width -= setup->left_margin + setup->right_margin;
271 return from_mm (width, unit);
275 gtk_page_setup_get_page_height (GtkPageSetup *setup,
280 height = gtk_page_setup_get_paper_height (setup, GTK_UNIT_MM);
281 height -= setup->top_margin + setup->bottom_margin;
283 return from_mm (height, unit);
287 #define __GTK_PAGE_SETUP_C__
288 #include "gtkaliasdef.c"