75
74
typedef struct _DviDocumentClass DviDocumentClass;
77
static void dvi_document_document_thumbnails_iface_init (EvDocumentThumbnailsInterface *iface);
78
static void dvi_document_file_exporter_iface_init (EvFileExporterInterface *iface);
79
static void dvi_document_do_color_special (DviContext *dvi,
76
static void dvi_document_file_exporter_iface_init (EvFileExporterInterface *iface);
77
static void dvi_document_do_color_special (DviContext *dvi,
83
81
EV_BACKEND_REGISTER_WITH_CODE (DviDocument, dvi_document,
85
EV_BACKEND_IMPLEMENT_INTERFACE (EV_TYPE_DOCUMENT_THUMBNAILS, dvi_document_document_thumbnails_iface_init);
86
83
EV_BACKEND_IMPLEMENT_INTERFACE (EV_TYPE_FILE_EXPORTER, dvi_document_file_exporter_iface_init);
267
264
ev_document_class->support_synctex = dvi_document_support_synctex;
271
dvi_document_thumbnails_get_dimensions (EvDocumentThumbnails *document,
276
DviDocument *dvi_document = DVI_DOCUMENT (document);
277
gdouble page_width = dvi_document->base_width;
278
gdouble page_height = dvi_document->base_height;
280
if (rc->rotation == 90 || rc->rotation == 270) {
281
*width = (gint) (page_height * rc->scale);
282
*height = (gint) (page_width * rc->scale);
284
*width = (gint) (page_width * rc->scale);
285
*height = (gint) (page_height * rc->scale);
290
dvi_document_thumbnails_get_thumbnail (EvDocumentThumbnails *document,
294
DviDocument *dvi_document = DVI_DOCUMENT (document);
296
GdkPixbuf *rotated_pixbuf;
297
cairo_surface_t *surface;
298
gint thumb_width, thumb_height;
299
gint proposed_width, proposed_height;
301
thumb_width = (gint) (dvi_document->base_width * rc->scale);
302
thumb_height = (gint) (dvi_document->base_height * rc->scale);
304
g_mutex_lock (dvi_context_mutex);
306
mdvi_setpage (dvi_document->context, rc->page->index);
308
mdvi_set_shrink (dvi_document->context,
309
(int)dvi_document->base_width * dvi_document->params->hshrink / thumb_width,
310
(int)dvi_document->base_height * dvi_document->params->vshrink / thumb_height);
312
proposed_width = dvi_document->context->dvi_page_w * dvi_document->context->params.conv;
313
proposed_height = dvi_document->context->dvi_page_h * dvi_document->context->params.vconv;
316
mdvi_cairo_device_set_margins (&dvi_document->context->device,
317
MAX (thumb_width - proposed_width, 0) / 2,
318
MAX (thumb_height - proposed_height, 0) / 2);
320
mdvi_cairo_device_set_margins (&dvi_document->context->device,
321
MAX (thumb_width - proposed_width - 2, 0) / 2,
322
MAX (thumb_height - proposed_height - 2, 0) / 2);
325
mdvi_cairo_device_set_scale (&dvi_document->context->device, rc->scale);
326
mdvi_cairo_device_render (dvi_document->context);
327
surface = mdvi_cairo_device_get_surface (&dvi_document->context->device);
328
g_mutex_unlock (dvi_context_mutex);
330
pixbuf = ev_document_misc_pixbuf_from_surface (surface);
331
cairo_surface_destroy (surface);
333
rotated_pixbuf = gdk_pixbuf_rotate_simple (pixbuf, 360 - rc->rotation);
334
g_object_unref (pixbuf);
337
GdkPixbuf *tmp_pixbuf = rotated_pixbuf;
339
rotated_pixbuf = ev_document_misc_get_thumbnail_frame (-1, -1, tmp_pixbuf);
340
g_object_unref (tmp_pixbuf);
343
return rotated_pixbuf;
347
dvi_document_document_thumbnails_iface_init (EvDocumentThumbnailsInterface *iface)
349
iface->get_thumbnail = dvi_document_thumbnails_get_thumbnail;
350
iface->get_dimensions = dvi_document_thumbnails_get_dimensions;
353
267
/* EvFileExporterIface */
355
269
dvi_document_file_exporter_begin (EvFileExporter *exporter,