From 17462abae767bd8c7b30f0edcfd5bcbf9fae5440 Mon Sep 17 00:00:00 2001 From: Simon Edwards Date: Fri, 30 Jul 2021 09:02:58 +0200 Subject: [PATCH] Add a (basic) `QPalette` --- CMakeLists.txt | 1 + .../QtGui/QApplication/qapplication_wrap.h | 2 + .../nodegui/QtGui/QPalette/qpalette_wrap.h | 24 ++++++++ .../QtGui/QApplication/qapplication_wrap.cpp | 11 ++++ src/cpp/lib/QtGui/QPalette/qpalette_wrap.cpp | 58 +++++++++++++++++++ src/cpp/main.cpp | 2 + src/index.ts | 1 + src/lib/QtGui/QApplication.ts | 4 ++ src/lib/QtGui/QPalette.ts | 45 ++++++++++++++ 9 files changed, 148 insertions(+) create mode 100644 src/cpp/include/nodegui/QtGui/QPalette/qpalette_wrap.h create mode 100644 src/cpp/lib/QtGui/QPalette/qpalette_wrap.cpp create mode 100644 src/lib/QtGui/QPalette.ts diff --git a/CMakeLists.txt b/CMakeLists.txt index 246316397..8a8555984 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -63,6 +63,7 @@ add_library(${CORE_WIDGETS_ADDON} SHARED "${PROJECT_SOURCE_DIR}/src/cpp/lib/QtGui/QCursor/qcursor_wrap.cpp" "${PROJECT_SOURCE_DIR}/src/cpp/lib/QtGui/QKeySequence/qkeysequence_wrap.cpp" "${PROJECT_SOURCE_DIR}/src/cpp/lib/QtGui/QMovie/qmovie_wrap.cpp" + "${PROJECT_SOURCE_DIR}/src/cpp/lib/QtGui/QPalette/qpalette_wrap.cpp" "${PROJECT_SOURCE_DIR}/src/cpp/lib/QtGui/QStyle/qstyle_wrap.cpp" "${PROJECT_SOURCE_DIR}/src/cpp/lib/QtCore/QDate/qdate_wrap.cpp" "${PROJECT_SOURCE_DIR}/src/cpp/lib/QtCore/QDateTime/qdatetime_wrap.cpp" diff --git a/src/cpp/include/nodegui/QtGui/QApplication/qapplication_wrap.h b/src/cpp/include/nodegui/QtGui/QApplication/qapplication_wrap.h index def3e87ef..3c7a7c247 100644 --- a/src/cpp/include/nodegui/QtGui/QApplication/qapplication_wrap.h +++ b/src/cpp/include/nodegui/QtGui/QApplication/qapplication_wrap.h @@ -28,6 +28,8 @@ class DLL_EXPORT QApplicationWrap : public Napi::ObjectWrap { Napi::Value exit(const Napi::CallbackInfo& info); Napi::Value setQuitOnLastWindowClosed(const Napi::CallbackInfo& info); Napi::Value quitOnLastWindowClosed(const Napi::CallbackInfo& info); + Napi::Value palette(const Napi::CallbackInfo& info); + // setStyleSheet }; namespace StaticQApplicationWrapMethods { diff --git a/src/cpp/include/nodegui/QtGui/QPalette/qpalette_wrap.h b/src/cpp/include/nodegui/QtGui/QPalette/qpalette_wrap.h new file mode 100644 index 000000000..4b307a816 --- /dev/null +++ b/src/cpp/include/nodegui/QtGui/QPalette/qpalette_wrap.h @@ -0,0 +1,24 @@ +#pragma once + +#include + +#include + +#include "Extras/Export/export.h" +#include "core/Component/component_macro.h" + +class DLL_EXPORT QPaletteWrap : public Napi::ObjectWrap { + COMPONENT_WRAPPED_METHODS_DECLARATION + private: + std::unique_ptr instance; + + public: + static Napi::FunctionReference constructor; + static Napi::Object init(Napi::Env env, Napi::Object exports); + QPaletteWrap(const Napi::CallbackInfo& info); + ~QPaletteWrap(); + QPalette* getInternalInstance(); + + // Wrapped methods + Napi::Value color(const Napi::CallbackInfo& info); +}; diff --git a/src/cpp/lib/QtGui/QApplication/qapplication_wrap.cpp b/src/cpp/lib/QtGui/QApplication/qapplication_wrap.cpp index 67543b7d1..7dfb007be 100644 --- a/src/cpp/lib/QtGui/QApplication/qapplication_wrap.cpp +++ b/src/cpp/lib/QtGui/QApplication/qapplication_wrap.cpp @@ -2,6 +2,7 @@ #include "Extras/Utils/nutils.h" #include "QtGui/QClipboard/qclipboard_wrap.h" +#include "QtGui/QPalette/qpalette_wrap.h" #include "QtGui/QStyle/qstyle_wrap.h" #include "core/Integration/qode-api.h" @@ -20,6 +21,7 @@ Napi::Object QApplicationWrap::init(Napi::Env env, Napi::Object exports) { &QApplicationWrap::setQuitOnLastWindowClosed), InstanceMethod("quitOnLastWindowClosed", &QApplicationWrap::quitOnLastWindowClosed), + InstanceMethod("palette", &QApplicationWrap::palette), StaticMethod("instance", &StaticQApplicationWrapMethods::instance), StaticMethod("clipboard", &StaticQApplicationWrapMethods::clipboard), StaticMethod("style", &StaticQApplicationWrapMethods::style), @@ -81,6 +83,15 @@ Napi::Value QApplicationWrap::exit(const Napi::CallbackInfo& info) { return env.Null(); } +Napi::Value QApplicationWrap::palette(const Napi::CallbackInfo& info) { + Napi::Env env = info.Env(); + Napi::HandleScope scope(env); + + QPalette* palette = new QPalette(this->instance->palette()); + return QPaletteWrap::constructor.New( + {Napi::External::New(env, palette)}); +} + Napi::Value StaticQApplicationWrapMethods::instance( const Napi::CallbackInfo& info) { Napi::Env env = info.Env(); diff --git a/src/cpp/lib/QtGui/QPalette/qpalette_wrap.cpp b/src/cpp/lib/QtGui/QPalette/qpalette_wrap.cpp new file mode 100644 index 000000000..65a43ac32 --- /dev/null +++ b/src/cpp/lib/QtGui/QPalette/qpalette_wrap.cpp @@ -0,0 +1,58 @@ +#include "QtGui/QPalette/qpalette_wrap.h" + +#include "Extras/Utils/nutils.h" +#include "QtCore/QVariant/qvariant_wrap.h" +#include "QtGui/QBrush/qbrush_wrap.h" +#include "QtGui/QColor/qcolor_wrap.h" +#include "QtGui/QPixmap/qpixmap_wrap.h" + +Napi::FunctionReference QPaletteWrap::constructor; + +Napi::Object QPaletteWrap::init(Napi::Env env, Napi::Object exports) { + Napi::HandleScope scope(env); + char CLASSNAME[] = "QPen"; + Napi::Function func = + DefineClass(env, CLASSNAME, + {InstanceMethod("color", &QPaletteWrap::color), + COMPONENT_WRAPPED_METHODS_EXPORT_DEFINE(QPaletteWrap)}); + constructor = Napi::Persistent(func); + exports.Set(CLASSNAME, func); + return exports; +} + +QPaletteWrap::QPaletteWrap(const Napi::CallbackInfo& info) + : Napi::ObjectWrap(info) { + Napi::Env env = info.Env(); + Napi::HandleScope scope(env); + + if (info.Length() == 0) { + this->instance = std::make_unique(); + } else if (info.Length() == 1) { + this->instance = std::unique_ptr( + info[0].As>().Data()); + } else { + Napi::TypeError::New(env, "Wrong number of arguments") + .ThrowAsJavaScriptException(); + } + this->rawData = extrautils::configureComponent(this->getInternalInstance()); +} + +QPaletteWrap::~QPaletteWrap() { this->instance.reset(); } + +QPalette* QPaletteWrap::getInternalInstance() { return this->instance.get(); } + +Napi::Value QPaletteWrap::color(const Napi::CallbackInfo& info) { + Napi::Env env = info.Env(); + Napi::HandleScope scope(env); + + QPalette::ColorGroup colorGroup = static_cast( + info[0].As().Int32Value()); + QPalette::ColorRole colorRole = + static_cast(info[1].As().Int32Value()); + + QColor color = this->instance->color(colorGroup, colorRole); + + auto instance = QColorWrap::constructor.New( + {Napi::External::New(env, new QColor(color))}); + return instance; +} diff --git a/src/cpp/main.cpp b/src/cpp/main.cpp index 1f746c856..6e72970ef 100644 --- a/src/cpp/main.cpp +++ b/src/cpp/main.cpp @@ -37,6 +37,7 @@ #include "QtGui/QImage/qimage_wrap.h" #include "QtGui/QKeySequence/qkeysequence_wrap.h" #include "QtGui/QMovie/qmovie_wrap.h" +#include "QtGui/QPalette/qpalette_wrap.h" #include "QtGui/QPen/qpen_wrap.h" #include "QtGui/QPicture/qpicture_wrap.h" #include "QtGui/QPixmap/qpixmap_wrap.h" @@ -218,6 +219,7 @@ Napi::Object Main(Napi::Env env, Napi::Object exports) { QSvgWidgetWrap::init(env, exports); QDesktopWidgetWrap::init(env, exports); QPaintEventWrap::init(env, exports); + QPaletteWrap::init(env, exports); return exports; } diff --git a/src/index.ts b/src/index.ts index b091ebe6a..cbe53c014 100644 --- a/src/index.ts +++ b/src/index.ts @@ -13,6 +13,7 @@ export { QIcon, QIconMode, QIconState } from './lib/QtGui/QIcon'; export { QImage, QImageFormat } from './lib/QtGui/QImage'; export { QFont, QFontCapitalization, QFontStretch, QFontWeight } from './lib/QtGui/QFont'; export { QMovie, CacheMode, MovieState } from './lib/QtGui/QMovie'; +export { QPalette, ColorGroup, ColorRole } from './lib/QtGui/QPalette'; export { QCursor } from './lib/QtGui/QCursor'; export { QTextOptionWrapMode } from './lib/QtGui/QTextOption'; export { QClipboard, QClipboardMode } from './lib/QtGui/QClipboard'; diff --git a/src/lib/QtGui/QApplication.ts b/src/lib/QtGui/QApplication.ts index 294b5f9e0..3288e7ab1 100644 --- a/src/lib/QtGui/QApplication.ts +++ b/src/lib/QtGui/QApplication.ts @@ -5,6 +5,7 @@ import { QClipboard } from './QClipboard'; import { QStyle } from './QStyle'; import { QObjectSignals, NodeObject } from '../QtCore/QObject'; import { QDesktopWidget } from '../QtWidgets/QDesktopWidget'; +import { QPalette } from './QPalette'; /** @@ -62,6 +63,9 @@ export class QApplication extends NodeObject { quitOnLastWindowClosed(): boolean { return this.native.quitOnLastWindowClosed(); } + palette(): QPalette { + return new QPalette(this.native.palette()); + } static style(): QStyle { return new QStyle(addon.QApplication.style()); } diff --git a/src/lib/QtGui/QPalette.ts b/src/lib/QtGui/QPalette.ts new file mode 100644 index 000000000..d8365ec31 --- /dev/null +++ b/src/lib/QtGui/QPalette.ts @@ -0,0 +1,45 @@ +import { Component, NativeElement } from '../core/Component'; +import { QColor } from './QColor'; + +export enum ColorGroup { + Disabled = 1, + Active = 0, + Inactive = 2, + Normal = 0, +} + +export enum ColorRole { + WindowText = 0, + Button = 1, + Light = 2, + Midlight = 3, + Dark = 4, + Mid = 5, + Text = 6, + BrightText = 7, + ButtonText = 8, + Base = 9, + Window = 10, + Shadow = 11, + Highlight = 12, + HighlightedText = 13, + Link = 14, + LinkVisited = 15, + AlternateBase = 16, + NoRole = 17, + ToolTipBase = 18, + ToolTipText = 19, + PlaceholderText = 20, +} + +export class QPalette extends Component { + native: NativeElement; + constructor(native: NativeElement) { + super(); + this.native = native; + } + + color(group: ColorGroup, role: ColorRole): QColor { + return new QColor(this.native.color(group, role)); + } +}