aboutsummaryrefslogtreecommitdiffstats
path: root/src/quick/util
diff options
context:
space:
mode:
authorMitch Curtis <mitch.curtis@digia.com>2014-07-10 17:16:09 +0200
committerMitch Curtis <mitch.curtis@digia.com>2014-07-17 11:24:08 +0200
commita38f8d96fc5781e6d99eadbd435f408f8729ac1b (patch)
tree2cc384a71da65359779a4365a9f910c19b6545dc /src/quick/util
parent112efda64ba24e7d9255a36065223e9800a50c21 (diff)
Add QQuickFontMetrics.
This will be a private C++ type that is exposed to QtQuick 2.4 as FontMetrics. [ChangeLog][QtQuick] Added QQuickFontMetrics, which provides a subset of QFontMetricsF's API. Change-Id: Iac31e5a555bd8f1dc0904b8de0408e5f1a402b25 Reviewed-by: J-P Nurmi <jpnurmi@digia.com> Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@digia.com>
Diffstat (limited to 'src/quick/util')
-rw-r--r--src/quick/util/qquickfontmetrics.cpp334
-rw-r--r--src/quick/util/qquickfontmetrics_p.h114
-rw-r--r--src/quick/util/qquickutilmodule.cpp3
-rw-r--r--src/quick/util/util.pri6
4 files changed, 455 insertions, 2 deletions
diff --git a/src/quick/util/qquickfontmetrics.cpp b/src/quick/util/qquickfontmetrics.cpp
new file mode 100644
index 0000000000..bf533995a5
--- /dev/null
+++ b/src/quick/util/qquickfontmetrics.cpp
@@ -0,0 +1,334 @@
+/****************************************************************************
+**
+** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the QtQuick module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qquickfontmetrics_p.h"
+
+#include <QFont>
+
+QT_BEGIN_NAMESPACE
+
+/*!
+ \qmltype FontMetrics
+ \instantiates QQuickFontMetrics
+ \inqmlmodule QtQuick
+ \ingroup qtquick-text-utility
+ \brief Provides metrics for a given font
+
+ FontMetrics calculates the size of characters and strings for a given font.
+
+ It provides a subset of the C++ \l QFontMetricsF API, with the added
+ ability to change the font that is used for calculations via the \l font
+ property.
+
+ \code
+ FontMetrics {
+ id: fontMetrics
+ font.family: "Arial"
+ }
+
+ Rectangle {
+ width: fontMetrics.height() * 4
+ height: fontMetrics.height() * 2
+ }
+ \endcode
+
+ \sa QFontMetricsF
+*/
+QQuickFontMetrics::QQuickFontMetrics(QObject *parent) :
+ QObject(parent),
+ m_metrics(m_font)
+{
+}
+
+QQuickFontMetrics::~QQuickFontMetrics()
+{
+}
+
+/*!
+ \qmlproperty font QtQuick::FontMetrics::font
+
+ This property holds the font used for the metrics calculations.
+*/
+QFont QQuickFontMetrics::font() const
+{
+ return m_font;
+}
+
+void QQuickFontMetrics::setFont(const QFont &font)
+{
+ if (m_font != font) {
+ m_font = font;
+ m_metrics = QFontMetricsF(m_font);
+ emit fontChanged(m_font);
+ }
+}
+
+/*!
+ \qmlproperty real QtQuick::FontMetrics::ascent
+
+ This property holds the ascent of the font.
+
+ \sa {QFontMetricsF::ascent()}, descent, height
+*/
+qreal QQuickFontMetrics::ascent() const
+{
+ return m_metrics.ascent();
+}
+
+/*!
+ \qmlproperty real QtQuick::FontMetrics::descent
+
+ This property holds the descent of the font.
+
+ \sa {QFontMetricsF::descent()}, ascent, height
+*/
+qreal QQuickFontMetrics::descent() const
+{
+ return m_metrics.descent();
+}
+
+/*!
+ \qmlproperty real QtQuick::FontMetrics::height
+
+ This property holds the height of the font.
+
+ \sa {QFontMetricsF::height()}
+*/
+qreal QQuickFontMetrics::height() const
+{
+ return m_metrics.height();
+}
+
+/*!
+ \qmlproperty real QtQuick::FontMetrics::leading
+
+ This property holds the leading of the font.
+
+ \sa {QFontMetricsF::leading()}
+*/
+qreal QQuickFontMetrics::leading() const
+{
+ return m_metrics.leading();
+}
+
+/*!
+ \qmlproperty real QtQuick::FontMetrics::lineSpacing
+
+ This property holds the distance from one base line to the next.
+
+ \sa {QFontMetricsF::lineSpacing()}
+*/
+qreal QQuickFontMetrics::lineSpacing() const
+{
+ return m_metrics.lineSpacing();
+}
+
+/*!
+ \qmlproperty real QtQuick::FontMetrics::minimumLeftBearing
+
+ This property holds the minimum left bearing of the font.
+
+ \sa {QFontMetricsF::minLeftBearing()}
+*/
+qreal QQuickFontMetrics::minimumLeftBearing() const
+{
+ return m_metrics.minLeftBearing();
+}
+
+/*!
+ \qmlproperty real QtQuick::FontMetrics::minimumRightBearing
+
+ This property holds the minimum right bearing of the font.
+
+ \sa {QFontMetricsF::minRightBearing()}
+*/
+qreal QQuickFontMetrics::minimumRightBearing() const
+{
+ return m_metrics.minRightBearing();
+}
+
+/*!
+ \qmlproperty real QtQuick::FontMetrics::maximumCharacterWidth
+
+ This property holds the width of the widest character in the font.
+
+ \sa {QFontMetricsF::maxWidth()}
+*/
+qreal QQuickFontMetrics::maximumCharacterWidth() const
+{
+ return m_metrics.maxWidth();
+}
+
+/*!
+ \qmlproperty real QtQuick::FontMetrics::xHeight
+
+ This property holds the 'x' height of the font.
+
+ \sa {QFontMetricsF::xHeight()}
+*/
+qreal QQuickFontMetrics::xHeight() const
+{
+ return m_metrics.xHeight();
+}
+
+/*!
+ \qmlproperty real QtQuick::FontMetrics::averageCharacterWidth
+
+ This property holds the average width of glyphs in the font.
+
+ \sa {QFontMetricsF::averageCharWidth()}
+*/
+qreal QQuickFontMetrics::averageCharacterWidth() const
+{
+ return m_metrics.averageCharWidth();
+}
+
+/*!
+ \qmlproperty real QtQuick::FontMetrics::underlinePosition
+
+ This property holds the distance from the base line to where an underscore
+ should be drawn.
+
+ \sa {QFontMetricsF::underlinePos()}, overlinePosition, strikeOutPosition
+*/
+qreal QQuickFontMetrics::underlinePosition() const
+{
+ return m_metrics.underlinePos();
+}
+
+/*!
+ \qmlproperty real QtQuick::FontMetrics::overlinePosition
+
+ This property holds the distance from the base line to where an overline
+ should be drawn.
+
+ \sa {QFontMetricsF::overlinePos()}, underlinePosition, strikeOutPosition
+*/
+qreal QQuickFontMetrics::overlinePosition() const
+{
+ return m_metrics.overlinePos();
+}
+
+/*!
+ \qmlproperty real QtQuick::FontMetrics::strikeOutPosition
+
+ This property holds the distance from the base line to where the strikeout
+ line should be drawn.
+
+ \sa {QFontMetricsF::strikeOutPos()}, overlinePosition, underlinePosition
+*/
+qreal QQuickFontMetrics::strikeOutPosition() const
+{
+ return m_metrics.strikeOutPos();
+}
+
+/*!
+ \qmlproperty real QtQuick::FontMetrics::lineWidth
+
+ This property holds the width of the underline and strikeout lines,
+ adjusted for the point size of the font.
+
+ \sa {QFontMetricsF::lineWidth()}
+*/
+qreal QQuickFontMetrics::lineWidth() const
+{
+ return m_metrics.lineWidth();
+}
+
+/*!
+ \qmlmethod qreal QtQuick::FontMetrics::advanceWidth(string text)
+
+ This method returns the advance in pixels of the characters in \a text.
+ This is the distance from the position of the string to where the next
+ string should be drawn.
+
+ \sa {QFontMetricsF::width()}, height()
+*/
+qreal QQuickFontMetrics::advanceWidth(const QString &text) const
+{
+ return m_metrics.width(text);
+}
+
+/*!
+ \qmlmethod rect QtQuick::FontMetrics::boundingRect(string text)
+
+ This method returns the bounding rectangle of the characters in the string
+ specified by \a text.
+
+ \sa {QFontMetricsF::boundingRect()}, tightBoundingRect()
+*/
+QRectF QQuickFontMetrics::boundingRect(const QString &text) const
+{
+ return m_metrics.boundingRect(text);
+}
+
+/*!
+ \qmlmethod rect QtQuick::FontMetrics::tightBoundingRect(string text)
+
+ This method returns a tight bounding rectangle around the characters in the
+ string specified by \a text.
+
+ \sa {QFontMetricsF::tightBoundingRect()}, boundingRect()
+*/
+QRectF QQuickFontMetrics::tightBoundingRect(const QString &text) const
+{
+ return m_metrics.tightBoundingRect(text);
+}
+
+/*!
+ \qmlmethod string QtQuick::FontMetrics::elidedText(string text, enum mode,
+ qreal width, int flags)
+
+ This method returns a returns an elided version of the string (i.e., a
+ string with "..." in it) if the string \a text is wider than \a width.
+ Otherwise, returns the original string.
+
+ The \a flags argument is optional and currently only supports
+ \l {Qt::TextShowMnemonic}.
+
+ \sa {QFontMetricsF::elidedText()}
+*/
+QString QQuickFontMetrics::elidedText(const QString &text, Qt::TextElideMode mode, qreal width, int flags) const
+{
+ return m_metrics.elidedText(text, mode, width, flags);
+}
+
+QT_END_NAMESPACE
diff --git a/src/quick/util/qquickfontmetrics_p.h b/src/quick/util/qquickfontmetrics_p.h
new file mode 100644
index 0000000000..4017fd4061
--- /dev/null
+++ b/src/quick/util/qquickfontmetrics_p.h
@@ -0,0 +1,114 @@
+/****************************************************************************
+**
+** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the QtQuick module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QQUICKFONTMETRICS_H
+#define QQUICKFONTMETRICS_H
+
+#include <qqml.h>
+
+#include <QtGui/QFontMetricsF>
+#include <QtCore/QObject>
+
+QT_BEGIN_NAMESPACE
+
+class QFont;
+
+class Q_AUTOTEST_EXPORT QQuickFontMetrics : public QObject
+{
+ Q_OBJECT
+
+ Q_PROPERTY(QFont font READ font WRITE setFont NOTIFY fontChanged)
+ Q_PROPERTY(qreal ascent READ ascent NOTIFY fontChanged)
+ Q_PROPERTY(qreal descent READ descent NOTIFY fontChanged)
+ Q_PROPERTY(qreal height READ height NOTIFY fontChanged)
+ Q_PROPERTY(qreal leading READ leading NOTIFY fontChanged)
+ Q_PROPERTY(qreal lineSpacing READ lineSpacing NOTIFY fontChanged)
+ Q_PROPERTY(qreal minimumLeftBearing READ minimumLeftBearing NOTIFY fontChanged)
+ Q_PROPERTY(qreal minimumRightBearing READ minimumRightBearing NOTIFY fontChanged)
+ Q_PROPERTY(qreal maximumCharacterWidth READ maximumCharacterWidth NOTIFY fontChanged)
+ Q_PROPERTY(qreal xHeight READ xHeight NOTIFY fontChanged)
+ Q_PROPERTY(qreal averageCharacterWidth READ averageCharacterWidth NOTIFY fontChanged)
+ Q_PROPERTY(qreal underlinePosition READ underlinePosition NOTIFY fontChanged)
+ Q_PROPERTY(qreal overlinePosition READ overlinePosition NOTIFY fontChanged)
+ Q_PROPERTY(qreal strikeOutPosition READ strikeOutPosition NOTIFY fontChanged)
+ Q_PROPERTY(qreal lineWidth READ lineWidth NOTIFY fontChanged)
+public:
+ explicit QQuickFontMetrics(QObject *parent = 0);
+ ~QQuickFontMetrics();
+
+ QFont font() const;
+ void setFont(const QFont &font);
+
+ qreal ascent() const;
+ qreal descent() const;
+ qreal height() const;
+ qreal leading() const;
+ qreal lineSpacing() const;
+ qreal minimumLeftBearing() const;
+ qreal minimumRightBearing() const;
+ qreal maximumCharacterWidth() const;
+
+ qreal xHeight() const;
+ qreal averageCharacterWidth() const;
+
+ qreal underlinePosition() const;
+ qreal overlinePosition() const;
+ qreal strikeOutPosition() const;
+ qreal lineWidth() const;
+
+ Q_INVOKABLE qreal advanceWidth(const QString &text) const;
+ Q_INVOKABLE QRectF boundingRect(const QString &text) const;
+ Q_INVOKABLE QRectF tightBoundingRect(const QString &text) const;
+ Q_INVOKABLE QString elidedText(const QString &text, Qt::TextElideMode mode, qreal width, int flags = 0) const;
+
+Q_SIGNALS:
+ void fontChanged(const QFont &font);
+
+private:
+ QFont m_font;
+ QFontMetricsF m_metrics;
+};
+
+QT_END_NAMESPACE
+
+QML_DECLARE_TYPE(QQuickFontMetrics)
+
+#endif // QQUICKFONTMETRICS_H
diff --git a/src/quick/util/qquickutilmodule.cpp b/src/quick/util/qquickutilmodule.cpp
index a6e907713a..1d82cfca43 100644
--- a/src/quick/util/qquickutilmodule.cpp
+++ b/src/quick/util/qquickutilmodule.cpp
@@ -45,6 +45,7 @@
#include "qquickbehavior_p.h"
#include "qquicksmoothedanimation_p.h"
#include "qquickfontloader_p.h"
+#include "qquickfontmetrics_p.h"
#include "qquickpropertychanges_p.h"
#include "qquickspringanimation_p.h"
#include "qquickstategroup_p.h"
@@ -106,4 +107,6 @@ void QQuickUtilModule::defineModule()
qRegisterMetaType<QKeySequence::StandardKey>();
qmlRegisterUncreatableType<QKeySequence, 2>("QtQuick", 2, 2, "StandardKey", QStringLiteral("Cannot create an instance of StandardKey."));
+
+ qmlRegisterType<QQuickFontMetrics>("QtQuick", 2, 4, "FontMetrics");
}
diff --git a/src/quick/util/util.pri b/src/quick/util/util.pri
index ce409bd10d..35553070dc 100644
--- a/src/quick/util/util.pri
+++ b/src/quick/util/util.pri
@@ -26,7 +26,8 @@ SOURCES += \
$$PWD/qquickanimator.cpp \
$$PWD/qquickanimatorjob.cpp \
$$PWD/qquickanimatorcontroller.cpp \
- $$PWD/qquickprofiler.cpp
+ $$PWD/qquickprofiler.cpp \
+ $$PWD/qquickfontmetrics.cpp
HEADERS += \
$$PWD/qquickapplication_p.h\
@@ -60,4 +61,5 @@ HEADERS += \
$$PWD/qquickanimator_p_p.h \
$$PWD/qquickanimatorjob_p.h \
$$PWD/qquickanimatorcontroller_p.h \
- $$PWD/qquickprofiler_p.h
+ $$PWD/qquickprofiler_p.h \
+ $$PWD/qquickfontmetrics_p.h