changeset 26025:1c6dd836bca9

Fix regression introduced by cset f5e08983d07c (bug #49490) * gl-render.cc (draw_image): First compute all figure limits in axes coordinates and swap if x/ymin<x/ymax.
author Pantxo Diribarne <pantxo.diribarne@gmail.com>
date Fri, 02 Nov 2018 10:20:37 +0100
parents 80c8062e855a
children 511295347a27
files libinterp/corefcn/gl-render.cc
diffstat 1 files changed, 14 insertions(+), 7 deletions(-) [+]
line wrap: on
line diff
--- a/libinterp/corefcn/gl-render.cc	Sun Nov 04 20:25:43 2018 +0100
+++ b/libinterp/corefcn/gl-render.cc	Fri Nov 02 10:20:37 2018 +0100
@@ -3851,19 +3851,26 @@
     bool do_clip = props.is_clipping ();
     Matrix vp = get_viewport_scaled ();
 
-    ColumnVector vp_lim =
+    ColumnVector vp_lim_min =
       xform.untransform (std::numeric_limits <float>::epsilon (),
                          std::numeric_limits <float>::epsilon ());
+    ColumnVector vp_lim_max = xform.untransform (vp(2), vp(3));
+
+    if (vp_lim_min(0) > vp_lim_max(0))
+      std::swap (vp_lim_min(0), vp_lim_max(0));
+        
+    if (vp_lim_min(1) > vp_lim_max(1))
+      std::swap (vp_lim_min(1), vp_lim_max(1));
+        
     float clip_xmin =
-      (do_clip ? (vp_lim(0) > xmin ? vp_lim(0) : xmin) : vp_lim(0));
+      (do_clip ? (vp_lim_min(0) > xmin ? vp_lim_min(0) : xmin) : vp_lim_min(0));
     float clip_ymin =
-      (do_clip ? (vp_lim(1) > ymin ? vp_lim(1) : ymin) : vp_lim(1));
-
-    vp_lim = xform.untransform (vp(2), vp(3));
+      (do_clip ? (vp_lim_min(1) > ymin ? vp_lim_min(1) : ymin) : vp_lim_min(1));
+
     float clip_xmax =
-      (do_clip ? (vp_lim(0) < xmax ? vp_lim(0) : xmax) : vp_lim(0));
+      (do_clip ? (vp_lim_max(0) < xmax ? vp_lim_max(0) : xmax) : vp_lim_max(0));
     float clip_ymax =
-      (do_clip ? (vp_lim(1) < ymax ? vp_lim(1) : ymax) : vp_lim(1));
+      (do_clip ? (vp_lim_max(1) < ymax ? vp_lim_max(1) : ymax) : vp_lim_max(1));
 
     if (im_xmin < clip_xmin)
       j0 += (clip_xmin - im_xmin)/nor_dx + 1;