From b3b87f6779eeef17202d0f82f775d142d6a5d60c Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Fri, 19 Nov 2021 13:18:43 -0500 Subject: 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. --- utils/viewer-render.c | 35 ++++++++++++++++++++++++++++++++++- 1 file changed, 34 insertions(+), 1 deletion(-) (limited to 'utils') 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); -- cgit v1.2.1