Pass env to WrapperCache::get()
This commit is contained in:
parent
2b2d2a65b2
commit
f7f86d5cfa
@ -6,6 +6,7 @@
|
|||||||
#include "Extras/Export/export.h"
|
#include "Extras/Export/export.h"
|
||||||
#include "QtCore/QObject/qobject_macro.h"
|
#include "QtCore/QObject/qobject_macro.h"
|
||||||
#include "QtGui/QScreen/qscreen_wrap.h"
|
#include "QtGui/QScreen/qscreen_wrap.h"
|
||||||
|
#include "core/WrapperCache/wrappercache.h"
|
||||||
#include "napi.h"
|
#include "napi.h"
|
||||||
|
|
||||||
class DLL_EXPORT NApplication : public QApplication, public EventWidget {
|
class DLL_EXPORT NApplication : public QApplication, public EventWidget {
|
||||||
@ -28,8 +29,8 @@ class DLL_EXPORT NApplication : public QApplication, public EventWidget {
|
|||||||
this, &QGuiApplication::primaryScreenChanged, [=](QScreen* screen) {
|
this, &QGuiApplication::primaryScreenChanged, [=](QScreen* screen) {
|
||||||
Napi::Env env = this->emitOnNode.Env();
|
Napi::Env env = this->emitOnNode.Env();
|
||||||
Napi::HandleScope scope(env);
|
Napi::HandleScope scope(env);
|
||||||
auto instance = QScreenWrap::constructor.New(
|
auto instance =
|
||||||
{Napi::External<QScreen>::New(env, screen)});
|
WrapperCache::instance.get<QScreen, QScreenWrap>(env, screen);
|
||||||
this->emitOnNode.Call(
|
this->emitOnNode.Call(
|
||||||
{Napi::String::New(env, "primaryScreenChanged"), instance});
|
{Napi::String::New(env, "primaryScreenChanged"), instance});
|
||||||
});
|
});
|
||||||
@ -37,19 +38,19 @@ class DLL_EXPORT NApplication : public QApplication, public EventWidget {
|
|||||||
QObject::connect(this, &QGuiApplication::screenAdded, [=](QScreen* screen) {
|
QObject::connect(this, &QGuiApplication::screenAdded, [=](QScreen* screen) {
|
||||||
Napi::Env env = this->emitOnNode.Env();
|
Napi::Env env = this->emitOnNode.Env();
|
||||||
Napi::HandleScope scope(env);
|
Napi::HandleScope scope(env);
|
||||||
auto instance = QScreenWrap::constructor.New(
|
auto instance =
|
||||||
{Napi::External<QScreen>::New(env, screen)});
|
WrapperCache::instance.get<QScreen, QScreenWrap>(env, screen);
|
||||||
this->emitOnNode.Call({Napi::String::New(env, "screenAdded"), instance});
|
this->emitOnNode.Call({Napi::String::New(env, "screenAdded"), instance});
|
||||||
});
|
});
|
||||||
|
|
||||||
QObject::connect(this, &QGuiApplication::screenRemoved,
|
QObject::connect(
|
||||||
[=](QScreen* screen) {
|
this, &QGuiApplication::screenRemoved, [=](QScreen* screen) {
|
||||||
Napi::Env env = this->emitOnNode.Env();
|
Napi::Env env = this->emitOnNode.Env();
|
||||||
Napi::HandleScope scope(env);
|
Napi::HandleScope scope(env);
|
||||||
auto instance = QScreenWrap::constructor.New(
|
auto instance =
|
||||||
{Napi::External<QScreen>::New(env, screen)});
|
WrapperCache::instance.get<QScreen, QScreenWrap>(env, screen);
|
||||||
this->emitOnNode.Call(
|
this->emitOnNode.Call(
|
||||||
{Napi::String::New(env, "screenRemoved"), instance});
|
{Napi::String::New(env, "screenRemoved"), instance});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
@ -545,7 +545,7 @@
|
|||||||
Napi::HandleScope scope(env); \
|
Napi::HandleScope scope(env); \
|
||||||
QWindow* window = this->instance->windowHandle(); \
|
QWindow* window = this->instance->windowHandle(); \
|
||||||
if (window) { \
|
if (window) { \
|
||||||
return WrapperCache::instance.get<QWindow, QWindowWrap>(info, window); \
|
return WrapperCache::instance.get<QWindow, QWindowWrap>(env, window); \
|
||||||
} else { \
|
} else { \
|
||||||
return env.Null(); \
|
return env.Null(); \
|
||||||
} \
|
} \
|
||||||
|
|||||||
@ -39,13 +39,12 @@ class DLL_EXPORT WrapperCache : public QObject {
|
|||||||
* e.g. `QScreen`.
|
* e.g. `QScreen`.
|
||||||
* @param W - (template argument) The wrapper type which matches the object
|
* @param W - (template argument) The wrapper type which matches the object
|
||||||
* `QScreenWrap`.
|
* `QScreenWrap`.
|
||||||
|
* @param env = Napi environment
|
||||||
* @param object - Pointer to the QObject for which a wrapper is required.
|
* @param object - Pointer to the QObject for which a wrapper is required.
|
||||||
* @return The JS wrapper object.
|
* @return The JS wrapper object.
|
||||||
*/
|
*/
|
||||||
template <class T, class W>
|
template <class T, class W>
|
||||||
Napi::Object get(const Napi::CallbackInfo& info, T* object) {
|
Napi::Object get(Napi::Env env, T* object) {
|
||||||
Napi::Env env = info.Env();
|
|
||||||
|
|
||||||
if (this->cache.contains(object)) {
|
if (this->cache.contains(object)) {
|
||||||
napi_value result = nullptr;
|
napi_value result = nullptr;
|
||||||
napi_get_reference_value(this->cache[object].env, this->cache[object].ref,
|
napi_get_reference_value(this->cache[object].env, this->cache[object].ref,
|
||||||
|
|||||||
@ -176,7 +176,7 @@ Napi::Value StaticQApplicationWrapMethods::primaryScreen(
|
|||||||
Napi::HandleScope scope(env);
|
Napi::HandleScope scope(env);
|
||||||
auto screen = QApplication::primaryScreen();
|
auto screen = QApplication::primaryScreen();
|
||||||
if (screen) {
|
if (screen) {
|
||||||
return WrapperCache::instance.get<QScreen, QScreenWrap>(info, screen);
|
return WrapperCache::instance.get<QScreen, QScreenWrap>(env, screen);
|
||||||
} else {
|
} else {
|
||||||
return env.Null();
|
return env.Null();
|
||||||
}
|
}
|
||||||
@ -192,7 +192,7 @@ Napi::Value StaticQApplicationWrapMethods::screens(
|
|||||||
for (int i = 0; i < screens.size(); i++) {
|
for (int i = 0; i < screens.size(); i++) {
|
||||||
QScreen* screen = screens[i];
|
QScreen* screen = screens[i];
|
||||||
auto instance =
|
auto instance =
|
||||||
WrapperCache::instance.get<QScreen, QScreenWrap>(info, screen);
|
WrapperCache::instance.get<QScreen, QScreenWrap>(env, screen);
|
||||||
jsArray[i] = instance;
|
jsArray[i] = instance;
|
||||||
}
|
}
|
||||||
return jsArray;
|
return jsArray;
|
||||||
|
|||||||
@ -40,7 +40,10 @@ void QWindowWrap::connectSignalsToEventEmitter() {
|
|||||||
this->instance.data(), &QWindow::screenChanged, [=](QScreen* screen) {
|
this->instance.data(), &QWindow::screenChanged, [=](QScreen* screen) {
|
||||||
Napi::Env env = this->emitOnNode.Env();
|
Napi::Env env = this->emitOnNode.Env();
|
||||||
Napi::HandleScope scope(env);
|
Napi::HandleScope scope(env);
|
||||||
this->emitOnNode.Call({Napi::String::New(env, "screenChanged")});
|
auto instance =
|
||||||
|
WrapperCache::instance.get<QScreen, QScreenWrap>(env, screen);
|
||||||
|
this->emitOnNode.Call(
|
||||||
|
{Napi::String::New(env, "screenChanged"), instance});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -50,7 +53,7 @@ Napi::Value QWindowWrap::screen(const Napi::CallbackInfo& info) {
|
|||||||
|
|
||||||
QScreen* screen = this->instance->screen();
|
QScreen* screen = this->instance->screen();
|
||||||
if (screen) {
|
if (screen) {
|
||||||
return WrapperCache::instance.get<QScreen, QScreenWrap>(info, screen);
|
return WrapperCache::instance.get<QScreen, QScreenWrap>(env, screen);
|
||||||
} else {
|
} else {
|
||||||
return env.Null();
|
return env.Null();
|
||||||
}
|
}
|
||||||
|
|||||||
@ -22,5 +22,5 @@ export class QWindow extends NodeObject<QWindowSignals> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export interface QWindowSignals extends QObjectSignals {
|
export interface QWindowSignals extends QObjectSignals {
|
||||||
screenChanged: () => void;
|
screenChanged: (screen: QScreen) => void;
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user