From e3629001c749d4446608c43109d49d705d3690fe Mon Sep 17 00:00:00 2001 From: Jake Kerr Date: Sun, 8 May 2022 11:02:44 +0900 Subject: [PATCH] Expose the QWidget::grab method to script. Reference from qt base: https://code.qt.io/cgit/qt/qtbase.git/tree/src/widgets/kernel/qwidget.cpp#n5247 --- .../nodegui/QtWidgets/QWidget/qwidget_macro.h | 14 ++++++++++++++ src/lib/QtWidgets/QWidget.ts | 6 +++++- 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/src/cpp/include/nodegui/QtWidgets/QWidget/qwidget_macro.h b/src/cpp/include/nodegui/QtWidgets/QWidget/qwidget_macro.h index c4edc7dcd..5c47039f1 100644 --- a/src/cpp/include/nodegui/QtWidgets/QWidget/qwidget_macro.h +++ b/src/cpp/include/nodegui/QtWidgets/QWidget/qwidget_macro.h @@ -6,9 +6,11 @@ #include "QtCore/QObject/qobject_wrap.h" #include "QtCore/QPoint/qpoint_wrap.h" +#include "QtCore/QRect/qrect_wrap.h" #include "QtCore/QSize/qsize_wrap.h" #include "QtGui/QCursor/qcursor_wrap.h" #include "QtGui/QIcon/qicon_wrap.h" +#include "QtGui/QPixmap/qpixmap_wrap.h" #include "QtGui/QStyle/qstyle_wrap.h" #include "QtGui/QWindow/qwindow_wrap.h" #include "QtWidgets/QAction/qaction_wrap.h" @@ -454,6 +456,17 @@ this->instance->clearMask(); \ return env.Null(); \ } \ + Napi::Value grab(const Napi::CallbackInfo& info) { \ + Napi::Env env = info.Env(); \ + Napi::Object boundingRectObject = info[0].As(); \ + QRectWrap* boundingRectWrap = \ + Napi::ObjectWrap::Unwrap(boundingRectObject); \ + auto pixmap = \ + this->instance->grab(*boundingRectWrap->getInternalInstance()); \ + auto instance = QPixmapWrap::constructor.New( \ + {Napi::External::New(env, new QPixmap(pixmap))}); \ + return instance; \ + } \ Napi::Value grabKeyboard(const Napi::CallbackInfo& info) { \ Napi::Env env = info.Env(); \ this->instance->grabKeyboard(); \ @@ -633,6 +646,7 @@ InstanceMethod("setFixedWidth", &WidgetWrapName::setFixedWidth), \ InstanceMethod("ensurePolished", &WidgetWrapName::ensurePolished), \ InstanceMethod("clearMask", &WidgetWrapName::clearMask), \ + InstanceMethod("grab", &WidgetWrapName::grab), \ InstanceMethod("grabKeyboard", &WidgetWrapName::grabKeyboard), \ InstanceMethod("grabMouse", &WidgetWrapName::grabMouse), \ InstanceMethod("hasHeightForWidth", &WidgetWrapName::hasHeightForWidth), \ diff --git a/src/lib/QtWidgets/QWidget.ts b/src/lib/QtWidgets/QWidget.ts index dc8126459..45aa943e5 100644 --- a/src/lib/QtWidgets/QWidget.ts +++ b/src/lib/QtWidgets/QWidget.ts @@ -12,6 +12,7 @@ import { YogaWidget } from '../core/YogaWidget'; import { QPoint } from '../QtCore/QPoint'; import { QSize } from '../QtCore/QSize'; import { QRect } from '../QtCore/QRect'; +import { QPixmap } from '../QtGui/QPixmap'; import { QObjectSignals } from '../QtCore/QObject'; import { QFont } from '../QtGui/QFont'; import { QAction } from './QAction'; @@ -149,7 +150,10 @@ export abstract class NodeWidget extends YogaWid geometry(): QRect { return QRect.fromQVariant(this.property('geometry')); } - // TODO: QPixmap grab(const QRect &rectangle = QRect(QPoint(0, 0), QSize(-1, -1))) + grab(rect?: QRect): QPixmap { + const arg = rect ?? new QRect(0, 0, -1, -1); + return this.native.grab(arg.native); + } // TODO: void grabGesture(Qt::GestureType gesture, Qt::GestureFlags flags = Qt::GestureFlags()) grabKeyboard(): void { this.native.grabKeyboard();