Skip to content

Commit 815475b

Browse files
committed
Check if Cairo is activated, not loaded
1 parent 2bb87b8 commit 815475b

2 files changed

Lines changed: 59 additions & 5 deletions

File tree

ext/VortexStepMethodMakieExt.jl

Lines changed: 37 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -247,12 +247,46 @@ Save a Makie figure to a file.
247247
- `title`: Title of the plot
248248
249249
# Keyword arguments
250-
- `data_type`: File extension. Defaults to `".pdf"` when CairoMakie is active, `".png"` otherwise.
250+
- `data_type`: File extension. Defaults to `".pdf"` when the active Makie backend is CairoMakie, `".png"` otherwise.
251251
"""
252+
function _active_backend_prefers_vector_output()
253+
isdefined(Makie, :current_backend) || return false
254+
255+
backend = try
256+
Makie.current_backend()
257+
catch
258+
return false
259+
end
260+
261+
# Makie versions may return backend modules directly or backend callables.
262+
if backend isa Module
263+
return nameof(backend) == :CairoMakie
264+
end
265+
if backend isa DataType
266+
return nameof(backend) == :CairoMakie
267+
end
268+
269+
if Base.applicable(backend)
270+
called_backend = try
271+
backend()
272+
catch
273+
nothing
274+
end
275+
if called_backend isa Module
276+
return nameof(called_backend) == :CairoMakie
277+
end
278+
if called_backend isa DataType
279+
return nameof(called_backend) == :CairoMakie
280+
end
281+
!isnothing(called_backend) && return occursin("cairomakie", lowercase(string(called_backend)))
282+
end
283+
284+
return occursin("cairomakie", lowercase(string(backend)))
285+
end
286+
252287
function VortexStepMethod.save_plot(fig::Makie.Figure, save_path, title; data_type=nothing)
253288
if isnothing(data_type)
254-
cairo_loaded = any(m -> nameof(m) == :CairoMakie, values(Base.loaded_modules))
255-
data_type = cairo_loaded ? ".pdf" : ".png"
289+
data_type = _active_backend_prefers_vector_output() ? ".pdf" : ".png"
256290
end
257291
isnothing(save_path) && throw(ArgumentError("save_path should be provided"))
258292

test/plotting/test_plotting.jl

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -448,8 +448,28 @@ end
448448

449449
# Test 3: save_plot with data_type=nothing (backend-aware detection)
450450
VortexStepMethod.save_plot(fig, save_test_dir, "test_backend_aware", data_type=nothing)
451-
cairo_loaded = any(m -> nameof(m) == :CairoMakie, values(Base.loaded_modules))
452-
expected_ext = cairo_loaded ? ".pdf" : ".png"
451+
backend_obj = Makie.current_backend()
452+
backend_name = if backend_obj isa Module
453+
nameof(backend_obj)
454+
elseif backend_obj isa DataType
455+
nameof(backend_obj)
456+
elseif Base.applicable(backend_obj)
457+
called_backend = try
458+
backend_obj()
459+
catch
460+
nothing
461+
end
462+
if called_backend isa Module
463+
nameof(called_backend)
464+
elseif called_backend isa DataType
465+
nameof(called_backend)
466+
else
467+
Symbol(string(something(called_backend, backend_obj)))
468+
end
469+
else
470+
Symbol(string(backend_obj))
471+
end
472+
expected_ext = lowercase(String(backend_name)) == "cairomakie" ? ".pdf" : ".png"
453473
@test isfile(joinpath(save_test_dir, "test_backend_aware" * expected_ext))
454474
safe_rm(joinpath(save_test_dir, "test_backend_aware" * expected_ext))
455475

0 commit comments

Comments
 (0)