]> www.fi.muni.cz Git - evince.git/blobdiff - pdf/ev-poppler.cc
Removed EggRecentViewGtk
[evince.git] / pdf / ev-poppler.cc
index 1f1e4e506b5c46f27f0a35e61144f25a6fbb5b23..90bae3ae3251643e8957636a7b28bc12e21c3e66 100644 (file)
@@ -57,6 +57,7 @@ struct _PdfDocument
        gchar *password;
 
        PopplerOrientation orientation;
        gchar *password;
 
        PopplerOrientation orientation;
+       gboolean orientation_set;
 
        PopplerFontInfo *font_info;
        PopplerFontsIter *fonts_iter;
 
        PopplerFontInfo *font_info;
        PopplerFontsIter *fonts_iter;
@@ -175,6 +176,24 @@ pdf_document_save (EvDocument  *document,
        return retval;
 }
 
        return retval;
 }
 
+static PopplerOrientation
+get_document_orientation (PdfDocument *pdf_document)
+{
+#ifdef POPPLER_ORIENTATION
+       PopplerPage *page;
+
+       /* Should prolly be smarter here and check more than first page */
+       page = poppler_document_get_page (pdf_document->document, 0);
+       if (page) {
+               return poppler_page_get_orientation (page);
+       } else {
+               return POPPLER_ORIENTATION_PORTRAIT;
+       }
+#else
+       return POPPLER_ORIENTATION_PORTRAIT;
+#endif
+}
+
 static gboolean
 pdf_document_load (EvDocument   *document,
                   const char   *uri,
 static gboolean
 pdf_document_load (EvDocument   *document,
                   const char   *uri,
@@ -200,6 +219,15 @@ pdf_document_get_n_pages (EvDocument *document)
        return poppler_document_get_n_pages (PDF_DOCUMENT (document)->document);
 }
 
        return poppler_document_get_n_pages (PDF_DOCUMENT (document)->document);
 }
 
+/* FIXME This should not be necessary, poppler should rember it */
+static void
+set_page_orientation (PdfDocument *pdf_document, PopplerPage *page)
+{
+       if (pdf_document->orientation_set) {
+               poppler_page_set_orientation (page, pdf_document->orientation);
+       }
+}
+
 static void
 pdf_document_get_page_size (EvDocument   *document,
                            int           page,
 static void
 pdf_document_get_page_size (EvDocument   *document,
                            int           page,
@@ -210,7 +238,7 @@ pdf_document_get_page_size (EvDocument   *document,
        PopplerPage *poppler_page;
 
        poppler_page = poppler_document_get_page (pdf_document->document, page);
        PopplerPage *poppler_page;
 
        poppler_page = poppler_document_get_page (pdf_document->document, page);
-       poppler_page_set_orientation (poppler_page, pdf_document->orientation);
+       set_page_orientation (pdf_document, poppler_page);
        poppler_page_get_size (poppler_page, width, height);
 }
 
        poppler_page_get_size (poppler_page, width, height);
 }
 
@@ -284,7 +312,7 @@ pdf_document_render_pixbuf (EvDocument   *document,
        pdf_document = PDF_DOCUMENT (document);
        poppler_page = poppler_document_get_page (pdf_document->document,
                                                  page);
        pdf_document = PDF_DOCUMENT (document);
        poppler_page = poppler_document_get_page (pdf_document->document,
                                                  page);
-       poppler_page_set_orientation (poppler_page, pdf_document->orientation);
+       set_page_orientation (pdf_document, poppler_page);
 
        poppler_page_get_size (poppler_page, &width_points, &height_points);
        width = (int) ((width_points * scale) + 0.5);
 
        poppler_page_get_size (poppler_page, &width_points, &height_points);
        width = (int) ((width_points * scale) + 0.5);
@@ -477,6 +505,7 @@ pdf_document_get_text (EvDocument *document, int page, EvRectangle *rect)
        double height;
        
        poppler_page = poppler_document_get_page (pdf_document->document, page);
        double height;
        
        poppler_page = poppler_document_get_page (pdf_document->document, page);
+       set_page_orientation (pdf_document, poppler_page);
        g_return_val_if_fail (poppler_page != NULL, NULL);
 
        poppler_page_get_size (poppler_page, NULL, &height);
        g_return_val_if_fail (poppler_page != NULL, NULL);
 
        poppler_page_get_size (poppler_page, NULL, &height);
@@ -488,6 +517,34 @@ pdf_document_get_text (EvDocument *document, int page, EvRectangle *rect)
        return poppler_page_get_text (poppler_page, &r);
 }
 
        return poppler_page_get_text (poppler_page, &r);
 }
 
