diff --git a/CMakeLists.txt b/CMakeLists.txt index 83713ce3d..a044ae284 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -40,6 +40,7 @@ add_library(${CORE_WIDGETS_ADDON} SHARED "${PROJECT_SOURCE_DIR}/src/cpp/lib/QtGui/QClipboard/qclipboard_wrap.cpp" "${PROJECT_SOURCE_DIR}/src/cpp/lib/QtGui/QEvent/QKeyEvent/qkeyevent_wrap.cpp" "${PROJECT_SOURCE_DIR}/src/cpp/lib/QtGui/QEvent/QMouseEvent/qmouseevent_wrap.cpp" + "${PROJECT_SOURCE_DIR}/src/cpp/lib/QtGui/QFontDatabase/qfontdatabase_wrap.cpp" "${PROJECT_SOURCE_DIR}/src/cpp/lib/QtGui/QPixmap/qpixmap_wrap.cpp" "${PROJECT_SOURCE_DIR}/src/cpp/lib/QtGui/QIcon/qicon_wrap.cpp" "${PROJECT_SOURCE_DIR}/src/cpp/lib/QtGui/QCursor/qcursor_wrap.cpp" diff --git a/src/cpp/include/nodegui/QtGui/QFontDatabase/qfontdatabase_wrap.h b/src/cpp/include/nodegui/QtGui/QFontDatabase/qfontdatabase_wrap.h new file mode 100644 index 000000000..0be9f1173 --- /dev/null +++ b/src/cpp/include/nodegui/QtGui/QFontDatabase/qfontdatabase_wrap.h @@ -0,0 +1,30 @@ +#pragma once + +#include +#include + +#include + +#include "core/Component/component_macro.h" + +class QFontDatabaseWrap : public Napi::ObjectWrap { + private: + std::unique_ptr instance; + + public: + static Napi::FunctionReference constructor; + static Napi::Object init(Napi::Env env, Napi::Object exports); + QFontDatabaseWrap(const Napi::CallbackInfo& info); + QFontDatabase* getInternalInstance(); + // Wrapped methods + Napi::Value bold(const Napi::CallbackInfo& info); + Napi::Value italic(const Napi::CallbackInfo& info); + Napi::Value weight(const Napi::CallbackInfo& info); + + COMPONENT_WRAPPED_METHODS_DECLARATION +}; + +namespace StaticQFontDatabaseWrapMethods { +Napi::Value addApplicationFont(const Napi::CallbackInfo& info); +Napi::Value removeApplicationFont(const Napi::CallbackInfo& info); +} // namespace StaticQFontDatabaseWrapMethods diff --git a/src/cpp/lib/QtGui/QFontDatabase/qfontdatabase_wrap.cpp b/src/cpp/lib/QtGui/QFontDatabase/qfontdatabase_wrap.cpp new file mode 100644 index 000000000..20991d572 --- /dev/null +++ b/src/cpp/lib/QtGui/QFontDatabase/qfontdatabase_wrap.cpp @@ -0,0 +1,85 @@ +#include "QtGui/QFontDatabase/qfontdatabase_wrap.h" + +#include "Extras/Utils/nutils.h" + +Napi::FunctionReference QFontDatabaseWrap::constructor; + +Napi::Object QFontDatabaseWrap::init(Napi::Env env, Napi::Object exports) { + Napi::HandleScope scope(env); + char CLASSNAME[] = "QFontDatabase"; + Napi::Function func = + DefineClass( + env, CLASSNAME, + {InstanceMethod("bold", &QFontDatabaseWrap::bold), + InstanceMethod("italic", &QFontDatabaseWrap::italic), + InstanceMethod("weight", &QFontDatabaseWrap::weight), + StaticMethod("addApplicationFont", + &StaticQFontDatabaseWrapMethods::addApplicationFont), + StaticMethod("removeApplicationFont", + &StaticQFontDatabaseWrapMethods::removeApplicationFont), + COMPONENT_WRAPPED_METHODS_EXPORT_DEFINE}); + constructor = Napi::Persistent(func); + exports.Set(CLASSNAME, func); + return exports; +} + +QFontDatabaseWrap::QFontDatabaseWrap(const Napi::CallbackInfo& info) + : Napi::ObjectWrap(info) { + Napi::Env env = info.Env(); + Napi::HandleScope scope(env); + this->instance = std::make_unique(); + this->rawData = extrautils::configureComponent(this->getInternalInstance()); +} + +QFontDatabase* QFontDatabaseWrap::getInternalInstance() { + return this->instance.get(); +} + +Napi::Value QFontDatabaseWrap::bold(const Napi::CallbackInfo& info) { + Napi::Env env = info.Env(); + Napi::HandleScope scope(env); + std::string family = info[0].As().Utf8Value(); + std::string style = info[1].As().Utf8Value(); + bool result = this->instance->bold(QString::fromUtf8(family.c_str()), + QString::fromUtf8(style.c_str())); + return Napi::Value::From(env, result); +} + +Napi::Value QFontDatabaseWrap::italic(const Napi::CallbackInfo& info) { + Napi::Env env = info.Env(); + Napi::HandleScope scope(env); + std::string family = info[0].As().Utf8Value(); + std::string style = info[1].As().Utf8Value(); + bool result = this->instance->italic(QString::fromUtf8(family.c_str()), + QString::fromUtf8(style.c_str())); + return Napi::Value::From(env, result); +} + +Napi::Value QFontDatabaseWrap::weight(const Napi::CallbackInfo& info) { + Napi::Env env = info.Env(); + Napi::HandleScope scope(env); + std::string family = info[0].As().Utf8Value(); + std::string style = info[1].As().Utf8Value(); + int result = this->instance->weight(QString::fromUtf8(family.c_str()), + QString::fromUtf8(style.c_str())); + return Napi::Value::From(env, result); +} + +Napi::Value StaticQFontDatabaseWrapMethods::addApplicationFont( + const Napi::CallbackInfo& info) { + Napi::Env env = info.Env(); + Napi::HandleScope scope(env); + std::string fileName = info[0].As().Utf8Value(); + int id = + QFontDatabase::addApplicationFont(QString::fromUtf8(fileName.c_str())); + return Napi::Value::From(env, id); +} + +Napi::Value StaticQFontDatabaseWrapMethods::removeApplicationFont( + const Napi::CallbackInfo& info) { + Napi::Env env = info.Env(); + Napi::HandleScope scope(env); + int id = info[0].As().Int32Value(); + bool result = QFontDatabase::removeApplicationFont(id); + return Napi::Value::From(env, result); +} diff --git a/src/cpp/main.cpp b/src/cpp/main.cpp index bc27334fc..54aaed26d 100644 --- a/src/cpp/main.cpp +++ b/src/cpp/main.cpp @@ -10,6 +10,7 @@ #include "QtGui/QCursor/qcursor_wrap.h" #include "QtGui/QEvent/QKeyEvent/qkeyevent_wrap.h" #include "QtGui/QEvent/QMouseEvent/qmouseevent_wrap.h" +#include "QtGui/QFontDatabase/qfontdatabase_wrap.h" #include "QtGui/QIcon/qicon_wrap.h" #include "QtGui/QKeySequence/qkeysequence_wrap.h" #include "QtGui/QMovie/qmovie_wrap.h" @@ -59,6 +60,7 @@ Napi::Object Main(Napi::Env env, Napi::Object exports) { QWidgetWrap::init(env, exports); QPixmapWrap::init(env, exports); QKeySequenceWrap::init(env, exports); + QFontDatabaseWrap::init(env, exports); QIconWrap::init(env, exports); QMovieWrap::init(env, exports); QStyleWrap::init(env, exports); diff --git a/src/index.ts b/src/index.ts index 83f32fb56..0d93b4f45 100644 --- a/src/index.ts +++ b/src/index.ts @@ -12,6 +12,7 @@ export { QCursor } from './lib/QtGui/QCursor'; export { QTextOptionWrapMode } from './lib/QtGui/QTextOption'; export { QClipboard, QClipboardMode } from './lib/QtGui/QClipboard'; export { QStyle, QStylePixelMetric } from './lib/QtGui/QStyle'; +export { QFontDatabase, SystemFont, WritingSystem } from './lib/QtGui/QFontDatabase'; // Events: Maybe a separate module ? export { QKeyEvent } from './lib/QtGui/QEvent/QKeyEvent'; export { QMouseEvent } from './lib/QtGui/QEvent/QMouseEvent'; diff --git a/src/lib/QtGui/QFontDatabase.ts b/src/lib/QtGui/QFontDatabase.ts new file mode 100644 index 000000000..118cf1488 --- /dev/null +++ b/src/lib/QtGui/QFontDatabase.ts @@ -0,0 +1,70 @@ +import addon from '../utils/addon'; +import { Component, NativeElement } from '../core/Component'; + +export enum SystemFont { + GeneralFont, + FixedFont, + TitleFont, + SmallestReadableFont, +} + +export enum WritingSystem { + Any = 0, + Latin = 1, + Greek = 2, + Cyrillic = 3, + Armenian = 4, + Hebrew = 5, + Arabic = 6, + Syriac = 7, + Thaana = 8, + Devanagari = 9, + Bengali = 10, + Gurmukhi = 11, + Gujaratin = 12, + Oriya = 13, + Tamil = 14, + Telugu = 15, + Kannada = 16, + Malayalam = 17, + Sinhala = 18, + Thai = 19, + Lao = 20, + Tibetan = 21, + Myanmar = 22, + Georgian = 23, + Khmer = 24, + SimplifiedChinese = 25, + TraditionalChinese = 26, + Japanese = 27, + Korean = 28, + Vietnamese = 29, + Symbol = 30, + Other = Symbol, + Ogham = 31, + Runic = 32, + Nko = 33, +} + +export class QFontDatabase extends Component { + native: NativeElement; + constructor() { + super(); + this.native = new addon.QFontDatabase(); + } + bold(family: string, style: string): boolean { + return this.native.bold(family, style); + } + italic(family: string, style: string): boolean { + return this.native.italic(family, style); + } + weight(family: string, style: string): number { + return this.native.weight(family, style); + } + static addApplicationFont(fileName: string): number { + return addon.QFontDatabase.addApplicationFont(fileName); + } + static removeApplicationFont(id: number): boolean { + return addon.QFontDatabase.removeApplicationFont(id); + } +}