summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorNicolas Dufour <nicoduf@yahoo.fr>2012-07-23 18:34:01 +0000
committerJazzyNico <nicoduf@yahoo.fr>2012-07-23 18:34:01 +0000
commit54d42c46eece26d1b7f49bb2958304315bd42e2b (patch)
tree967aa9653ae62bb1ce8bb2b75fa4a7e3d45d011e /src
parentFix canvas scroll events in GTK+ 3 (diff)
downloadinkscape-54d42c46eece26d1b7f49bb2958304315bd42e2b.tar.gz
inkscape-54d42c46eece26d1b7f49bb2958304315bd42e2b.zip
Bitmap. Fix for Bug #165952 (png resolution not imported) by Daniel Wagenaar.
(bzr r11567)
Diffstat (limited to 'src')
-rw-r--r--src/extension/internal/Makefile_insert5
-rw-r--r--src/extension/internal/gdkpixbuf-input.cpp33
-rw-r--r--src/ui/dialog/inkscape-preferences.cpp7
-rw-r--r--src/ui/dialog/inkscape-preferences.h3
4 files changed, 40 insertions, 8 deletions
diff --git a/src/extension/internal/Makefile_insert b/src/extension/internal/Makefile_insert
index 06fa275cb..e9b11553b 100644
--- a/src/extension/internal/Makefile_insert
+++ b/src/extension/internal/Makefile_insert
@@ -136,4 +136,7 @@ ink_common_sources += \
extension/internal/emf-win32-print.h \
extension/internal/emf-win32-print.cpp \
extension/internal/emf-win32-inout.h \
- extension/internal/emf-win32-inout.cpp
+ extension/internal/emf-win32-inout.cpp \
+ extension/internal/image-resolution.h \
+ extension/internal/image-resolution.cpp
+
diff --git a/src/extension/internal/gdkpixbuf-input.cpp b/src/extension/internal/gdkpixbuf-input.cpp
index 80be2ecc2..30c4d4338 100644
--- a/src/extension/internal/gdkpixbuf-input.cpp
+++ b/src/extension/internal/gdkpixbuf-input.cpp
@@ -12,6 +12,8 @@
#include "selection-chemistry.h"
#include "sp-image.h"
#include "document-undo.h"
+#include "unit-constants.h"
+#include "image-resolution.h"
#include <set>
namespace Inkscape {
@@ -77,22 +79,45 @@ GdkpixbufInput::open(Inkscape::Extension::Input *mod, char const *uri)
double width = gdk_pixbuf_get_width(pb);
double height = gdk_pixbuf_get_height(pb);
+ double defaultxdpi = prefs->getDouble("/dialogs/import/defaultxdpi/value", PX_PER_IN);
+ ImageResolution *ir = 0;
+ double xscale = 1;
+ double yscale = 1;
+
gchar const *str = gdk_pixbuf_get_option( pb, "Inkscape::DpiX" );
if ( str ) {
gint dpi = atoi(str);
if ( dpi > 0 && dpi != 72 ) {
- double scale = 72.0 / (double)dpi;
- width *= scale;
+ xscale = 72.0 / (double)dpi;
}
+ } else {
+ if (!ir)
+ ir = new ImageResolution(uri);
+ if (ir->ok())
+ xscale = 90.0 / ir->x();
+ else
+ xscale = 90.0 / defaultxdpi;
}
+ width *= xscale;
+
str = gdk_pixbuf_get_option( pb, "Inkscape::DpiY" );
if ( str ) {
gint dpi = atoi(str);
if ( dpi > 0 && dpi != 72 ) {
- double scale = 72.0 / (double)dpi;
- height *= scale;
+ yscale = 72.0 / (double)dpi;
}
+ } else {
+ if (!ir)
+ ir = new ImageResolution(uri);
+ if (ir->ok())
+ yscale = 90.0 / ir->y();
+ else
+ yscale = 90.0 / defaultxdpi;
}
+ height *= yscale;
+
+ if (ir)
+ delete ir;
// Create image node
Inkscape::XML::Document *xml_doc = doc->getReprDoc();
diff --git a/src/ui/dialog/inkscape-preferences.cpp b/src/ui/dialog/inkscape-preferences.cpp
index b0cbc1b9f..0237a5ca0 100644
--- a/src/ui/dialog/inkscape-preferences.cpp
+++ b/src/ui/dialog/inkscape-preferences.cpp
@@ -1345,8 +1345,8 @@ void InkscapePreferences::initPageBitmaps()
_("Automatically reload linked images when file is changed on disk"));
_misc_bitmap_editor.init("/options/bitmapeditor/value", true);
_page_bitmaps.add_line( false, _("Bitmap editor:"), _misc_bitmap_editor, "", "", true);
- _importexport_export.init("/dialogs/export/defaultxdpi/value", 0.0, 6000.0, 1.0, 1.0, PX_PER_IN, true, false);
- _page_bitmaps.add_line( false, _("Default export resolution:"), _importexport_export, _("dpi"),
+ _importexport_export_res.init("/dialogs/export/defaultxdpi/value", 0.0, 6000.0, 1.0, 1.0, PX_PER_IN, true, false);
+ _page_bitmaps.add_line( false, _("Default export resolution:"), _importexport_export_res, _("dpi"),
_("Default bitmap resolution (in dots per inch) in the Export dialog"), false);
_bitmap_copy_res.init("/options/createbitmap/resolution", 1.0, 6000.0, 1.0, 1.0, PX_PER_IN, true, false);
_page_bitmaps.add_line( false, _("Resolution for Create Bitmap Copy:"), _bitmap_copy_res, _("dpi"),
@@ -1357,6 +1357,9 @@ void InkscapePreferences::initPageBitmaps()
_bitmap_import.init("/dialogs/import/link", labels, values, G_N_ELEMENTS(values), "ask");
_page_bitmaps.add_line( false, _("Bitmap import:"), _bitmap_import, "", "", false);
}
+ _importexport_import_res.init("/dialogs/import/defaultxdpi/value", 0.0, 6000.0, 1.0, 1.0, PX_PER_IN, true, false);
+ _page_bitmaps.add_line( false, _("Default import resolution:"), _importexport_import_res, _("dpi"),
+ _("Default bitmap resolution (in dots per inch) for bitmap import"), false);
this->AddPage(_page_bitmaps, _("Bitmaps"), PREFS_PAGE_BITMAPS);
}
diff --git a/src/ui/dialog/inkscape-preferences.h b/src/ui/dialog/inkscape-preferences.h
index 49818110a..d100f74f7 100644
--- a/src/ui/dialog/inkscape-preferences.h
+++ b/src/ui/dialog/inkscape-preferences.h
@@ -281,7 +281,8 @@ protected:
UI::Widget::PrefCheckButton _sel_layer_deselects;
UI::Widget::PrefCheckButton _sel_cycle;
- UI::Widget::PrefSpinButton _importexport_export;
+ UI::Widget::PrefSpinButton _importexport_export_res;
+ UI::Widget::PrefSpinButton _importexport_import_res;
UI::Widget::PrefSlider _snap_delay;
UI::Widget::PrefSlider _snap_weight;
UI::Widget::PrefCheckButton _font_dialog;