X-Git-Url: https://www.fi.muni.cz/~kas/git//home/kas/public_html/git/?a=blobdiff_plain;f=backend%2Ftiff%2Ftiff-document.c;h=d8bee9e529c0654d105011669dee450f59cf64c9;hb=09ab2eb203c380d4a952adaa44d5bd4a6f83fe07;hp=f813c47438066f00c6e4d55bd86a8e8d4cda4e7a;hpb=982600bbceb76a22d5c7b3e0cbe6e20421105ad6;p=evince.git diff --git a/backend/tiff/tiff-document.c b/backend/tiff/tiff-document.c index f813c474..d8bee9e5 100644 --- a/backend/tiff/tiff-document.c +++ b/backend/tiff/tiff-document.c @@ -20,8 +20,12 @@ /* FIXME: Should probably buffer calls to libtiff with TIFFSetWarningHandler */ +#include "config.h" + +#include #include #include +#include #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,