diff options
author | Matthias Clasen <mclasen@redhat.com> | 2021-11-19 13:18:43 -0500 |
---|---|---|
committer | Matthias Clasen <mclasen@redhat.com> | 2021-11-19 13:18:43 -0500 |
commit | b3b87f6779eeef17202d0f82f775d142d6a5d60c (patch) | |
tree | b2c44385ffa196e97a2504326291c1643212328f /utils/viewer-render.c | |
parent | 5087dc434ed8e3aa475b30caebce80c1f362f90f (diff) | |
download | pango-b3b87f6779eeef17202d0f82f775d142d6a5d60c.tar.gz |
pango-view: Allow loading serialized layouts
You can now do
pango-view --serialized file
All layout-related options will be overwritten by the
serialized data. Other options can still be used.
Diffstat (limited to 'utils/viewer-render.c')
-rw-r--r-- | utils/viewer-render.c | 35 |
1 files changed, 34 insertions, 1 deletions
diff --git a/utils/viewer-render.c b/utils/viewer-render.c index 020e308c..23e13c71 100644 --- a/utils/viewer-render.c +++ b/utils/viewer-render.c @@ -77,6 +77,8 @@ guint16 opt_fg_alpha = 65535; gboolean opt_bg_set = FALSE; PangoColor opt_bg_color = {65535, 65535, 65535}; guint16 opt_bg_alpha = 65535; +gboolean opt_serialized = FALSE; +const char *file_arg; /* Text (or markup) to render */ static char *text; @@ -103,6 +105,23 @@ make_layout(PangoContext *context, PangoAlignment align; PangoLayout *layout; + if (opt_serialized) + { + char *text; + gsize len; + GBytes *bytes; + GError *error = NULL; + + if (!g_file_get_contents (file_arg, &text, &len, &error)) + fail ("%s\n", error->message); + bytes = g_bytes_new_take (text, size); + layout = pango_layout_deserialize (context, bytes, &error); + if (!layout) + fail ("%s\n", error->message); + g_bytes_unref (bytes); + return layout; + } + layout = pango_layout_new (context); if (opt_markup) pango_layout_set_markup (layout, text, -1); @@ -868,6 +887,8 @@ parse_options (int argc, char *argv[]) "Width in points to which to wrap lines or ellipsize", "points"}, {"wrap", 0, 0, G_OPTION_ARG_CALLBACK, &parse_wrap, "Text wrapping mode (needs a width to be set)", "word/char/word-char"}, + {"serialized", 0, 0, G_OPTION_ARG_NONE, &opt_serialized, + "Create layout from a serialized file", NULL}, {NULL} }; GError *error = NULL; @@ -911,6 +932,12 @@ parse_options (int argc, char *argv[]) exit (1); } + if (opt_serialized && argc != 2) + { + g_printerr ("Usage: %s [OPTION...] FILE\n", g_get_prgname ()); + exit (1); + } + /* set up the backend */ if (!opt_viewer) { @@ -921,7 +948,13 @@ parse_options (int argc, char *argv[]) /* Get the text */ - if (opt_text) + if (opt_serialized) + { + file_arg = argv[1]; + text = g_strdup (""); + len = 0; + } + else if (opt_text) { text = g_strdup (opt_text); len = strlen (text); |