]> www.fi.muni.cz Git - evince.git/blobdiff - shell/ev-view.c
Fix normal size zoom. Make zoom in/zoom out unsensitive when they are
[evince.git] / shell / ev-view.c
index a052582884482c800bf30706bc9ae7bb7859196a..796aaddbc7b8473a3a7e2406d528ea82f01c2ce1 100644 (file)
@@ -77,7 +77,7 @@ typedef enum {
 #define ZOOM_OUT_FACTOR (1.0/ZOOM_IN_FACTOR)
 
 #define MIN_SCALE 0.05409
-#define MAX_SCALE 18.4884
+#define MAX_SCALE 6.0
 
 struct _EvView {
        GtkWidget parent_instance;
@@ -210,8 +210,8 @@ ev_view_finalize (GObject *object)
 
        LOG ("Finalize");
 
-
-       ev_view_set_scroll_adjustments (view, NULL, NULL);
+       g_free (view->status);
+       g_free (view->find_status);
 
        G_OBJECT_CLASS (ev_view_parent_class)->finalize (object);
 }
@@ -537,21 +537,21 @@ highlight_find_results (EvView *view)
        g_return_if_fail (EV_IS_DOCUMENT_FIND (view->document));
 
        find = EV_DOCUMENT_FIND (view->document);
-
-       g_mutex_lock (EV_DOC_MUTEX);
+#if 0
+       ev_document_doc_mutex_lock ();
        results = ev_document_find_get_n_results (find, view->current_page);
-       g_mutex_unlock (EV_DOC_MUTEX);
-
+       ev_document_doc_mutex_unlock ();
+#endif
        for (i = 0; i < results; i++) {
                EvRectangle rectangle;
                GdkRectangle view_rectangle;
                guchar alpha;
 
                alpha = (i == view->find_result) ? 0x90 : 0x20;
-               g_mutex_lock (EV_DOC_MUTEX);
+               ev_document_doc_mutex_lock ();
                ev_document_find_get_result (find, view->current_page,
                                             i, &rectangle);
-               g_mutex_unlock (EV_DOC_MUTEX);
+               ev_document_doc_mutex_unlock ();
                doc_rect_to_view_rect (view, &rectangle, &view_rectangle);
                draw_rubberband (GTK_WIDGET (view), view->bin_window,
                                 &view_rectangle, alpha);
@@ -686,11 +686,11 @@ ev_view_copy (EvView *ev_view)
                return;
        }
 
-       g_mutex_lock (EV_DOC_MUTEX);
+       ev_document_doc_mutex_lock ();
        text = ev_document_get_text (ev_view->document,
                                     ev_view->current_page,
                                     &ev_view->selection);
-       g_mutex_unlock (EV_DOC_MUTEX);
+       ev_document_doc_mutex_unlock ();
 
        clipboard = gtk_widget_get_clipboard (GTK_WIDGET (ev_view),
                                              GDK_SELECTION_CLIPBOARD);
@@ -721,11 +721,11 @@ ev_view_primary_get_cb (GtkClipboard     *clipboard,
                return;
        }
 
-       g_mutex_lock (EV_DOC_MUTEX);
+       ev_document_doc_mutex_lock ();
        text = ev_document_get_text (ev_view->document,
                                     ev_view->current_page,
                                     &ev_view->selection);
-       g_mutex_unlock (EV_DOC_MUTEX);
+       ev_document_doc_mutex_unlock ();
        gtk_selection_data_set_text (selection_data, text, -1);
 }
 
@@ -975,6 +975,31 @@ ev_view_motion_notify_event (GtkWidget      *widget,
        return TRUE;
 }
 
