GdkPixbuf *pixbuf,
PSDocument *ps_document);
-G_DEFINE_TYPE_WITH_CODE (PSDocument, ps_document, G_TYPE_OBJECT,
+EV_BACKEND_REGISTER_WITH_CODE (PSDocument, ps_document,
{
- G_IMPLEMENT_INTERFACE (EV_TYPE_DOCUMENT,
- ps_document_document_iface_init);
G_IMPLEMENT_INTERFACE (EV_TYPE_DOCUMENT_THUMBNAILS,
ps_document_document_thumbnails_iface_init);
G_IMPLEMENT_INTERFACE (EV_TYPE_FILE_EXPORTER,
g_set_error (error,
G_FILE_ERROR,
G_FILE_ERROR_NOENT,
- _("Cannot open file “%s”.\n"), /* FIXME: remove \n after freeze */
+ _("Cannot open file “%s”."),
filename_dsp);
g_free (filename_dsp);
g_set_error (error,
G_FILE_ERROR,
G_FILE_ERROR_NOENT,
- _("Cannot open file “%s”.\n"), /* FIXME: remove \n after freeze */
+ _("Cannot open file “%s”."),
filename_dsp);
g_free (filename_dsp);
}
}
-static gboolean
-ps_document_can_get_text (EvDocument *document)
-{
- return FALSE;
-}
-
static EvDocumentInfo *
ps_document_get_info (EvDocument *document)
{
{
iface->load = ps_document_load;
iface->save = ps_document_save;
- iface->can_get_text = ps_document_can_get_text;
iface->get_n_pages = ps_document_get_n_pages;
iface->get_page_size = ps_document_get_page_size;
iface->get_info = ps_document_get_info;
static GdkPixbuf *
ps_document_thumbnails_get_thumbnail (EvDocumentThumbnails *document_thumbnails,
- gint page,
- gint rotation,
- gint size,
+ EvRenderContext *rc,
gboolean border)
{
PSDocument *ps_document;
GdkPixbuf *pixbuf = NULL;
- gdouble page_width, page_height;
- gdouble scale;
ps_document = PS_DOCUMENT (document_thumbnails);
ps_document->thumbs_mutex = g_mutex_new ();
ps_document->thumbs_cond = g_cond_new ();
- ps_document_get_page_size (EV_DOCUMENT (ps_document), page,
- &page_width, &page_height);
- scale = size / page_width;
-
- rotation = (rotation + ps_document_get_page_rotation (ps_document, page)) % 360;
-
- if (!ps_document->thumbs_rc) {
- ps_document->thumbs_rc = ev_render_context_new (rotation, page, scale);
- } else {
- ev_render_context_set_page (ps_document->thumbs_rc, page);
- ev_render_context_set_scale (ps_document->thumbs_rc, scale);
- ev_render_context_set_rotation (ps_document->thumbs_rc, rotation);
- }
+ if (ps_document->thumbs_rc)
+ g_object_unref (ps_document->thumbs_rc);
+ ps_document->thumbs_rc = g_object_ref (rc);
ev_document_doc_mutex_unlock ();
g_mutex_lock (ps_document->thumbs_mutex);
if (border) {
GdkPixbuf *border_pixbuf;
- border_pixbuf = ev_document_misc_get_thumbnail_frame (-1, -1, rotation, pixbuf);
+ border_pixbuf = ev_document_misc_get_thumbnail_frame (-1, -1, pixbuf);
g_object_unref (pixbuf);
pixbuf = border_pixbuf;
}
static void
ps_document_thumbnails_get_dimensions (EvDocumentThumbnails *document_thumbnails,
- gint page,
- gint size,
+ EvRenderContext *rc,
gint *width,
gint *height)
{
ps_document = PS_DOCUMENT (document_thumbnails);
ps_document_get_page_size (EV_DOCUMENT (ps_document),
- page,
+ rc->page,
&page_width, &page_height);
- *width = size;
- *height = (int) (size * page_height / page_width);
+
+ if (rc->rotation == 90 || rc->rotation == 270) {
+ *width = (gint) (page_height * rc->scale);
+ *height = (gint) (page_width * rc->scale);
+ } else {
+ *width = (gint) (page_width * rc->scale);
+ *height = (gint) (page_height * rc->scale);
+ }
}
static void
}
/* EvFileExporterIface */
-static gboolean
-ps_document_file_exporter_format_supported (EvFileExporter *exporter,
- EvFileExporterFormat format)
-{
- return (format == EV_FILE_FORMAT_PS);
-}
-
static void
-ps_document_file_exporter_begin (EvFileExporter *exporter,
- EvFileExporterFormat format,
- const char *filename,
- int first_page,
- int last_page,
- double width,
- double height,
- gboolean duplex)
+ps_document_file_exporter_begin (EvFileExporter *exporter,
+ EvFileExporterContext *fc)
{
PSDocument *document = PS_DOCUMENT (exporter);
document->ps_export_pagelist = g_new0 (int, document->doc->numpages);
}
- document->ps_export_filename = g_strdup (filename);
+ document->ps_export_filename = g_strdup (fc->filename);
}
static void
-ps_document_file_exporter_do_page (EvFileExporter *exporter, EvRenderContext *rc)
+ps_document_file_exporter_do_page (EvFileExporter *exporter,
+ EvRenderContext *rc)
{
PSDocument *document = PS_DOCUMENT (exporter);
}
}
+static EvFileExporterCapabilities
+ps_document_file_exporter_get_capabilities (EvFileExporter *exporter)
+{
+ return EV_FILE_EXPORTER_CAN_PAGE_SET |
+ EV_FILE_EXPORTER_CAN_GENERATE_PS;
+}
+
static void
ps_document_file_exporter_iface_init (EvFileExporterIface *iface)
{
- iface->format_supported = ps_document_file_exporter_format_supported;
iface->begin = ps_document_file_exporter_begin;
iface->do_page = ps_document_file_exporter_do_page;
iface->end = ps_document_file_exporter_end;
+ iface->get_capabilities = ps_document_file_exporter_get_capabilities;
}