Add visibility related methods/event to QWindow

This commit is contained in:
Simon Edwards 2022-04-06 19:30:05 +02:00
parent 733c24e6cd
commit 69d0e2e3cd
5 changed files with 46 additions and 3 deletions

View File

@ -50,6 +50,8 @@ class DLL_EXPORT QWindowWrap : public Napi::ObjectWrap<QWindowWrap>,
Napi::Value startSystemResize(const Napi::CallbackInfo& info);
Napi::Value setWindowState(const Napi::CallbackInfo& info);
Napi::Value windowState(const Napi::CallbackInfo& info);
Napi::Value visibility(const Napi::CallbackInfo& info);
Napi::Value setVisibility(const Napi::CallbackInfo& info);
protected:
bool eventFilter(QObject* watched, QEvent* event) override;

View File

@ -20,6 +20,8 @@ Napi::Object QWindowWrap::init(Napi::Env env, Napi::Object exports) {
InstanceMethod("startSystemResize", &QWindowWrap::startSystemResize),
InstanceMethod("setWindowState", &QWindowWrap::setWindowState),
InstanceMethod("windowState", &QWindowWrap::windowState),
InstanceMethod("visibility", &QWindowWrap::visibility),
InstanceMethod("setVisibility", &QWindowWrap::setVisibility),
QOBJECT_WRAPPED_METHODS_EXPORT_DEFINE(QWindowWrap)});
constructor = Napi::Persistent(func);
exports.Set(CLASSNAME, func);
@ -59,6 +61,15 @@ void QWindowWrap::connectSignalsToEventEmitter() {
{Napi::String::New(env, "screenChanged"), instance});
});
QObject::connect(
this->instance.data(), &QWindow::visibilityChanged,
[=](QWindow::Visibility visibility) {
Napi::Env env = this->emitOnNode.Env();
Napi::HandleScope scope(env);
this->emitOnNode.Call({Napi::String::New(env, "visibilityChanged"),
Napi::Number::New(env, visibility)});
});
this->instance->installEventFilter(this);
}
@ -117,12 +128,26 @@ Napi::Value QWindowWrap::setWindowState(const Napi::CallbackInfo& info) {
Napi::Env env = info.Env();
Napi::Number state = info[0].As<Napi::Number>();
this->instance->setWindowState(
static_cast<Qt::WindowState>(state.Int32Value()));
static_cast<Qt::WindowState>(state.Uint32Value()));
return env.Null();
}
Napi::Value QWindowWrap::windowState(const Napi::CallbackInfo& info) {
Napi::Env env = info.Env();
int state = static_cast<int>(this->instance->windowState());
uint state = static_cast<uint>(this->instance->windowState());
return Napi::Value::From(env, state);
}
Napi::Value QWindowWrap::visibility(const Napi::CallbackInfo& info) {
Napi::Env env = info.Env();
uint state = static_cast<uint>(this->instance->visibility());
return Napi::Value::From(env, state);
}
Napi::Value QWindowWrap::setVisibility(const Napi::CallbackInfo& info) {
Napi::Env env = info.Env();
Napi::Number state = info[0].As<Napi::Number>();
this->instance->setVisibility(
static_cast<QWindow::Visibility>(state.Uint32Value()));
return env.Null();
}

View File

@ -0,0 +1,8 @@
export enum Visibility {
Hidden = 0,
AutomaticVisibility = 1,
Windowed = 2,
Minimized = 3,
Maximized = 4,
FullScreen = 5,
}

View File

@ -90,3 +90,4 @@ export { WindowType } from './WindowType';
export { PenStyle } from './PenStyle';
export { PenCapStyle } from './PenCapStyle';
export { DialogCode } from './DialogCode';
export { Visibility } from './Visibility';

View File

@ -3,7 +3,7 @@ import { checkIfNativeElement, registerNativeWrapFunction } from '../utils/helpe
import { NodeObject, QObjectSignals } from '../QtCore/QObject';
import { QScreen } from './QScreen';
import { wrapperCache } from '../core/WrapperCache';
import { Edge, WindowState } from '../QtEnums';
import { Edge, Visibility, WindowState } from '../QtEnums';
export class QWindow extends NodeObject<QWindowSignals> {
native: NativeElement;
@ -66,10 +66,17 @@ export class QWindow extends NodeObject<QWindowSignals> {
windowState(): WindowState {
return this.native.windowState();
}
visibility(): Visibility {
return this.native.visibility();
}
setVisibility(visibility: Visibility): void {
return this.native.setVisibility(visibility);
}
}
export interface QWindowSignals extends QObjectSignals {
screenChanged: (screen: QScreen) => void;
visibilityChanged: (visibility: Visibility) => void;
}
registerNativeWrapFunction('QWindowWrap', (native: any) => {