Add QStyle.polish(), QStyle.unpolish(), and QWidget.style()

This commit is contained in:
Simon Edwards 2021-09-13 19:50:53 +02:00
parent 44bb1e5f0e
commit 590385339c
5 changed files with 73 additions and 2 deletions

View File

@ -20,4 +20,6 @@ class DLL_EXPORT QStyleWrap : public Napi::ObjectWrap<QStyleWrap> {
QStyle* getInternalInstance();
// Wrapped methods
Napi::Value pixelMetric(const Napi::CallbackInfo& info);
Napi::Value polish(const Napi::CallbackInfo& info);
Napi::Value unpolish(const Napi::CallbackInfo& info);
};

View File

@ -9,6 +9,7 @@
#include "QtCore/QSize/qsize_wrap.h"
#include "QtGui/QCursor/qcursor_wrap.h"
#include "QtGui/QIcon/qicon_wrap.h"
#include "QtGui/QStyle/qstyle_wrap.h"
#include "QtWidgets/QAction/qaction_wrap.h"
#include "QtWidgets/QLayout/qlayout_wrap.h"
#include "core/YogaWidget/yogawidget_macro.h"
@ -483,6 +484,13 @@
int minh = info[0].As<Napi::Number>().Int32Value(); \
this->instance->setMinimumHeight(minh); \
return env.Null(); \
} \
Napi::Value style(const Napi::CallbackInfo& info) { \
Napi::Env env = info.Env(); \
Napi::HandleScope scope(env); \
QStyle* style = this->instance->style(); \
return QStyleWrap::constructor.New( \
{Napi::External<QStyle>::New(env, style)}); \
}
#endif // QWIDGET_WRAPPED_METHODS_DECLARATION
@ -551,7 +559,8 @@
InstanceMethod("setMaximumHeight", &WidgetWrapName::setMaximumHeight), \
InstanceMethod("setMinimumWidth", &WidgetWrapName::setMinimumWidth), \
InstanceMethod("setMaximumWidth", &WidgetWrapName::setMaximumWidth), \
InstanceMethod("setMinimumHeight", &WidgetWrapName::setMinimumHeight),
InstanceMethod("setMinimumHeight", &WidgetWrapName::setMinimumHeight), \
InstanceMethod("style", &WidgetWrapName::style),
#endif // QWIDGET_WRAPPED_METHODS_EXPORT_DEFINE

View File

@ -1,6 +1,7 @@
#include "QtGui/QStyle/qstyle_wrap.h"
#include "Extras/Utils/nutils.h"
#include "QtWidgets/QWidget/qwidget_wrap.h"
Napi::FunctionReference QStyleWrap::constructor;
@ -10,6 +11,8 @@ Napi::Object QStyleWrap::init(Napi::Env env, Napi::Object exports) {
Napi::Function func =
DefineClass(env, CLASSNAME,
{InstanceMethod("pixelMetric", &QStyleWrap::pixelMetric),
InstanceMethod("polish", &QStyleWrap::polish),
InstanceMethod("unpolish", &QStyleWrap::unpolish),
COMPONENT_WRAPPED_METHODS_EXPORT_DEFINE(QStyleWrap)});
constructor = Napi::Persistent(func);
exports.Set(CLASSNAME, func);
@ -39,3 +42,45 @@ Napi::Value QStyleWrap::pixelMetric(const Napi::CallbackInfo& info) {
return Napi::Value::From(env, this->instance->pixelMetric(metric));
}
Napi::Value QStyleWrap::polish(const Napi::CallbackInfo& info) {
Napi::Env env = info.Env();
Napi::HandleScope scope(env);
Napi::Object qwidgetObject = info[0].As<Napi::Object>();
NodeWidgetWrap* qwidgetWrap =
Napi::ObjectWrap<NodeWidgetWrap>::Unwrap(qwidgetObject);
QWidget* qwidget = qwidgetWrap->getInternalInstance();
this->instance->polish(qwidget);
return env.Null();
}
Napi::Value QStyleWrap::unpolish(const Napi::CallbackInfo& info) {
Napi::Env env = info.Env();
Napi::HandleScope scope(env);
Napi::Object qwidgetObject = info[0].As<Napi::Object>();
NodeWidgetWrap* qwidgetWrap =
Napi::ObjectWrap<NodeWidgetWrap>::Unwrap(qwidgetObject);
QWidget* qwidget = qwidgetWrap->getInternalInstance();
this->instance->unpolish(qwidget);
return env.Null();
}
/*
Napi::Value QStyleWrap::polish(const Napi::CallbackInfo& info) {
Napi::Env env = info.Env();
Napi::HandleScope scope(env);
QWidget* qwidget = info[0].As<Napi::External<QWidget>>();
this->instance->polish(qwidget);
return env.Null();
}
Napi::Value QStyleWrap::unpolish(const Napi::CallbackInfo& info) {
Napi::Env env = info.Env();
Napi::HandleScope scope(env);
QWidget* qwidget = info[0].As<Napi::External<QWidget>>();
this->instance->unpolish(qwidget);
return env.Null();
}
*/

View File

@ -1,3 +1,4 @@
import { NodeWidget } from '../..';
import { Component, NativeElement } from '../core/Component';
import { checkIfNativeElement } from '../utils/helpers';
@ -15,6 +16,12 @@ export class QStyle extends Component {
pixelMetric(metric: QStylePixelMetric): number {
return this.native.pixelMetric(metric);
}
polish(widget: NodeWidget<any>): void {
this.native.polish(widget.native);
}
unpolish(widget: NodeWidget<any>): void {
this.native.unpolish(widget.native);
}
}
export enum QStylePixelMetric {

View File

@ -17,7 +17,7 @@ import { QFont } from '../QtGui/QFont';
import { QAction } from './QAction';
import memoizeOne from 'memoize-one';
import { QGraphicsEffect } from './QGraphicsEffect';
import { QSizePolicyPolicy } from '../..';
import { QSizePolicyPolicy, QStyle } from '../..';
/**
@ -373,6 +373,14 @@ export abstract class NodeWidget<Signals extends QWidgetSignals> extends YogaWid
size(): QSize {
return new QSize(this.native.size());
}
// TODO: virtual QSize sizeHint() const
// TODO: QSize sizeIncrement() const
// TODO: QSizePolicy sizePolicy() const
// TODO: void stackUnder(QWidget *w)
// TODO: QString statusTip() const
style(): QStyle {
return new QStyle(this.native.style());
}
styleSheet(): string {
return this.native.styleSheet();
}