]> www.fi.muni.cz Git - evince.git/blobdiff - backend/pixbuf/pixbuf-document.c
Updated Korean translation.
[evince.git] / backend / pixbuf / pixbuf-document.c
index e3d064da4f95cbc2e9dfdcdcc5e43bb20a5547ef..b9b98a66e27af1613be18356d130744136f5fe10 100644 (file)
@@ -101,22 +101,27 @@ pixbuf_document_get_page_size (EvDocument   *document,
        *height = gdk_pixbuf_get_height (pixbuf_document->pixbuf);
 }
 
-static GdkPixbuf*
-pixbuf_document_render_pixbuf (EvDocument      *document,
-                              EvRenderContext *rc)
+static cairo_surface_t *
+pixbuf_document_render (EvDocument      *document,
+                       EvRenderContext *rc)
 {
        PixbufDocument *pixbuf_document = PIXBUF_DOCUMENT (document);
        GdkPixbuf *scaled_pixbuf, *rotated_pixbuf;
+       cairo_surface_t *surface;
 
-       scaled_pixbuf = gdk_pixbuf_scale_simple (pixbuf_document->pixbuf,
-                                                gdk_pixbuf_get_width (pixbuf_document->pixbuf) * rc->scale,
-                                                gdk_pixbuf_get_height (pixbuf_document->pixbuf) * rc->scale,
-                                                GDK_INTERP_BILINEAR);
-
+       scaled_pixbuf = gdk_pixbuf_scale_simple (
+               pixbuf_document->pixbuf,
+               (gdk_pixbuf_get_width (pixbuf_document->pixbuf) * rc->scale) + 0.5,
+               (gdk_pixbuf_get_height (pixbuf_document->pixbuf) * rc->scale) + 0.5,
+               GDK_INTERP_BILINEAR);
+       
         rotated_pixbuf = gdk_pixbuf_rotate_simple (scaled_pixbuf, 360 - rc->rotation);
         g_object_unref (scaled_pixbuf);
 
-       return rotated_pixbuf;
+       surface = ev_document_misc_surface_from_pixbuf (rotated_pixbuf);
+       g_object_unref (rotated_pixbuf);
+
+       return surface;
 }
 
 static void
@@ -138,12 +143,6 @@ pixbuf_document_class_init (PixbufDocumentClass *klass)
        gobject_class->finalize = pixbuf_document_finalize;
 }
 
-static gboolean
-pixbuf_document_can_get_text (EvDocument *document)
-{
-       return FALSE;
-}
-
 static EvDocumentInfo *
 pixbuf_document_get_info (EvDocument *document)
 {
@@ -160,33 +159,29 @@ pixbuf_document_document_iface_init (EvDocumentIface *iface)
 {
        iface->load = pixbuf_document_load;
        iface->save = pixbuf_document_save;
-       iface->can_get_text = pixbuf_document_can_get_text;
        iface->get_n_pages = pixbuf_document_get_n_pages;
        iface->get_page_size = pixbuf_document_get_page_size;
-       iface->render_pixbuf = pixbuf_document_render_pixbuf;
+       iface->render = pixbuf_document_render;
        iface->get_info = pixbuf_document_get_info;
 }
 
 static GdkPixbuf *
-pixbuf_document_thumbnails_get_thumbnail (EvDocumentThumbnails   *document,
-                                         gint                    page,
-                                         gint                    rotation,
-                                         gint                    size,
-                                         gboolean                border)
+pixbuf_document_thumbnails_get_thumbnail (EvDocumentThumbnails *document,
+                                         EvRenderContext      *rc,
+                                         gboolean              border)
 {
        PixbufDocument *pixbuf_document = PIXBUF_DOCUMENT (document);
        GdkPixbuf *pixbuf, *rotated_pixbuf;
-       gdouble scale_factor;
-       gint height;
+       gint width, height;
        
-       scale_factor = (gdouble)size / gdk_pixbuf_get_width (pixbuf_document->pixbuf);
-
-       height = gdk_pixbuf_get_height (pixbuf_document->pixbuf) * scale_factor;
+       width = (gint) (gdk_pixbuf_get_width (pixbuf_document->pixbuf) * rc->scale);
+       height = (gint) (gdk_pixbuf_get_height (pixbuf_document->pixbuf) * rc->scale);
        
-       pixbuf = gdk_pixbuf_scale_simple (pixbuf_document->pixbuf, size, height,
+       pixbuf = gdk_pixbuf_scale_simple (pixbuf_document->pixbuf,
+                                         width, height,
                                          GDK_INTERP_BILINEAR);
 
-       rotated_pixbuf = gdk_pixbuf_rotate_simple (pixbuf, 360 - rotation);
+       rotated_pixbuf = gdk_pixbuf_rotate_simple (pixbuf, 360 - rc->rotation);
         g_object_unref (pixbuf);
 
         return rotated_pixbuf;
@@ -194,18 +189,21 @@ pixbuf_document_thumbnails_get_thumbnail (EvDocumentThumbnails   *document,
 
 static void
 pixbuf_document_thumbnails_get_dimensions (EvDocumentThumbnails *document,
-                                          gint                  page,
-                                          gint                  suggested_width,
-                                          gint                  *width,
-                                          gint                  *height)
+                                          EvRenderContext      *rc, 
+                                          gint                 *width,
+                                          gint                 *height)
 {
        PixbufDocument *pixbuf_document = PIXBUF_DOCUMENT (document);
-       gdouble page_ratio;
-
-       page_ratio = ((double)gdk_pixbuf_get_height (pixbuf_document->pixbuf)) /
-                    gdk_pixbuf_get_width (pixbuf_document->pixbuf);
-       *width = suggested_width;
-       *height = (gint) (suggested_width * page_ratio);
+       gint p_width = gdk_pixbuf_get_width (pixbuf_document->pixbuf);
+       gint p_height = gdk_pixbuf_get_height (pixbuf_document->pixbuf);
+
+       if (rc->rotation == 90 || rc->rotation == 270) {
+               *width = (gint) (p_height * rc->scale);
+               *height = (gint) (p_width * rc->scale);
+       } else {
+               *width = (gint) (p_width * rc->scale);
+               *height = (gint) (p_height * rc->scale);
+       }
 }
 
 static void