Mercurial > octave
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;