changeset 29650:360d21b028b1

Synchronize positions optionally when updating axes ticks (bug #60583) * graphics.in.h (axes::properties::update_x(y/z)tick): Add bool arguments that defaults to true for synchronizing the axes position. (axes::properties::update_ticklabelinterpreter): Only synchronize once, after all ticks updates are done.
author Pantxo Diribarne <pantxo.diribarne@gmail.com>
date Wed, 12 May 2021 00:11:20 +0200
parents 0230f7cf4044
children b4e2e6f64db0
files libinterp/corefcn/graphics.in.h
diffstat 1 files changed, 15 insertions(+), 9 deletions(-) [+]
line wrap: on
line diff
--- a/libinterp/corefcn/graphics.in.h	Tue May 11 20:55:11 2021 +0200
+++ b/libinterp/corefcn/graphics.in.h	Wed May 12 00:11:20 2021 +0200
@@ -4012,12 +4012,12 @@
 
     void update_ticklabelinterpreter (void)
     {
-      update_xtick ();
-      update_ytick ();
-      update_ztick ();
+      update_xtick (false);
+      update_ytick (false);
+      update_ztick (true);
     }
 
-    void update_xtick (void)
+    void update_xtick (bool sync_pos = true)
     {
       calc_ticks_and_lims (xlim, xtick, xminortickvalues, xlimmode.is ("auto"),
                            xtickmode.is ("auto"), xscale.is ("log"));
@@ -4028,9 +4028,11 @@
                            (yaxislocation_is ("origin") ? 0 :
                              (yaxislocation_is ("left") ? -1 : 1)),
                          xlim);
-      sync_positions ();
+
+      if (sync_pos)
+        sync_positions ();
     }
-    void update_ytick (void)
+    void update_ytick (bool sync_pos = true)
     {
       calc_ticks_and_lims (ylim, ytick, yminortickvalues, ylimmode.is ("auto"),
                            ytickmode.is ("auto"), yscale.is ("log"));
@@ -4041,15 +4043,19 @@
                            (xaxislocation_is ("origin") ? 0 :
                              (xaxislocation_is ("bottom") ? -1 : 1)),
                          ylim);
-      sync_positions ();
+
+      if (sync_pos)
+        sync_positions ();
     }
-    void update_ztick (void)
+    void update_ztick (bool sync_pos = true)
     {
       calc_ticks_and_lims (zlim, ztick, zminortickvalues, zlimmode.is ("auto"),
                            ztickmode.is ("auto"), zscale.is ("log"));
       if (zticklabelmode.is ("auto"))
         calc_ticklabels (ztick, zticklabel, zscale.is ("log"), false, 2, zlim);
-      sync_positions ();
+
+      if (sync_pos)
+        sync_positions ();
     }
 
     void update_xtickmode (void)