Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ cmake_minimum_required(VERSION 3.16.0)

project(JlQML)

set(JlQML_VERSION 0.7.1)
set(JlQML_VERSION 0.8.0)
message(STATUS "Project version: v${JlQML_VERSION}")

set(CMAKE_MACOSX_RPATH 1)
Expand Down
10 changes: 10 additions & 0 deletions application_manager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -105,6 +105,11 @@ void ApplicationManager::exec()
cleanup();
}

void ApplicationManager::add_import_path(std::string path)
{
m_import_paths.push_back(path);
}

ApplicationManager::ApplicationManager()
{
qputenv("QSG_RENDER_LOOP", QProcessEnvironment::systemEnvironment().value("QSG_RENDER_LOOP").toLocal8Bit());
Expand Down Expand Up @@ -144,6 +149,11 @@ void ApplicationManager::set_engine(QQmlEngine* e)
{
m_engine = e;
m_root_ctx = e->rootContext();

for(const std::string& path : m_import_paths)
{
e->addImportPath(QString::fromStdString(path));
}
}

void ApplicationManager::process_events()
Expand Down
3 changes: 3 additions & 0 deletions application_manager.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,8 @@ class ApplicationManager
// Blocking call to exec, running the Qt event loop
void exec();

void add_import_path(std::string path);

static void process_events();

static jl_module_t* m_qml_mod;
Expand All @@ -56,6 +58,7 @@ class ApplicationManager

QQmlEngine* m_engine = nullptr;
QQmlContext* m_root_ctx = nullptr;
std::vector<std::string> m_import_paths;
};

}
Expand Down
2 changes: 1 addition & 1 deletion julia_api.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ void JuliaAPI::set_js_engine(QJSEngine* e)
}
}

void JuliaAPI::register_function(const QString& name, jl_function_t* f)
void JuliaAPI::register_function(const QString& name, jl_value_t* f)
{
JuliaFunction* jf = new JuliaFunction(name, f, this);
if(m_engine == nullptr)
Expand Down
2 changes: 1 addition & 1 deletion julia_api.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ class JuliaAPI : public QQmlPropertyMap

void set_js_engine(QJSEngine* e);

void register_function(const QString& name, jl_function_t* f);
void register_function(const QString& name, jl_value_t* f);

~JuliaAPI();

Expand Down
2 changes: 1 addition & 1 deletion julia_function.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ namespace qmlwrap

jl_module_t* JuliaFunction::m_qml_mod = nullptr;

JuliaFunction::JuliaFunction(const QString& name, jl_function_t* f, QObject* parent) : QObject(parent), m_name(name), m_f(f)
JuliaFunction::JuliaFunction(const QString& name, jl_value_t* f, QObject* parent) : QObject(parent), m_name(name), m_f(f)
{
jlcxx::protect_from_gc(m_f);
}
Expand Down
4 changes: 2 additions & 2 deletions julia_function.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ class JuliaFunction : public QObject
public:
static jl_module_t* m_qml_mod;

JuliaFunction(const QString& name, jl_function_t* f, QObject* parent);
JuliaFunction(const QString& name, jl_value_t* f, QObject* parent);

// Call a Julia function that takes any number of arguments as a list
Q_INVOKABLE QVariant call(const QVariantList& arg);
Expand All @@ -29,7 +29,7 @@ class JuliaFunction : public QObject

private:
QString m_name;
jl_function_t* m_f;
jl_value_t* m_f;
};

} // namespace qmlwrap
Expand Down
12 changes: 6 additions & 6 deletions julia_itemmodel.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ QVariant JuliaItemModel::data(const QModelIndex& index, int role) const
QVariant JuliaItemModel::headerData(int section, Qt::Orientation orientation, int role) const
{
static const jlcxx::JuliaFunction headerdata_f(jl_get_function(m_qml_mod, "headerdata"));
return safe_unbox<QVariant&>(headerdata_f(m_data, section+1, orientation, role));
return safe_unbox<QVariant&>(headerdata_f(m_data, section+1, static_cast<Qt::Orientation>(orientation), static_cast<int>(role)));
}

