This repository has been archived on 2024-07-22. You can view files and clone it, but cannot push or open issues or pull requests.
Doric/doric-Qt/example/doric/shader/DoricInputNode.cpp
2021-07-21 19:03:29 +08:00

79 lines
2.6 KiB
C++

#include "DoricInputNode.h"
#include "../utils/DoricUtils.h"
QQuickItem *DoricInputNode::build() {
QQmlComponent component(getContext()->getQmlEngine());
const QUrl url(QStringLiteral("qrc:/doric/qml/input.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 DoricInputNode::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 == "hintText") {
view->setProperty("placeholderText", prop.toString());
} else if (name == "textAlignment") {
view->setProperty("textAlignment", prop.toInt());
} else if (name == "onTextChange") {
this->onTextChangeId = prop.toString();
} else if (name == "onFocusChange") {
this->onFocusChangeId = prop.toString();
} else if (name == "padding") {
DoricViewNode::blend(view, name, prop);
view->setProperty("leftPadding", prop["left"].toDouble());
view->setProperty("rightPadding", prop["right"].toDouble());
view->setProperty("topPadding", prop["top"].toDouble());
view->setProperty("bottomPadding", prop["bottom"].toDouble());
} else if (name == "maxLength") {
view->setProperty("maximumLength", prop.toInt());
} else if (name == "inputType") {
view->setProperty("inputType", prop.toInt());
} else {
DoricViewNode::blend(view, name, prop);
}
}
QSizeF DoricInputNode::sizeThatFits(QSizeF size) {
DoricLayouts *layout =
(DoricLayouts *)mView->property("doricLayout").toULongLong();
QSizeF ret = DoricViewNode::sizeThatFits(size);
return QSizeF(
ret.width() - layout->getPaddingLeft() - layout->getPaddingRight(),
ret.height() - layout->getPaddingTop() - layout->getPaddingBottom());
}
void DoricInputNode::onTextChange(QString text) {
if (!onTextChangeId.isEmpty()) {
QVariantList args;
args.append(text);
callJSResponse(onTextChangeId, args);
}
}
void DoricInputNode::onFocusChange(bool hasFocus) {
if (!onFocusChangeId.isEmpty()) {
QVariantList args;
args.append(hasFocus);
callJSResponse(onFocusChangeId, args);
}
}