107 lines
3.6 KiB
C++
107 lines
3.6 KiB
C++
#include "DoricTextNode.h"
|
|
#include "../utils/DoricUtils.h"
|
|
|
|
QQuickItem *DoricTextNode::build() {
|
|
QQmlComponent component(getContext()->getQmlEngine());
|
|
|
|
const QUrl url(QStringLiteral("qrc:/doric/qml/text.qml"));
|
|
component.loadUrl(url);
|
|
|
|
if (component.isError()) {
|
|
qCritical() << component.errorString();
|
|
}
|
|
|
|
QQuickItem *item = qobject_cast<QQuickItem *>(component.create());
|
|
this->createLayouts(item);
|
|
|
|
item->setProperty("wrapper", QString::number((qint64)this));
|
|
return item;
|
|
}
|
|
|
|
void DoricTextNode::blendLayoutConfig(QJsonValue jsObject) {
|
|
DoricViewNode::blendLayoutConfig(jsObject);
|
|
|
|
DoricLayouts *layout =
|
|
(DoricLayouts *)(mView->property("doricLayout").toULongLong());
|
|
|
|
QJsonValue maxWidth = jsObject["maxWidth"];
|
|
if (maxWidth.isDouble()) {
|
|
layout->setMaxWidth(maxWidth.toDouble());
|
|
}
|
|
QJsonValue maxHeight = jsObject["maxHeight"];
|
|
if (maxHeight.isDouble()) {
|
|
layout->setMaxHeight(maxHeight.toDouble());
|
|
}
|
|
}
|
|
|
|
void DoricTextNode::blend(QQuickItem *view, QString name, QJsonValue prop) {
|
|
if (name == "text") {
|
|
view->setProperty("text", prop.toString());
|
|
} else if (name == "textColor") {
|
|
QString color = DoricUtils::doricColor(prop.toInt()).name();
|
|
view->setProperty("color", color);
|
|
} else if (name == "textSize") {
|
|
QFont font = view->property("font").value<QFont>();
|
|
font.setPixelSize(prop.toInt());
|
|
view->setProperty("font", QVariant(font));
|
|
} else if (name == "textAlignment") {
|
|
view->setProperty("textAlignment", prop.toInt());
|
|
} else if (name == "maxLines") {
|
|
view->setProperty("lineCount", prop.toInt());
|
|
} else if (name == "fontStyle") {
|
|
view->setProperty("fontStyle", prop.toString());
|
|
} else if (name == "font") {
|
|
QString font = prop.toString();
|
|
QString fontPath = "";
|
|
QString fontName = font;
|
|
|
|
if (font.contains("/")) {
|
|
int separatorIndex = font.lastIndexOf("/");
|
|
fontPath = QStringRef(&font, 0, separatorIndex + 1).toString();
|
|
fontName = QStringRef(&font, separatorIndex + 1,
|
|
font.length() - separatorIndex - 1)
|
|
.toString();
|
|
}
|
|
|
|
if (fontName.endsWith(".ttf")) {
|
|
fontName = fontName.replace(".ttf", "");
|
|
}
|
|
|
|
QString path = "qrc:/" + fontPath + fontName + ".ttf";
|
|
|
|
view->setProperty("fontSource", path);
|
|
} else if (name == "shadow") {
|
|
view->setProperty("shadowColor", QVariant::fromValue(DoricUtils::doricColor(
|
|
prop["color"].toInt())));
|
|
view->setProperty("shadowRadius", prop["radius"].toDouble());
|
|
view->setProperty("shadowOffsetX", prop["offsetX"].toDouble());
|
|
view->setProperty("shadowOffsetY", prop["offsetY"].toDouble());
|
|
view->setProperty("shadowOpacity", prop["opacity"].toDouble());
|
|
} else if (name == "htmlText") {
|
|
view->setProperty("text", prop.toString());
|
|
view->setProperty("htmlText", true);
|
|
} else if (name == "maxWidth") {
|
|
DoricLayouts *layout =
|
|
(DoricLayouts *)(mView->property("doricLayout").toULongLong());
|
|
layout->setMaxWidth(prop.toDouble());
|
|
} else if (name == "maxHeight") {
|
|
DoricLayouts *layout =
|
|
(DoricLayouts *)(mView->property("doricLayout").toULongLong());
|
|
layout->setMaxHeight(prop.toDouble());
|
|
} else if (name == "strikethrough") {
|
|
view->setProperty("strikethrough", prop.toBool());
|
|
} else if (name == "underline") {
|
|
view->setProperty("underline", prop.toBool());
|
|
} else if (name == "lineSpacing") {
|
|
view->setProperty("lineSpacing", prop.toDouble());
|
|
} else {
|
|
DoricViewNode::blend(view, name, prop);
|
|
}
|
|
}
|
|
|
|
void DoricTextNode::blend(QJsonValue jsValue) {
|
|
DoricViewNode::blend(jsValue);
|
|
|
|
getLayouts()->setResolved(false);
|
|
}
|