+static EvOrientation
+pdf_document_get_orientation (EvDocument *document)
+{
+       EvOrientation result;
+       PdfDocument *pdf_document = PDF_DOCUMENT (document);
+
+       if (!pdf_document->orientation_set) {
+               pdf_document->orientation = get_document_orientation (pdf_document);
+       }
+       
+       switch (pdf_document->orientation) {
+               case POPPLER_ORIENTATION_PORTRAIT:
+                       result = EV_ORIENTATION_PORTRAIT;
+                       break;
+               case POPPLER_ORIENTATION_LANDSCAPE:
+                       result = EV_ORIENTATION_LANDSCAPE;
+                       break;
+               case POPPLER_ORIENTATION_UPSIDEDOWN:
+                       result = EV_ORIENTATION_UPSIDEDOWN;
+                       break;
+               case POPPLER_ORIENTATION_SEASCAPE:
+                       result = EV_ORIENTATION_SEASCAPE;
+                       break;
+       }
+
+       return result;
+}
+
 static void
 pdf_document_set_orientation (EvDocument *document, EvOrientation orientation)
 {
 static void
 pdf_document_set_orientation (EvDocument *document, EvOrientation orientation)
 {
@@ -495,9 +552,6 @@ pdf_document_set_orientation (EvDocument *document, EvOrientation orientation)
        PopplerOrientation poppler_orientation;
 
        switch (orientation) {
        PopplerOrientation poppler_orientation;
 
        switch (orientation) {
-               case EV_ORIENTATION_DOCUMENT:
-                       poppler_orientation = POPPLER_ORIENTATION_DOCUMENT;
-                       break;
                case EV_ORIENTATION_PORTRAIT:
                        poppler_orientation = POPPLER_ORIENTATION_PORTRAIT;
                        break;
                case EV_ORIENTATION_PORTRAIT:
                        poppler_orientation = POPPLER_ORIENTATION_PORTRAIT;
                        break;
@@ -513,6 +567,7 @@ pdf_document_set_orientation (EvDocument *document, EvOrientation orientation)
        }
 
        pdf_document->orientation = poppler_orientation;
        }
 
        pdf_document->orientation = poppler_orientation;
+       pdf_document->orientation_set = TRUE;
 }
 
 static void
 }
 
 static void
@@ -529,6 +584,7 @@ pdf_document_document_iface_init (EvDocumentIface *iface)
        iface->can_get_text = pdf_document_can_get_text;
        iface->get_info = pdf_document_get_info;
        iface->set_orientation = pdf_document_set_orientation;
        iface->can_get_text = pdf_document_can_get_text;
        iface->get_info = pdf_document_get_info;
        iface->set_orientation = pdf_document_set_orientation;
+       iface->get_orientation = pdf_document_get_orientation;
 };
 
 static void
 };
 
 static void
