]> www.fi.muni.cz Git - evince.git/blobdiff - shell/ev-view.c
Updated Czech translation.
[evince.git] / shell / ev-view.c
index 3d24c5028a95101f5d558b0f17318fc2c9fcf2c4..31705ab5143d118b07543d578ca272073af7a4bd 100644 (file)
@@ -149,7 +149,7 @@ struct _EvView {
        int find_result;
        int spacing;
 
-       EvOrientation orientation;
+       int rotation;
        double scale;
 
        gboolean continuous;
@@ -532,7 +532,7 @@ view_update_range_and_current_page (EvView *view)
        ev_pixbuf_cache_set_page_range (view->pixbuf_cache,
                                        view->start_page,
                                        view->end_page,
-                                       view->orientation,
+                                       view->rotation,
                                        view->scale,
                                        view->selection_info.selections);
 }
@@ -749,25 +749,25 @@ compute_border (EvView *view, int width, int height, GtkBorder *border)
        }
 }
 
-static void       get_page_y_offset                          (EvView *view,
-                                                             int page,
-                                                             double zoom,
-                                                             int *y_offset)
+static void
+get_page_y_offset (EvView *view, int page, double zoom, int *y_offset)
 {
        int max_width, offset;
        GtkBorder border;
 
        g_return_if_fail (y_offset != NULL);
 
-       ev_page_cache_get_max_width (view->page_cache, zoom, &max_width);
+       ev_page_cache_get_max_width (view->page_cache, view->rotation, zoom, &max_width);
 
        compute_border (view, max_width, max_width, &border);
 
        if (view->dual_page) {
-               ev_page_cache_get_height_to_page (view->page_cache, page, zoom, NULL, &offset);
+               ev_page_cache_get_height_to_page (view->page_cache, page,
+                                                 view->rotation, zoom, NULL, &offset);
                offset += (page / 2 + 1) * view->spacing + (page / 2) * (border.top + border.bottom);
        } else {
-               ev_page_cache_get_height_to_page (view->page_cache, page, zoom, &offset, NULL);
+               ev_page_cache_get_height_to_page (view->page_cache, page,
+                                                 view->rotation, zoom, &offset, NULL);
                offset += (page + 1) * view->spacing + page * (border.top + border.bottom);
        }
 
@@ -788,7 +788,7 @@ get_page_extents (EvView       *view,
 
        /* Get the size of the page */
        ev_page_cache_get_size (view->page_cache, page,
-                               view->orientation,
+                               view->rotation,
                                view->scale,
                                &width, &height);
        compute_border (view, width, height, border);
@@ -802,7 +802,8 @@ get_page_extents (EvView       *view,
                gint max_width;
                gint x, y;
 
-               ev_page_cache_get_max_width (view->page_cache, view->scale, &max_width);
+               ev_page_cache_get_max_width (view->page_cache, view->scale,
+                                            view->rotation, &max_width);
                max_width = max_width + border->left + border->right;
                /* Get the location of the bounding box */
                if (view->dual_page) {
@@ -834,7 +835,7 @@ get_page_extents (EvView       *view,
                        if (other_page < ev_page_cache_get_n_pages (view->page_cache)) {
                                ev_page_cache_get_size (view->page_cache,
                                                        other_page,
-                                                       view->orientation,
+                                                       view->rotation,
                                                        view->scale,
                                                        &width_2, &height_2);
                                if (width_2 > width)
@@ -907,16 +908,44 @@ doc_rect_to_view_rect (EvView       *view,
 {
        GdkRectangle page_area;
        GtkBorder border;
+       double x, y, w, h;
        int width, height;
 
+       ev_page_cache_get_size (view->page_cache, page,
+                               view->rotation,
+                               1.0,
+                               &width, &height);
+
+       if (view->rotation == 0) {
+               x = doc_rect->x1;
+               y = doc_rect->y1;
+               w = doc_rect->x2 - doc_rect->x1;
+               h = doc_rect->y2 - doc_rect->y1;
+       } else if (view->rotation == 90) {
+               x = width - doc_rect->y2;
+               y = doc_rect->x1;
+               w = doc_rect->y2 - doc_rect->y1;
+               h = doc_rect->x2 - doc_rect->x1;
+       } else if (view->rotation == 180) {
+               x = width - doc_rect->x2;
+               y = height - doc_rect->y2;
+               w = doc_rect->x2 - doc_rect->x1;
+               h = doc_rect->y2 - doc_rect->y1;
+       } else if (view->rotation == 270) {
+               x = doc_rect->y1;
+               y = height - doc_rect->x2;
+               w = doc_rect->y2 - doc_rect->y1;
+               h = doc_rect->x2 - doc_rect->x1;
+       } else {
+               g_assert_not_reached ();
+       }
+
        get_page_extents (view, page, &page_area, &border);
 
-       width = doc_rect->x2 - doc_rect->x1;
-       height = doc_rect->y2 - doc_rect->y1;
-       view_rect->x = floor (doc_rect->x1 * view->scale) + page_area.x;
-       view_rect->y = floor (doc_rect->y1 * view->scale) + page_area.y;
-       view_rect->width = ceil (width * view->scale);
-       view_rect->height = ceil (height * view->scale);
+       view_rect->x = x * view->scale + page_area.x;
+       view_rect->y = y * view->scale + page_area.y;
+       view_rect->width = w * view->scale;
+       view_rect->height = h * view->scale;
 }
 
 static void
@@ -1066,7 +1095,8 @@ ev_view_size_request_continuous_dual_page (EvView         *view,
        gint n_pages;
        GtkBorder border;
 
-       ev_page_cache_get_max_width (view->page_cache, view->scale, &max_width);
+       ev_page_cache_get_max_width (view->page_cache, view->rotation,
+                                    view->scale, &max_width);
        compute_border (view, max_width, max_width, &border);
 
        n_pages = ev_page_cache_get_n_pages (view->page_cache) + 1;
@@ -1093,7 +1123,8 @@ ev_view_size_request_continuous (EvView         *view,
        GtkBorder border;
 
 
-       ev_page_cache_get_max_width (view->page_cache, view->scale, &max_width);
+       ev_page_cache_get_max_width (view->page_cache, view->rotation,
+                                    view->scale, &max_width);
        n_pages = ev_page_cache_get_n_pages (view->page_cache);
        compute_border (view, max_width, max_width, &border);
 
@@ -1120,14 +1151,14 @@ ev_view_size_request_dual_page (EvView         *view,
        /* Find the largest of the two. */
        ev_page_cache_get_size (view->page_cache,
                                view->current_page,
-                               view->orientation,
+                               view->rotation,
                                view->scale,
                                &width, &height);
        if (view->current_page + 1 < ev_page_cache_get_n_pages (view->page_cache)) {
                gint width_2, height_2;
                ev_page_cache_get_size (view->page_cache,
                                        view->current_page + 1,
-                                       view->orientation,
+                                       view->rotation,
                                        view->scale,
                                        &width_2, &height_2);
                if (width_2 > width) {
@@ -1159,7 +1190,7 @@ ev_view_size_request_single_page (EvView         *view,
 
        ev_page_cache_get_size (view->page_cache,
                                view->current_page,
-                               view->orientation,
+                               view->rotation,
                                view->scale,
                                &width, &height);
        compute_border (view, width, height, &border);
@@ -1612,7 +1643,7 @@ draw_one_page (EvView          *view,
 
        selection = find_selection_for_page (view, page);
        ev_page_cache_get_size (view->page_cache,
-                               page, view->orientation,
+                               page, view->rotation,
                                view->scale,
                                &width, &height);
        /* Render the document itself */
@@ -2296,48 +2327,36 @@ ev_view_zoom_out (EvView *view)
 }
 
 static void
-ev_view_set_orientation (EvView         *view,
-                        EvOrientation   orientation)
+ev_view_set_rotation (EvView *view, int rotation)
 {
-       view->orientation = orientation;
+       view->rotation = rotation;
 
+       ev_pixbuf_cache_clear (view->pixbuf_cache);
        gtk_widget_queue_resize (GTK_WIDGET (view));
 }
 
 void
 ev_view_rotate_right (EvView *view)
 {
-       EvOrientation orientation;
+       int rotation = view->rotation + 90;
 
-       if (view->orientation == EV_ORIENTATION_PORTRAIT) {
-               orientation = EV_ORIENTATION_LANDSCAPE;
-       } else if (view->orientation == EV_ORIENTATION_LANDSCAPE) {
-               orientation = EV_ORIENTATION_UPSIDEDOWN;
-       } else if (view->orientation == EV_ORIENTATION_UPSIDEDOWN) {
-               orientation = EV_ORIENTATION_SEASCAPE;
-       } else {
-               orientation = EV_ORIENTATION_PORTRAIT;
+       if (rotation >= 360) {
+               rotation -= 360;
        }
 
-       ev_view_set_orientation (view, orientation);
+       ev_view_set_rotation (view, rotation);
 }
 
 void
 ev_view_rotate_left (EvView *view)
 {
-       EvOrientation orientation;
+       int rotation = view->rotation - 90;
 
-       if (view->orientation == EV_ORIENTATION_PORTRAIT) {
-               orientation = EV_ORIENTATION_SEASCAPE;
-       } else if (view->orientation == EV_ORIENTATION_SEASCAPE) {
-               orientation = EV_ORIENTATION_UPSIDEDOWN;
-       } else if (view->orientation == EV_ORIENTATION_UPSIDEDOWN) {
-               orientation = EV_ORIENTATION_LANDSCAPE;
-       } else {
-               orientation = EV_ORIENTATION_PORTRAIT;
+       if (rotation < 0) {
+               rotation += 360;
        }
 
-       ev_view_set_orientation (view, orientation);
+       ev_view_set_rotation (view, rotation);
 }
 
 static double
@@ -2390,7 +2409,7 @@ ev_view_zoom_for_size_presentation (EvView *view,
 
        ev_page_cache_get_size (view->page_cache,
                                view->current_page,
-                               view->orientation,
+                               view->rotation,
                                1.0,
                                &doc_width,
                                &doc_height);
@@ -2410,9 +2429,11 @@ ev_view_zoom_for_size_continuous_and_dual_page (EvView *view,
        gdouble scale;
 
        ev_page_cache_get_max_width (view->page_cache,
+                                    view->rotation,
                                     1.0,
                                     &doc_width);
        ev_page_cache_get_max_height (view->page_cache,
+                                     view->rotation,
                                      1.0,
                                      &doc_height);
        compute_border (view, doc_width, doc_height, &border);
@@ -2446,9 +2467,11 @@ ev_view_zoom_for_size_continuous (EvView *view,
        gdouble scale;
 
        ev_page_cache_get_max_width (view->page_cache,
+                                    view->rotation,
                                     1.0,
                                     &doc_width);
        ev_page_cache_get_max_height (view->page_cache,
+                                     view->rotation,
                                      1.0,
                                      &doc_height);
        compute_border (view, doc_width, doc_height, &border);
@@ -2486,7 +2509,7 @@ ev_view_zoom_for_size_dual_page (EvView *view,
        /* Find the largest of the two. */
        ev_page_cache_get_size (view->page_cache,
                                view->current_page,
-                               view->orientation,
+                               view->rotation,
                                1.0,
                                &doc_width, &doc_height);
 
@@ -2494,7 +2517,7 @@ ev_view_zoom_for_size_dual_page (EvView *view,
                gint width_2, height_2;
                ev_page_cache_get_size (view->page_cache,
                                        other_page,
-                                       view->orientation,
+                                       view->rotation,
                                        1.0,
                                        &width_2, &height_2);
                if (width_2 > doc_width)
@@ -2531,7 +2554,7 @@ ev_view_zoom_for_size_single_page (EvView *view,
 
        ev_page_cache_get_size (view->page_cache,
                                view->current_page,
-                               view->orientation,
+                               view->rotation,
                                1.0,
                                &doc_width,
                                &doc_height);
@@ -2876,7 +2899,7 @@ compute_new_selection_text (EvView   *view,
                GdkPoint *point;
 
                ev_page_cache_get_size (view->page_cache, i,
-                                       view->orientation,
+                                       view->rotation,
                                        1.0, &width, &height);
 
                selection = g_new0 (EvViewSelection, 1);
@@ -2974,7 +2997,7 @@ ev_view_select_all (EvView *view)
                EvViewSelection *selection;
 
                ev_page_cache_get_size (view->page_cache,
-                                       view->orientation,
+                                       view->rotation,
                                        i, 1.0, &width, &height);
 
                selection = g_new0 (EvViewSelection, 1);