diff options
author | Jonathan Blandford <jrb@redhat.com> | 2005-08-25 06:34:20 (GMT) |
---|---|---|
committer | Jonathan Blandford <jrb@src.gnome.org> | 2005-08-25 06:34:20 (GMT) |
commit | 9a1a3b315f05568f6e28f64f685338dc120d5491 (patch) | |
tree | af6de51724acab978387377c9d7c724ba1323867 /shell/ev-sidebar-thumbnails.c | |
parent | ebe3e0a897cc51ccfb4f35619c600962900d709e (diff) |
Redo rotation (again). prepare for 0.4.0
Thu Aug 25 02:32:32 2005 Jonathan Blandford <jrb@redhat.com>
* backend/ev-document-misc.c:
(ev_document_misc_get_thumbnail_frame):
* backend/ev-document-misc.h:
* configure.ac:
* pdf/ev-poppler.cc:
* shell/Makefile.am:
* shell/ev-sidebar-thumbnails.c: (add_range),
(ev_sidebar_thumbnails_set_loading_icon),
(ev_sidebar_thumbnails_refresh),
(ev_sidebar_thumbnails_set_document):
* shell/ev-sidebar-thumbnails.h:
* shell/ev-view.c: (ev_view_motion_notify_event),
(ev_view_set_property), (ev_view_get_property),
(ev_view_class_init), (ev_view_set_rotation):
* shell/ev-window.c: (ev_window_cmd_edit_rotate_left),
(ev_window_cmd_edit_rotate_right), (ev_window_rotation_changed_cb),
(ev_window_init):
* tiff/tiff-document.c: (tiff_document_thumbnails_get_thumbnail):
Redo rotation (again). prepare for 0.4.0
Diffstat (limited to 'shell/ev-sidebar-thumbnails.c')
-rw-r--r-- | shell/ev-sidebar-thumbnails.c | 57 |
1 files changed, 43 insertions, 14 deletions
diff --git a/shell/ev-sidebar-thumbnails.c b/shell/ev-sidebar-thumbnails.c index 362ef48..6ed20a2 100644 --- a/shell/ev-sidebar-thumbnails.c +++ b/shell/ev-sidebar-thumbnails.c @@ -57,6 +57,8 @@ struct _EvSidebarThumbnailsPrivate { gint n_pages, pages_done; + int rotation; + /* Visible pages */ gint start_page, end_page; }; @@ -230,7 +232,7 @@ add_range (EvSidebarThumbnails *sidebar_thumbnails, if (job == NULL && !thumbnail_set) { /* FIXME: Need rotation */ - job = (EvJobThumbnail *)ev_job_thumbnail_new (priv->document, page, 0, THUMBNAIL_WIDTH); + job = (EvJobThumbnail *)ev_job_thumbnail_new (priv->document, page, priv->rotation, THUMBNAIL_WIDTH); ev_job_queue_add_job (EV_JOB (job), EV_JOB_PRIORITY_HIGH); g_object_set_data_full (G_OBJECT (job), "tree_iter", gtk_tree_iter_copy (&iter), @@ -355,11 +357,47 @@ ev_sidebar_thumbnails_fill_model (EvSidebarThumbnails *sidebar_thumbnails) } } + +static void +ev_sidebar_thumbnails_set_loading_icon (EvSidebarThumbnails *sidebar_thumbnails) +{ + gint width = THUMBNAIL_WIDTH; + gint height = THUMBNAIL_WIDTH; + + if (sidebar_thumbnails->priv->loading_icon) + g_object_unref (sidebar_thumbnails->priv->loading_icon); + + if (sidebar_thumbnails->priv->document) { + /* We get the dimensions of the first doc so that we can make a blank + * icon. */ + ev_document_doc_mutex_lock (); + ev_document_thumbnails_get_dimensions (EV_DOCUMENT_THUMBNAILS (sidebar_thumbnails->priv->document), + 0, THUMBNAIL_WIDTH, &width, &height); + ev_document_doc_mutex_unlock (); + sidebar_thumbnails->priv->loading_icon = + ev_document_misc_get_thumbnail_frame (width, height, sidebar_thumbnails->priv->rotation, NULL); + } else { + sidebar_thumbnails->priv->loading_icon = NULL; + } + +} void -ev_sidebar_thumbnails_refresh (EvSidebarThumbnails *sidebar_thumbnails) +ev_sidebar_thumbnails_refresh (EvSidebarThumbnails *sidebar_thumbnails, + + int rotation) { + sidebar_thumbnails->priv->rotation = rotation; + ev_sidebar_thumbnails_set_loading_icon (sidebar_thumbnails); + + if (sidebar_thumbnails->priv->document == NULL) + return; + ev_sidebar_thumbnails_clear_model (sidebar_thumbnails); ev_sidebar_thumbnails_fill_model (sidebar_thumbnails); + + /* Trigger a redraw */ + sidebar_thumbnails->priv->start_page = 0; + sidebar_thumbnails->priv->end_page = 0; adjustment_changed_cb (sidebar_thumbnails); } @@ -545,8 +583,6 @@ ev_sidebar_thumbnails_set_document (EvSidebarPage *sidebar_page, EvDocument *document) { EvSidebarThumbnails *sidebar_thumbnails = EV_SIDEBAR_THUMBNAILS (sidebar_page); - gint width = THUMBNAIL_WIDTH; - gint height = THUMBNAIL_WIDTH; EvSidebarThumbnailsPrivate *priv = sidebar_thumbnails->priv; @@ -556,16 +592,7 @@ ev_sidebar_thumbnails_set_document (EvSidebarPage *sidebar_page, priv->document = document; priv->n_pages = ev_page_cache_get_n_pages (priv->page_cache); - /* We get the dimensions of the first doc so that we can make a blank - * icon. */ - ev_document_doc_mutex_lock (); - ev_document_thumbnails_get_dimensions (EV_DOCUMENT_THUMBNAILS (priv->document), - 0, THUMBNAIL_WIDTH, &width, &height); - ev_document_doc_mutex_unlock (); - - if (priv->loading_icon) - g_object_unref (priv->loading_icon); - priv->loading_icon = ev_document_misc_get_thumbnail_frame (width, height, NULL); + ev_sidebar_thumbnails_set_loading_icon (sidebar_thumbnails); ev_sidebar_thumbnails_clear_model (sidebar_thumbnails); ev_sidebar_thumbnails_fill_model (sidebar_thumbnails); @@ -595,6 +622,8 @@ ev_sidebar_thumbnails_set_document (EvSidebarPage *sidebar_page, /* Connect to the signal and trigger a fake callback */ g_signal_connect (priv->page_cache, "page-changed", G_CALLBACK (page_changed_cb), sidebar_thumbnails); + sidebar_thumbnails->priv->start_page = 0; + sidebar_thumbnails->priv->end_page = 0; adjustment_changed_cb (sidebar_thumbnails); } |