@@ -595,6 +651,10 @@ pdf_document_fonts_fill_model (EvDocumentFonts *document_fonts,
                        const char *name;
                
                        name = poppler_fonts_iter_get_name (iter);
                        const char *name;
                
                        name = poppler_fonts_iter_get_name (iter);
+                       if (name == NULL) {
+                               name = _("No name");
+                       }
+
                        gtk_list_store_append (GTK_LIST_STORE (model), &list_iter);
                        gtk_list_store_set (GTK_LIST_STORE (model), &list_iter,
                                            EV_DOCUMENT_FONTS_COLUMN_NAME, name,
                        gtk_list_store_append (GTK_LIST_STORE (model), &list_iter);
                        gtk_list_store_set (GTK_LIST_STORE (model), &list_iter,
                                            EV_DOCUMENT_FONTS_COLUMN_NAME, name,
@@ -695,7 +755,7 @@ pdf_document_links_get_links_model (EvDocumentLinks *document_links)
        if (iter != NULL) {
                model = (GtkTreeModel *) gtk_tree_store_new (EV_DOCUMENT_LINKS_COLUMN_NUM_COLUMNS,
                                                             G_TYPE_STRING,
        if (iter != NULL) {
                model = (GtkTreeModel *) gtk_tree_store_new (EV_DOCUMENT_LINKS_COLUMN_NUM_COLUMNS,
                                                             G_TYPE_STRING,
-                                                            G_TYPE_POINTER,
+                                                            G_TYPE_OBJECT,
                                                             G_TYPE_BOOLEAN);
                build_tree (pdf_document, model, NULL, iter);
                poppler_index_iter_free (iter);
                                                             G_TYPE_BOOLEAN);
                build_tree (pdf_document, model, NULL, iter);
                poppler_index_iter_free (iter);
@@ -725,7 +785,7 @@ make_thumbnail_for_size (PdfDocument *pdf_document,
        gdouble unscaled_width, unscaled_height;
 
        poppler_page = poppler_document_get_page (pdf_document->document, page);
        gdouble unscaled_width, unscaled_height;
 
        poppler_page = poppler_document_get_page (pdf_document->document, page);
-
+       set_page_orientation (pdf_document, poppler_page);
        g_return_val_if_fail (poppler_page != NULL, NULL);
 
        pdf_document_thumbnails_get_dimensions (EV_DOCUMENT_THUMBNAILS (pdf_document), page, size, &width, &height);
        g_return_val_if_fail (poppler_page != NULL, NULL);
 
        pdf_document_thumbnails_get_dimensions (EV_DOCUMENT_THUMBNAILS (pdf_document), page, size, &width, &height);
@@ -765,6 +825,7 @@ pdf_document_thumbnails_get_thumbnail (EvDocumentThumbnails *document_thumbnails
        pdf_document = PDF_DOCUMENT (document_thumbnails);
 
        poppler_page = poppler_document_get_page (pdf_document->document, page);
        pdf_document = PDF_DOCUMENT (document_thumbnails);
 
        poppler_page = poppler_document_get_page (pdf_document->document, page);
+       set_page_orientation (pdf_document, poppler_page);
        g_return_val_if_fail (poppler_page != NULL, NULL);
 
        pixbuf = poppler_page_get_thumbnail (poppler_page);
        g_return_val_if_fail (poppler_page != NULL, NULL);
 
        pixbuf = poppler_page_get_thumbnail (poppler_page);
@@ -797,6 +858,7 @@ pdf_document_thumbnails_get_dimensions (EvDocumentThumbnails *document_thumbnail
        
        pdf_document = PDF_DOCUMENT (document_thumbnails);
        poppler_page = poppler_document_get_page (pdf_document->document, page);
        
        pdf_document = PDF_DOCUMENT (document_thumbnails);
        poppler_page = poppler_document_get_page (pdf_document->document, page);
+       set_page_orientation (pdf_document, poppler_page);
 
        g_return_if_fail (width != NULL);
        g_return_if_fail (height != NULL);
 
        g_return_if_fail (width != NULL);
        g_return_if_fail (height != NULL);
@@ -837,6 +899,7 @@ pdf_document_search_idle_callback (void *data)
 
        page = poppler_document_get_page (search->document->document,
                                          search->search_page);
 
        page = poppler_document_get_page (search->document->document,
                                          search->search_page);
+       set_page_orientation (pdf_document, page);
 
        ev_document_doc_mutex_lock ();
        matches = poppler_page_find_text (page, search->text);
 
        ev_document_doc_mutex_lock ();
        matches = poppler_page_find_text (page, search->text);
@@ -973,6 +1036,7 @@ pdf_document_find_get_result (EvDocumentFind *document_find,
                return FALSE;
 
        poppler_page = poppler_document_get_page (pdf_document->document, page);
                return FALSE;
 
        poppler_page = poppler_document_get_page (pdf_document->document, page);
+       set_page_orientation (pdf_document, poppler_page);
        poppler_page_get_size (poppler_page, NULL, &height);
        rectangle->x1 = r->x1;
        rectangle->y1 = height - r->y2;
        poppler_page_get_size (poppler_page, NULL, &height);
        rectangle->x1 = r->x1;
        rectangle->y1 = height - r->y2;
@@ -1059,6 +1123,7 @@ pdf_document_ps_exporter_do_page (EvPSExporter *exporter, int page)
        g_return_if_fail (pdf_document->ps_file != NULL);
 
        poppler_page = poppler_document_get_page (pdf_document->document, page);
        g_return_if_fail (pdf_document->ps_file != NULL);
 
        poppler_page = poppler_document_get_page (pdf_document->document, page);
+       set_page_orientation (pdf_document, poppler_page);
        poppler_page_render_to_ps (poppler_page, pdf_document->ps_file);
 }
 
        poppler_page_render_to_ps (poppler_page, pdf_document->ps_file);
 }