diff options
Diffstat (limited to 'src/extension/internal/gdkpixbuf-input.cpp')
| -rw-r--r-- | src/extension/internal/gdkpixbuf-input.cpp | 33 |
1 files changed, 29 insertions, 4 deletions
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(); |
