From ff4c2d45ff08afa8f31e6bed8728c33f63d4bf48 Mon Sep 17 00:00:00 2001 From: Bart Janssens Date: Thu, 2 Jul 2026 16:24:04 +0200 Subject: [PATCH 1/2] Properly update Makie viewport Issue https://github.com/JuliaGraphics/QMLMakie.jl/issues/15 --- CMakeLists.txt | 2 +- makie_viewport.cpp | 5 +++++ makie_viewport.hpp | 2 +- 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index f22450b..5f13b1e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -2,7 +2,7 @@ cmake_minimum_required(VERSION 3.16.0) project(JlQML) -set(JlQML_VERSION 0.10.3) +set(JlQML_VERSION 0.10.4) message(STATUS "Project version: v${JlQML_VERSION}") set(CMAKE_MACOSX_RPATH 1) diff --git a/makie_viewport.cpp b/makie_viewport.cpp index 6600672..56b12d9 100644 --- a/makie_viewport.cpp +++ b/makie_viewport.cpp @@ -92,6 +92,10 @@ struct MakieSupport MakieViewport::MakieViewport(QQuickItem *parent) : OpenGLViewport(parent, new MakieRenderFunction(m_screen, m_scene)) { get_makie_support_module(); // Throw the possible error early + connect(this, &MakieViewport::sceneChanged, [this] () + { + update(); + }); } MakieViewport::~MakieViewport() @@ -124,6 +128,7 @@ void MakieViewport::setScene(qvariant_any_t scene) jlcxx::unprotect_from_gc(m_scene); } m_scene = scene_val; + emit sceneChanged(scene); } void MakieViewport::setup_buffer(QOpenGLFramebufferObject* fbo) diff --git a/makie_viewport.hpp b/makie_viewport.hpp index 141dd0a..7efd5be 100644 --- a/makie_viewport.hpp +++ b/makie_viewport.hpp @@ -22,7 +22,7 @@ class MakieViewport : public OpenGLViewport static jlcxx::SafeCFunction m_default_render_function; signals: - void sceneChanged(); + void sceneChanged(qvariant_any_t scene); private: // Screen created and used on the Julia side From 265fd515e28d8357a4d1e335c6ce54221084ce0d Mon Sep 17 00:00:00 2001 From: Bart Janssens Date: Fri, 3 Jul 2026 22:48:32 +0200 Subject: [PATCH 2/2] Retain function list between app runs Issue https://github.com/JuliaGraphics/QMLMakie.jl/issues/14 --- julia_api.cpp | 19 +++++++++++-------- julia_api.hpp | 2 +- 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/julia_api.cpp b/julia_api.cpp index 84466fc..6149eb2 100644 --- a/julia_api.cpp +++ b/julia_api.cpp @@ -21,22 +21,19 @@ void JuliaAPI::set_js_engine(QJSEngine* e) m_engine = e; if(m_engine != nullptr) { - for(JuliaFunction* f : m_registered_functions) + for(JuliaFunction* f : registered_functions()) { register_function_internal(f); } - m_registered_functions.clear(); } } void JuliaAPI::register_function(const QString& name, jl_value_t* f) { - JuliaFunction* jf = new JuliaFunction(name, f, this); - if(m_engine == nullptr) - { - m_registered_functions.push_back(jf); - } - else + JuliaFunction* jf = new JuliaFunction(name, f, QGuiApplication::instance()); + registered_functions().push_back(jf); + + if(m_engine != nullptr) { register_function_internal(jf); } @@ -64,6 +61,12 @@ void JuliaAPI::register_function_internal(JuliaFunction* jf) (*this)[jf->name()] = f.toVariant(QJSValue::RetainJSObjects); } +std::vector& JuliaAPI::registered_functions() +{ + static std::vector functions; + return functions; +} + JuliaAPI* JuliaSingleton::create(QQmlEngine* qmlEngine, QJSEngine* scriptEngine) { Q_ASSERT(s_singletonInstance); diff --git a/julia_api.hpp b/julia_api.hpp index cc58065..cff4218 100644 --- a/julia_api.hpp +++ b/julia_api.hpp @@ -37,7 +37,7 @@ class JuliaAPI : public QQmlPropertyMap JuliaSignals* m_julia_signals = nullptr; void register_function_internal(JuliaFunction* f); QJSEngine* m_engine = nullptr; - std::vector m_registered_functions; + std::vector& registered_functions(); }; struct JuliaSingleton