Add fontInfo property to Text
This provides a way to determine which font will actually be used to presenting the text, which can be especially useful when not using a fixed size font (the font info will then expose the actual font size used by the Text element.) [ChangeLog][QtQuick][Text] Added fontInfo property to Text type, providing a way to query properties of the actual font used for presenting the text. Task-number: QTBUG-51133 Change-Id: I5860fb1bd25ac5734713f49c8482428f2d531d22 Reviewed-by: Simon Hausmann <simon.hausmann@qt.io> Reviewed-by: Robin Burchell <robin.burchell@crimson.no>
This commit is contained in:
parent
9500615569
commit
659d5202f9
|
@ -74,7 +74,7 @@ Q_DECLARE_LOGGING_CATEGORY(DBG_HOVER_TRACE)
|
|||
const QChar QQuickTextPrivate::elideChar = QChar(0x2026);
|
||||
|
||||
QQuickTextPrivate::QQuickTextPrivate()
|
||||
: elideLayout(0), textLine(0), lineWidth(0)
|
||||
: fontInfo(font), elideLayout(0), textLine(0), lineWidth(0)
|
||||
, color(0xFF000000), linkColor(0xFF0000FF), styleColor(0xFF000000)
|
||||
, lineCount(1), multilengthEos(-1)
|
||||
, elideMode(QQuickText::ElideNone), hAlign(QQuickText::AlignLeft), vAlign(QQuickText::AlignTop)
|
||||
|
@ -1018,6 +1018,17 @@ QRectF QQuickTextPrivate::setupTextLayout(qreal *const baseline)
|
|||
implicitWidthValid = true;
|
||||
implicitHeightValid = true;
|
||||
|
||||
QFontInfo scaledFontInfo(scaledFont);
|
||||
if (fontInfo.weight() != scaledFontInfo.weight()
|
||||
|| fontInfo.pixelSize() != scaledFontInfo.pixelSize()
|
||||
|| fontInfo.italic() != scaledFontInfo.italic()
|
||||
|| !qFuzzyCompare(fontInfo.pointSizeF(), scaledFontInfo.pointSizeF())
|
||||
|| fontInfo.family() != scaledFontInfo.family()
|
||||
|| fontInfo.styleName() != scaledFontInfo.styleName()) {
|
||||
fontInfo = scaledFontInfo;
|
||||
emit q->fontInfoChanged();
|
||||
}
|
||||
|
||||
if (eos != multilengthEos)
|
||||
truncated = true;
|
||||
|
||||
|
@ -2974,4 +2985,80 @@ void QQuickText::resetBottomPadding()
|
|||
d->setBottomPadding(0, true);
|
||||
}
|
||||
|
||||
/*!
|
||||
\qmlproperty string QtQuick::Text::fontInfo.family
|
||||
\since 5.9
|
||||
|
||||
The family name of the font that has been resolved for the current font
|
||||
and fontSizeMode.
|
||||
*/
|
||||
|
||||
/*!
|
||||
\qmlproperty string QtQuick::Text::fontInfo.styleName
|
||||
\since 5.9
|
||||
|
||||
The style name of the font info that has been resolved for the current font
|
||||
and fontSizeMode.
|
||||
*/
|
||||
|
||||
/*!
|
||||
\qmlproperty bool QtQuick::Text::fontInfo.bold
|
||||
\since 5.9
|
||||
|
||||
The bold state of the font info that has been resolved for the current font
|
||||
and fontSizeMode. This is true if the weight of the resolved font is bold or higher.
|
||||
*/
|
||||
|
||||
/*!
|
||||
\qmlproperty int QtQuick::Text::fontInfo.weight
|
||||
\since 5.9
|
||||
|
||||
The weight of the font info that has been resolved for the current font
|
||||
and fontSizeMode.
|
||||
*/
|
||||
|
||||
/*!
|
||||
\qmlproperty bool QtQuick::Text::fontInfo.italic
|
||||
\since 5.9
|
||||
|
||||
The italic state of the font info that has been resolved for the current font
|
||||
and fontSizeMode.
|
||||
*/
|
||||
|
||||
/*!
|
||||
\qmlproperty real QtQuick::Text::fontInfo.pointSize
|
||||
\since 5.9
|
||||
|
||||
The pointSize of the font info that has been resolved for the current font
|
||||
and fontSizeMode.
|
||||
*/
|
||||
|
||||
/*!
|
||||
\qmlproperty string QtQuick::Text::fontInfo.pixelSize
|
||||
\since 5.9
|
||||
|
||||
The pixel size of the font info that has been resolved for the current font
|
||||
and fontSizeMode.
|
||||
*/
|
||||
QJSValue QQuickText::fontInfo() const
|
||||
{
|
||||
Q_D(const QQuickText);
|
||||
|
||||
QJSEngine *engine = qjsEngine(this);
|
||||
if (!engine) {
|
||||
qmlWarning(this) << "fontInfo: item has no JS engine";
|
||||
return QJSValue();
|
||||
}
|
||||
|
||||
QJSValue value = engine->newObject();
|
||||
value.setProperty(QStringLiteral("family"), d->fontInfo.family());
|
||||
value.setProperty(QStringLiteral("styleName"), d->fontInfo.styleName());
|
||||
value.setProperty(QStringLiteral("bold"), d->fontInfo.bold());
|
||||
value.setProperty(QStringLiteral("weight"), d->fontInfo.weight());
|
||||
value.setProperty(QStringLiteral("italic"), d->fontInfo.italic());
|
||||
value.setProperty(QStringLiteral("pointSize"), d->fontInfo.pointSizeF());
|
||||
value.setProperty(QStringLiteral("pixelSize"), d->fontInfo.pixelSize());
|
||||
return value;
|
||||
}
|
||||
|
||||
QT_END_NAMESPACE
|
||||
|
|
|
@ -98,6 +98,8 @@ class Q_QUICK_PRIVATE_EXPORT QQuickText : public QQuickImplicitSizeItem
|
|||
Q_PROPERTY(qreal rightPadding READ rightPadding WRITE setRightPadding RESET resetRightPadding NOTIFY rightPaddingChanged REVISION 6)
|
||||
Q_PROPERTY(qreal bottomPadding READ bottomPadding WRITE setBottomPadding RESET resetBottomPadding NOTIFY bottomPaddingChanged REVISION 6)
|
||||
|
||||
Q_PROPERTY(QJSValue fontInfo READ fontInfo NOTIFY fontInfoChanged REVISION 9)
|
||||
|
||||
public:
|
||||
QQuickText(QQuickItem *parent=0);
|
||||
~QQuickText();
|
||||
|
@ -248,6 +250,8 @@ public:
|
|||
void setBottomPadding(qreal padding);
|
||||
void resetBottomPadding();
|
||||
|
||||
QJSValue fontInfo() const;
|
||||
|
||||
Q_SIGNALS:
|
||||
void textChanged(const QString &text);
|
||||
void linkActivated(const QString &link);
|
||||
|
@ -280,6 +284,7 @@ Q_SIGNALS:
|
|||
Q_REVISION(6) void leftPaddingChanged();
|
||||
Q_REVISION(6) void rightPaddingChanged();
|
||||
Q_REVISION(6) void bottomPaddingChanged();
|
||||
Q_REVISION(9) void fontInfoChanged();
|
||||
|
||||
protected:
|
||||
QQuickText(QQuickTextPrivate &dd, QQuickItem *parent = 0);
|
||||
|
|
|
@ -122,6 +122,7 @@ public:
|
|||
QString text;
|
||||
QFont font;
|
||||
QFont sourceFont;
|
||||
QFontInfo fontInfo;
|
||||
|
||||
QTextLayout layout;
|
||||
QTextLayout *elideLayout;
|
||||
|
|
|
@ -0,0 +1,24 @@
|
|||
import QtQuick 2.9
|
||||
|
||||
Item {
|
||||
Text {
|
||||
id: main
|
||||
objectName: "main"
|
||||
width: 500
|
||||
height: 500
|
||||
text: "Meaningless text"
|
||||
font.pixelSize: 1000
|
||||
fontSizeMode: Text.Fit
|
||||
}
|
||||
|
||||
Text {
|
||||
objectName: "copy"
|
||||
text: main.text
|
||||
width: main.width
|
||||
height: main.height
|
||||
|
||||
font.family: main.fontInfo.family
|
||||
font.pixelSize: main.fontInfo.pixelSize
|
||||
}
|
||||
}
|
||||
|
|
@ -154,6 +154,8 @@ private slots:
|
|||
void hAlignWidthDependsOnImplicitWidth_data();
|
||||
void hAlignWidthDependsOnImplicitWidth();
|
||||
|
||||
void fontInfo();
|
||||
|
||||
private:
|
||||
QStringList standard;
|
||||
QStringList richText;
|
||||
|
@ -4253,6 +4255,23 @@ void tst_qquicktext::hAlignWidthDependsOnImplicitWidth()
|
|||
QCOMPARE(numberOfNonWhitePixels(0, rectX - 1, image), 0);
|
||||
}
|
||||
|
||||
void tst_qquicktext::fontInfo()
|
||||
{
|
||||
QQmlComponent component(&engine, testFile("fontInfo.qml"));
|
||||
|
||||
QScopedPointer<QObject> object(component.create());
|
||||
QObject *root = object.data();
|
||||
|
||||
QQuickText *main = root->findChild<QQuickText *>("main");
|
||||
QVERIFY(main);
|
||||
QCOMPARE(main->font().pixelSize(), 1000);
|
||||
|
||||
QQuickText *copy = root->findChild<QQuickText *>("copy");
|
||||
QVERIFY(copy);
|
||||
QCOMPARE(copy->font().family(), QFontInfo(QFont()).family());
|
||||
QVERIFY(copy->font().pixelSize() < 1000);
|
||||
}
|
||||
|
||||
QTEST_MAIN(tst_qquicktext)
|
||||
|
||||
#include "tst_qquicktext.moc"
|
||||
|
|
Loading…
Reference in New Issue