diff options
author | Matthias Clasen <mclasen@redhat.com> | 2016-07-06 21:31:49 -0400 |
---|---|---|
committer | Matthias Clasen <mclasen@redhat.com> | 2016-07-07 00:09:41 -0400 |
commit | d39838e12e211371bb992a29d784452d8e726c62 (patch) | |
tree | 99ba237a7785eef49151b425b7ac73a20c08bbd6 | |
parent | e0469b5b4701ba5ed0f783923c2e553b2254b656 (diff) | |
download | gtk+-d39838e12e211371bb992a29d784452d8e726c62.tar.gz |
Add api to serialize a GtkPaperSize to a GVariant
This will be useful in portalized printing.
-rw-r--r-- | docs/reference/gtk/gtk3-sections.txt | 2 | ||||
-rw-r--r-- | gtk/gtkpapersize.c | 87 | ||||
-rw-r--r-- | gtk/gtkpapersize.h | 5 |
3 files changed, 94 insertions, 0 deletions
diff --git a/docs/reference/gtk/gtk3-sections.txt b/docs/reference/gtk/gtk3-sections.txt index 05d830f2dc..9921b53b89 100644 --- a/docs/reference/gtk/gtk3-sections.txt +++ b/docs/reference/gtk/gtk3-sections.txt @@ -7323,7 +7323,9 @@ gtk_paper_size_get_default <SUBSECTION Serialization> gtk_paper_size_new_from_key_file +gtk_paper_size_new_from_gvariant gtk_paper_size_to_key_file +gtk_paper_size_to_gvariant <SUBSECTION Standard> GTK_TYPE_PAPER_SIZE diff --git a/gtk/gtkpapersize.c b/gtk/gtkpapersize.c index 278832e39e..c293ba2806 100644 --- a/gtk/gtkpapersize.c +++ b/gtk/gtkpapersize.c @@ -1078,3 +1078,90 @@ gtk_paper_size_to_key_file (GtkPaperSize *size, g_key_file_set_double (key_file, group_name, "Height", gtk_paper_size_get_height (size, GTK_UNIT_MM)); } + +/** + * gtk_paper_size_to_gvariant: + * @paper_size: a #GtkPaperSize + * + * Serialize a paper size to an a{sv} variant. + * + * Returns: (transfer none): a new, floating, #GVariant + * + * Since: 3.22 + */ +GVariant * +gtk_paper_size_to_gvariant (GtkPaperSize *paper_size) +{ + const char *name; + const char *ppd_name; + const char *display_name; + GVariantBuilder builder; + + g_variant_builder_init (&builder, G_VARIANT_TYPE_VARDICT); + + name = gtk_paper_size_get_name (paper_size); + ppd_name = gtk_paper_size_get_ppd_name (paper_size); + display_name = gtk_paper_size_get_display_name (paper_size); + + if (ppd_name != NULL) + g_variant_builder_add (&builder, "{sv}", "PPDName", g_variant_new_string (ppd_name)); + else + g_variant_builder_add (&builder, "{sv}", "Name", g_variant_new_string (name)); + + if (display_name != NULL) + g_variant_builder_add (&builder, "{sv}", "DisplayName", g_variant_new_string (display_name)); + + g_variant_builder_add (&builder, "{sv}", "Width", g_variant_new_double (gtk_paper_size_get_width (paper_size, GTK_UNIT_MM))); + g_variant_builder_add (&builder, "{sv}", "Height", g_variant_new_double (gtk_paper_size_get_height (paper_size, GTK_UNIT_MM))); + + return g_variant_builder_end (&builder); +} + +/** + * gtk_paper_size_new_from_gvariant: + * @variant: an a{sv} #GVariant + * + * Deserialize a paper size from an a{sv} variant in + * the format produced by gtk_paper_size_to_gvariant(). + * + * Returns: (transfer full): a new #GtkPaperSize object + * + * Since: 3.22 + */ +GtkPaperSize * +gtk_paper_size_new_from_gvariant (GVariant *variant) +{ + GtkPaperSize *paper_size; + const char *name; + const char *ppd_name; + const char *display_name; + gdouble width, height; + + g_return_val_if_fail (g_variant_is_of_type (variant, G_VARIANT_TYPE_VARDICT), NULL); + + if (!g_variant_lookup (variant, "Width", "d", &width) || + !g_variant_lookup (variant, "Height", "d", &height)) + return NULL; + + if (!g_variant_lookup (variant, "Name", "&s", &name)) + name = NULL; + + if (!g_variant_lookup (variant, "PPDName", "&s", &ppd_name)) + ppd_name = NULL; + + if (!g_variant_lookup (variant, "DisplayName", "&s", &display_name)) + display_name = name; + + if (ppd_name != NULL) + paper_size = gtk_paper_size_new_from_ppd (ppd_name, + display_name, + _gtk_print_convert_from_mm (width, GTK_UNIT_POINTS), + _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); + else + paper_size = NULL; + + return paper_size; +} diff --git a/gtk/gtkpapersize.h b/gtk/gtkpapersize.h index 24f8a2f452..daa78e816d 100644 --- a/gtk/gtkpapersize.h +++ b/gtk/gtkpapersize.h @@ -164,6 +164,11 @@ void gtk_paper_size_to_key_file (GtkPaperSize *size, GKeyFile *key_file, const gchar *group_name); +GDK_AVAILABLE_IN_3_22 +GtkPaperSize *gtk_paper_size_new_from_gvariant (GVariant *variant); +GDK_AVAILABLE_IN_3_22 +GVariant *gtk_paper_size_to_gvariant (GtkPaperSize *size); + G_END_DECLS #endif /* __GTK_PAPER_SIZE_H__ */ |