summaryrefslogtreecommitdiff
path: root/examples/pangoft2topgm.c
diff options
context:
space:
mode:
Diffstat (limited to 'examples/pangoft2topgm.c')
-rw-r--r--examples/pangoft2topgm.c185
1 files changed, 97 insertions, 88 deletions
diff --git a/examples/pangoft2topgm.c b/examples/pangoft2topgm.c
index 46549947..f47e3a22 100644
--- a/examples/pangoft2topgm.c
+++ b/examples/pangoft2topgm.c
@@ -43,41 +43,48 @@ int
main(int argc, char *argv[])
{
PangoContext *context;
- FILE *outfile;
+ FILE *outfile = NULL;
PangoFontMap *fontmap;
GError *error = NULL;
gboolean do_convert = FALSE;
int exit_status = 0;
char *tmpfile_name;
+ gboolean gen_output = TRUE;
g_type_init();
parse_options (argc, argv);
- if (opt_output)
- {
- if (!(g_str_has_suffix (opt_output, ".pgm") ||
- g_str_has_suffix (opt_output, ".PGM")))
- do_convert = TRUE;
- }
+ if (opt_output && !*opt_output)
+ gen_output = FALSE;
- if (opt_output && !do_convert)
+ if (gen_output)
{
- outfile = fopen (opt_output, "wb");
+ if (opt_output)
+ {
+ if (!(g_str_has_suffix (opt_output, ".pgm") ||
+ g_str_has_suffix (opt_output, ".PGM")))
+ do_convert = TRUE;
+ }
- if (!outfile)
- fail ("Cannot open output file %s: %s\n",
- opt_output, g_strerror (errno));
- }
- else /* --display */
- {
- /* This may need to be G_OS_UNIX guarded for fdopen */
- int fd = g_file_open_tmp ("pangoft2pgmXXXXXX", &tmpfile_name, &error);
- if (fd == 1)
- fail ("Cannot open temporary file: %s\n", error->message);
- outfile = fdopen (fd, "wb");
- if (!outfile)
- fail ("Cannot open temporary file: %s\n", g_strerror (errno));
+ if (opt_output && !do_convert)
+ {
+ outfile = fopen (opt_output, "wb");
+
+ if (!outfile)
+ fail ("Cannot open output file %s: %s\n",
+ opt_output, g_strerror (errno));
+ }
+ else /* --display */
+ {
+ /* This may need to be G_OS_UNIX guarded for fdopen */
+ int fd = g_file_open_tmp ("pangoft2pgmXXXXXX", &tmpfile_name, &error);
+ if (fd == 1)
+ fail ("Cannot open temporary file: %s\n", error->message);
+ outfile = fdopen (fd, "wb");
+ if (!outfile)
+ fail ("Cannot open temporary file: %s\n", g_strerror (errno));
+ }
}
fontmap = pango_ft2_font_map_new ();
@@ -88,12 +95,12 @@ main(int argc, char *argv[])
g_object_unref (fontmap);
- /* Write contents as pgm file */
{
FT_Bitmap bitmap;
guchar *buf;
int row;
int width, height;
+ int run;
do_output (context, NULL, NULL, NULL, &width, &height);
@@ -105,80 +112,82 @@ main(int argc, char *argv[])
bitmap.pixel_mode = ft_pixel_mode_grays;
memset (buf, 0x00, bitmap.pitch * bitmap.rows);
- do_output (context, ft2_render, NULL, &bitmap, &width, &height);
+ for (run = 0; run < opt_runs; run++)
+ do_output (context, ft2_render, NULL, &bitmap, &width, &height);
- /* Invert bitmap to get black text on white background */
- {
- int pix_idx;
- for (pix_idx=0; pix_idx<bitmap.pitch * bitmap.rows; pix_idx++)
+ if (gen_output)
+ {
+ /* Invert bitmap to get black text on white background */
{
- buf[pix_idx] = 255-buf[pix_idx];
+ int pix_idx;
+ for (pix_idx=0; pix_idx<bitmap.pitch * bitmap.rows; pix_idx++)
+ {
+ buf[pix_idx] = 255-buf[pix_idx];
+ }
}
- }
-
- /* Write it as pgm to output */
- fprintf(outfile,
- "P5\n"
- "%d %d\n"
- "255\n", bitmap.width, bitmap.rows);
- for (row = 0; row < bitmap.rows; row++)
- fwrite(bitmap.buffer + row * bitmap.pitch,
- 1, bitmap.width,
- outfile);
- g_free (buf);
- if (fclose(outfile) == EOF)
- fail ("Error writing output file: %s\n", g_strerror (errno));
-
- /* Convert to a different format, if necessary */
- if (do_convert)
- {
- gchar *command = g_strdup_printf ("convert %s %s",
- tmpfile_name,
- opt_output);
- if (!g_spawn_command_line_sync (command, NULL, NULL, &exit_status, &error))
- fail ("When running ImageMagick 'convert' command: %s\n",
- error->message);
-
- g_free (command);
- if (tmpfile_name)
+ /* Write it as pgm to output */
+ fprintf(outfile,
+ "P5\n"
+ "%d %d\n"
+ "255\n", bitmap.width, bitmap.rows);
+ for (row = 0; row < bitmap.rows; row++)
+ fwrite(bitmap.buffer + row * bitmap.pitch, 1, bitmap.width, outfile);
+ g_free (buf);
+ if (fclose(outfile) == EOF)
+ fail ("Error writing output file: %s\n", g_strerror (errno));
+
+ /* Convert to a different format, if necessary */
+ if (do_convert)
{
- remove (tmpfile_name);
- g_free (tmpfile_name);
- tmpfile_name = NULL;
+ gchar *command = g_strdup_printf ("convert %s %s",
+ tmpfile_name,
+ opt_output);
+ if (!g_spawn_command_line_sync (command, NULL, NULL, &exit_status, &error))
+ fail ("When running ImageMagick 'convert' command: %s\n",
+ error->message);
+
+ g_free (command);
+
+ if (tmpfile_name)
+ {
+ remove (tmpfile_name);
+ g_free (tmpfile_name);
+ tmpfile_name = NULL;
+ }
+
+ if (exit_status)
+ goto done;
}
- if (exit_status)
- goto done;
- }
-
- if (opt_display)
- {
- gchar *title = get_options_string ();
- gchar *title_quoted = g_shell_quote (title);
-
- gchar *command = g_strdup_printf ("display -title %s %s",
- title_quoted,
- opt_output ? opt_output: tmpfile_name);
- if (!g_spawn_command_line_sync (command, NULL, NULL, &exit_status, &error))
- fail ("When running ImageMagick 'display' command: %s\n",
- error->message);
-
- g_free (command);
- g_free (title);
- g_free (title_quoted);
-
- if (tmpfile_name)
+ if (opt_display)
{
- remove (tmpfile_name);
- g_free (tmpfile_name);
- tmpfile_name = NULL;
+ gchar *title = get_options_string ();
+ gchar *title_quoted = g_shell_quote (title);
+
+ gchar *command = g_strdup_printf ("display -title %s %s",
+ title_quoted,
+ opt_output ? opt_output: tmpfile_name);
+ if (!g_spawn_command_line_sync (command, NULL, NULL, &exit_status, &error))
+ fail ("When running ImageMagick 'display' command: %s\n",
+ error->message);
+
+ g_free (command);
+ g_free (title);
+ g_free (title_quoted);
+
+ if (tmpfile_name)
+ {
+ remove (tmpfile_name);
+ g_free (tmpfile_name);
+ tmpfile_name = NULL;
+ }
+
+ if (exit_status)
+ goto done;
}
-
- if (exit_status)
- goto done;
- }
- }
+ }
+ }
done:
g_object_unref (context);