diff options
Diffstat (limited to 'src/quick/util/qquickfontmetrics.cpp')
-rw-r--r-- | src/quick/util/qquickfontmetrics.cpp | 350 |
1 files changed, 350 insertions, 0 deletions
diff --git a/src/quick/util/qquickfontmetrics.cpp b/src/quick/util/qquickfontmetrics.cpp new file mode 100644 index 0000000000..47e4fc1c7e --- /dev/null +++ b/src/quick/util/qquickfontmetrics.cpp @@ -0,0 +1,350 @@ +/**************************************************************************** +** +** 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, TextMetrics +*/ +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. + + This method is offered as an imperative alternative to the + \l {QQuickTextMetrics::advanceWidth}{advanceWidth} property of + \l {QQuickTextMetrics::advanceWidth}{TextMetrics}. + + \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. + + This method is offered as an imperative alternative to the + \l {QQuickTextMetrics::boundingRect}{boundingRect} property of + \l {QQuickTextMetrics::boundingRect}{TextMetrics}. + + \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. + + This method is offered as an imperative alternative to the + \l {QQuickTextMetrics::tightBoundingRect}{tightBoundingRect} property of + \l {QQuickTextMetrics::tightBoundingRect}{TextMetrics}. + + \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}. + + This method is offered as an imperative alternative to the + \l {QQuickTextMetrics::elidedText}{elidedText} property of + \l {QQuickTextMetrics::elidedText}{TextMetrics}. + + \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 |