summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Clasen <mclasen@redhat.com>2021-11-19 13:18:43 -0500
committerMatthias Clasen <mclasen@redhat.com>2021-11-19 13:18:43 -0500
commitb3b87f6779eeef17202d0f82f775d142d6a5d60c (patch)
treeb2c44385ffa196e97a2504326291c1643212328f
parent5087dc434ed8e3aa475b30caebce80c1f362f90f (diff)
downloadpango-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.
-rw-r--r--utils/viewer-render.c35
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);