]> www.fi.muni.cz Git - evince.git/blobdiff - pdf/ev-poppler.cc
Release ref on the pixbuf cache when changing document.
[evince.git] / pdf / ev-poppler.cc
index 7b55b08cbdbc2ec286351c20349c15741ff6d3fa..dbc81d2d180e627569ec7685ed35019cf80e3adf 100644 (file)
@@ -254,8 +254,8 @@ pdf_document_render_pixbuf (EvDocument   *document,
                                                  page);
 
        poppler_page_get_size (poppler_page, &width_points, &height_points);
-       width = (int) ceil (width_points * scale);
-       height = (int) ceil (height_points * scale);
+       width = (int) ((width_points * scale) + 0.5);
+       height = (int) ((height_points * scale) + 0.5);
 
        pixbuf = gdk_pixbuf_new (GDK_COLORSPACE_RGB,
                                 FALSE, 8,
@@ -305,6 +305,7 @@ pdf_document_get_info (EvDocument *document)
        PopplerPageLayout layout;
        PopplerPageMode mode;
        PopplerViewerPreferences view_prefs;
+       PopplerPermissions permissions;
 
        info = g_new0 (EvDocumentInfo, 1);
 
@@ -316,6 +317,7 @@ pdf_document_get_info (EvDocument *document)
                            EV_DOCUMENT_INFO_LAYOUT |
                            EV_DOCUMENT_INFO_START_MODE |
                            /* Missing EV_DOCUMENT_INFO_CREATION_DATE | */
+                           EV_DOCUMENT_INFO_PERMISSIONS |
                            EV_DOCUMENT_INFO_UI_HINTS;
 
 
@@ -328,6 +330,7 @@ pdf_document_get_info (EvDocument *document)
                      "page-mode", &mode,
                      "page-layout", &layout,
                      "viewer-preferences", &view_prefs,
+                     "permissions", &permissions,
                      NULL);
 
        switch (layout) {
@@ -394,6 +397,19 @@ pdf_document_get_info (EvDocument *document)
                info->ui_hints |=  EV_DOCUMENT_UI_HINT_DIRECTION_RTL;
        }
 
+       info->permissions = 0;
+       if (permissions & POPPLER_PERMISSIONS_OK_TO_PRINT) {
+               info->permissions |= EV_DOCUMENT_PERMISSIONS_OK_TO_PRINT;
+       }
+       if (permissions & POPPLER_PERMISSIONS_OK_TO_MODIFY) {
+               info->permissions |= EV_DOCUMENT_PERMISSIONS_OK_TO_MODIFY;
+       }
+       if (permissions & POPPLER_PERMISSIONS_OK_TO_COPY) {
+               info->permissions |= EV_DOCUMENT_PERMISSIONS_OK_TO_COPY;
+       }
+       if (permissions & POPPLER_PERMISSIONS_OK_TO_ADD_NOTES) {
+               info->permissions |= EV_DOCUMENT_PERMISSIONS_OK_TO_ADD_NOTES;
+       }
        return info;
 }
 
@@ -868,14 +884,14 @@ pdf_document_find_iface_init (EvDocumentFindIface *iface)
 }
 
 static void
-pdf_document_ps_exporter_begin (EvPSExporter *exporter, const char *filename)
+pdf_document_ps_exporter_begin (EvPSExporter *exporter, const char *filename,
+                               int first_page, int last_page)
 {
        PdfDocument *pdf_document = PDF_DOCUMENT (exporter);
-       int n_pages;
        
-       n_pages = pdf_document_get_n_pages (EV_DOCUMENT (exporter));
-       pdf_document->ps_file = poppler_ps_file_new (pdf_document->document,
-                                                    filename, n_pages);
+       pdf_document->ps_file = poppler_ps_file_new (pdf_document->document, filename,
+                                                    first_page,
+                                                    last_page - first_page + 1);
 }
 
 static void