diff options
author | Alex <qt-info@nokia.com> | 2011-05-06 12:53:54 +1000 |
---|---|---|
committer | Alex <qt-info@nokia.com> | 2011-05-06 12:53:54 +1000 |
commit | 336c5619c03cd338142f827ffcdaca855e35096c (patch) | |
tree | fc4f2a13f0a686a7434dae134d4f6714a24f48a3 /src/location/maps/qgeomaptextobject.cpp | |
parent | b9758f161020136437fd728698d69a0f3ed970a1 (diff) | |
download | qtlocation-336c5619c03cd338142f827ffcdaca855e35096c.tar.gz |
first commit of QtLocation
Diffstat (limited to 'src/location/maps/qgeomaptextobject.cpp')
-rw-r--r-- | src/location/maps/qgeomaptextobject.cpp | 375 |
1 files changed, 375 insertions, 0 deletions
diff --git a/src/location/maps/qgeomaptextobject.cpp b/src/location/maps/qgeomaptextobject.cpp new file mode 100644 index 00000000..8cc8d1ab --- /dev/null +++ b/src/location/maps/qgeomaptextobject.cpp @@ -0,0 +1,375 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the Qt Mobility Components. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** 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, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qgeomaptextobject.h" +#include "qgeomaptextobject_p.h" + +QTM_BEGIN_NAMESPACE + +/*! + \class QGeoMapTextObject + \brief The QGeoMapTextObject class is a QGeoMapObject used to draw + text on a map. + + \inmodule QtLocation + \since 1.1 + + \ingroup maps-mapping-objects + + The text is drawn at a given coordinate on the map. + + The text object is drawn such that the rendered size of the text object is + independent of the zoom level of the map. +*/ + +/*! + Constructs a new text object. +*/ +QGeoMapTextObject::QGeoMapTextObject() + : d_ptr(new QGeoMapTextObjectPrivate()) +{ + setUnits(QGeoMapObject::PixelUnit); +} + +/*! + Constructs a new text object which will display the text \a text with font + \a font at the coordinate \a coordinate on the map. + + The text will be displayed at an on-screen offset from the coordinate of \a + offset pixels, and will be aligned according to \a alignment. +*/ +QGeoMapTextObject::QGeoMapTextObject(const QGeoCoordinate &coordinate, + const QString &text, + const QFont &font, + const QPoint &offset, + Qt::Alignment alignment) + : d_ptr(new QGeoMapTextObjectPrivate()) +{ + setOrigin(coordinate); + d_ptr->text = text; + d_ptr->font = font; + d_ptr->offset = offset; + d_ptr->alignment = alignment; + setUnits(QGeoMapObject::PixelUnit); +} + +/*! + Destroys this text object. +*/ +QGeoMapTextObject::~QGeoMapTextObject() +{ + delete d_ptr; +} + +/*! + \reimp +*/ +QGeoMapObject::Type QGeoMapTextObject::type() const +{ + return QGeoMapObject::TextType; +} + +/*! + \property QGeoMapTextObject::coordinate + \brief This property holds the coordinate at which this text object + will be rendered. + + The default value of this property is an invalid coordinate. While the + value of this property is invalid the text object will not be displayed. + + If QGeoMapTextObject::offset and QGeoMapTextObject::alignment are not set + the text will be drawn so that it is centered both horizontally and + vertically around the position of QGeoMapTextObject::coordinate on the + screen. +*/ +QGeoCoordinate QGeoMapTextObject::coordinate() const +{ + return origin(); +} + +void QGeoMapTextObject::setCoordinate(const QGeoCoordinate &coordinate) +{ + if (origin() != coordinate) { + setOrigin(coordinate); + emit coordinateChanged(coordinate); + } +} + +/*! + \property QGeoMapTextObject::text + \brief This property holds the text that will be displayed by this text + object. + + The default value of this property is an empty string. +*/ +QString QGeoMapTextObject::text() const +{ + return d_ptr->text; +} + +void QGeoMapTextObject::setText(const QString &text) +{ + if (d_ptr->text != text) { + d_ptr->text = text; + emit textChanged(text); + } +} + +/*! + \property QGeoMapTextObject::font + \brief This property holds the font that will be used to render the text + for this text object. + + The default value of this property is the application's default font. + + It is not necessary to account for the zoom level of the map, since text + objects are scaled such that they appear to be independent of the zoom + level. +*/ +QFont QGeoMapTextObject::font() const +{ + return d_ptr->font; +} + +void QGeoMapTextObject::setFont(const QFont &font) +{ + if (d_ptr->font != font) { + d_ptr->font = font; + emit fontChanged(font); + } +} + +/*! + \property QGeoMapTextObject::pen + \brief This property holds the pen that will be used to draw this object. + + The pen is used to draw an outline around the text. The text itself is + filled using the QGeoMapTextObject::brush property. + + The pen will be treated as a cosmetic pen, which means that the width + of the pen will be independent of the zoom level of the map. +*/ +QPen QGeoMapTextObject::pen() const +{ + return d_ptr->pen; +} + +void QGeoMapTextObject::setPen(const QPen &pen) +{ + QPen newPen = pen; + newPen.setCosmetic(true); + + if (d_ptr->pen == newPen) + return; + + d_ptr->pen = newPen; + emit penChanged(pen); +} + +/*! + \property QGeoMapTextObject::brush + \brief This property holds the brush that will be used to draw this object. + + The brush is used to fill in the glyphs of the text. + + The outline around the perimeter of the glyphs is drawn using the + QGeoMapTextObject::pen property. +*/ +QBrush QGeoMapTextObject::brush() const +{ + return d_ptr->brush; +} + +void QGeoMapTextObject::setBrush(const QBrush &brush) +{ + if (d_ptr->brush != brush) { + d_ptr->brush = brush; + emit brushChanged(brush); + } +} + +/*! + \property QGeoMapTextObject::offset + \brief This property holds the offset in pixels from the screen position of + QGeoMapTextObject::coordinate at which the text will be rendered when + drawing this text object. + + The default value of this property is QPoint(0,0). +*/ +QPoint QGeoMapTextObject::offset() const +{ + return QPoint(d_ptr->offset.x(), d_ptr->offset.y()); +} + +void QGeoMapTextObject::setOffset(const QPoint &off) +{ + QPointF offset = off; + if (d_ptr->offset != off) { + d_ptr->offset = off; + emit offsetChanged(off); + } +} + +/*! + \property QGeoMapTextObject::alignment + \brief This property holds the alignment options used to align the + text when drawing this text object. + + The default value of this property will align the text so that it is + centered both horizontally and vertically around the point that is + QGeoMapTextObject::offset pixels away from the position of + QGeoMapTextObject::coordinate on the screen. + + Using + \code + textObject->setAlignment(Qt::AlignLeft | Qt::AlignVCenter); + \endcode + will place the text so that the point halway up the left edge of + the text is at the anchor point defined by + QGeoMapTextObject::offset and QGeoMapTextObject::coordinate. + + The alignment property is a flag, so using + \code + textObject->setAlignment(Qt::AlignLeft); + \endcode + may alter the vertical alignment as well. + + The Qt::AlignVertical_Mask and Qt::AlignHorizontal_Mask enum + values can be used to alter one component of the alignment + independent of the other. + \code + textObject->setAlignment(Qt::AlignLeft | (textObject->alignment() & Qt::AlignVertical_Mask)); + \endcode + + The alignment does not take the width of QGeoMapTextObject::pen into + consideration. +*/ +Qt::Alignment QGeoMapTextObject::alignment() const +{ + return d_ptr->alignment; +} + +void QGeoMapTextObject::setAlignment(Qt::Alignment alignment) +{ + if (d_ptr->alignment != alignment) { + d_ptr->alignment = alignment; + emit alignmentChanged(d_ptr->alignment); + } +} + +/*! +\fn void QGeoMapTextObject::coordinateChanged(const QGeoCoordinate &coordinate) + + This signal is emitted when the coordinate at which this text + object will be drawn has changed. + + The new value is \a coordinate. +*/ + +/*! +\fn void QGeoMapTextObject::textChanged(const QString &text) + + This signal is emitted when the text to be drawn by this text object + has changed. + + The new value is \a text. +*/ + +/*! +\fn void QGeoMapTextObject::fontChanged(const QFont &font) + + This signal is emitted when the font use to draw this text object + has changed. + + The new value is \a font. +*/ + +/*! +\fn void QGeoMapTextObject::penChanged(const QPen &pen) + + This signal is emitted when the pen used to draw the outline of the + letters for this text object has changed. + + The new value is \a pen. +*/ + +/*! +\fn void QGeoMapTextObject::brushChanged(const QBrush &brush) + + This signal is emitted when the brush used to fill the inside of the + letters for this text object has changed. + + The new value is \a brush. +*/ + +/*! +\fn void QGeoMapTextObject::offsetChanged(const QPoint &offset) + + This signal is emitted when the on screen offset from the coordinate at + which this text object will be drawn has changed. + + The new value is \a offset. +*/ + +/*! +\fn void QGeoMapTextObject::alignmentChanged(Qt::Alignment alignment) + + This signal is emitted when the alignment of this text object has changed. + + The new value is \a alignment. +*/ + +/******************************************************************************* +*******************************************************************************/ + +QGeoMapTextObjectPrivate::QGeoMapTextObjectPrivate() : + offset(0, 0) +{ + pen.setCosmetic(true); + alignment = Qt::AlignCenter; +} + +QGeoMapTextObjectPrivate::~QGeoMapTextObjectPrivate() {} + +#include "moc_qgeomaptextobject.cpp" + +QTM_END_NAMESPACE + |