Blame SOURCES/evince-3.14.2-set-correct-scale.patch

d6c6b3
diff --git a/backend/ps/ev-spectre.c b/backend/ps/ev-spectre.c
d6c6b3
index 265fed3..96aaccb 100644
d6c6b3
--- a/backend/ps/ev-spectre.c
d6c6b3
+++ b/backend/ps/ev-spectre.c
d6c6b3
@@ -294,20 +294,32 @@ ps_document_render (EvDocument      *document,
d6c6b3
 	gint                  rotation;
d6c6b3
 	cairo_surface_t      *surface;
d6c6b3
 	static const cairo_user_data_key_t key;
d6c6b3
+	double                x_scale, y_scale, scale;
d6c6b3
 
d6c6b3
 	ps_page = (SpectrePage *)rc->page->backend_page;
d6c6b3
 	
d6c6b3
 	spectre_page_get_size (ps_page, &width_points, &height_points);
d6c6b3
 
d6c6b3
-	ev_render_context_compute_scaled_size (rc, width_points, height_points,
d6c6b3
-					       &width, &height);
d6c6b3
-
d6c6b3
 	rotation = (rc->rotation + get_page_rotation (ps_page)) % 360;
d6c6b3
 
d6c6b3
+	if (rc->target_width >= 0 && rc->target_height >= 0) {
d6c6b3
+		if (rotation == 90 || rotation == 270) {
d6c6b3
+			x_scale = (double) rc->target_height / width_points;
d6c6b3
+			y_scale = (double) rc->target_width / height_points;
d6c6b3
+		} else {
d6c6b3
+			x_scale = (double) rc->target_width / width_points;
d6c6b3
+			y_scale = (double) rc->target_height / height_points;
d6c6b3
+		}
d6c6b3
+		scale = MIN (x_scale, y_scale);
d6c6b3
+	} else {
d6c6b3
+		scale = rc->scale;
d6c6b3
+	}
d6c6b3
+
d6c6b3
+	width = (int) (width_points * scale + 0.5);
d6c6b3
+	height = (int) (height_points * scale + 0.5);
d6c6b3
+
d6c6b3
 	src = spectre_render_context_new ();
d6c6b3
-	spectre_render_context_set_scale (src,
d6c6b3
-					  (gdouble)width / width_points,
d6c6b3
-					  (gdouble)height / height_points);
d6c6b3
+	spectre_render_context_set_scale (src, scale, scale);
d6c6b3
 	spectre_render_context_set_rotation (src, rotation);
d6c6b3
 	spectre_page_render (ps_page, src, &data, &stride);
d6c6b3
 	spectre_render_context_free (src);