summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 7537ecb)
raw | patch | inline | side by side (parent: 7537ecb)
author | buliabyak <buliabyak@users.sourceforge.net> | |
Mon, 17 Aug 2009 23:09:16 +0000 (23:09 +0000) | ||
committer | buliabyak <buliabyak@users.sourceforge.net> | |
Mon, 17 Aug 2009 23:09:16 +0000 (23:09 +0000) |
src/dialogs/export.cpp | patch | blob | history | |
src/helper/png-write.cpp | patch | blob | history | |
src/main.cpp | patch | blob | history |
diff --git a/src/dialogs/export.cpp b/src/dialogs/export.cpp
index ee7852924cd3de58ed6bd430bb59d5033f6fa7c5..2e41850edac8f895c55a032325ca2ba1b0706844 100644 (file)
--- a/src/dialogs/export.cpp
+++ b/src/dialogs/export.cpp
if (!SP_ACTIVE_DESKTOP) return;
SPNamedView *nv = sp_desktop_namedview(SP_ACTIVE_DESKTOP);
+ SPDocument *doc = sp_desktop_document (SP_ACTIVE_DESKTOP);
GtkWidget *be = (GtkWidget *)gtk_object_get_data(base, "batch_checkbox");
GtkWidget *he = (GtkWidget *)gtk_object_get_data(base, "hide_checkbox");
i != NULL;
i = i->next) {
SPItem *item = (SPItem *) i->data;
+
// retrieve export filename hint
- const gchar *fn = SP_OBJECT_REPR(item)->attribute("inkscape:export-filename");
- if (!fn) {
- fn = create_filepath_from_id (SP_OBJECT_ID(item), NULL);
+ const gchar *filename = SP_OBJECT_REPR(item)->attribute("inkscape:export-filename");
+ gchar *path = 0;
+ if (!filename) {
+ path = create_filepath_from_id (SP_OBJECT_ID(item), NULL);
+ } else {
+ //Make relative paths go from the document location, if possible:
+ if (!g_path_is_absolute(filename) && doc->uri) {
+ gchar *dirname = g_path_get_dirname(doc->uri);
+ if (dirname) {
+ path = g_build_filename(dirname, filename, NULL);
+ g_free(dirname);
+ }
+ }
+ if (!path) {
+ path = g_strdup(filename);
+ }
}
// retrieve export dpi hints
if (width > 1 && height > 1) {
/* Do export */
- if (!sp_export_png_file (sp_desktop_document (SP_ACTIVE_DESKTOP), fn,
+ if (!sp_export_png_file (doc, path,
*area, width, height, dpi, dpi,
nv->pagecolor,
NULL, NULL, TRUE, // overwrite without asking
hide ? (GSList *) sp_desktop_selection(SP_ACTIVE_DESKTOP)->itemList() : NULL
)) {
gchar * error;
- gchar * safeFile = Inkscape::IO::sanitizeString(fn);
+ gchar * safeFile = Inkscape::IO::sanitizeString(path);
error = g_strdup_printf(_("Could not export to filename %s.\n"), safeFile);
sp_ui_error_dialog(error);
g_free(safeFile);
}
}
n++;
+ g_free(path);
sp_export_progress_callback((float)n/num, base);
}
gtk_entry_set_text(GTK_ENTRY(fe), filename_ext);
gchar *fn = g_path_get_basename (filename_ext);
-
gchar *progress_text = g_strdup_printf (_("Exporting %s (%lu x %lu)"), fn, width, height);
g_free (fn);
+
GtkWidget *prog_dlg = create_progress_dialog (base, progress_text);
g_free (progress_text);
index 3ac9006800b30f978e6906d999bce4878f26cbca..b1c135db02a2e5c3e2e63b910c79a9a32872c48e 100644 (file)
--- a/src/helper/png-write.cpp
+++ b/src/helper/png-write.cpp
g_return_val_if_fail(height >= 1, false);
g_return_val_if_fail(!area.hasZeroArea(), false);
- //Make relative paths absolute, if possible:
- gchar *path = 0;
- if (!g_path_is_absolute(filename) && doc->uri) {
- gchar *dirname = g_path_get_dirname(doc->uri);
- if (dirname) {
- path = g_build_filename(dirname, filename, NULL);
- g_free(dirname);
- }
- }
- if (!path) {
- path = g_strdup(filename);
- }
-
- if (!force_overwrite && !sp_ui_overwrite_file(path)) {
+ if (!force_overwrite && !sp_ui_overwrite_file(filename)) {
/* Remark: We return true so as not to invoke an error dialog in case export is cancelled
by the user; currently this is safe because the callers only act when false is returned.
If this changes in the future we need better distinction of return types (e.g., use int)
if ((width < 256) || ((width * height) < 32768)) {
ebp.px = nr_pixelstore_64K_new(FALSE, 0);
ebp.sheight = 65536 / (4 * width);
- write_status = sp_png_write_rgba_striped(doc, path, width, height, xdpi, ydpi, sp_export_get_rows, &ebp);
+ write_status = sp_png_write_rgba_striped(doc, filename, width, height, xdpi, ydpi, sp_export_get_rows, &ebp);
nr_pixelstore_64K_free(ebp.px);
} else {
ebp.sheight = 64;
ebp.px = g_try_new(guchar, 4 * ebp.sheight * width);
- write_status = sp_png_write_rgba_striped(doc, path, width, height, xdpi, ydpi, sp_export_get_rows, &ebp);
+ write_status = sp_png_write_rgba_striped(doc, filename, width, height, xdpi, ydpi, sp_export_get_rows, &ebp);
g_free(ebp.px);
}
/* Free arena */
nr_object_unref((NRObject *) arena);
- g_free(path);
-
return write_status;
}
diff --git a/src/main.cpp b/src/main.cpp
index 12732ef2cbe10d4be6344a1957761a495db01779..f96d99e11e29a8dcffd545131f6364b397ab4ad8 100644 (file)
--- a/src/main.cpp
+++ b/src/main.cpp
#include <extension/system.h>
#include <extension/db.h>
#include <extension/output.h>
+#include <extension/input.h>
#ifdef WIN32
//#define REPLACEARGS_ANSI
|| !strcmp(argv[i], "-e")
|| !strncmp(argv[i], "--export-png", 12)
|| !strcmp(argv[i], "-l")
- || !strncmp(argv[i], "--export-plain-svg", 12)
+ || !strncmp(argv[i], "--export-plain-svg", 18)
|| !strcmp(argv[i], "-i")
|| !strncmp(argv[i], "--export-area-drawing", 21)
|| !strcmp(argv[i], "-D")
- || !strncmp(argv[i], "--export-area-page", 20)
+ || !strncmp(argv[i], "--export-area-page", 18)
|| !strcmp(argv[i], "-C")
- || !strncmp(argv[i], "--export-id", 12)
+ || !strncmp(argv[i], "--export-id", 11)
|| !strcmp(argv[i], "-P")
|| !strncmp(argv[i], "--export-ps", 11)
|| !strcmp(argv[i], "-E")
|| !strcmp(argv[i], "-S")
|| !strncmp(argv[i], "--query-all", 11)
|| !strcmp(argv[i], "-X")
- || !strncmp(argv[i], "--query-x", 13)
+ || !strncmp(argv[i], "--query-x", 9)
|| !strcmp(argv[i], "-Y")
- || !strncmp(argv[i], "--query-y", 14)
+ || !strncmp(argv[i], "--query-y", 9)
|| !strcmp(argv[i], "--vacuum-defs")
- || !strncmp(argv[i], "--shell", 7)
+ || !strcmp(argv[i], "--shell")
)
{
/* main_console handles any exports -- not the gui */
{
while (fl) {
const gchar *filename = (gchar *)fl->data;
- SPDocument *doc = Inkscape::Extension::open(NULL, filename);
+
+ SPDocument *doc = NULL;
+ try {
+ doc = Inkscape::Extension::open(NULL, filename);
+ } catch (Inkscape::Extension::Input::no_extension_found &e) {
+ doc = NULL;
+ } catch (Inkscape::Extension::Input::open_failed &e) {
+ doc = NULL;
+ }
+
if (doc == NULL) {
- doc = Inkscape::Extension::open(Inkscape::Extension::db.get(SP_MODULE_KEY_INPUT_SVG), filename);
+ try {
+ doc = Inkscape::Extension::open(Inkscape::Extension::db.get(SP_MODULE_KEY_INPUT_SVG), filename);
+ } catch (Inkscape::Extension::Input::no_extension_found &e) {
+ doc = NULL;
+ } catch (Inkscape::Extension::Input::open_failed &e) {
+ doc = NULL;
+ }
}
if (doc == NULL) {
- g_warning("Specified document %s cannot be opened (is it a valid SVG file?)", filename);
+ g_warning("Specified document %s cannot be opened (does not exist or not a valid SVG file)", filename);
} else {
if (sp_vacuum_defs) {
vacuum_document(doc);
if (sp_global_printer) {
sp_print_document_to_file(doc, sp_global_printer);
}
- if (sp_export_png) {
+ if (sp_export_png || (sp_export_id && sp_export_use_hints)) {
sp_do_export_png(doc);
}
if (sp_export_svg) {
sp_do_export_png(SPDocument *doc)
{
const gchar *filename = NULL;
+ bool filename_from_hint = false;
gdouble dpi = 0.0;
if (sp_export_use_hints && (!sp_export_id && !sp_export_area_drawing)) {
filename = sp_export_png;
} else {
filename = fn_hint;
+ filename_from_hint = true;
}
} else {
g_warning ("Export filename hint not found for the object.");
}
}
+ gchar *path = 0;
+ if (filename_from_hint) {
+ //Make relative paths go from the document location, if possible:
+ if (!g_path_is_absolute(filename) && doc->uri) {
+ gchar *dirname = g_path_get_dirname(doc->uri);
+ if (dirname) {
+ path = g_build_filename(dirname, filename, NULL);
+ g_free(dirname);
+ }
+ }
+ if (!path) {
+ path = g_strdup(filename);
+ }
+ } else {
+ path = g_strdup(filename);
+ }
+
g_print("Background RRGGBBAA: %08x\n", bgcolor);
g_print("Area %g:%g:%g:%g exported to %lu x %lu pixels (%g dpi)\n", area[Geom::X][0], area[Geom::Y][0], area[Geom::X][1], area[Geom::Y][1], width, height, dpi);
g_print("Bitmap saved as: %s\n", filename);
if ((width >= 1) && (height >= 1) && (width <= PNG_UINT_31_MAX) && (height <= PNG_UINT_31_MAX)) {
- sp_export_png_file(doc, filename, area, width, height, dpi, dpi, bgcolor, NULL, NULL, true, sp_export_id_only ? items : NULL);
+ sp_export_png_file(doc, path, area, width, height, dpi, dpi, bgcolor, NULL, NULL, true, sp_export_id_only ? items : NULL);
} else {
g_warning("Calculated bitmap dimensions %lu %lu are out of range (1 - %lu). Nothing exported.", width, height, (unsigned long int)PNG_UINT_31_MAX);
}
+ g_free (path);
g_slist_free (items);
}