]> www.fi.muni.cz Git - evince.git/blobdiff - libview/ev-view.c
[totem-screensaver] Adapt to GDBus API change
[evince.git] / libview / ev-view.c
index b5c7e530e357304b0fcf3c53b8fefb6fd47afa7b..ac14b699c7404724266e220a7515b2fd4ac20775 100644 (file)
@@ -177,11 +177,6 @@ static void       ev_view_remove_all                         (EvView
 static AtkObject *ev_view_get_accessible                     (GtkWidget *widget);
 
 /*** Drawing ***/
 static AtkObject *ev_view_get_accessible                     (GtkWidget *widget);
 
 /*** Drawing ***/
-static guint32    ev_gdk_color_to_rgb                        (const GdkColor     *color);
-static void       draw_rubberband                            (GtkWidget          *widget,
-                                                             GdkWindow          *window,
-                                                             const GdkRectangle *rect,
-                                                             guchar              alpha);
 static void       highlight_find_results                     (EvView             *view,
                                                              int                 page);
 static void       draw_one_page                              (EvView             *view,
 static void       highlight_find_results                     (EvView             *view,
                                                              int                 page);
 static void       draw_one_page                              (EvView             *view,
@@ -735,8 +730,6 @@ view_update_range_and_current_page (EvView *view)
        ev_pixbuf_cache_set_page_range (view->pixbuf_cache,
                                        view->start_page,
                                        view->end_page,
        ev_pixbuf_cache_set_page_range (view->pixbuf_cache,
                                        view->start_page,
                                        view->end_page,
-                                       view->rotation,
-                                       view->scale,
                                        view->selection_info.selections);
 
        if (ev_pixbuf_cache_get_surface (view->pixbuf_cache, view->current_page))
                                        view->selection_info.selections);
 
        if (ev_pixbuf_cache_get_surface (view->pixbuf_cache, view->current_page))
@@ -3478,7 +3471,7 @@ ev_view_drag_motion (GtkWidget      *widget,
        if (gtk_drag_get_source_widget (context) == widget)
                gdk_drag_status (context, 0, time);
        else
        if (gtk_drag_get_source_widget (context) == widget)
                gdk_drag_status (context, 0, time);
        else
-               gdk_drag_status (context, context->suggested_action, time);
+               gdk_drag_status (context, gdk_drag_context_get_suggested_action (context), time);
        
        return TRUE;
 }
        
        return TRUE;
 }
@@ -3928,50 +3921,37 @@ ev_view_style_set (GtkWidget *widget,
 
 /*** Drawing ***/
 
 
 /*** Drawing ***/
 
-static guint32
-ev_gdk_color_to_rgb (const GdkColor *color)
-{
-  guint32 result;
-  result = (0xff0000 | (color->red & 0xff00));
-  result <<= 8;
-  result |= ((color->green & 0xff00) | (color->blue >> 8));
-  return result;
-}
-
 static void
 static void
-draw_rubberband (GtkWidget *widget, GdkWindow *window,
-                const GdkRectangle *rect, guchar alpha)
+draw_rubberband (EvView             *view,
+                GdkWindow          *window,
+                const GdkRectangle *rect,
+                gdouble             alpha)
 {
 {
-       GdkGC *gc;
-       GdkPixbuf *pixbuf;
        GtkStyle *style;
        GdkColor *fill_color_gdk;
        GtkStyle *style;
        GdkColor *fill_color_gdk;
-       guint fill_color;
+       gdouble   r, g, b;
+       cairo_t  *cr;
 
 
-       style = gtk_widget_get_style (widget);
+       style = gtk_widget_get_style (GTK_WIDGET (view));
        fill_color_gdk = gdk_color_copy (&style->base[GTK_STATE_SELECTED]);
        fill_color_gdk = gdk_color_copy (&style->base[GTK_STATE_SELECTED]);
-       fill_color = ev_gdk_color_to_rgb (fill_color_gdk) << 8 | alpha;
+       r = fill_color_gdk->red / 65535.;
+       g = fill_color_gdk->green / 65535.;
+       b = fill_color_gdk->blue / 65535.;
 
 
-       pixbuf = gdk_pixbuf_new (GDK_COLORSPACE_RGB, TRUE, 8,
-                                rect->width, rect->height);
-       gdk_pixbuf_fill (pixbuf, fill_color);
+       cr = gdk_cairo_create (window);
 
 
-       gdk_draw_pixbuf (window, NULL, pixbuf,
-                        0, 0,
-                        rect->x - EV_VIEW (widget)->scroll_x, rect->y - EV_VIEW (widget)->scroll_y,
-                        rect->width, rect->height,
-                        GDK_RGB_DITHER_NONE,
-                        0, 0);
+       cairo_set_source_rgba (cr, r, g, b, alpha);
+       cairo_rectangle (cr,
+                        rect->x - view->scroll_x,
+                        rect->y - view->scroll_y,
+                        rect->width, rect->height);
+       cairo_fill_preserve (cr);
 
 
-       g_object_unref (pixbuf);
+       cairo_set_line_width (cr, 0.5);
+       cairo_set_source_rgb (cr, r, g, b);
+       cairo_stroke (cr);
 
 
-       gc = gdk_gc_new (window);
-       gdk_gc_set_rgb_fg_color (gc, fill_color_gdk);
-       gdk_draw_rectangle (window, gc, FALSE,
-                           rect->x - EV_VIEW (widget)->scroll_x, rect->y - EV_VIEW (widget)->scroll_y,
-                           rect->width - 1,
-                           rect->height - 1);
-       g_object_unref (gc);
+       cairo_destroy (cr);
 
        gdk_color_free (fill_color_gdk);
 }
 
        gdk_color_free (fill_color_gdk);
 }
@@ -3990,18 +3970,17 @@ highlight_find_results (EvView *view, int page)
        for (i = 0; i < n_results; i++) {
                EvRectangle *rectangle;
                GdkRectangle view_rectangle;
        for (i = 0; i < n_results; i++) {
                EvRectangle *rectangle;
                GdkRectangle view_rectangle;
-               guchar alpha;
+               gdouble      alpha;
 
                if (i == view->find_result && page == view->current_page) {
 
                if (i == view->find_result && page == view->current_page) {
-                       alpha = 0x90;
+                       alpha = 0.6;
                } else {
                } else {
-                       alpha = 0x20;
+                       alpha = 0.3;
                }
 
                rectangle = ev_view_find_get_result (view, page, i);
                doc_rect_to_view_rect (view, page, rectangle, &view_rectangle);
                }
 
                rectangle = ev_view_find_get_result (view, page, i);
                doc_rect_to_view_rect (view, page, rectangle, &view_rectangle);
-               draw_rubberband (GTK_WIDGET (view), bin_window,
-                                &view_rectangle, alpha);
+               draw_rubberband (view, bin_window, &view_rectangle, alpha);
         }
 }
 
         }
 }
 
@@ -4573,7 +4552,7 @@ setup_caches (EvView *view)
        gboolean inverted_colors;
 
        view->height_to_page_cache = ev_view_get_height_to_page_cache (view);
        gboolean inverted_colors;
 
        view->height_to_page_cache = ev_view_get_height_to_page_cache (view);
-       view->pixbuf_cache = ev_pixbuf_cache_new (GTK_WIDGET (view), view->document);
+       view->pixbuf_cache = ev_pixbuf_cache_new (GTK_WIDGET (view), view->model, view->pixbuf_cache_size);
        view->page_cache = ev_page_cache_new (view->document);
        inverted_colors = ev_document_model_get_inverted_colors (view->model);
        ev_pixbuf_cache_set_inverted_colors (view->pixbuf_cache, inverted_colors);
        view->page_cache = ev_page_cache_new (view->document);
        inverted_colors = ev_document_model_get_inverted_colors (view->model);
        ev_pixbuf_cache_set_inverted_colors (view->pixbuf_cache, inverted_colors);
@@ -4594,10 +4573,37 @@ clear_caches (EvView *view)
        }
 }
 
        }
 }
 
+/**
+ * ev_view_set_page_cache_size:
+ * @view:
+ * @cache_size:
+ *
+ * Sets the maximum size in bytes that will be used to cache
+ * rendered pages. Use 0 to disable caching rendered pages.
+ *
+ * Note that this limit doesn't affect the current visible page range,
+ * which will always be rendered. In order to limit the total memory used
+ * you have to use ev_document_model_set_max_scale() too.
+ *
+ */
+void
+ev_view_set_page_cache_size (EvView *view,
+                            gsize   cache_size)
+{
+       if (view->pixbuf_cache_size == cache_size)
+               return;
+
+       view->pixbuf_cache_size = cache_size;
+       if (view->pixbuf_cache)
+               ev_pixbuf_cache_set_max_size (view->pixbuf_cache, cache_size);
+}
+
 void
 ev_view_set_loading (EvView      *view,
                     gboolean      loading)
 {
 void
 ev_view_set_loading (EvView      *view,
                     gboolean      loading)
 {
+       if (view->loading && !loading)
+               hide_loading_window (view);
        view->loading = loading;
        gtk_widget_queue_draw (GTK_WIDGET (view));
 }
        view->loading = loading;
        gtk_widget_queue_draw (GTK_WIDGET (view));
 }