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