summaryrefslogtreecommitdiff
path: root/examples/renderdemo.c
diff options
context:
space:
mode:
Diffstat (limited to 'examples/renderdemo.c')
-rw-r--r--examples/renderdemo.c82
1 files changed, 61 insertions, 21 deletions
diff --git a/examples/renderdemo.c b/examples/renderdemo.c
index 8eeba740..a0d3a5ea 100644
--- a/examples/renderdemo.c
+++ b/examples/renderdemo.c
@@ -55,6 +55,8 @@ int opt_indent = 0;
int opt_runs = 1;
PangoEllipsizeMode opt_ellipsize = PANGO_ELLIPSIZE_NONE;
HintMode opt_hinting = HINT_DEFAULT;
+PangoWrapMode opt_wrap = PANGO_WRAP_WORD_CHAR;
+gboolean opt_wrap_set = FALSE;
const char *opt_pangorc = NULL;
/* Text (or markup) to render */
@@ -68,7 +70,7 @@ fail (const char *format, ...)
va_list vap;
va_start (vap, format);
msg = g_strdup_vprintf (format, vap);
- g_printerr ("%s: %s\n", prog_name, msg);
+ g_warning ("%s: %s\n", prog_name, msg);
exit (1);
}
@@ -111,7 +113,7 @@ make_layout(PangoContext *context,
if (opt_width > 0)
{
- pango_layout_set_wrap (layout, PANGO_WRAP_WORD_CHAR);
+ pango_layout_set_wrap (layout, opt_wrap);
pango_layout_set_width (layout, (opt_width * opt_dpi * PANGO_SCALE + 32) / 72);
}
@@ -379,48 +381,80 @@ parse_hinting (const char *name,
return ret;
}
+
+static gboolean
+parse_wrap (const char *name,
+ const char *arg,
+ gpointer data,
+ GError **error)
+{
+ static GEnumClass *class = NULL;
+ gboolean ret = TRUE;
+ GEnumValue *value;
+
+ if (!class)
+ class = g_type_class_ref (PANGO_TYPE_WRAP_MODE);
+
+ value = g_enum_get_value_by_nick (class, arg);
+ if (value)
+ {
+ opt_wrap = value->value;
+ opt_wrap_set = TRUE;
+ }
+ else
+ {
+ fail ("--wrap option must be one of word/char/word-char");
+ ret = FALSE;
+ }
+
+ return ret;
+}
+
+
void
parse_options (int argc, char *argv[])
{
GOptionEntry entries[] =
{
{"no-auto-dir", 0, G_OPTION_FLAG_REVERSE, G_OPTION_ARG_NONE, &opt_auto_dir,
- "No layout direction according to contents", NULL },
+ "No layout direction according to contents", NULL},
{"no-display", 'q', G_OPTION_FLAG_REVERSE, G_OPTION_ARG_NONE, &opt_display,
- "Do not display (just save to file or whatever)", NULL },
+ "Do not display (just save to file or whatever)", NULL},
{"dpi", 0, 0, G_OPTION_ARG_INT, &opt_dpi,
- "Set the resolution", NULL },
+ "Set the resolution", NULL},
{"ellipsize", 0, 0, G_OPTION_ARG_CALLBACK, &parse_ellipsis,
- "Ellipsization mode", "start/middle/end" },
+ "Ellipsization mode", "start/middle/end" },
{"font", 0, 0, G_OPTION_ARG_STRING, &opt_font,
- "Set the font description", NULL },
+ "Set the font description", NULL},
{"header", 0, 0, G_OPTION_ARG_NONE, &opt_header,
- "Display the options in the output", NULL },
+ "Display the options in the output", NULL},
{"hinting", 0, 0, G_OPTION_ARG_CALLBACK, &parse_hinting,
- "Hinting style", "none/auto/full" },
+ "Hinting style", "none/auto/full" },
{"indent", 0, 0, G_OPTION_ARG_INT, &opt_indent,
- "Width in points to indent paragraphs", NULL },
+ "Width in points to indent paragraphs", NULL},
{"margin", 0, 0, G_OPTION_ARG_INT, &opt_margin,
- "Set the margin on the output in pixels", NULL },
+ "Set the margin on the output in pixels", NULL},
{"markup", 0, 0, G_OPTION_ARG_NONE, &opt_markup,
- "Interpret text as Pango markup", NULL },
+ "Interpret text as Pango markup", NULL},
{"output", 'o', 0,G_OPTION_ARG_STRING, &opt_output,
- "Save rendered image to output file", NULL },
+ "Save rendered image to output file", NULL},
{"pangorc", 0, 0, G_OPTION_ARG_STRING, &opt_pangorc,
- "pangorc file to use (default is ./pangorc)", NULL },
+ "pangorc file to use (default is ./pangorc)", NULL},
{"rtl", 0, 0, G_OPTION_ARG_NONE, &opt_rtl,
- "Set base direction to right-to-left", NULL },
+ "Set base direction to right-to-left", NULL},
{"rotate", 0, 0, G_OPTION_ARG_INT, &opt_rotate,
- "Angle at which to rotate results", NULL },
+ "Angle at which to rotate results", NULL},
{"runs", 'n', 0, G_OPTION_ARG_INT, &opt_runs,
- "Run Pango layout engine this many times", NULL },
+ "Run Pango layout engine this many times", NULL},
{"text", 't', 0, G_OPTION_ARG_STRING, &opt_text,
- "Text to display (instead of a file)", NULL },
+ "Text to display (instead of a file)", NULL},
{"waterfall", 0, 0, G_OPTION_ARG_NONE, &opt_waterfall,
- "Create a waterfall display", NULL },
+ "Create a waterfall display", NULL},
{"width", 'w', 0, G_OPTION_ARG_INT, &opt_width,
- "Width in points to which to wrap output", NULL },
- {NULL }
+ "Width in points to which to wrap output", NULL},
+ {"wrap", 0, 0, G_OPTION_ARG_CALLBACK, &parse_wrap,
+ "Text wrapping mode (needs a width to be set), ", "word/char/word-char"},
+ {NULL}
};
GError *error = NULL;
GError *parse_error = NULL;
@@ -454,6 +488,12 @@ parse_options (int argc, char *argv[])
exit (1);
}
+ /* if wrap mode is set then width must be set */
+ if (opt_width < 0 && opt_wrap_set)
+ {
+ g_printerr ("The wrap mode only has effect if a width is set\n");
+ }
+
/* Get the text
*/
if (opt_text)