diff --git a/doric-Qt/doric/DoricContext.cpp b/doric-Qt/doric/DoricContext.cpp index 0e265176..bfa6d0fd 100644 --- a/doric-Qt/doric/DoricContext.cpp +++ b/doric-Qt/doric/DoricContext.cpp @@ -1,7 +1,9 @@ #include "DoricContext.h" #include "DoricContextManager.h" #include "DoricNativeDriver.h" + #include "utils/DoricConstant.h" +#include "utils/DoricContextHolder.h" DoricContext::DoricContext(QString contextId, QString source, QString extra) { this->mRootNode = new DoricRootNode(); @@ -63,6 +65,7 @@ QObject *DoricContext::obtainPlugin(QString name) { } else { QObject *plugin = getDriver()->getRegistry()->pluginInfoMap.createObject(name); + dynamic_cast(plugin)->setContext(this); mPluginMap.insert(name, plugin); return plugin; } diff --git a/doric-Qt/doric/doric.pro b/doric-Qt/doric/doric.pro index 339b9d94..b22c130b 100644 --- a/doric-Qt/doric/doric.pro +++ b/doric-Qt/doric/doric.pro @@ -32,7 +32,8 @@ SOURCES += \ main.cpp \ plugin/DoricShaderPlugin.cpp \ shader/DoricRootNode.cpp \ - utils/DoricConstant.cpp + utils/DoricConstant.cpp \ + utils/DoricContextHolder.cpp RESOURCES += qml.qrc @@ -67,10 +68,12 @@ HEADERS += \ engine/DoricNativeLog.h \ engine/DoricNativeRequire.h \ engine/DoricTimerExtension.h \ + plugin/DoricNativePlugin.h \ plugin/DoricShaderPlugin.h \ shader/DoricRootNode.h \ template/DoricSingleton.h \ utils/DoricConstant.h \ + utils/DoricContextHolder.h \ utils/DoricCountDownLatch.h \ utils/DoricObjectFactory.h \ utils/DoricUtils.h diff --git a/doric-Qt/doric/doric.pro.user b/doric-Qt/doric/doric.pro.user index b8013ae0..47800cde 100644 --- a/doric-Qt/doric/doric.pro.user +++ b/doric-Qt/doric/doric.pro.user @@ -1,6 +1,6 @@ - + EnvironmentId diff --git a/doric-Qt/doric/engine/DoricBridgeExtension.cpp b/doric-Qt/doric/engine/DoricBridgeExtension.cpp index 0f284ec2..7c339d9e 100644 --- a/doric-Qt/doric/engine/DoricBridgeExtension.cpp +++ b/doric-Qt/doric/engine/DoricBridgeExtension.cpp @@ -19,7 +19,6 @@ void DoricBridgeExtension::callNative(QString contextId, QString module, Qt::DirectConnection, QGenericReturnArgument(), Q_ARG(QJSValue, jsValue), Q_ARG(QString, callbackId)); - qDebug() << plugin; } qDebug() << "contextId: " + contextId; qDebug() << "module: " + module; diff --git a/doric-Qt/doric/plugin/DoricNativePlugin.h b/doric-Qt/doric/plugin/DoricNativePlugin.h new file mode 100644 index 00000000..3632eaaf --- /dev/null +++ b/doric-Qt/doric/plugin/DoricNativePlugin.h @@ -0,0 +1,11 @@ +#ifndef DORICNATIVEPLUGIN_H +#define DORICNATIVEPLUGIN_H + +#include "../utils/DoricContextHolder.h" + +class DoricNativePlugin : public DoricContextHolder { +public: + using DoricContextHolder::DoricContextHolder; +}; + +#endif // DORICNATIVEPLUGIN_H diff --git a/doric-Qt/doric/plugin/DoricShaderPlugin.cpp b/doric-Qt/doric/plugin/DoricShaderPlugin.cpp index 2cbcebb9..d599293d 100644 --- a/doric-Qt/doric/plugin/DoricShaderPlugin.cpp +++ b/doric-Qt/doric/plugin/DoricShaderPlugin.cpp @@ -2,8 +2,6 @@ #include -DoricShaderPlugin::DoricShaderPlugin(QObject *parent) : QObject(parent) {} - void DoricShaderPlugin::render(QJSValue jsValue, QString callbackId) { - qDebug() << ""; + qDebug() << getContext(); } diff --git a/doric-Qt/doric/plugin/DoricShaderPlugin.h b/doric-Qt/doric/plugin/DoricShaderPlugin.h index 7021ca22..3dd33f90 100644 --- a/doric-Qt/doric/plugin/DoricShaderPlugin.h +++ b/doric-Qt/doric/plugin/DoricShaderPlugin.h @@ -4,10 +4,12 @@ #include #include -class DoricShaderPlugin : public QObject { +#include "DoricNativePlugin.h" + +class DoricShaderPlugin : public DoricNativePlugin { Q_OBJECT public: - DoricShaderPlugin(QObject *parent); + using DoricNativePlugin::DoricNativePlugin; Q_INVOKABLE void render(QJSValue jsValue, QString callbackId); }; diff --git a/doric-Qt/doric/utils/DoricContextHolder.cpp b/doric-Qt/doric/utils/DoricContextHolder.cpp new file mode 100644 index 00000000..36598215 --- /dev/null +++ b/doric-Qt/doric/utils/DoricContextHolder.cpp @@ -0,0 +1,9 @@ +#include "DoricContextHolder.h" + +DoricContextHolder::DoricContextHolder(QObject *parent) { mContext = NULL; } + +void DoricContextHolder::setContext(DoricContext *context) { + mContext = context; +} + +DoricContext *DoricContextHolder::getContext() { return mContext; } diff --git a/doric-Qt/doric/utils/DoricContextHolder.h b/doric-Qt/doric/utils/DoricContextHolder.h new file mode 100644 index 00000000..c12aa84e --- /dev/null +++ b/doric-Qt/doric/utils/DoricContextHolder.h @@ -0,0 +1,18 @@ +#ifndef DORICCONTEXTHOLDER_H +#define DORICCONTEXTHOLDER_H + +#include "../DoricContext.h" + +class DoricContextHolder : public QObject { +protected: + DoricContext *mContext = NULL; + +public: + explicit DoricContextHolder(QObject *parent = nullptr); + + void setContext(DoricContext *context); + + DoricContext *getContext(); +}; + +#endif // DORICCONTEXTHOLDER_H