+/* FIXME: standardize this sometime */
+static void
+go_to_link (EvView *view, EvLink *link)
+{
+       EvLinkType type;
+       const char *uri;
+       int page;
+
+       type = ev_link_get_link_type (link);
+
+       switch (type) {
+               case EV_LINK_TYPE_TITLE:
+                       break;
+               case EV_LINK_TYPE_PAGE:
+                       page = ev_link_get_page (link);
+                       ev_page_cache_set_current_page (view->page_cache, page);
+                       break;
+               case EV_LINK_TYPE_EXTERNAL_URI:
+                       uri = ev_link_get_uri (link);
+                       gnome_vfs_url_show (uri);
+                       break;
+       }
+}
+
+
 static gboolean
 ev_view_button_release_event (GtkWidget      *widget,
                              GdkEventButton *event)
@@ -990,7 +1015,7 @@ ev_view_button_release_event (GtkWidget      *widget,
 
                link = get_link_at_location (view, event->x, event->y);
                if (link) {
-                       ev_view_go_to_link (view, link);
+                       go_to_link (view, link);
                }
        }
 
@@ -1316,15 +1341,15 @@ update_find_status_message (EvView *view)
 {
        char *message;
 
-//     g_mutex_lock (EV_DOC_MUTEX);
+//     ev_document_doc_mutex_lock ();
        if (view->current_page == view->find_page) {
                int results;
 
-//             g_mutex_lock (EV_DOC_MUTEX);
+//             ev_document_doc_mutex_lock ();
                results = ev_document_find_get_n_results
                                (EV_DOCUMENT_FIND (view->document),
                                 view->current_page);
-//             g_mutex_unlock (EV_DOC_MUTEX);
+//             ev_document_doc_mutex_unlock ();
                /* TRANS: Sometimes this could be better translated as
                   "%d hit(s) on this page".  Therefore this string
                   contains plural cases. */
@@ -1335,10 +1360,10 @@ update_find_status_message (EvView *view)
        } else {
                double percent;
 
-               g_mutex_lock (EV_DOC_MUTEX);
+               ev_document_doc_mutex_lock ();
                percent = ev_document_find_get_progress
                                (EV_DOCUMENT_FIND (view->document));
-               g_mutex_unlock (EV_DOC_MUTEX);
+               ev_document_doc_mutex_unlock ();
                if (percent >= (1.0 - 1e-10)) {
                        message = g_strdup (_("Not found"));
                } else {
@@ -1347,7 +1372,7 @@ update_find_status_message (EvView *view)
                }
 
        }
-//     g_mutex_unlock (EV_DOC_MUTEX);
+//     ev_document_doc_mutex_unlock ();
 
        ev_view_set_find_status (view, message);
 //     g_free (message);
@@ -1395,15 +1420,15 @@ jump_to_find_result (EvView *view)
        GdkRectangle view_rect;
        int n_results;
 
-       g_mutex_lock (EV_DOC_MUTEX);
+       ev_document_doc_mutex_lock ();
        n_results = ev_document_find_get_n_results (find, view->current_page);
-       g_mutex_unlock (EV_DOC_MUTEX);
+       ev_document_doc_mutex_unlock ();
 
        if (n_results > view->find_result) {
-               g_mutex_lock (EV_DOC_MUTEX);
+               ev_document_doc_mutex_lock ();
                ev_document_find_get_result
                        (find, view->current_page, view->find_result, &rect);
-               g_mutex_unlock (EV_DOC_MUTEX);
+               ev_document_doc_mutex_unlock ();
 
                doc_rect_to_view_rect (view, &rect, &view_rect);
                ensure_rectangle_is_visible (view, &view_rect);
@@ -1426,7 +1451,7 @@ jump_to_find_page (EvView *view)
                        page = page - n_pages;
                }
 
-               //              g_mutex_lock (EV_DOC_MUTEX);
+               //              ev_document_doc_mutex_lock ();
                has_results = ev_document_find_page_has_results
                                (EV_DOCUMENT_FIND (view->document), page);
                if (has_results == -1) {
@@ -1553,41 +1578,6 @@ ev_view_set_document (EvView     *view,
        }
 }
 
-int
-ev_view_get_page        (EvView     *view)
-{
-       return view->current_page;
-}
-
-static void
-go_to_link (EvView *view, EvLink *link)
-{
-       EvLinkType type;
-       const char *uri;
-       int page;
-
-       type = ev_link_get_link_type (link);
-
-       switch (type) {
-               case EV_LINK_TYPE_TITLE:
-                       break;
-               case EV_LINK_TYPE_PAGE:
-                       page = ev_link_get_page (link);
-                       ev_page_cache_set_current_page (view->page_cache, page);
-                       break;
-               case EV_LINK_TYPE_EXTERNAL_URI:
-                       uri = ev_link_get_uri (link);
-                       gnome_vfs_url_show (uri);
-                       break;
-       }
-}
-
-void
-ev_view_go_to_link (EvView *view, EvLink *link)
-{
-       go_to_link (view, link);
-}
-
 static void
 ev_view_zoom (EvView   *view,
              double    factor,
@@ -1607,6 +1597,26 @@ ev_view_zoom (EvView   *view,
        gtk_widget_queue_resize (GTK_WIDGET (view));
 }
 
+gboolean
+ev_view_can_zoom_in (EvView *view)
+{
+       if (view->width != -1 || view->height != -1) {
+               return TRUE;
+       }
+
+       return view->scale * ZOOM_IN_FACTOR <= MAX_SCALE;
+}
+
+gboolean
+ev_view_can_zoom_out (EvView *view)
+{
+       if (view->width != -1 || view->height != -1) {
+               return TRUE;
+       }
+
+       return view->scale * ZOOM_OUT_FACTOR >= MIN_SCALE;
+}
+
 void
 ev_view_zoom_in (EvView *view)
 {
@@ -1619,6 +1629,12 @@ ev_view_zoom_out (EvView *view)
        ev_view_zoom (view, ZOOM_OUT_FACTOR, TRUE);
 }
 
+void
+ev_view_zoom_normal (EvView *view)
+{
+       ev_view_zoom (view, 1.0, FALSE);
+}
+
 void
 ev_view_set_size (EvView     *view,
                  int         width,
@@ -1659,9 +1675,9 @@ ev_view_can_find_next (EvView *view)
        if (EV_IS_DOCUMENT_FIND (view->document)) {
                EvDocumentFind *find = EV_DOCUMENT_FIND (view->document);
 
-               g_mutex_lock (EV_DOC_MUTEX);
+               ev_document_doc_mutex_lock ();
                n_results = ev_document_find_get_n_results (find, view->current_page);
-               g_mutex_unlock (EV_DOC_MUTEX);
+               ev_document_doc_mutex_unlock ();
        }
 
        return n_results > 0;
@@ -1675,9 +1691,9 @@ ev_view_find_next (EvView *view)
        EvDocumentFind *find = EV_DOCUMENT_FIND (view->document);
 
        page_cache = ev_document_get_page_cache (view->document);
-       g_mutex_lock (EV_DOC_MUTEX);
+       ev_document_doc_mutex_lock ();
        n_results = ev_document_find_get_n_results (find, view->current_page);
-       g_mutex_unlock (EV_DOC_MUTEX);
+       ev_document_doc_mutex_unlock ();
 
        n_pages = ev_page_cache_get_n_pages (page_cache);
 
@@ -1707,9 +1723,9 @@ ev_view_find_previous (EvView *view)
 
        page_cache = ev_document_get_page_cache (view->document);
 
-       g_mutex_lock (EV_DOC_MUTEX);
+       ev_document_doc_mutex_lock ();
        n_results = ev_document_find_get_n_results (find, view->current_page);
-       g_mutex_unlock (EV_DOC_MUTEX);
+       ev_document_doc_mutex_unlock ();
 
        n_pages = ev_page_cache_get_n_pages (page_cache);