summaryrefslogtreecommitdiff
path: root/librsvg/test-rsvg.c
diff options
context:
space:
mode:
Diffstat (limited to 'librsvg/test-rsvg.c')
-rw-r--r--librsvg/test-rsvg.c227
1 files changed, 0 insertions, 227 deletions
diff --git a/librsvg/test-rsvg.c b/librsvg/test-rsvg.c
deleted file mode 100644
index 49c591619..000000000
--- a/librsvg/test-rsvg.c
+++ /dev/null
@@ -1,227 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*-
-
- test-rsvg.c: Command line utility for exercising rsvg.
-
- Copyright (C) 2000 Eazel, Inc.
-
- This program is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public License as
- published by the Free Software Foundation; either version 2 of the
- License, or (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
-
- You should have received a copy of the GNU General Public
- License along with this program; if not, write to the
- Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- Boston, MA 02111-1307, USA.
-
- Author: Raph Levien <raph@artofcode.com>
-*/
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <png.h>
-#include <popt.h>
-
-#include <gdk-pixbuf/gdk-pixbuf.h>
-
-#include "rsvg.h"
-
-
-/* The following routine is lifted wholesale from nautilus-icon-factory.c.
- It should find a permanent home somewhere else, at which point it should
- be deleted here and simply linked. -RLL
-*/
-
-/* utility routine for saving a pixbuf to a png file.
- * This was adapted from Iain Holmes' code in gnome-iconedit, and probably
- * should be in a utility library, possibly in gdk-pixbuf itself.
- *
- * It is split up into save_pixbuf_to_file and save_pixbuf_to_file_internal
- * to work around a gcc warning about handle possibly getting clobbered by
- * longjmp. Declaring handle 'volatile FILE *' didn't work as it should have.
- */
-static gboolean
-save_pixbuf_to_file_internal (GdkPixbuf *pixbuf, char *filename, FILE *handle)
-{
- char *buffer;
- gboolean has_alpha;
- int width, height, depth, rowstride;
- guchar *pixels;
- png_structp png_ptr;
- png_infop info_ptr;
- png_text text[2];
- int i;
-
- png_ptr = png_create_write_struct (PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
- if (png_ptr == NULL) {
- return FALSE;
- }
-
- info_ptr = png_create_info_struct (png_ptr);
- if (info_ptr == NULL) {
- png_destroy_write_struct (&png_ptr, (png_infopp)NULL);
- return FALSE;
- }
-
- if (setjmp (png_ptr->jmpbuf)) {
- png_destroy_write_struct (&png_ptr, &info_ptr);
- return FALSE;
- }
-
- png_init_io (png_ptr, (FILE *)handle);
-
- has_alpha = gdk_pixbuf_get_has_alpha (pixbuf);
- width = gdk_pixbuf_get_width (pixbuf);
- height = gdk_pixbuf_get_height (pixbuf);
- depth = gdk_pixbuf_get_bits_per_sample (pixbuf);
- pixels = gdk_pixbuf_get_pixels (pixbuf);
- rowstride = gdk_pixbuf_get_rowstride (pixbuf);
-
- png_set_IHDR (png_ptr, info_ptr, width, height,
- depth, PNG_COLOR_TYPE_RGB_ALPHA,
- PNG_INTERLACE_NONE,
- PNG_COMPRESSION_TYPE_DEFAULT,
- PNG_FILTER_TYPE_DEFAULT);
-
- /* Some text to go with the png image */
- text[0].key = "Title";
- text[0].text = filename;
- text[0].compression = PNG_TEXT_COMPRESSION_NONE;
- text[1].key = "Software";
- text[1].text = "Test-Rsvg";
- text[1].compression = PNG_TEXT_COMPRESSION_NONE;
- png_set_text (png_ptr, info_ptr, text, 2);
-
- /* Write header data */
- png_write_info (png_ptr, info_ptr);
-
- /* if there is no alpha in the data, allocate buffer to expand into */
- if (has_alpha) {
- buffer = NULL;
- } else {
- buffer = g_malloc(4 * width);
- }
-
- /* pump the raster data into libpng, one scan line at a time */
- for (i = 0; i < height; i++) {
- if (has_alpha) {
- png_bytep row_pointer = pixels;
- png_write_row (png_ptr, row_pointer);
- } else {
- /* expand RGB to RGBA using an opaque alpha value */
- int x;
- char *buffer_ptr = buffer;
- char *source_ptr = pixels;
- for (x = 0; x < width; x++) {
- *buffer_ptr++ = *source_ptr++;
- *buffer_ptr++ = *source_ptr++;
- *buffer_ptr++ = *source_ptr++;
- *buffer_ptr++ = 255;
- }
- png_write_row (png_ptr, (png_bytep) buffer);
- }
- pixels += rowstride;
- }
-
- png_write_end (png_ptr, info_ptr);
- png_destroy_write_struct (&png_ptr, &info_ptr);
-
- g_free (buffer);
-
- return TRUE;
-}
-
-static gboolean
-save_pixbuf_to_file (GdkPixbuf *pixbuf, char *filename)
-{
- FILE *handle;
- gboolean result;
-
- g_return_val_if_fail (pixbuf != NULL, FALSE);
- g_return_val_if_fail (filename != NULL, FALSE);
- g_return_val_if_fail (filename[0] != '\0', FALSE);
-
- if (!strcmp (filename, "-")) {
- handle = stdout;
- } else {
- handle = fopen (filename, "wb");
- }
-
- if (handle == NULL) {
- return FALSE;
- }
-
- result = save_pixbuf_to_file_internal (pixbuf, filename, handle);
- if (!result || handle != stdout)
- fclose (handle);
-
- return result;
-}
-
-int
-main (int argc, char **argv)
-{
- FILE *f;
- char *out_fn;
- GdkPixbuf *pixbuf;
- char *zoom_str = "1.0";
- int n_iter = 1;
- poptContext optCtx;
- struct poptOption optionsTable[] = {
- { "zoom", 'z', POPT_ARG_STRING, &zoom_str, 0, NULL, "zoom factor" },
- { "num-iter", 'n', POPT_ARG_INT, &n_iter, 0, NULL, "number of iterations" },
- POPT_AUTOHELP
- { NULL, 0, 0, NULL, 0 }
- };
- char c;
- const char * const *args;
- int i;
-
- optCtx = poptGetContext ("test-rsvg", argc, (const char **)argv, optionsTable, 0);
-
- c = poptGetNextOpt (optCtx);
- args = poptGetArgs (optCtx);
-
- for (i = 0; i < n_iter; i++) {
- if (args == NULL || args[0] == NULL) {
- if (n_iter > 1) {
- fprintf (stderr, "Can't do multiple iterations on stdin\n");
- exit (1);
- }
-
- f = stdin;
- out_fn = "-";
- } else {
- f = fopen(args[0], "r");
- if (f == NULL) {
- fprintf(stderr, "Error opening source file %s\n", argv[0]);
- }
- if (args[1] == NULL)
- out_fn = "-";
- else
- out_fn = (char *)args[1];
- }
-
- pixbuf = rsvg_render_file (f, atof (zoom_str));
-
- if (f != stdin)
- fclose(f);
-
- if (pixbuf != NULL) {
- if (n_iter > 1)
- gdk_pixbuf_unref (pixbuf);
- else
- save_pixbuf_to_file (pixbuf, out_fn);
- } else {
- fprintf (stderr, "Error loading SVG file.\n");
- return 1;
- }
- }
-
- return 0;
-}