From d055f0c3d181d93d412234917e832d8e1b6fa5ef Mon Sep 17 00:00:00 2001 From: jkrumbiegel <22495855+jkrumbiegel@users.noreply.github.com> Date: Fri, 10 Jun 2022 19:50:22 +0200 Subject: [PATCH] fix linked axis regression and add unit test (#2039) --- .../src/tests/figures_and_makielayout.jl | 25 +++++++++++++++++++ src/makielayout/blocks/axis.jl | 2 +- 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/ReferenceTests/src/tests/figures_and_makielayout.jl b/ReferenceTests/src/tests/figures_and_makielayout.jl index 63b43cedc92..aa67883182a 100644 --- a/ReferenceTests/src/tests/figures_and_makielayout.jl +++ b/ReferenceTests/src/tests/figures_and_makielayout.jl @@ -84,3 +84,28 @@ end f end + +@testset "Linked axes" begin + # this tests a bug in 0.17.4 where the first axis targetlimits + # don't change because the second axis has limits contained inside those + # of the first, so the axis linking didn't proliferate + f = Figure() + ax1 = Axis(f[1, 1], xautolimitmargin = (0, 0), yautolimitmargin = (0, 0)) + ax2 = Axis(f[2, 1], xautolimitmargin = (0, 0), yautolimitmargin = (0, 0)) + scatter!(ax1, 1:5, 2:6) + scatter!(ax2, 2:3, 3:4) + @test first.(extrema(ax1.finallimits[])) == (1, 5) + @test last.(extrema(ax1.finallimits[])) == (2, 6) + @test first.(extrema(ax2.finallimits[])) == (2, 3) + @test last.(extrema(ax2.finallimits[])) == (3, 4) + linkxaxes!(ax1, ax2) + @test first.(extrema(ax1.finallimits[])) == (1, 5) + @test last.(extrema(ax1.finallimits[])) == (2, 6) + @test first.(extrema(ax2.finallimits[])) == (1, 5) + @test last.(extrema(ax2.finallimits[])) == (3, 4) + linkyaxes!(ax1, ax2) + @test first.(extrema(ax1.finallimits[])) == (1, 5) + @test last.(extrema(ax1.finallimits[])) == (2, 6) + @test first.(extrema(ax2.finallimits[])) == (1, 5) + @test last.(extrema(ax2.finallimits[])) == (2, 6) +end diff --git a/src/makielayout/blocks/axis.jl b/src/makielayout/blocks/axis.jl index 7f90d4ecda2..7ca8f9e9c87 100644 --- a/src/makielayout/blocks/axis.jl +++ b/src/makielayout/blocks/axis.jl @@ -178,7 +178,7 @@ function initialize_block!(ax::Axis; palette = nothing) # initialize either with user limits, or pick defaults based on scales # so that we don't immediately error - targetlimits = Observable{Rect2f}(defaultlimits(ax.limits[], ax.xscale[], ax.yscale[]); ignore_equal_values=true) + targetlimits = Observable{Rect2f}(defaultlimits(ax.limits[], ax.xscale[], ax.yscale[])) finallimits = Observable{Rect2f}(targetlimits[]; ignore_equal_values=true) setfield!(ax, :targetlimits, targetlimits) setfield!(ax, :finallimits, finallimits)