]> www.fi.muni.cz Git - evince.git/commitdiff
scale the reported height by using the resolution aspect ratio
authorMatthew S. Wilson <msw@rpath.com>
Sat, 2 Jul 2005 14:49:23 +0000 (14:49 +0000)
committerMatt Wilson <msw@src.gnome.org>
Sat, 2 Jul 2005 14:49:23 +0000 (14:49 +0000)
2005-07-02  Matthew S. Wilson  <msw@rpath.com>

* tiff/tiff-document.c (tiff_document_get_page_size): scale the
reported height by using the resolution aspect ratio
(tiff_document_render_pixbuf): scale the pixbuf using the
resolution aspect ratio

ChangeLog
tiff/tiff-document.c

index 0afe222c1a403a6553eca252d2008b3b3f0684a4..2da4d9a1f54e97ee898ab8e1c19f852b885b9ce8 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2005-07-02  Matthew S. Wilson  <msw@rpath.com>
+
+       * tiff/tiff-document.c (tiff_document_get_page_size): scale the
+       reported height by using the resolution aspect ratio
+       (tiff_document_render_pixbuf): scale the pixbuf using the
+       resolution aspect ratio
+
 2005-07-01  Nickolay V. Shmyrev  <nshmyrev@yandex.ru>
 
        * configure.ac:
index f2ed498651d58e51232608a3b474025ead415e0e..3324e7d1d664ccb325067806c92f94da7baf3689 100644 (file)
@@ -90,7 +90,7 @@ tiff_document_load (EvDocument  *document,
   if (tiff)
     {
       guint32 w, h;
-      
+      /* FIXME: unused data? why bother here */
       TIFFGetField(tiff, TIFFTAG_IMAGEWIDTH, &w);
       TIFFGetField(tiff, TIFFTAG_IMAGELENGTH, &h);
     }
@@ -143,6 +143,7 @@ tiff_document_get_page_size (EvDocument   *document,
                             double       *height)
 {
   guint32 w, h;
+  gfloat x_res, y_res;
   TiffDocument *tiff_document = TIFF_DOCUMENT (document);
 
   g_return_if_fail (TIFF_IS_DOCUMENT (document));
@@ -157,6 +158,9 @@ tiff_document_get_page_size (EvDocument   *document,
 
   TIFFGetField (tiff_document->tiff, TIFFTAG_IMAGEWIDTH, &w);
   TIFFGetField (tiff_document->tiff, TIFFTAG_IMAGELENGTH, &h);
+  TIFFGetField (tiff_document->tiff, TIFFTAG_XRESOLUTION, &x_res);
+  TIFFGetField (tiff_document->tiff, TIFFTAG_YRESOLUTION, &y_res);
+  h = h * (x_res / y_res);
 
   if (tiff_document->orientation == EV_ORIENTATION_PORTRAIT ||
       tiff_document->orientation ==  EV_ORIENTATION_UPSIDEDOWN) {
@@ -210,6 +214,7 @@ tiff_document_render_pixbuf (EvDocument      *document,
 {
   TiffDocument *tiff_document = TIFF_DOCUMENT (document);
   int width, height;
+  float x_res, y_res;
   gint rowstride, bytes;
   guchar *pixels = NULL;
   GdkPixbuf *pixbuf;
@@ -238,6 +243,18 @@ tiff_document_render_pixbuf (EvDocument      *document,
       return NULL;
     }
 
+  if (!TIFFGetField (tiff_document->tiff, TIFFTAG_XRESOLUTION, &x_res))
+    {
+      pop_handlers ();
+      return NULL;
+    }
+
+  if (! TIFFGetField (tiff_document->tiff, TIFFTAG_YRESOLUTION, &y_res))
+    {
+      pop_handlers ();
+      return NULL;
+    }
+
   pop_handlers ();
 
   /* Sanity check the doc */
@@ -268,7 +285,7 @@ tiff_document_render_pixbuf (EvDocument      *document,
 
   scaled_pixbuf = gdk_pixbuf_scale_simple (pixbuf,
                                           width * rc->scale,
-                                          height * rc->scale,
+                                          height * rc->scale * (x_res/y_res),
                                           GDK_INTERP_BILINEAR);
   g_object_unref (pixbuf);