Add font support (#261)

* Add font support

* Update qfontdatabase_wrap.h

* Update qfontdatabase_wrap.cpp

* Update QFontDatabase.ts

* make static method
This commit is contained in:
feng8848 2019-12-12 21:46:49 +08:00 committed by Atul R
parent 9cb47c7d8a
commit 19f786a0f1
6 changed files with 189 additions and 0 deletions

View File

@ -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"

View File

@ -0,0 +1,30 @@
#pragma once
#include <napi.h>
#include <stdlib.h>
#include <QFontDatabase>
#include "core/Component/component_macro.h"
class QFontDatabaseWrap : public Napi::ObjectWrap<QFontDatabaseWrap> {
private:
std::unique_ptr<QFontDatabase> 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

View File

@ -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<QFontDatabaseWrap>(info) {
Napi::Env env = info.Env();
Napi::HandleScope scope(env);
this->instance = std::make_unique<QFontDatabase>();
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<Napi::String>().Utf8Value();
std::string style = info[1].As<Napi::String>().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<Napi::String>().Utf8Value();
std::string style = info[1].As<Napi::String>().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<Napi::String>().Utf8Value();
std::string style = info[1].As<Napi::String>().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<Napi::String>().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<Napi::Number>().Int32Value();
bool result = QFontDatabase::removeApplicationFont(id);
return Napi::Value::From(env, result);
}

View File

@ -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);

View File

@ -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';

View File

@ -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);
}
}