bool JuliaItemModel::setData(const QModelIndex& index, const QVariant& value, int role)
Expand All @@ -72,7 +72,7 @@ bool JuliaItemModel::setData(const QModelIndex& index, const QVariant& value, in
bool JuliaItemModel::setHeaderData(int section, Qt::Orientation orientation, const QVariant& value, int role)
{
static const jlcxx::JuliaFunction setheaderdata_f(jl_get_function(m_qml_mod, "setheaderdata!"));
return safe_unbox<bool>(setheaderdata_f(this, section+1, orientation, value, role));
return safe_unbox<bool>(setheaderdata_f(this, section+1, static_cast<Qt::Orientation>(orientation), value, static_cast<int>(role)));
}

Qt::ItemFlags JuliaItemModel::flags(const QModelIndex& index) const
Expand Down Expand Up @@ -110,13 +110,13 @@ void JuliaItemModel::insertRow(int rowIndex, const QVariant& row)
void JuliaItemModel::moveRow(int fromRowIndex, int toRowIndex, int rows)
{
static const jlcxx::JuliaFunction move_row_f(jl_get_function(m_qml_mod, "move_rows!"));
move_row_f(this, fromRowIndex+1, toRowIndex+1, rows);
move_row_f(this, fromRowIndex+1, toRowIndex+1, static_cast<int>(rows));
}

void JuliaItemModel::removeRow(int rowIndex, int rows)
{
static const jlcxx::JuliaFunction remove_row_f(jl_get_function(m_qml_mod, "remove_rows!"));
remove_row_f(this, rowIndex+1, rows);
remove_row_f(this, rowIndex+1, static_cast<int>(rows));
}

void JuliaItemModel::setRow(int rowIndex, const QVariant& row)
Expand All @@ -140,13 +140,13 @@ void JuliaItemModel::insertColumn(int columnIndex, const QVariant& column)
void JuliaItemModel::moveColumn(int fromColumnIndex, int toColumnIndex, int columns)
{
static const jlcxx::JuliaFunction move_column_f(jl_get_function(m_qml_mod, "move_columns!"));
move_column_f(this, fromColumnIndex+1, toColumnIndex+1, columns);
move_column_f(this, fromColumnIndex+1, toColumnIndex+1, static_cast<int>(columns));
}

void JuliaItemModel::removeColumn(int columnIndex, int columns)
{
static const jlcxx::JuliaFunction remove_column_f(jl_get_function(m_qml_mod, "remove_columns!"));
remove_column_f(this, columnIndex+1, columns);
remove_column_f(this, columnIndex+1, static_cast<int>(columns));
}

void JuliaItemModel::setColumn(int columnIndex, const QVariant& column)
Expand Down
21 changes: 9 additions & 12 deletions makie_viewport.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -90,18 +90,6 @@ struct MakieSupport
MakieViewport::MakieViewport(QQuickItem *parent) : OpenGLViewport(parent, new MakieRenderFunction(m_screen, m_scene))
{
get_makie_support_module(); // Throw the possible error early
QObject::connect(this, &QQuickItem::windowChanged, [this] (QQuickWindow* w)
{
if (w == nullptr)
{
return;
}

connect(w, &QQuickWindow::sceneGraphInvalidated, [this] ()
{
MakieSupport::instance().on_context_destroy();
});
});
}

MakieViewport::~MakieViewport()
Expand All @@ -118,6 +106,10 @@ MakieViewport::~MakieViewport()

qvariant_any_t MakieViewport::scene()
{
if(m_scene == nullptr)
{
return std::make_shared<QVariantAny>(jl_nothing);
}
return std::make_shared<QVariantAny>(m_scene);
}

Expand All @@ -138,6 +130,11 @@ void MakieViewport::setup_buffer(QOpenGLFramebufferObject* fbo)
{
m_screen = MakieSupport::instance().setup_screen(std::forward<QOpenGLFramebufferObject*>(fbo), window());
jlcxx::protect_from_gc(m_screen);

connect(window(), &QQuickWindow::sceneGraphInvalidated, [this] ()
{
MakieSupport::instance().on_context_destroy(m_screen);
});
}
else
{
Expand Down
Loading
Loading