X-Git-Url: https://www.fi.muni.cz/~kas/git//home/kas/public_html/git/?a=blobdiff_plain;f=libdocument%2Fev-document.c;h=09f58870d363acab9b25fb3a540efa1777829149;hb=51261c0750f10aa8cc8687857a0a3b932fd87e3c;hp=b770f1092f34ee2dd73992dbd5fc798dbf0d0e84;hpb=b0f71f598fe56d88c43110d1e7fe7b7b396bbdaa;p=evince.git diff --git a/libdocument/ev-document.c b/libdocument/ev-document.c index b770f109..09f58870 100644 --- a/libdocument/ev-document.c +++ b/libdocument/ev-document.c @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ @@ -46,6 +46,8 @@ struct _EvDocumentPrivate gdouble max_width; gdouble max_height; + gdouble min_width; + gdouble min_height; gint max_label; gchar **page_labels; @@ -141,6 +143,7 @@ ev_document_class_init (EvDocumentClass *klass) klass->get_page = ev_document_impl_get_page; klass->get_info = ev_document_impl_get_info; + klass->get_backend_info = NULL; g_object_class->finalize = ev_document_finalize; } @@ -248,7 +251,6 @@ ev_document_load (EvDocument *document, */ priv->uri = g_strdup (uri); priv->n_pages = _ev_document_get_n_pages (document); - priv->info = _ev_document_get_info (document); for (i = 0; i < priv->n_pages; i++) { EvPage *page = ev_document_get_page (document, i); @@ -264,6 +266,8 @@ ev_document_load (EvDocument *document, priv->uniform_height = page_height; priv->max_width = priv->uniform_width; priv->max_height = priv->uniform_height; + priv->min_width = priv->uniform_width; + priv->min_height = priv->uniform_height; } else if (priv->uniform && (priv->uniform_width != page_width || priv->uniform_height != page_height)) { @@ -287,31 +291,29 @@ ev_document_load (EvDocument *document, if (page_width > priv->max_width) priv->max_width = page_width; + if (page_width < priv->min_width) + priv->min_width = page_width; if (page_height > priv->max_height) priv->max_height = page_height; + if (page_height < priv->min_height) + priv->min_height = page_height; } page_label = _ev_document_get_page_label (document, page); if (page_label) { - if (priv->page_labels) { - priv->page_labels[i] = page_label; - } else { - gchar *numeric_label; - - numeric_label = g_strdup_printf ("%d", i + 1); - if (strcmp (numeric_label, page_label) != 0) { - priv->page_labels = g_new0 (gchar *, priv->n_pages); - priv->page_labels[i] = page_label; - } - g_free (numeric_label); - } + if (!priv->page_labels) + priv->page_labels = g_new0 (gchar *, priv->n_pages); + + priv->page_labels[i] = page_label; priv->max_label = MAX (priv->max_label, g_utf8_strlen (page_label, 256)); } g_object_unref (page); } + + priv->info = _ev_document_get_info (document); } return retval; @@ -430,6 +432,18 @@ ev_document_get_info (EvDocument *document) return document->priv->info; } +gboolean +ev_document_get_backend_info (EvDocument *document, EvDocumentBackendInfo *info) +{ + g_return_val_if_fail (EV_IS_DOCUMENT (document), FALSE); + + EvDocumentClass *klass = EV_DOCUMENT_GET_CLASS (document); + if (klass->get_backend_info == NULL) + return FALSE; + + return klass->get_backend_info (document, info); +} + cairo_surface_t * ev_document_render (EvDocument *document, EvRenderContext *rc) @@ -477,6 +491,19 @@ ev_document_get_max_page_size (EvDocument *document, *height = document->priv->max_height; } +void +ev_document_get_min_page_size (EvDocument *document, + gdouble *width, + gdouble *height) +{ + g_return_if_fail (EV_IS_DOCUMENT (document)); + + if (width) + *width = document->priv->min_width; + if (height) + *height = document->priv->min_height; +} + gboolean ev_document_check_dimensions (EvDocument *document) {