summaryrefslogtreecommitdiff
path: root/include/gutenprint/paper.h
blob: 0f5869ea196cca5b1183feed3f32c540db6e4337 (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
/*
 *   libgimpprint paper functions.
 *
 *   Copyright 1997-2000 Michael Sweet (mike@easysw.com) and
 *	Robert Krawitz (rlk@alum.mit.edu)
 *
 *   This program is free software; you can redistribute it and/or modify it
 *   under the terms of the GNU General Public License as published by the Free
 *   Software Foundation; either version 2 of the License, or (at your option)
 *   any later version.
 *
 *   This program 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 General Public License
 *   for more details.
 *
 *   You should have received a copy of the GNU General Public License
 *   along with this program.  If not, see <https://www.gnu.org/licenses/>.
 */

/**
 * @file gutenprint/paper.h
 * @brief Paper size functions.
 */

#ifndef GUTENPRINT_PAPER_H
#define GUTENPRINT_PAPER_H

#include <gutenprint/types.h>
#include <gutenprint/vars.h>

#ifdef __cplusplus
extern "C" {
#endif

/**
 * The papersize describes the dimensions of a paper.
 *
 * @defgroup papersize papersize
 * @{
 */



/**
 * Units of measurement.
 */
typedef enum
{
  /** English/Imperial units. */
  PAPERSIZE_ENGLISH_STANDARD,
  /** Metric units. */
  PAPERSIZE_METRIC_STANDARD,
  /** English/Imperial units (optional paper, not displayed by default). */
  PAPERSIZE_ENGLISH_EXTENDED,
  /** Metric units (optional paper, not displayed by default). */
  PAPERSIZE_METRIC_EXTENDED
} stp_papersize_unit_t;

typedef enum
{
  /** Standard paper size */
  PAPERSIZE_TYPE_STANDARD = 0,
  /** Envelope */
  PAPERSIZE_TYPE_ENVELOPE
} stp_papersize_type_t;

/** The papersize data type. */
typedef struct
{
  /** Short unique name (not translated). */
  const char *name;
  /** Long descriptive name (translated). */
  const char *text;
  /** Comment. */
  const char *comment;
  /** Paper width. */
  stp_dimension_t width;
  /** Paper height. */
  stp_dimension_t height;
  /** Top margin. */
  stp_dimension_t top;
  /** Left margin. */
  stp_dimension_t left;
  /** Bottom margin. */
  stp_dimension_t bottom;
  /** Right margin. */
  stp_dimension_t right;
  /** Units of measurement. */
  stp_papersize_unit_t paper_unit;
  /** Paper size type. */
  stp_papersize_type_t paper_size_type;
} stp_papersize_t;

/**
 * Get a papersize by name.
 * @param v the Gutenprint vars object
 * @param name the short unique name of the paper.
 * @returns a static pointer to the papersize, or NULL on failure.
 */
extern const stp_papersize_t *stp_describe_papersize(const stp_vars_t *v,
						     const char *name);

/**
 * Get the default paper dimensions for the current configuration.
 * The default is derived from the PageSize parameter if set, otherwise
 * the default page size for the printer is used.  If no value can be
 * determined, 1x1 will be returned.
 * @param v the Gutenprint vars object
 * @param width pointer to storage that the width will be returned in.
 * @param height pointer to storage that the height will be returned in.
 */
extern void stp_default_media_size(const stp_vars_t *v,
				   stp_dimension_t *width, stp_dimension_t *height);

/** @} */

#ifdef __cplusplus
  }
#endif

#endif /* GUTENPRINT_PAPER_H */