]> www.fi.muni.cz Git - evince.git/blobdiff - backend/tiff/tiff-document.c
Print settings that are specific to the document are now saved per
[evince.git] / backend / tiff / tiff-document.c
index 8247c2a269b9751bc222f07c7447f4d7ab4d05e8..34275c13d3886ba92b0000f27a360734362fa243 100644 (file)
@@ -210,6 +210,7 @@ tiff_document_render (EvDocument      *document,
        float x_res, y_res;
        gint rowstride, bytes;
        guchar *pixels = NULL;
        float x_res, y_res;
        gint rowstride, bytes;
        guchar *pixels = NULL;
+       guchar *p;
        GdkPixbuf *pixbuf;
        GdkPixbuf *scaled_pixbuf;
        GdkPixbuf *rotated_pixbuf;
        GdkPixbuf *pixbuf;
        GdkPixbuf *scaled_pixbuf;
        GdkPixbuf *rotated_pixbuf;
@@ -259,7 +260,7 @@ tiff_document_render (EvDocument      *document,
                return NULL;
        
        surface = cairo_image_surface_create_for_data (pixels,
                return NULL;
        
        surface = cairo_image_surface_create_for_data (pixels,
-                                                      CAIRO_FORMAT_ARGB32,
+                                                      CAIRO_FORMAT_RGB24,
                                                       width, height,
                                                       rowstride);
        cairo_surface_set_user_data (surface, &key,
                                                       width, height,
                                                       rowstride);
        cairo_surface_set_user_data (surface, &key,
@@ -271,6 +272,23 @@ tiff_document_render (EvDocument      *document,
                                   ORIENTATION_TOPLEFT, 1);
        pop_handlers ();
 
                                   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,
        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 +391,6 @@ tiff_document_class_init (TiffDocumentClass *klass)
        gobject_class->finalize = tiff_document_finalize;
 }
 
        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)
 {
 static EvDocumentInfo *
 tiff_document_get_info (EvDocument *document)
 {
@@ -395,7 +407,6 @@ tiff_document_document_iface_init (EvDocumentIface *iface)
 {
        iface->load = tiff_document_load;
        iface->save = tiff_document_save;
 {
        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;
        iface->get_n_pages = tiff_document_get_n_pages;
        iface->get_page_size = tiff_document_get_page_size;
        iface->render = tiff_document_render;
@@ -450,27 +461,13 @@ tiff_document_document_thumbnails_iface_init (EvDocumentThumbnailsIface *iface)
 }
 
 /* postscript exporter implementation */
 }
 
 /* postscript exporter implementation */
-
-static gboolean
-tiff_document_file_exporter_format_supported (EvFileExporter      *exporter,
-                                             EvFileExporterFormat format)
-{
-       return (format == EV_FILE_FORMAT_PS);
-}
-
 static void
 static void
-tiff_document_file_exporter_begin (EvFileExporter      *exporter,
-                                  EvFileExporterFormat format,
-                                  const char          *filename,
-                                  int                  first_page,
-                                  int                  last_page,
-                                  double               width,
-                                  double               height,
-                                  gboolean             duplex)
+tiff_document_file_exporter_begin (EvFileExporter        *exporter,
+                                  EvFileExporterContext *fc)
 {
        TiffDocument *document = TIFF_DOCUMENT (exporter);
 
 {
        TiffDocument *document = TIFF_DOCUMENT (exporter);
 
-       document->ps_export_ctx = tiff2ps_context_new(filename);
+       document->ps_export_ctx = tiff2ps_context_new(fc->filename);
 }
 
 static void
 }
 
 static void
@@ -496,13 +493,23 @@ tiff_document_file_exporter_end (EvFileExporter *exporter)
        tiff2ps_context_finalize(document->ps_export_ctx);
 }
 
        tiff2ps_context_finalize(document->ps_export_ctx);
 }
 
+static EvFileExporterCapabilities
+tiff_document_file_exporter_get_capabilities (EvFileExporter *exporter)
+{
+       return  EV_FILE_EXPORTER_CAN_PAGE_SET |
+               EV_FILE_EXPORTER_CAN_COPIES |
+               EV_FILE_EXPORTER_CAN_COLLATE |
+               EV_FILE_EXPORTER_CAN_REVERSE |
+               EV_FILE_EXPORTER_CAN_GENERATE_PS;
+}
+
 static void
 tiff_document_document_file_exporter_iface_init (EvFileExporterIface *iface)
 {
 static void
 tiff_document_document_file_exporter_iface_init (EvFileExporterIface *iface)
 {
-       iface->format_supported = tiff_document_file_exporter_format_supported;
        iface->begin = tiff_document_file_exporter_begin;
        iface->do_page = tiff_document_file_exporter_do_page;
        iface->end = tiff_document_file_exporter_end;
        iface->begin = tiff_document_file_exporter_begin;
        iface->do_page = tiff_document_file_exporter_do_page;
        iface->end = tiff_document_file_exporter_end;
+       iface->get_capabilities = tiff_document_file_exporter_get_capabilities;
 }
 
 static void
 }
 
 static void