]> www.fi.muni.cz Git - evince.git/blobdiff - backend/tiff/tiff-document.c
Added si
[evince.git] / backend / tiff / tiff-document.c
index c6f4db2b76bde686c78d463af0bfb55b35de7047..d8bee9e529c0654d105011669dee450f59cf64c9 100644 (file)
 /* FIXME: Should probably buffer calls to libtiff with TIFFSetWarningHandler
  */
 
+#include "config.h"
+
+#include <config.h>
 #include <stdio.h>
 #include <glib.h>
+#include <glib/gi18n.h>
 
 #include "tiffio.h"
 #include "tiff2ps.h"
@@ -29,6 +33,7 @@
 #include "ev-document-misc.h"
 #include "ev-document-thumbnails.h"
 #include "ev-file-exporter.h"
+#include "ev-file-helpers.h"
 
 struct _TiffDocumentClass
 {
@@ -52,9 +57,8 @@ static void tiff_document_document_iface_init (EvDocumentIface *iface);
 static void tiff_document_document_thumbnails_iface_init (EvDocumentThumbnailsIface *iface);
 static void tiff_document_document_file_exporter_iface_init (EvFileExporterIface *iface);
 
-G_DEFINE_TYPE_WITH_CODE (TiffDocument, tiff_document, G_TYPE_OBJECT,
-                         { G_IMPLEMENT_INTERFACE (EV_TYPE_DOCUMENT,
-                                                 tiff_document_document_iface_init);
+EV_BACKEND_REGISTER_WITH_CODE (TiffDocument, tiff_document,
+                        {
                           G_IMPLEMENT_INTERFACE (EV_TYPE_DOCUMENT_THUMBNAILS,
                                                  tiff_document_document_thumbnails_iface_init);
                           G_IMPLEMENT_INTERFACE (EV_TYPE_FILE_EXPORTER,
@@ -210,9 +214,7 @@ tiff_document_render (EvDocument      *document,
        float x_res, y_res;
        gint rowstride, bytes;
        guchar *pixels = NULL;
-       GdkPixbuf *pixbuf;
-       GdkPixbuf *scaled_pixbuf;
-       GdkPixbuf *rotated_pixbuf;
+       guchar *p;
        cairo_surface_t *surface;
        cairo_surface_t *rotated_surface;
        static const cairo_user_data_key_t key;
@@ -271,6 +273,23 @@ tiff_document_render (EvDocument      *document,
                                   ORIENTATION_TOPLEFT, 1);
        pop_handlers ();
 
+       /* Convert the format returned by libtiff to
+       * what cairo expects
+       */
+       p = pixels;
+       while (p < pixels + bytes) {
+               uint32 pixel = *(uint32 *)p;
+               int r = TIFFGetR(pixel);
+               int g = TIFFGetG(pixel);
+               int b = TIFFGetB(pixel);
+               int a = TIFFGetA(pixel);
+               
+               *p++ = b;
+               *p++ = g;
+               *p++ = r;
+               *p++ = a;
+       }
+
        rotated_surface = ev_document_misc_surface_rotate_and_scale (surface,
                                                                     (width * rc->scale) + 0.5,
                                                                     (height * rc->scale * (x_res / y_res)) + 0.5,
@@ -373,12 +392,6 @@ tiff_document_class_init (TiffDocumentClass *klass)
        gobject_class->finalize = tiff_document_finalize;
 }
 
-static gboolean
-tiff_document_can_get_text (EvDocument *document)
-{
-       return FALSE;
-}
-
 static EvDocumentInfo *
 tiff_document_get_info (EvDocument *document)
 {
@@ -395,7 +408,6 @@ tiff_document_document_iface_init (EvDocumentIface *iface)
 {
        iface->load = tiff_document_load;
        iface->save = tiff_document_save;
-       iface->can_get_text = tiff_document_can_get_text;
        iface->get_n_pages = tiff_document_get_n_pages;
        iface->get_page_size = tiff_document_get_page_size;
        iface->render = tiff_document_render;