X-Git-Url: https://www.fi.muni.cz/~kas/git//home/kas/public_html/git/?a=blobdiff_plain;ds=sidebyside;f=dvi%2Fdvi-document.c;h=4de5e64eddc74457ccbcb405063abf2abd8f9cf9;hb=5e2fe6124f89d26435a4ae3cc3de882f5082609d;hp=05bc5b617b27b2e405a44499c9aa399e32261840;hpb=2a08b88d7fc1397335cc85812b8f2bd4d53125d9;p=evince.git diff --git a/dvi/dvi-document.c b/dvi/dvi-document.c index 05bc5b61..4de5e64e 100644 --- a/dvi/dvi-document.c +++ b/dvi/dvi-document.c @@ -54,6 +54,8 @@ struct _DviDocument double base_width; double base_height; + + gchar *uri; }; typedef struct _DviDocumentClass DviDocumentClass; @@ -90,10 +92,12 @@ dvi_document_load (EvDocument *document, return FALSE; } + g_mutex_lock (dvi_context_mutex); if (dvi_document->context) mdvi_destroy_context (dvi_document->context); dvi_document->context = mdvi_init_context(dvi_document->params, dvi_document->spec, filename); + g_mutex_unlock (dvi_context_mutex); if (!dvi_document->context) { g_set_error (error, @@ -111,8 +115,8 @@ dvi_document_load (EvDocument *document, dvi_document->base_height = dvi_document->context->dvi_page_h * dvi_document->context->params.vconv + 2 * unit2pix(dvi_document->params->vdpi, MDVI_VMARGIN) / dvi_document->params->vshrink; - dvi_context_mutex = g_mutex_new (); - + g_free (dvi_document->uri); + dvi_document->uri = g_strdup (uri); return TRUE; } @@ -123,8 +127,9 @@ dvi_document_save (EvDocument *document, const char *uri, GError **error) { - g_warning ("dvi_document_save not implemented"); /* FIXME */ - return TRUE; + DviDocument *dvi_document = DVI_DOCUMENT (document); + + return ev_xfer_uri_simple (dvi_document->uri, uri, error); } static int @@ -191,7 +196,7 @@ dvi_document_render_pixbuf (EvDocument *document, g_mutex_unlock (dvi_context_mutex); - rotated_pixbuf = gdk_pixbuf_rotate_simple (pixbuf, rc->rotation); + rotated_pixbuf = gdk_pixbuf_rotate_simple (pixbuf, 360 - rc->rotation); g_object_unref (pixbuf); return rotated_pixbuf; @@ -201,15 +206,19 @@ static void dvi_document_finalize (GObject *object) { DviDocument *dvi_document = DVI_DOCUMENT(object); - + + g_mutex_lock (dvi_context_mutex); if (dvi_document->context) { mdvi_pixbuf_device_free (&dvi_document->context->device); mdvi_destroy_context (dvi_document->context); } + g_mutex_unlock (dvi_context_mutex); if (dvi_document->params) g_free (dvi_document->params); + + g_free (dvi_document->uri); G_OBJECT_CLASS (dvi_document_parent_class)->finalize (object); } @@ -221,6 +230,11 @@ dvi_document_class_init (DviDocumentClass *klass) GObjectClass *gobject_class = G_OBJECT_CLASS (klass); gobject_class->finalize = dvi_document_finalize; + + mdvi_init_kpathsea("evince", MDVI_MFMODE, MDVI_FALLBACK_FONT, MDVI_DPI); + mdvi_register_fonts (); + + dvi_context_mutex = g_mutex_new (); } static gboolean @@ -310,19 +324,15 @@ dvi_document_thumbnails_get_thumbnail (EvDocumentThumbnails *document, pixbuf = mdvi_pixbuf_device_get_pixbuf (&dvi_document->context->device); g_mutex_unlock (dvi_context_mutex); - - if (border) { - border_pixbuf = ev_document_misc_get_thumbnail_frame (thumb_width, thumb_height, NULL); - gdk_pixbuf_copy_area (pixbuf, 0, 0, - thumb_width - 2, thumb_height - 2, - border_pixbuf, 2, 2); - g_object_unref (pixbuf); - pixbuf = border_pixbuf; - } - - rotated_pixbuf = gdk_pixbuf_rotate_simple (pixbuf, rotation); + rotated_pixbuf = gdk_pixbuf_rotate_simple (pixbuf, 360 - rotation); g_object_unref (pixbuf); + + if (border) { + GdkPixbuf *tmp_pixbuf = rotated_pixbuf; + rotated_pixbuf = ev_document_misc_get_thumbnail_frame (-1, -1, 0, tmp_pixbuf); + g_object_unref (tmp_pixbuf); + } return rotated_pixbuf; } @@ -356,10 +366,6 @@ dvi_document_init_params (DviDocument *dvi_document) dvi_document->params->bg = 0xffffffff; dvi_document->params->fg = 0xff000000; - - mdvi_init_kpathsea("evince", MDVI_MFMODE, MDVI_FALLBACK_FONT, MDVI_DPI); - - mdvi_register_fonts (); } static void