struct _EvDocumentPrivate
{
+ gchar *uri;
+
gint n_pages;
gboolean uniform;
{
EvDocument *document = EV_DOCUMENT (object);
+ if (document->priv->uri) {
+ g_free (document->priv->uri);
+ document->priv->uri = NULL;
+ }
+
if (document->priv->page_sizes) {
g_free (document->priv->page_sizes);
document->priv->page_sizes = NULL;
/* Cache some info about the document to avoid
* going to the backends since it requires locks
*/
+ 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);
if (i == 0) {
priv->uniform_width = page_width;
priv->uniform_height = page_height;
+ priv->max_width = priv->uniform_width;
+ priv->max_height = priv->uniform_height;
} else if (priv->uniform &&
(priv->uniform_width != page_width ||
priv->uniform_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);
}
- if (priv->uniform) {
- priv->max_width = priv->uniform_width;
- priv->max_height = priv->uniform_height;
- }
+ priv->info = _ev_document_get_info (document);
}
return retval;
gint
ev_document_get_n_pages (EvDocument *document)
{
+ g_return_val_if_fail (EV_IS_DOCUMENT (document), 0);
+
return document->priv->n_pages;
}
double *width,
double *height)
{
+ g_return_if_fail (EV_IS_DOCUMENT (document));
+ g_return_if_fail (page_index >= 0 || page_index < document->priv->n_pages);
+
if (width)
*width = document->priv->uniform ?
document->priv->uniform_width :
ev_document_get_page_label (EvDocument *document,
gint page_index)
{
+ g_return_val_if_fail (EV_IS_DOCUMENT (document), NULL);
+ g_return_val_if_fail (page_index >= 0 || page_index < document->priv->n_pages, NULL);
+
return (document->priv->page_labels && document->priv->page_labels[page_index]) ?
g_strdup (document->priv->page_labels[page_index]) :
g_strdup_printf ("%d", page_index + 1);
EvDocumentInfo *
ev_document_get_info (EvDocument *document)
{
+ g_return_val_if_fail (EV_IS_DOCUMENT (document), NULL);
+
return document->priv->info;
}
return klass->render (document, rc);
}
+const gchar *
+ev_document_get_uri (EvDocument *document)
+{
+ g_return_val_if_fail (EV_IS_DOCUMENT (document), NULL);
+
+ return document->priv->uri;
+}
+
const gchar *
ev_document_get_title (EvDocument *document)
{
+ g_return_val_if_fail (EV_IS_DOCUMENT (document), NULL);
+
return (document->priv->info->fields_mask & EV_DOCUMENT_INFO_TITLE) ?
document->priv->info->title : NULL;
}
gboolean
ev_document_is_page_size_uniform (EvDocument *document)
{
+ g_return_val_if_fail (EV_IS_DOCUMENT (document), TRUE);
+
return document->priv->uniform;
}
gdouble *width,
gdouble *height)
{
+ g_return_if_fail (EV_IS_DOCUMENT (document));
+
if (width)
*width = document->priv->max_width;
if (height)
*height = document->priv->max_height;
}
+gboolean
+ev_document_check_dimensions (EvDocument *document)
+{
+ g_return_val_if_fail (EV_IS_DOCUMENT (document), FALSE);
+
+ return (document->priv->max_width > 0 && document->priv->max_height > 0);
+}
+
gint
ev_document_get_max_label_len (EvDocument *document)
{
+ g_return_val_if_fail (EV_IS_DOCUMENT (document), -1);
+
return document->priv->max_label;
}
gboolean
ev_document_has_text_page_labels (EvDocument *document)
{
+ g_return_val_if_fail (EV_IS_DOCUMENT (document), FALSE);
+
return document->priv->page_labels != NULL;
}
gchar *endptr = NULL;
EvDocumentPrivate *priv = document->priv;
+ g_return_val_if_fail (EV_IS_DOCUMENT (document), FALSE);
+ g_return_val_if_fail (page_label != NULL, FALSE);
+ g_return_val_if_fail (page_index != NULL, FALSE);
+
/* First, look for a literal label match */
for (i = 0; priv->page_labels && i < priv->n_pages; i ++) {
if (priv->page_labels[i] != NULL &&
copy->ui_hints = info->ui_hints;
copy->permissions = info->permissions;
copy->n_pages = info->n_pages;
+ copy->license = ev_document_license_copy (info->license);
+
copy->fields_mask = info->fields_mask;
return copy;
g_free (info->producer);
g_free (info->linearized);
g_free (info->security);
-
+ ev_document_license_free (info->license);
+
g_free (info);
}
+/* EvDocumentLicense */
+EV_DEFINE_BOXED_TYPE (EvDocumentLicense, ev_document_license, ev_document_license_copy, ev_document_license_free)
+
+EvDocumentLicense *
+ev_document_license_new (void)
+{
+ return g_new0 (EvDocumentLicense, 1);
+}
+
+EvDocumentLicense *
+ev_document_license_copy (EvDocumentLicense *license)
+{
+ EvDocumentLicense *new_license;
+
+ if (!license)
+ return NULL;
+
+ new_license = ev_document_license_new ();
+
+ if (license->text)
+ new_license->text = g_strdup (license->text);
+ if (license->uri)
+ new_license->uri = g_strdup (license->uri);
+ if (license->web_statement)
+ new_license->web_statement = g_strdup (license->web_statement);
+
+ return new_license;
+}
+
+void
+ev_document_license_free (EvDocumentLicense *license)
+{
+ if (!license)
+ return;
+
+ g_free (license->text);
+ g_free (license->uri);
+ g_free (license->web_statement);
+
+ g_free (license);
+}
+
+const gchar *
+ev_document_license_get_text (EvDocumentLicense *license)
+{
+ return license->text;
+}
+
+const gchar *
+ev_document_license_get_uri (EvDocumentLicense *license)
+{
+ return license->uri;
+}
+
+const gchar *
+ev_document_license_get_web_statement (EvDocumentLicense *license)
+{
+ return license->web_statement;
+}
+
/* EvRectangle */
EV_DEFINE_BOXED_TYPE (EvRectangle, ev_rectangle, ev_rectangle_copy, ev_rectangle_free)