summaryrefslogtreecommitdiffstats
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
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)
-rw-r--r--configure.ac20
-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
5 files changed, 59 insertions, 9 deletions
diff --git a/configure.ac b/configure.ac
index e76b63c19..da277d1bb 100644
--- a/configure.ac
+++ b/configure.ac
@@ -208,11 +208,29 @@ fi
dnl ******************************
dnl Check for libpng
dnl ******************************
-AC_CHECK_LIB(png, png_read_info, [AC_CHECK_HEADER(png.h, png_ok=yes, png_ok=yes)], png_ok=no, -lz -lm)
+AC_CHECK_LIB(png, png_read_info, [AC_CHECK_HEADER(png.h, png_ok=yes, png_ok=no)], png_ok=no, -lz -lm)
if test "x$png_ok" != "xyes"; then
AC_MSG_ERROR([libpng >= 1.2 is needed to compile inkscape])
fi
+dnl ******************************
+dnl Check for libexif
+dnl ******************************
+AC_CHECK_LIB(exif, exif_data_new_from_file, [AC_CHECK_HEADER(libexif/exif-data.h, exif_ok=yes, exif_ok=no)], exif_ok=no, -lm)
+if test "x$exif_ok" = "xyes"; then
+ LIBS="-lexif $LIBS"
+ AC_DEFINE(HAVE_EXIF, 1, [Use libexif])
+fi
+
+dnl ******************************
+dnl Check for libjpeg
+dnl ******************************
+AC_CHECK_LIB(jpeg, jpeg_CreateDecompress, [AC_CHECK_HEADER(jpeglib.h, jpeg_ok=yes, jpeg_ok=no)], jpeg_ok=no)
+if test "x$jpeg_ok" = "xyes"; then
+ LIBS="-ljpeg $LIBS"
+ AC_DEFINE(HAVE_JPEG, 1, [Use libjpeg])
+fi
+
dnl Handle possible dlopen requirement for libgc
dnl Isn't this internal to something in autoconf? Couldn't find it...
AC_CHECK_LIB([dld], [shl_load], [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-dld"], [AC_CHECK_FUNC([dlopen],
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;