# HG changeset patch # User John W. Eaton # Date 1425358690 18000 # Node ID 0c32e02d60c336306d2ac469b8522080d02c1e23 # Parent fa290c42197eea45b9c6de2cdcb1d175b222a509 only save one set of limits on the zoom stack (bug #44304) * graphics.cc (axes::properties::push_zoom_stack): Only push one set of limits to the stack. Also store zlim and zlimmode. (axes::properties::unzoom): Handle zlim and zlimmode. (axes::properties::clear_zoom_stack): Adjust to new number of elements stored on the stack. diff -r fa290c42197e -r 0c32e02d60c3 libinterp/corefcn/graphics.cc --- a/libinterp/corefcn/graphics.cc Mon Mar 02 19:18:36 2015 -0800 +++ b/libinterp/corefcn/graphics.cc Mon Mar 02 23:58:10 2015 -0500 @@ -7677,21 +7677,16 @@ void axes::properties::push_zoom_stack (void) { - // FIXME: Maybe make the size of the undo stack configurable. A limit - // of 500 elements means 100 pan, rotate, or zoom actions are stored - // and may be undone. - - if (zoom_stack.size () >= 500) - { - for (int i = 0; i < 5; i++) - zoom_stack.pop_back (); - } - - zoom_stack.push_front (xlimmode.get ()); - zoom_stack.push_front (xlim.get ()); - zoom_stack.push_front (ylimmode.get ()); - zoom_stack.push_front (ylim.get ()); - zoom_stack.push_front (view.get ()); + if (zoom_stack.empty ()) + { + zoom_stack.push_front (xlimmode.get ()); + zoom_stack.push_front (xlim.get ()); + zoom_stack.push_front (ylimmode.get ()); + zoom_stack.push_front (ylim.get ()); + zoom_stack.push_front (zlimmode.get ()); + zoom_stack.push_front (zlim.get ()); + zoom_stack.push_front (view.get ()); + } } void @@ -7904,11 +7899,17 @@ void axes::properties::unzoom (void) { - if (zoom_stack.size () >= 5) + if (zoom_stack.size () >= 7) { view = zoom_stack.front (); zoom_stack.pop_front (); + zlim = zoom_stack.front (); + zoom_stack.pop_front (); + + zlimmode = zoom_stack.front (); + zoom_stack.pop_front (); + ylim = zoom_stack.front (); zoom_stack.pop_front (); @@ -7925,6 +7926,7 @@ update_xlim (); update_ylim (); + update_zlim (); update_view (); } @@ -7933,7 +7935,7 @@ void axes::properties::clear_zoom_stack (bool do_unzoom) { - size_t items_to_leave_on_stack = do_unzoom ? 5 : 0; + size_t items_to_leave_on_stack = do_unzoom ? 7 : 0; while (zoom_stack.size () > items_to_leave_on_stack) zoom_stack.pop_front ();