forked from AuroraMiddleware/gtk
Try harder to find a good display name for paper sizes
This was requested in https://bugzilla.gnome.org/show_bug.cgi?id=639186. Also add some tests for GtkPaperSize.
This commit is contained in:
parent
8709c86944
commit
290c34b232
@ -63,7 +63,7 @@ struct _GtkPaperSize
|
||||
gchar *name;
|
||||
gchar *display_name;
|
||||
gchar *ppd_name;
|
||||
|
||||
|
||||
gdouble width, height; /* Stored in mm */
|
||||
gboolean is_custom;
|
||||
};
|
||||
@ -80,7 +80,7 @@ lookup_paper_info (const gchar *name)
|
||||
int mid;
|
||||
int cmp;
|
||||
|
||||
do
|
||||
do
|
||||
{
|
||||
mid = (lower + upper) / 2;
|
||||
cmp = strcmp (name, paper_names + standard_names_offsets[mid].name);
|
||||
@ -89,7 +89,7 @@ lookup_paper_info (const gchar *name)
|
||||
else if (cmp > 0)
|
||||
lower = mid + 1;
|
||||
else
|
||||
return &standard_names_offsets[mid];
|
||||
return &standard_names_offsets[mid];
|
||||
}
|
||||
while (lower <= upper);
|
||||
|
||||
@ -98,15 +98,15 @@ lookup_paper_info (const gchar *name)
|
||||
|
||||
static gboolean
|
||||
parse_media_size (const gchar *size,
|
||||
gdouble *width_mm,
|
||||
gdouble *height_mm)
|
||||
gdouble *width_mm,
|
||||
gdouble *height_mm)
|
||||
{
|
||||
const char *p;
|
||||
char *e;
|
||||
double short_dim, long_dim;
|
||||
|
||||
p = size;
|
||||
|
||||
|
||||
short_dim = g_ascii_strtod (p, &e);
|
||||
|
||||
if (p == e || *e != 'x')
|
||||
@ -133,19 +133,19 @@ parse_media_size (const gchar *size,
|
||||
*width_mm = short_dim;
|
||||
if (height_mm)
|
||||
*height_mm = long_dim;
|
||||
|
||||
return TRUE;
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
parse_full_media_size_name (const gchar *full_name,
|
||||
gchar **name,
|
||||
gdouble *width_mm,
|
||||
gdouble *height_mm)
|
||||
gchar **name,
|
||||
gdouble *width_mm,
|
||||
gdouble *height_mm)
|
||||
{
|
||||
const char *p;
|
||||
const char *end_of_name;
|
||||
|
||||
|
||||
/* From the spec:
|
||||
media-size-self-describing-name =
|
||||
( class-in "_" size-name "_" short-dim "x" long-dim "in" ) |
|
||||
@ -170,7 +170,7 @@ parse_full_media_size_name (const gchar *full_name,
|
||||
return FALSE;
|
||||
|
||||
p++; /* Skip _ */
|
||||
|
||||
|
||||
p = strchr (p, '_');
|
||||
if (p == NULL)
|
||||
return FALSE;
|
||||
@ -184,20 +184,20 @@ parse_full_media_size_name (const gchar *full_name,
|
||||
|
||||
if (name)
|
||||
*name = g_strndup (full_name, end_of_name - full_name);
|
||||
|
||||
return TRUE;
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static GtkPaperSize *
|
||||
gtk_paper_size_new_from_info (const PaperInfo *info)
|
||||
{
|
||||
GtkPaperSize *size;
|
||||
|
||||
|
||||
size = g_slice_new0 (GtkPaperSize);
|
||||
size->info = info;
|
||||
size->width = info->width;
|
||||
size->height = info->height;
|
||||
|
||||
|
||||
return size;
|
||||
}
|
||||
|
||||
@ -211,7 +211,7 @@ gtk_paper_size_new_from_info (const PaperInfo *info)
|
||||
*
|
||||
* If @name is %NULL, the default paper size is returned,
|
||||
* see gtk_paper_size_get_default().
|
||||
*
|
||||
*
|
||||
* Return value: a new #GtkPaperSize, use gtk_paper_size_free()
|
||||
* to free it
|
||||
*
|
||||
@ -227,35 +227,44 @@ gtk_paper_size_new (const gchar *name)
|
||||
|
||||
if (name == NULL)
|
||||
name = gtk_paper_size_get_default ();
|
||||
|
||||
|
||||
if (parse_full_media_size_name (name, &short_name, &width, &height))
|
||||
{
|
||||
size = g_slice_new0 (GtkPaperSize);
|
||||
info = lookup_paper_info (short_name);
|
||||
if (info != NULL && info->width == width && info->height == height)
|
||||
{
|
||||
size = gtk_paper_size_new_from_info (info);
|
||||
g_free (short_name);
|
||||
}
|
||||
else
|
||||
{
|
||||
size = g_slice_new0 (GtkPaperSize);
|
||||
|
||||
size->width = width;
|
||||
size->height = height;
|
||||
size->name = short_name;
|
||||
size->display_name = g_strdup (short_name);
|
||||
if (strncmp (short_name, "custom", 6) == 0)
|
||||
size->is_custom = TRUE;
|
||||
size->width = width;
|
||||
size->height = height;
|
||||
size->name = short_name;
|
||||
size->display_name = g_strdup (short_name);
|
||||
if (strncmp (short_name, "custom", 6) == 0)
|
||||
size->is_custom = TRUE;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
info = lookup_paper_info (name);
|
||||
if (info != NULL)
|
||||
size = gtk_paper_size_new_from_info (info);
|
||||
size = gtk_paper_size_new_from_info (info);
|
||||
else
|
||||
{
|
||||
g_warning ("Unknown paper size %s\n", name);
|
||||
size = g_slice_new0 (GtkPaperSize);
|
||||
size->name = g_strdup (name);
|
||||
size->display_name = g_strdup (name);
|
||||
/* Default to A4 size */
|
||||
size->width = 210;
|
||||
size->height = 297;
|
||||
}
|
||||
{
|
||||
g_warning ("Unknown paper size %s\n", name);
|
||||
size = g_slice_new0 (GtkPaperSize);
|
||||
size->name = g_strdup (name);
|
||||
size->display_name = g_strdup (name);
|
||||
/* Default to A4 size */
|
||||
size->width = 210;
|
||||
size->height = 297;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return size;
|
||||
}
|
||||
|
||||
@ -265,12 +274,12 @@ gtk_paper_size_new (const gchar *name)
|
||||
* @ppd_display_name: the corresponding human-readable name
|
||||
* @width: the paper width, in points
|
||||
* @height: the paper height in points
|
||||
*
|
||||
* Creates a new #GtkPaperSize object by using
|
||||
* PPD information.
|
||||
*
|
||||
* If @ppd_name is not a recognized PPD paper name,
|
||||
* @ppd_display_name, @width and @height are used to
|
||||
*
|
||||
* Creates a new #GtkPaperSize object by using
|
||||
* PPD information.
|
||||
*
|
||||
* If @ppd_name is not a recognized PPD paper name,
|
||||
* @ppd_display_name, @width and @height are used to
|
||||
* construct a custom #GtkPaperSize object.
|
||||
*
|
||||
* Return value: a new #GtkPaperSize, use gtk_paper_size_free()
|
||||
@ -280,9 +289,9 @@ gtk_paper_size_new (const gchar *name)
|
||||
*/
|
||||
GtkPaperSize *
|
||||
gtk_paper_size_new_from_ppd (const gchar *ppd_name,
|
||||
const gchar *ppd_display_name,
|
||||
gdouble width,
|
||||
gdouble height)
|
||||
const gchar *ppd_display_name,
|
||||
gdouble width,
|
||||
gdouble height)
|
||||
{
|
||||
char *name;
|
||||
const char *lookup_ppd_name;
|
||||
@ -291,32 +300,32 @@ gtk_paper_size_new_from_ppd (const gchar *ppd_name,
|
||||
int i;
|
||||
|
||||
lookup_ppd_name = ppd_name;
|
||||
|
||||
|
||||
freeme = NULL;
|
||||
/* Strip out Traverse suffix in matching. */
|
||||
if (g_str_has_suffix (ppd_name, ".Transverse"))
|
||||
{
|
||||
lookup_ppd_name = freeme =
|
||||
g_strndup (ppd_name, strlen (ppd_name) - strlen (".Transverse"));
|
||||
g_strndup (ppd_name, strlen (ppd_name) - strlen (".Transverse"));
|
||||
}
|
||||
|
||||
|
||||
for (i = 0; i < G_N_ELEMENTS(standard_names_offsets); i++)
|
||||
{
|
||||
if (standard_names_offsets[i].ppd_name != -1 &&
|
||||
strcmp (paper_names + standard_names_offsets[i].ppd_name, lookup_ppd_name) == 0)
|
||||
{
|
||||
size = gtk_paper_size_new_from_info (&standard_names_offsets[i]);
|
||||
goto out;
|
||||
}
|
||||
strcmp (paper_names + standard_names_offsets[i].ppd_name, lookup_ppd_name) == 0)
|
||||
{
|
||||
size = gtk_paper_size_new_from_info (&standard_names_offsets[i]);
|
||||
goto out;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
for (i = 0; i < G_N_ELEMENTS(extra_ppd_names_offsets); i++)
|
||||
{
|
||||
if (strcmp (paper_names + extra_ppd_names_offsets[i].ppd_name, lookup_ppd_name) == 0)
|
||||
{
|
||||
size = gtk_paper_size_new (paper_names + extra_ppd_names_offsets[i].standard_name);
|
||||
goto out;
|
||||
}
|
||||
{
|
||||
size = gtk_paper_size_new (paper_names + extra_ppd_names_offsets[i].standard_name);
|
||||
goto out;
|
||||
}
|
||||
}
|
||||
|
||||
name = g_strconcat ("ppd_", ppd_name, NULL);
|
||||
@ -329,57 +338,57 @@ gtk_paper_size_new_from_ppd (const gchar *ppd_name,
|
||||
size->info->ppd_name == -1 ||
|
||||
strcmp (paper_names + size->info->ppd_name, ppd_name) != 0)
|
||||
size->ppd_name = g_strdup (ppd_name);
|
||||
|
||||
|
||||
g_free (freeme);
|
||||
|
||||
|
||||
return size;
|
||||
}
|
||||
|
||||
/**
|
||||
* gtk_paper_size_new_custom:
|
||||
* @name: the paper name
|
||||
* @name: the paper name
|
||||
* @display_name: the human-readable name
|
||||
* @width: the paper width, in units of @unit
|
||||
* @height: the paper height, in units of @unit
|
||||
* @unit: the unit for @width and @height
|
||||
*
|
||||
*
|
||||
* Creates a new #GtkPaperSize object with the
|
||||
* given parameters.
|
||||
*
|
||||
*
|
||||
* Return value: a new #GtkPaperSize object, use gtk_paper_size_free()
|
||||
* to free it
|
||||
*
|
||||
* Since: 2.10
|
||||
*/
|
||||
GtkPaperSize *
|
||||
gtk_paper_size_new_custom (const gchar *name,
|
||||
const gchar *display_name,
|
||||
gdouble width,
|
||||
gdouble height,
|
||||
GtkUnit unit)
|
||||
gtk_paper_size_new_custom (const gchar *name,
|
||||
const gchar *display_name,
|
||||
gdouble width,
|
||||
gdouble height,
|
||||
GtkUnit unit)
|
||||
{
|
||||
GtkPaperSize *size;
|
||||
g_return_val_if_fail (name != NULL, NULL);
|
||||
g_return_val_if_fail (unit != GTK_UNIT_PIXEL, NULL);
|
||||
|
||||
size = g_slice_new0 (GtkPaperSize);
|
||||
|
||||
|
||||
size->name = g_strdup (name);
|
||||
size->display_name = g_strdup (display_name);
|
||||
size->is_custom = TRUE;
|
||||
|
||||
|
||||
size->width = _gtk_print_convert_to_mm (width, unit);
|
||||
size->height = _gtk_print_convert_to_mm (height, unit);
|
||||
|
||||
|
||||
return size;
|
||||
}
|
||||
|
||||
/**
|
||||
* gtk_paper_size_copy:
|
||||
* @other: a #GtkPaperSize
|
||||
*
|
||||
*
|
||||
* Copies an existing #GtkPaperSize.
|
||||
*
|
||||
*
|
||||
* Return value: a copy of @other
|
||||
*
|
||||
* Since: 2.10
|
||||
@ -398,7 +407,7 @@ gtk_paper_size_copy (GtkPaperSize *other)
|
||||
size->display_name = g_strdup (other->display_name);
|
||||
if (other->ppd_name)
|
||||
size->ppd_name = g_strdup (other->ppd_name);
|
||||
|
||||
|
||||
size->width = other->width;
|
||||
size->height = other->height;
|
||||
size->is_custom = other->is_custom;
|
||||
@ -409,7 +418,7 @@ gtk_paper_size_copy (GtkPaperSize *other)
|
||||
/**
|
||||
* gtk_paper_size_free:
|
||||
* @size: a #GtkPaperSize
|
||||
*
|
||||
*
|
||||
* Free the given #GtkPaperSize object.
|
||||
*
|
||||
* Since: 2.10
|
||||
@ -428,23 +437,23 @@ gtk_paper_size_free (GtkPaperSize *size)
|
||||
* gtk_paper_size_is_equal:
|
||||
* @size1: a #GtkPaperSize object
|
||||
* @size2: another #GtkPaperSize object
|
||||
*
|
||||
*
|
||||
* Compares two #GtkPaperSize objects.
|
||||
*
|
||||
* Return value: %TRUE, if @size1 and @size2
|
||||
*
|
||||
* Return value: %TRUE, if @size1 and @size2
|
||||
* represent the same paper size
|
||||
*
|
||||
* Since: 2.10
|
||||
*/
|
||||
gboolean
|
||||
gtk_paper_size_is_equal (GtkPaperSize *size1,
|
||||
GtkPaperSize *size2)
|
||||
GtkPaperSize *size2)
|
||||
{
|
||||
if (size1->info != NULL && size2->info != NULL)
|
||||
return size1->info == size2->info;
|
||||
|
||||
|
||||
return strcmp (gtk_paper_size_get_name (size1),
|
||||
gtk_paper_size_get_name (size2)) == 0;
|
||||
gtk_paper_size_get_name (size2)) == 0;
|
||||
}
|
||||
|
||||
GList * _gtk_load_custom_papers (void);
|
||||
@ -466,7 +475,7 @@ gtk_paper_size_get_paper_sizes (gboolean include_custom)
|
||||
{
|
||||
GList *list = NULL;
|
||||
guint i;
|
||||
#ifdef G_OS_UNIX /* _gtk_load_custom_papers() only on Unix so far */
|
||||
#ifdef G_OS_UNIX /* _gtk_load_custom_papers() only on Unix so far */
|
||||
if (include_custom)
|
||||
{
|
||||
GList *page_setups, *l;
|
||||
@ -500,9 +509,9 @@ gtk_paper_size_get_paper_sizes (gboolean include_custom)
|
||||
/**
|
||||
* gtk_paper_size_get_name:
|
||||
* @size: a #GtkPaperSize object
|
||||
*
|
||||
*
|
||||
* Gets the name of the #GtkPaperSize.
|
||||
*
|
||||
*
|
||||
* Return value: the name of @size
|
||||
*
|
||||
* Since: 2.10
|
||||
@ -519,9 +528,9 @@ gtk_paper_size_get_name (GtkPaperSize *size)
|
||||
/**
|
||||
* gtk_paper_size_get_display_name:
|
||||
* @size: a #GtkPaperSize object
|
||||
*
|
||||
*
|
||||
* Gets the human-readable name of the #GtkPaperSize.
|
||||
*
|
||||
*
|
||||
* Return value: the human-readable name of @size
|
||||
*
|
||||
* Since: 2.10
|
||||
@ -543,10 +552,10 @@ gtk_paper_size_get_display_name (GtkPaperSize *size)
|
||||
/**
|
||||
* gtk_paper_size_get_ppd_name:
|
||||
* @size: a #GtkPaperSize object
|
||||
*
|
||||
*
|
||||
* Gets the PPD name of the #GtkPaperSize, which
|
||||
* may be %NULL.
|
||||
*
|
||||
*
|
||||
* Return value: the PPD name of @size
|
||||
*
|
||||
* Since: 2.10
|
||||
@ -565,17 +574,17 @@ gtk_paper_size_get_ppd_name (GtkPaperSize *size)
|
||||
* gtk_paper_size_get_width:
|
||||
* @size: a #GtkPaperSize object
|
||||
* @unit: the unit for the return value
|
||||
*
|
||||
* Gets the paper width of the #GtkPaperSize, in
|
||||
*
|
||||
* Gets the paper width of the #GtkPaperSize, in
|
||||
* units of @unit.
|
||||
*
|
||||
* Return value: the paper width
|
||||
*
|
||||
* Return value: the paper width
|
||||
*
|
||||
* Since: 2.10
|
||||
*/
|
||||
gdouble
|
||||
gtk_paper_size_get_width (GtkPaperSize *size,
|
||||
GtkUnit unit)
|
||||
gtk_paper_size_get_width (GtkPaperSize *size,
|
||||
GtkUnit unit)
|
||||
{
|
||||
return _gtk_print_convert_from_mm (size->width, unit);
|
||||
}
|
||||
@ -584,17 +593,17 @@ gtk_paper_size_get_width (GtkPaperSize *size,
|
||||
* gtk_paper_size_get_height:
|
||||
* @size: a #GtkPaperSize object
|
||||
* @unit: the unit for the return value
|
||||
*
|
||||
* Gets the paper height of the #GtkPaperSize, in
|
||||
*
|
||||
* Gets the paper height of the #GtkPaperSize, in
|
||||
* units of @unit.
|
||||
*
|
||||
* Return value: the paper height
|
||||
*
|
||||
* Return value: the paper height
|
||||
*
|
||||
* Since: 2.10
|
||||
*/
|
||||
gdouble
|
||||
gtk_paper_size_get_height (GtkPaperSize *size,
|
||||
GtkUnit unit)
|
||||
gtk_paper_size_get_height (GtkPaperSize *size,
|
||||
GtkUnit unit)
|
||||
{
|
||||
return _gtk_print_convert_from_mm (size->height, unit);
|
||||
}
|
||||
@ -602,9 +611,9 @@ gtk_paper_size_get_height (GtkPaperSize *size,
|
||||
/**
|
||||
* gtk_paper_size_is_custom:
|
||||
* @size: a #GtkPaperSize object
|
||||
*
|
||||
*
|
||||
* Returns %TRUE if @size is not a standard paper size.
|
||||
*
|
||||
*
|
||||
* Return value: whether @size is a custom paper size.
|
||||
**/
|
||||
gboolean
|
||||
@ -619,16 +628,16 @@ gtk_paper_size_is_custom (GtkPaperSize *size)
|
||||
* @width: the new width in units of @unit
|
||||
* @height: the new height in units of @unit
|
||||
* @unit: the unit for @width and @height
|
||||
*
|
||||
*
|
||||
* Changes the dimensions of a @size to @width x @height.
|
||||
*
|
||||
* Since: 2.10
|
||||
*/
|
||||
void
|
||||
gtk_paper_size_set_size (GtkPaperSize *size,
|
||||
gdouble width,
|
||||
gdouble height,
|
||||
GtkUnit unit)
|
||||
gtk_paper_size_set_size (GtkPaperSize *size,
|
||||
gdouble width,
|
||||
gdouble height,
|
||||
GtkUnit unit)
|
||||
{
|
||||
g_return_if_fail (size != NULL);
|
||||
g_return_if_fail (size->is_custom);
|
||||
@ -643,12 +652,12 @@ gtk_paper_size_set_size (GtkPaperSize *size,
|
||||
/**
|
||||
* gtk_paper_size_get_default:
|
||||
*
|
||||
* Returns the name of the default paper size, which
|
||||
* depends on the current locale.
|
||||
*
|
||||
* Returns the name of the default paper size, which
|
||||
* depends on the current locale.
|
||||
*
|
||||
* Return value: the name of the default paper size. The string
|
||||
* is owned by GTK+ and should not be modified.
|
||||
*
|
||||
*
|
||||
* Since: 2.10
|
||||
*/
|
||||
G_CONST_RETURN gchar *
|
||||
@ -661,10 +670,10 @@ gtk_paper_size_get_default (void)
|
||||
{
|
||||
int width = NL_PAPER_GET (_NL_PAPER_WIDTH);
|
||||
int height = NL_PAPER_GET (_NL_PAPER_HEIGHT);
|
||||
|
||||
|
||||
if (width == 210 && height == 297)
|
||||
return GTK_PAPER_NAME_A4;
|
||||
|
||||
|
||||
if (width == 216 && height == 279)
|
||||
return GTK_PAPER_NAME_LETTER;
|
||||
}
|
||||
@ -701,7 +710,7 @@ gtk_paper_size_get_default (void)
|
||||
* I've taken the actual values used from the OSX page setup dialog.
|
||||
* I'm not sure exactly where they got these values for, but might
|
||||
* correspond to this (from ghostscript docs):
|
||||
*
|
||||
*
|
||||
* All DeskJets have 0.5 inches (1.27cm) of unprintable bottom margin,
|
||||
* due to the mechanical arrangement used to grab the paper. Side margins
|
||||
* are approximately 0.25 inches (0.64cm) for U.S. letter paper, and 0.15
|
||||
@ -712,16 +721,16 @@ gtk_paper_size_get_default (void)
|
||||
* gtk_paper_size_get_default_top_margin:
|
||||
* @size: a #GtkPaperSize object
|
||||
* @unit: the unit for the return value
|
||||
*
|
||||
*
|
||||
* Gets the default top margin for the #GtkPaperSize.
|
||||
*
|
||||
*
|
||||
* Return value: the default top margin
|
||||
*
|
||||
* Since: 2.10
|
||||
*/
|
||||
gdouble
|
||||
gtk_paper_size_get_default_top_margin (GtkPaperSize *size,
|
||||
GtkUnit unit)
|
||||
gtk_paper_size_get_default_top_margin (GtkPaperSize *size,
|
||||
GtkUnit unit)
|
||||
{
|
||||
gdouble margin;
|
||||
|
||||
@ -733,16 +742,16 @@ gtk_paper_size_get_default_top_margin (GtkPaperSize *size,
|
||||
* gtk_paper_size_get_default_bottom_margin:
|
||||
* @size: a #GtkPaperSize object
|
||||
* @unit: the unit for the return value
|
||||
*
|
||||
*
|
||||
* Gets the default bottom margin for the #GtkPaperSize.
|
||||
*
|
||||
*
|
||||
* Return value: the default bottom margin
|
||||
*
|
||||
* Since: 2.10
|
||||
*/
|
||||
gdouble
|
||||
gtk_paper_size_get_default_bottom_margin (GtkPaperSize *size,
|
||||
GtkUnit unit)
|
||||
gtk_paper_size_get_default_bottom_margin (GtkPaperSize *size,
|
||||
GtkUnit unit)
|
||||
{
|
||||
gdouble margin;
|
||||
const gchar *name;
|
||||
@ -754,7 +763,7 @@ gtk_paper_size_get_default_bottom_margin (GtkPaperSize *size,
|
||||
strcmp (name, "na_legal") == 0 ||
|
||||
strcmp (name, "iso_a4") == 0)
|
||||
margin = _gtk_print_convert_to_mm (0.56, GTK_UNIT_INCH);
|
||||
|
||||
|
||||
return _gtk_print_convert_from_mm (margin, unit);
|
||||
}
|
||||
|
||||
@ -762,16 +771,16 @@ gtk_paper_size_get_default_bottom_margin (GtkPaperSize *size,
|
||||
* gtk_paper_size_get_default_left_margin:
|
||||
* @size: a #GtkPaperSize object
|
||||
* @unit: the unit for the return value
|
||||
*
|
||||
*
|
||||
* Gets the default left margin for the #GtkPaperSize.
|
||||
*
|
||||
*
|
||||
* Return value: the default left margin
|
||||
*
|
||||
* Since: 2.10
|
||||
*/
|
||||
gdouble
|
||||
gtk_paper_size_get_default_left_margin (GtkPaperSize *size,
|
||||
GtkUnit unit)
|
||||
gtk_paper_size_get_default_left_margin (GtkPaperSize *size,
|
||||
GtkUnit unit)
|
||||
{
|
||||
gdouble margin;
|
||||
|
||||
@ -783,16 +792,16 @@ gtk_paper_size_get_default_left_margin (GtkPaperSize *size,
|
||||
* gtk_paper_size_get_default_right_margin:
|
||||
* @size: a #GtkPaperSize object
|
||||
* @unit: the unit for the return value
|
||||
*
|
||||
*
|
||||
* Gets the default right margin for the #GtkPaperSize.
|
||||
*
|
||||
*
|
||||
* Return value: the default right margin
|
||||
*
|
||||
* Since: 2.10
|
||||
*/
|
||||
gdouble
|
||||
gtk_paper_size_get_default_right_margin (GtkPaperSize *size,
|
||||
GtkUnit unit)
|
||||
gtk_paper_size_get_default_right_margin (GtkPaperSize *size,
|
||||
GtkUnit unit)
|
||||
{
|
||||
gdouble margin;
|
||||
|
||||
@ -808,7 +817,7 @@ gtk_paper_size_get_default_right_margin (GtkPaperSize *size,
|
||||
* @error: (allow-none): return location for an error, or %NULL
|
||||
*
|
||||
* Reads a paper size from the group @group_name in the key file
|
||||
* @key_file.
|
||||
* @key_file.
|
||||
*
|
||||
* Returns: a new #GtkPaperSize object with the restored
|
||||
* paper size, or %NULL if an error occurred.
|
||||
@ -817,8 +826,8 @@ gtk_paper_size_get_default_right_margin (GtkPaperSize *size,
|
||||
*/
|
||||
GtkPaperSize *
|
||||
gtk_paper_size_new_from_key_file (GKeyFile *key_file,
|
||||
const gchar *group_name,
|
||||
GError **error)
|
||||
const gchar *group_name,
|
||||
GError **error)
|
||||
{
|
||||
GtkPaperSize *paper_size = NULL;
|
||||
char *name = NULL, *ppd_name = NULL, *display_name = NULL, *freeme = NULL;
|
||||
@ -855,11 +864,11 @@ gtk_paper_size_new_from_key_file (GKeyFile *key_file,
|
||||
#undef GET_DOUBLE
|
||||
|
||||
name = g_key_file_get_string (key_file, group_name,
|
||||
"Name", NULL);
|
||||
"Name", NULL);
|
||||
ppd_name = g_key_file_get_string (key_file, group_name,
|
||||
"PPDName", NULL);
|
||||
"PPDName", NULL);
|
||||
display_name = g_key_file_get_string (key_file, group_name,
|
||||
"DisplayName", NULL);
|
||||
"DisplayName", NULL);
|
||||
/* Fallback for old ~/.gtk-custom-paper entries */
|
||||
if (!display_name)
|
||||
display_name = g_strdup (name);
|
||||
@ -871,7 +880,7 @@ gtk_paper_size_new_from_key_file (GKeyFile *key_file,
|
||||
_gtk_print_convert_from_mm (height, GTK_UNIT_POINTS));
|
||||
else if (name != NULL)
|
||||
paper_size = gtk_paper_size_new_custom (name, display_name,
|
||||
width, height, GTK_UNIT_MM);
|
||||
width, height, GTK_UNIT_MM);
|
||||
else
|
||||
{
|
||||
g_set_error_literal (error,
|
||||
@ -904,8 +913,8 @@ out:
|
||||
*/
|
||||
void
|
||||
gtk_paper_size_to_key_file (GtkPaperSize *size,
|
||||
GKeyFile *key_file,
|
||||
const gchar *group_name)
|
||||
GKeyFile *key_file,
|
||||
const gchar *group_name)
|
||||
{
|
||||
const char *name, *ppd_name, *display_name;
|
||||
|
||||
@ -916,19 +925,19 @@ gtk_paper_size_to_key_file (GtkPaperSize *size,
|
||||
display_name = gtk_paper_size_get_display_name (size);
|
||||
ppd_name = gtk_paper_size_get_ppd_name (size);
|
||||
|
||||
if (ppd_name != NULL)
|
||||
if (ppd_name != NULL)
|
||||
g_key_file_set_string (key_file, group_name,
|
||||
"PPDName", ppd_name);
|
||||
"PPDName", ppd_name);
|
||||
else
|
||||
g_key_file_set_string (key_file, group_name,
|
||||
"Name", name);
|
||||
"Name", name);
|
||||
|
||||
if (display_name)
|
||||
if (display_name)
|
||||
g_key_file_set_string (key_file, group_name,
|
||||
"DisplayName", display_name);
|
||||
"DisplayName", display_name);
|
||||
|
||||
g_key_file_set_double (key_file, group_name,
|
||||
"Width", gtk_paper_size_get_width (size, GTK_UNIT_MM));
|
||||
"Width", gtk_paper_size_get_width (size, GTK_UNIT_MM));
|
||||
g_key_file_set_double (key_file, group_name,
|
||||
"Height", gtk_paper_size_get_height (size, GTK_UNIT_MM));
|
||||
"Height", gtk_paper_size_get_height (size, GTK_UNIT_MM));
|
||||
}
|
||||
|
@ -90,7 +90,7 @@ filtermodel_LDADD = $(progs_ldadd)
|
||||
|
||||
TEST_PROGS += expander
|
||||
expander_SOURCES = expander.c
|
||||
expander_LDADD = $(progs_ldadd)
|
||||
expander_LDADD = $(progs_ldadd)
|
||||
|
||||
TEST_PROGS += action
|
||||
action_SOURCES = action.c
|
||||
@ -99,8 +99,11 @@ action_LDADD = $(progs_ldadd)
|
||||
TEST_PROGS += stylecontext
|
||||
stylecontext_SOURCES = stylecontext.c
|
||||
stylecontext_LDADD = $(progs_ldadd)
|
||||
EXTRA_DIST += test.css test.png
|
||||
EXTRA_DIST += test.css test.png
|
||||
|
||||
TEST_PROGS += papersize
|
||||
papersize_SOURCES = papersize.c
|
||||
papersize_LDADD = $(progs_ldadd)
|
||||
|
||||
EXTRA_DIST += \
|
||||
file-chooser-test-dir/empty \
|
||||
|
128
gtk/tests/papersize.c
Normal file
128
gtk/tests/papersize.c
Normal file
@ -0,0 +1,128 @@
|
||||
/* GTK - The GIMP Toolkit
|
||||
* Copyright (C) 2011 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, write to the
|
||||
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
* Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
#include <gtk/gtk.h>
|
||||
|
||||
static void
|
||||
test_parse (void)
|
||||
{
|
||||
GtkPaperSize *p;
|
||||
|
||||
p = gtk_paper_size_new (GTK_PAPER_NAME_A4);
|
||||
g_assert (p != NULL);
|
||||
g_assert_cmpint (gtk_paper_size_get_width (p, GTK_UNIT_MM), ==, 210);
|
||||
g_assert_cmpint (gtk_paper_size_get_height (p, GTK_UNIT_MM), ==, 297);
|
||||
g_assert_cmpstr (gtk_paper_size_get_name (p), ==, "iso_a4");
|
||||
g_assert_cmpstr (gtk_paper_size_get_display_name (p), ==, "A4");
|
||||
g_assert_cmpstr (gtk_paper_size_get_ppd_name (p), ==, "A4");
|
||||
g_assert (!gtk_paper_size_is_custom (p));
|
||||
gtk_paper_size_free (p);
|
||||
|
||||
p = gtk_paper_size_new (GTK_PAPER_NAME_B5);
|
||||
g_assert (p != NULL);
|
||||
g_assert_cmpint (gtk_paper_size_get_width (p, GTK_UNIT_MM), ==, 176);
|
||||
g_assert_cmpint (gtk_paper_size_get_height (p, GTK_UNIT_MM), ==, 250);
|
||||
g_assert_cmpstr (gtk_paper_size_get_name (p), ==, "iso_b5");
|
||||
g_assert_cmpstr (gtk_paper_size_get_display_name (p), ==, "B5");
|
||||
g_assert_cmpstr (gtk_paper_size_get_ppd_name (p), ==, "ISOB5");
|
||||
g_assert (!gtk_paper_size_is_custom (p));
|
||||
gtk_paper_size_free (p);
|
||||
|
||||
p = gtk_paper_size_new (GTK_PAPER_NAME_EXECUTIVE);
|
||||
g_assert (p != NULL);
|
||||
g_assert_cmpint (gtk_paper_size_get_width (p, GTK_UNIT_MM), ==, 184);
|
||||
g_assert_cmpint (gtk_paper_size_get_height (p, GTK_UNIT_MM), ==, 266);
|
||||
g_assert_cmpstr (gtk_paper_size_get_name (p), ==, "na_executive");
|
||||
g_assert_cmpstr (gtk_paper_size_get_display_name (p), ==, "Executive");
|
||||
g_assert_cmpstr (gtk_paper_size_get_ppd_name (p), ==, "Executive");
|
||||
g_assert (!gtk_paper_size_is_custom (p));
|
||||
gtk_paper_size_free (p);
|
||||
|
||||
p = gtk_paper_size_new ("iso_a4_210x297mm");
|
||||
g_assert (p != NULL);
|
||||
g_assert_cmpint (gtk_paper_size_get_width (p, GTK_UNIT_MM), ==, 210);
|
||||
g_assert_cmpint (gtk_paper_size_get_height (p, GTK_UNIT_MM), ==, 297);
|
||||
g_assert_cmpstr (gtk_paper_size_get_name (p), ==, "iso_a4");
|
||||
g_assert_cmpstr (gtk_paper_size_get_display_name (p), ==, "A4");
|
||||
g_assert_cmpstr (gtk_paper_size_get_ppd_name (p), ==, "A4");
|
||||
g_assert (!gtk_paper_size_is_custom (p));
|
||||
gtk_paper_size_free (p);
|
||||
|
||||
p = gtk_paper_size_new ("custom_w1_20x30in");
|
||||
g_assert (p != NULL);
|
||||
g_assert_cmpint (gtk_paper_size_get_width (p, GTK_UNIT_INCH), ==, 20);
|
||||
g_assert_cmpint (gtk_paper_size_get_height (p, GTK_UNIT_INCH), ==, 30);
|
||||
g_assert_cmpstr (gtk_paper_size_get_name (p), ==, "custom_w1");
|
||||
g_assert_cmpstr (gtk_paper_size_get_display_name (p), ==, "custom_w1");
|
||||
g_assert (gtk_paper_size_is_custom (p));
|
||||
gtk_paper_size_free (p);
|
||||
}
|
||||
|
||||
static void
|
||||
test_compare (void)
|
||||
{
|
||||
GtkPaperSize *a1, *a2, *b, *c;
|
||||
|
||||
a1 = gtk_paper_size_new (GTK_PAPER_NAME_A4);
|
||||
a2 = gtk_paper_size_new ("iso_a4_210x297mm");
|
||||
b = gtk_paper_size_new (GTK_PAPER_NAME_B5);
|
||||
c = gtk_paper_size_new ("custom_w1_20x30in");
|
||||
|
||||
g_assert (gtk_paper_size_is_equal (a1, a2));
|
||||
g_assert (!gtk_paper_size_is_equal (a1, b));
|
||||
g_assert (!gtk_paper_size_is_equal (a1, c));
|
||||
g_assert (!gtk_paper_size_is_equal (b, c));
|
||||
|
||||
gtk_paper_size_free (a1);
|
||||
gtk_paper_size_free (a2);
|
||||
gtk_paper_size_free (b);
|
||||
gtk_paper_size_free (c);
|
||||
}
|
||||
|
||||
static void
|
||||
test_units (void)
|
||||
{
|
||||
GtkPaperSize *p;
|
||||
|
||||
p = gtk_paper_size_new (GTK_PAPER_NAME_A4);
|
||||
|
||||
g_assert_cmpint (gtk_paper_size_get_width (p, GTK_UNIT_MM), ==, 210);
|
||||
g_assert_cmpint (gtk_paper_size_get_height (p, GTK_UNIT_MM), ==, 297);
|
||||
|
||||
/* compare up to 2 decimals */
|
||||
g_assert_cmpint (100 * gtk_paper_size_get_width (p, GTK_UNIT_INCH), ==, 100 * 8.26);
|
||||
g_assert_cmpint (100 * gtk_paper_size_get_height (p, GTK_UNIT_INCH), ==, 100 * 11.69);
|
||||
|
||||
g_assert_cmpint (gtk_paper_size_get_width (p, GTK_UNIT_POINTS), ==, 595);
|
||||
g_assert_cmpint (gtk_paper_size_get_height (p, GTK_UNIT_POINTS), ==, 841);
|
||||
|
||||
gtk_paper_size_free (p);
|
||||
}
|
||||
|
||||
int
|
||||
main (int argc, char *argv[])
|
||||
{
|
||||
gtk_test_init (&argc, &argv);
|
||||
|
||||
g_test_add_func ("/paper-size/parse", test_parse);
|
||||
g_test_add_func ("/paper-size/compare", test_compare);
|
||||
g_test_add_func ("/paper-size/units", test_units);
|
||||
|
||||
return g_test_run();
|
||||
}
|
Loading…
Reference in New Issue
Block a user