diff options
Diffstat (limited to 'src')
39 files changed, 309 insertions, 398 deletions
diff --git a/src/imports/location/qdeclarativegeomap.cpp b/src/imports/location/qdeclarativegeomap.cpp index 2b860eb3..bfa1922f 100644 --- a/src/imports/location/qdeclarativegeomap.cpp +++ b/src/imports/location/qdeclarativegeomap.cpp @@ -494,9 +494,9 @@ void QDeclarativeGeoMap::mappingManagerInitialized() this, SLOT(update())); connect(map_->mapController(), - SIGNAL(centerChanged(AnimatableCoordinate)), + SIGNAL(centerChanged(QGeoCoordinate)), this, - SLOT(mapCenterChanged(AnimatableCoordinate))); + SIGNAL(centerChanged(QGeoCoordinate))); connect(map_->mapController(), SIGNAL(bearingChanged(qreal)), this, @@ -510,9 +510,7 @@ void QDeclarativeGeoMap::mappingManagerInitialized() this, SLOT(mapZoomLevelChanged(qreal))); - AnimatableCoordinate acenter = map_->mapController()->center(); - acenter.setCoordinate(center_); - map_->mapController()->setCenter(acenter); + map_->mapController()->setCenter(center_); map_->mapController()->setZoom(zoomLevel_); map_->mapController()->setBearing(bearing_); map_->mapController()->setTilt(tilt_); @@ -726,9 +724,7 @@ void QDeclarativeGeoMap::setCenter(const QGeoCoordinate ¢er) center_ = center; if (center_.isValid() && mappingManagerInitialized_) { - AnimatableCoordinate acoord = map_->mapController()->center(); - acoord.setCoordinate(center_); - map_->mapController()->setCenter(acoord); + map_->mapController()->setCenter(center_); update(); } else { emit centerChanged(center_); @@ -738,7 +734,7 @@ void QDeclarativeGeoMap::setCenter(const QGeoCoordinate ¢er) QGeoCoordinate QDeclarativeGeoMap::center() const { if (mappingManagerInitialized_) - return map_->mapController()->center().coordinate(); + return map_->mapController()->center(); else return center_; } @@ -777,14 +773,6 @@ void QDeclarativeGeoMap::mapBearingChanged(qreal bearing) } /*! - \internal -*/ -void QDeclarativeGeoMap::mapCenterChanged(AnimatableCoordinate center) -{ - emit centerChanged(center.coordinate()); -} - -/*! \qmlproperty list<MapType> QtLocation5::Map::supportedMapTypes This read-only property holds the set of \l{MapType}{map types} supported by this map. @@ -1140,8 +1128,6 @@ void QDeclarativeGeoMap::fitViewportToMapItemsRefine(bool refine) // position camera to the center of bounding box QGeoCoordinate coordinate; coordinate = map_->screenPositionToCoordinate(QPointF(bboxCenterX, bboxCenterY), false); - AnimatableCoordinate acenter = map_->mapController()->center(); - acenter.setCoordinate(coordinate); setCenter(coordinate); // adjust zoom diff --git a/src/imports/location/qdeclarativegeomap_p.h b/src/imports/location/qdeclarativegeomap_p.h index c69541a7..eee281b7 100644 --- a/src/imports/location/qdeclarativegeomap_p.h +++ b/src/imports/location/qdeclarativegeomap_p.h @@ -72,7 +72,6 @@ #include "qgeocameradata_p.h" #include "qgeomap_p.h" #include "qdeclarativegeomaptype_p.h" -#include <QWeakPointer> QT_BEGIN_NAMESPACE @@ -195,7 +194,6 @@ private Q_SLOTS: void mapZoomLevelChanged(qreal zoom); void mapTiltChanged(qreal tilt); void mapBearingChanged(qreal bearing); - void mapCenterChanged(AnimatableCoordinate center); void pluginReady(); void onMapChildrenChanged(); diff --git a/src/imports/location/qdeclarativegeomapgesturearea.cpp b/src/imports/location/qdeclarativegeomapgesturearea.cpp index c7f9926d..f9959e19 100644 --- a/src/imports/location/qdeclarativegeomapgesturearea.cpp +++ b/src/imports/location/qdeclarativegeomapgesturearea.cpp @@ -1139,8 +1139,7 @@ void QDeclarativeGeoMapGestureArea::updatePan() QPointF mapCenterPoint; mapCenterPoint.setY(map_->height() / 2.0 - dy); mapCenterPoint.setX(map_->width() / 2.0 - dx); - AnimatableCoordinate animationStartCoordinate; - animationStartCoordinate.setCoordinate(map_->screenPositionToCoordinate(mapCenterPoint, false)); + QGeoCoordinate animationStartCoordinate = map_->screenPositionToCoordinate(mapCenterPoint, false); map_->mapController()->setCenter(animationStartCoordinate); } @@ -1196,16 +1195,15 @@ void QDeclarativeGeoMapGestureArea::startFlick(int dx, int dy, int timeMs) { if (timeMs < 0) return; - AnimatableCoordinate animationStartCoordinate = map_->mapController()->center(); - QGeoCoordinate coordinate = animationStartCoordinate.coordinate(); + + QGeoCoordinate animationStartCoordinate = map_->mapController()->center(); if (pan_.animation_->state() == QPropertyAnimation::Running) pan_.animation_->stop(); - AnimatableCoordinate animationEndCoordinate = map_->mapController()->center(); + QGeoCoordinate animationEndCoordinate = map_->mapController()->center(); pan_.animation_->setDuration(timeMs); - coordinate.setLongitude(coordinate.longitude() - (dx / pow(2.0, map_->mapController()->zoom()))); - coordinate.setLatitude(coordinate.latitude() + (dy / pow(2.0, map_->mapController()->zoom()))); - animationEndCoordinate.setCoordinate(coordinate); + animationEndCoordinate.setLongitude(animationStartCoordinate.longitude() - (dx / pow(2.0, map_->mapController()->zoom()))); + animationEndCoordinate.setLatitude(animationStartCoordinate.latitude() + (dy / pow(2.0, map_->mapController()->zoom()))); pan_.animation_->setStartValue(QVariant::fromValue(animationStartCoordinate)); pan_.animation_->setEndValue(QVariant::fromValue(animationEndCoordinate)); pan_.animation_->start(); diff --git a/src/imports/positioning/positioning.cpp b/src/imports/positioning/positioning.cpp index 031b06b2..b4bda5fd 100644 --- a/src/imports/positioning/positioning.cpp +++ b/src/imports/positioning/positioning.cpp @@ -51,6 +51,7 @@ #include "qdeclarativegeorectangle.h" #include "qdeclarativegeocircle.h" #include "qdeclarativecoordinate_p.h" +#include "qdeclarativegeocoordinateanimation_p.h" #include "locationsingleton.h" @@ -112,6 +113,9 @@ public: qRegisterMetaType<QGeoRectangle>("QGeoRectangle"); qRegisterMetaType<QGeoCircle>("QGeoCircle"); qRegisterMetaType<QGeoLocation>("QGeoLocation"); + + qRegisterAnimationInterpolator<QGeoCoordinate>(geoCoordinateInterpolator); + qmlRegisterType<QDeclarativeGeoCoordinateAnimation>(uri, 5, 3, "CoordinateAnimation"); } else { qDebug() << "Unsupported URI given to load positioning QML plugin: " << QLatin1String(uri); } diff --git a/src/imports/positioning/positioning.pro b/src/imports/positioning/positioning.pro index 1f71f03c..6af459d8 100644 --- a/src/imports/positioning/positioning.pro +++ b/src/imports/positioning/positioning.pro @@ -11,7 +11,8 @@ HEADERS += qdeclarativeposition_p.h \ qdeclarativegeocircle.h \ locationvaluetypeprovider.h \ locationsingleton.h \ - error_messages.h + error_messages.h \ + qdeclarativegeocoordinateanimation_p.h SOURCES += qdeclarativeposition.cpp \ positioning.cpp \ @@ -22,7 +23,8 @@ SOURCES += qdeclarativeposition.cpp \ qdeclarativegeocircle.cpp \ locationvaluetypeprovider.cpp \ locationsingleton.cpp \ - error_messages.cpp + error_messages.cpp \ + qdeclarativegeocoordinateanimation.cpp load(qml_plugin) diff --git a/src/imports/positioning/qdeclarativegeocoordinateanimation.cpp b/src/imports/positioning/qdeclarativegeocoordinateanimation.cpp new file mode 100644 index 00000000..df4fee1b --- /dev/null +++ b/src/imports/positioning/qdeclarativegeocoordinateanimation.cpp @@ -0,0 +1,122 @@ +/**************************************************************************** +** +** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal +** +** This file is part of the QtPositioning 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 "qdeclarativegeocoordinateanimation_p.h" +#include <QtQuick/private/qquickanimation_p_p.h> +#include <QtPositioning/private/qgeoprojection_p.h> +#include <QtPositioning/private/qdoublevector2d_p.h> + +QT_BEGIN_NAMESPACE + +/*! + \qmltype CoordinateAnimation + \instantiates QDeclarativeGeoCoordinateAnimation + + \brief A PropertyAnimation for geo coordinate properties. + + \inqmlmodule QtLocation 5.0 + \ingroup qml-QtLocation5-maps + + A specialized \l{PropertyAnimation} that defines an animation + between two geo coordinates. +*/ + +QDeclarativeGeoCoordinateAnimation::QDeclarativeGeoCoordinateAnimation(QObject *parent) + : QQuickPropertyAnimation(parent) +{ + Q_D(QQuickPropertyAnimation); + d->interpolatorType = qMetaTypeId<QGeoCoordinate>(); + d->defaultToInterpolatorType = true; + d->interpolator = QVariantAnimationPrivate::getInterpolator(d->interpolatorType); +} + +QDeclarativeGeoCoordinateAnimation::~QDeclarativeGeoCoordinateAnimation() +{ +} + +/*! + \qmlproperty bool QtLocation5::CoordinateAnimation::from + This property holds the coordinate where the animation should begin. +*/ + +QGeoCoordinate QDeclarativeGeoCoordinateAnimation::from() const +{ + Q_D(const QQuickPropertyAnimation); + return d->from.value<QGeoCoordinate>(); +} + +void QDeclarativeGeoCoordinateAnimation::setFrom(const QGeoCoordinate &f) +{ + QQuickPropertyAnimation::setFrom(QVariant::fromValue(f)); +} + +/*! + \qmlproperty bool QtLocation5::CoordinateAnimation::to + This property holds the coordinate where the animation should end. +*/ + +QGeoCoordinate QDeclarativeGeoCoordinateAnimation::to() const +{ + Q_D(const QQuickPropertyAnimation); + return d->to.value<QGeoCoordinate>(); +} + +void QDeclarativeGeoCoordinateAnimation::setTo(const QGeoCoordinate &t) +{ + QQuickPropertyAnimation::setTo(QVariant::fromValue(t)); +} + +QVariant geoCoordinateInterpolator(const QGeoCoordinate &from, const QGeoCoordinate &to, qreal progress) +{ + if (from == to) { + if (progress < 0.5) { + return QVariant::fromValue(from); + } else { + return QVariant::fromValue(to); + } + } + + QGeoCoordinate result = QGeoProjection::coordinateInterpolation(from, to, progress); + + return QVariant::fromValue(result); +} + +QT_END_NAMESPACE diff --git a/src/location/maps/qgeocoordinateinterpolator_p.h b/src/imports/positioning/qdeclarativegeocoordinateanimation_p.h index 1b75bfb4..86a0459a 100644 --- a/src/location/maps/qgeocoordinateinterpolator_p.h +++ b/src/imports/positioning/qdeclarativegeocoordinateanimation_p.h @@ -3,7 +3,7 @@ ** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). ** Contact: http://www.qt-project.org/legal ** -** This file is part of the QtLocation module of the Qt Toolkit. +** This file is part of the QtPositioning module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** Commercial License Usage @@ -38,34 +38,38 @@ ** $QT_END_LICENSE$ ** ****************************************************************************/ -#ifndef QGEOCOORDINATEINTERPOLATOR_P_H -#define QGEOCOORDINATEINTERPOLATOR_P_H -// -// W A R N I N G -// ------------- -// -// This file is not part of the Qt API. It exists purely as an -// implementation detail. This header file may change from version to -// version without notice, or even be removed. -// -// We mean it. -// +#ifndef QDECLARATIVEGEOCOORDINATEANIMATION_P_H +#define QDECLARATIVEGEOCOORDINATEANIMATION_P_H -#include <QtPositioning/QGeoCoordinate> -#include <QtLocation/qlocationglobal.h> +#include <QtQuick/private/qquickanimation_p.h> +#include "qdeclarativecoordinate_p.h" QT_BEGIN_NAMESPACE -class Q_LOCATION_EXPORT QGeoCoordinateInterpolator + +QVariant geoCoordinateInterpolator(const QGeoCoordinate &from, const QGeoCoordinate &to, qreal progress); + +class QDeclarativeGeoCoordinateAnimation : public QQuickPropertyAnimation { + Q_OBJECT + Q_DECLARE_PRIVATE(QQuickPropertyAnimation) + Q_PROPERTY(QGeoCoordinate from READ from WRITE setFrom) + Q_PROPERTY(QGeoCoordinate to READ to WRITE setTo) + public: - QGeoCoordinateInterpolator(); - virtual ~QGeoCoordinateInterpolator(); + QDeclarativeGeoCoordinateAnimation(QObject *parent=0); + ~QDeclarativeGeoCoordinateAnimation(); - virtual QGeoCoordinate interpolate(const QGeoCoordinate &start, const QGeoCoordinate &end, qreal progress) = 0; + QGeoCoordinate from() const; + void setFrom(const QGeoCoordinate &); + + QGeoCoordinate to() const; + void setTo(const QGeoCoordinate &); }; QT_END_NAMESPACE -#endif // QGEOCOORDINATEINTERPOLATOR_P_H +QML_DECLARE_TYPE(QDeclarativeGeoCoordinateAnimation) + +#endif // QDECLARATIVEGEOCOORDINATEANIMATION_P_H diff --git a/src/location/location.pro b/src/location/location.pro index c09ea06f..d3ecd5ad 100644 --- a/src/location/location.pro +++ b/src/location/location.pro @@ -1,5 +1,5 @@ TARGET = QtLocation -QT = core-private positioning +QT = core-private positioning-private QMAKE_DOCS = $$PWD/doc/qtlocation.qdocconf diff --git a/src/location/maps/maps.pri b/src/location/maps/maps.pri index dda60622..3a43c5ea 100644 --- a/src/location/maps/maps.pri +++ b/src/location/maps/maps.pri @@ -18,15 +18,12 @@ PUBLIC_HEADERS += \ maps/qgeoserviceprovider.h PRIVATE_HEADERS += \ - maps/qdoublevector2d_p.h \ - maps/qdoublevector3d_p.h \ maps/qgeocameracapabilities_p.h \ maps/qgeocameradata_p.h \ maps/qgeocameratiles_p.h \ maps/qgeocodereply_p.h \ maps/qgeocodingmanagerengine_p.h \ maps/qgeocodingmanager_p.h \ - maps/qgeocoordinateinterpolator_p.h \ maps/qgeomaneuver_p.h \ maps/qgeomapcontroller_p.h \ maps/qgeomapscene_p.h \ @@ -46,7 +43,6 @@ PRIVATE_HEADERS += \ maps/qgeotiledmappingmanagerengine_p_p.h \ maps/qgeomaptype_p.h \ maps/qgeomaptype_p_p.h \ - maps/qgeoprojection_p.h \ maps/qgeoroute_p.h \ maps/qgeoroutereply_p.h \ maps/qgeorouterequest_p.h \ @@ -62,15 +58,12 @@ PRIVATE_HEADERS += \ maps/qcache3q_p.h SOURCES += \ - maps/qdoublevector2d.cpp \ - maps/qdoublevector3d.cpp \ maps/qgeocameracapabilities.cpp \ maps/qgeocameradata.cpp \ maps/qgeocameratiles.cpp \ maps/qgeocodereply.cpp \ maps/qgeocodingmanager.cpp \ maps/qgeocodingmanagerengine.cpp \ - maps/qgeocoordinateinterpolator.cpp \ maps/qgeomaneuver.cpp \ maps/qgeomapcontroller.cpp \ maps/qgeomapscene.cpp \ @@ -83,7 +76,6 @@ SOURCES += \ maps/qgeotiledmappingmanagerengine.cpp \ maps/qgeotilefetcher.cpp \ maps/qgeomaptype.cpp \ - maps/qgeoprojection.cpp \ maps/qgeoroute.cpp \ maps/qgeoroutereply.cpp \ maps/qgeorouterequest.cpp \ diff --git a/src/location/maps/qgeocameradata.cpp b/src/location/maps/qgeocameradata.cpp index e1d7e114..085a3134 100644 --- a/src/location/maps/qgeocameradata.cpp +++ b/src/location/maps/qgeocameradata.cpp @@ -39,14 +39,13 @@ ** ****************************************************************************/ #include "qgeocameradata_p.h" +#include <QtPositioning/private/qgeocoordinate_p.h> #include <QVariant> #include <QVariantAnimation> #include <QMetaType> -#include <QWeakPointer> - #include <cmath> QT_BEGIN_NAMESPACE @@ -66,8 +65,6 @@ public: double tilt_; double roll_; double zoomLevel_; - - QWeakPointer<QGeoCoordinateInterpolator> interpolator_; }; QGeoCameraDataPrivate::QGeoCameraDataPrivate() @@ -84,8 +81,7 @@ QGeoCameraDataPrivate::QGeoCameraDataPrivate(const QGeoCameraDataPrivate &rhs) bearing_(rhs.bearing_), tilt_(rhs.tilt_), roll_(rhs.roll_), - zoomLevel_(rhs.zoomLevel_), - interpolator_(rhs.interpolator_) {} + zoomLevel_(rhs.zoomLevel_) {} QGeoCameraDataPrivate &QGeoCameraDataPrivate::operator = (const QGeoCameraDataPrivate &rhs) { @@ -97,11 +93,6 @@ QGeoCameraDataPrivate &QGeoCameraDataPrivate::operator = (const QGeoCameraDataPr tilt_ = rhs.tilt_; roll_ = rhs.roll_; zoomLevel_ = rhs.zoomLevel_; - QSharedPointer<QGeoCoordinateInterpolator> i = rhs.interpolator_.toStrongRef(); - if (i) - interpolator_ = i.toWeakRef(); - else - interpolator_.clear(); return *this; } @@ -120,16 +111,20 @@ QVariant cameraInterpolator(const QGeoCameraData &start, qreal progress) { QGeoCameraData result = start; - - - QSharedPointer<QGeoCoordinateInterpolator> i = start.coordinateInterpolator(); - if (!i) - i = end.coordinateInterpolator(); - - if (!i) - result.setCenter(start.center()); - else - result.setCenter(i->interpolate(start.center(), end.center(), progress)); + QGeoCoordinate from = start.center(); + QGeoCoordinate to = end.center(); + + if (from == to) { + if (progress < 0.5) { + result.setCenter(from); + } else { + result.setCenter(to); + } + } + else { + QGeoCoordinate coordinateResult = QGeoProjection::coordinateInterpolation(from, to, progress); + result.setCenter(coordinateResult); + } double sf = 1.0 - progress; double ef = progress; @@ -225,14 +220,4 @@ double QGeoCameraData::zoomLevel() const return d->zoomLevel_; } -void QGeoCameraData::setCoordinateInterpolator(QSharedPointer<QGeoCoordinateInterpolator> interpolator) -{ - d->interpolator_ = interpolator.toWeakRef(); -} - -QSharedPointer<QGeoCoordinateInterpolator> QGeoCameraData::coordinateInterpolator() const -{ - return d->interpolator_.toStrongRef(); -} - QT_END_NAMESPACE diff --git a/src/location/maps/qgeocameradata_p.h b/src/location/maps/qgeocameradata_p.h index ca2bf4a9..fd24c065 100644 --- a/src/location/maps/qgeocameradata_p.h +++ b/src/location/maps/qgeocameradata_p.h @@ -52,14 +52,13 @@ // We mean it. // +#include "qlocationglobal.h" #include "qgeocoordinate.h" -#include "qgeoprojection_p.h" -#include "qgeocoordinateinterpolator_p.h" +#include <QtPositioning/private/qgeoprojection_p.h> #include <QMetaType> -#include <QSharedPointer> #include <QSharedDataPointer> QT_BEGIN_NAMESPACE @@ -93,9 +92,6 @@ public: void setZoomLevel(double zoomLevel); double zoomLevel() const; - void setCoordinateInterpolator(QSharedPointer<QGeoCoordinateInterpolator> interpolator); - QSharedPointer<QGeoCoordinateInterpolator> coordinateInterpolator() const; - private: QSharedDataPointer<QGeoCameraDataPrivate> d; }; diff --git a/src/location/maps/qgeocameratiles.cpp b/src/location/maps/qgeocameratiles.cpp index e921cf9c..050e7fc3 100644 --- a/src/location/maps/qgeocameratiles.cpp +++ b/src/location/maps/qgeocameratiles.cpp @@ -39,16 +39,14 @@ ** ****************************************************************************/ #include "qgeocameratiles_p.h" - #include "qgeocameradata_p.h" -#include "qgeoprojection_p.h" #include "qgeotilespec_p.h" - -#include "qdoublevector2d_p.h" -#include "qdoublevector3d_p.h" - #include "qgeomaptype_p.h" +#include <QtPositioning/private/qgeoprojection_p.h> +#include <QtPositioning/private/qdoublevector2d_p.h> +#include <QtPositioning/private/qdoublevector3d_p.h> + #include <QVector> #include <QMap> #include <QPair> diff --git a/src/location/maps/qgeocoordinateinterpolator.cpp b/src/location/maps/qgeocoordinateinterpolator.cpp deleted file mode 100644 index d7bc3019..00000000 --- a/src/location/maps/qgeocoordinateinterpolator.cpp +++ /dev/null @@ -1,49 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). -** Contact: http://www.qt-project.org/legal -** -** This file is part of the QtLocation 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 "qgeocoordinateinterpolator_p.h" - -QT_BEGIN_NAMESPACE - -QGeoCoordinateInterpolator::QGeoCoordinateInterpolator() {} - -QGeoCoordinateInterpolator::~QGeoCoordinateInterpolator() {} - -QT_END_NAMESPACE diff --git a/src/location/maps/qgeomap.cpp b/src/location/maps/qgeomap.cpp index 98718bbb..f27e2ffa 100644 --- a/src/location/maps/qgeomap.cpp +++ b/src/location/maps/qgeomap.cpp @@ -44,11 +44,13 @@ #include "qgeotilecache_p.h" #include "qgeotilespec_p.h" -#include "qgeoprojection_p.h" + #include "qgeocameracapabilities_p.h" #include "qgeomapcontroller_p.h" -#include "qdoublevector2d_p.h" -#include "qdoublevector3d_p.h" + +#include <QtPositioning/private/qgeoprojection_p.h> +#include <QtPositioning/private/qdoublevector2d_p.h> +#include <QtPositioning/private/qdoublevector3d_p.h> #include "qgeocameratiles_p.h" #include "qgeotilerequestmanager_p.h" diff --git a/src/location/maps/qgeomap_p.h b/src/location/maps/qgeomap_p.h index e001a99d..ebd1381b 100644 --- a/src/location/maps/qgeomap_p.h +++ b/src/location/maps/qgeomap_p.h @@ -56,7 +56,6 @@ #include "qgeocameradata_p.h" #include "qgeomaptype_p.h" -#include "qgeocoordinateinterpolator_p.h" QT_BEGIN_NAMESPACE diff --git a/src/location/maps/qgeomapcontroller.cpp b/src/location/maps/qgeomapcontroller.cpp index 0d5965df..b7ab96dc 100644 --- a/src/location/maps/qgeomapcontroller.cpp +++ b/src/location/maps/qgeomapcontroller.cpp @@ -42,74 +42,16 @@ #include "qgeomapcontroller_p.h" #include "qgeomapdata_p.h" -#include "qgeoprojection_p.h" +#include <QtPositioning/private/qgeoprojection_p.h> #include <QPointF> -#include <QVariant> -#include <QVariantAnimation> - QT_BEGIN_NAMESPACE -QVariant coordinateInterpolator(const AnimatableCoordinate &start, - const AnimatableCoordinate &end, - qreal progress) -{ - AnimatableCoordinate result = start; - - QSharedPointer<QGeoCoordinateInterpolator> i = start.interpolator(); - if (!i) - i = end.interpolator(); - - if (!i) - result.setCoordinate(start.coordinate()); - else - result.setCoordinate(i->interpolate(start.coordinate(), - end.coordinate(), - progress)); - - result.setInterpolator(i); - - return QVariant::fromValue(result); -} - -AnimatableCoordinate::AnimatableCoordinate() {} - -AnimatableCoordinate::AnimatableCoordinate(const QGeoCoordinate &coordinate, - QSharedPointer<QGeoCoordinateInterpolator> interpolator) - : coordinate_(coordinate), - interpolator_(interpolator) -{ -} - -QGeoCoordinate AnimatableCoordinate::coordinate() const -{ - return coordinate_; -} - -void AnimatableCoordinate::setCoordinate(const QGeoCoordinate &coordinate) -{ - coordinate_ = coordinate; -} - -QSharedPointer<QGeoCoordinateInterpolator> AnimatableCoordinate::interpolator() const -{ - return interpolator_; -} - -void AnimatableCoordinate::setInterpolator(QSharedPointer<QGeoCoordinateInterpolator> interpolator) -{ - interpolator_ = interpolator; -} - -QGeoMapController::QGeoMapController(QGeoMapData *map, QSharedPointer<QGeoCoordinateInterpolator> interpolator) +QGeoMapController::QGeoMapController(QGeoMapData *map) : QObject(map), - map_(map), - interpolator_(interpolator) + map_(map) { - qRegisterMetaType<AnimatableCoordinate>(); - qRegisterAnimationInterpolator<AnimatableCoordinate>(coordinateInterpolator); - oldCameraData_ = map_->cameraData(); connect(map_, @@ -123,7 +65,7 @@ QGeoMapController::~QGeoMapController() {} void QGeoMapController::cameraDataChanged(const QGeoCameraData &cameraData) { if (oldCameraData_.center() != cameraData.center()) - emit centerChanged(AnimatableCoordinate(cameraData.center(), interpolator_)); + emit centerChanged(cameraData.center()); if (oldCameraData_.bearing() != cameraData.bearing()) emit bearingChanged(cameraData.bearing()); @@ -140,19 +82,19 @@ void QGeoMapController::cameraDataChanged(const QGeoCameraData &cameraData) oldCameraData_ = cameraData; } -AnimatableCoordinate QGeoMapController::center() const +QGeoCoordinate QGeoMapController::center() const { - return AnimatableCoordinate(map_->cameraData().center(), interpolator_); + return map_->cameraData().center(); } -void QGeoMapController::setCenter(const AnimatableCoordinate ¢er) +void QGeoMapController::setCenter(const QGeoCoordinate ¢er) { QGeoCameraData cd = map_->cameraData(); - if (center.coordinate() == cd.center()) + if (center == cd.center()) return; - cd.setCenter(center.coordinate()); + cd.setCenter(center); map_->setCameraData(cd); } diff --git a/src/location/maps/qgeomapcontroller_p.h b/src/location/maps/qgeomapcontroller_p.h index 7af95a3d..247adcc3 100644 --- a/src/location/maps/qgeomapcontroller_p.h +++ b/src/location/maps/qgeomapcontroller_p.h @@ -56,46 +56,28 @@ #include "qgeocoordinate.h" #include "qgeocameradata_p.h" -#include "qgeocoordinateinterpolator_p.h" QT_BEGIN_NAMESPACE class QGeoMapData; -class Q_LOCATION_EXPORT AnimatableCoordinate -{ -public: - AnimatableCoordinate(); - AnimatableCoordinate(const QGeoCoordinate &coordinate, - QSharedPointer<QGeoCoordinateInterpolator> interpolator); - - QGeoCoordinate coordinate() const; - void setCoordinate(const QGeoCoordinate &coordinate); - - QSharedPointer<QGeoCoordinateInterpolator> interpolator() const; - void setInterpolator(QSharedPointer<QGeoCoordinateInterpolator> interpolator); - -private: - QGeoCoordinate coordinate_; - QSharedPointer<QGeoCoordinateInterpolator> interpolator_; -}; class Q_LOCATION_EXPORT QGeoMapController : public QObject { Q_OBJECT - Q_PROPERTY(AnimatableCoordinate center READ center WRITE setCenter NOTIFY centerChanged) + Q_PROPERTY(QGeoCoordinate center READ center WRITE setCenter NOTIFY centerChanged) Q_PROPERTY(qreal bearing READ bearing WRITE setBearing NOTIFY bearingChanged) Q_PROPERTY(qreal tilt READ tilt WRITE setTilt NOTIFY tiltChanged) Q_PROPERTY(qreal roll READ roll WRITE setRoll NOTIFY rollChanged) Q_PROPERTY(qreal zoom READ zoom WRITE setZoom NOTIFY zoomChanged) public: - QGeoMapController(QGeoMapData *map, QSharedPointer<QGeoCoordinateInterpolator> coordinateInterpolator); + QGeoMapController(QGeoMapData *map); ~QGeoMapController(); - AnimatableCoordinate center() const; - void setCenter(const AnimatableCoordinate ¢er); + QGeoCoordinate center() const; + void setCenter(const QGeoCoordinate ¢er); void setLatitude(qreal latitude); void setLongitude(qreal longitude); @@ -119,7 +101,7 @@ private Q_SLOTS: void cameraDataChanged(const QGeoCameraData &cameraData); Q_SIGNALS: - void centerChanged(const AnimatableCoordinate ¢er); + void centerChanged(const QGeoCoordinate ¢er); void bearingChanged(qreal bearing); void tiltChanged(qreal tilt); void rollChanged(qreal roll); @@ -127,12 +109,9 @@ Q_SIGNALS: private: QGeoMapData *map_; - QSharedPointer<QGeoCoordinateInterpolator> interpolator_; QGeoCameraData oldCameraData_; }; QT_END_NAMESPACE -Q_DECLARE_METATYPE(AnimatableCoordinate) - #endif // QGEOMAPCONTROLLER_P_H diff --git a/src/location/maps/qgeomapdata.cpp b/src/location/maps/qgeomapdata.cpp index c26d9adb..69e11530 100644 --- a/src/location/maps/qgeomapdata.cpp +++ b/src/location/maps/qgeomapdata.cpp @@ -44,11 +44,8 @@ #include "qgeotilecache_p.h" #include "qgeotilespec_p.h" -#include "qgeoprojection_p.h" #include "qgeocameracapabilities_p.h" #include "qgeomapcontroller_p.h" -#include "qdoublevector2d_p.h" -#include "qdoublevector3d_p.h" #include "qgeocameratiles_p.h" #include "qgeotilerequestmanager_p.h" @@ -56,6 +53,11 @@ #include "qgeomappingmanager_p.h" + +#include <QtPositioning/private/qgeoprojection_p.h> +#include <QtPositioning/private/qdoublevector2d_p.h> +#include <QtPositioning/private/qdoublevector3d_p.h> + #include <QMutex> #include <QMap> @@ -157,18 +159,6 @@ QString QGeoMapData::pluginString() return d->pluginString(); } -QSharedPointer<QGeoCoordinateInterpolator> QGeoMapData::coordinateInterpolator() -{ - Q_D(QGeoMapData); - return d->coordinateInterpolator(); -} - -void QGeoMapData::setCoordinateInterpolator(QSharedPointer<QGeoCoordinateInterpolator> interpolator) -{ - Q_D(QGeoMapData); - return d->setCoordinateInterpolator(interpolator); -} - QGeoCameraCapabilities QGeoMapData::cameraCapabilities() { Q_D(QGeoMapData); @@ -216,20 +206,10 @@ QString QGeoMapDataPrivate::pluginString() return pluginString_; } -QSharedPointer<QGeoCoordinateInterpolator> QGeoMapDataPrivate::coordinateInterpolator() const -{ - return coordinateInterpolator_; -} - -void QGeoMapDataPrivate::setCoordinateInterpolator(QSharedPointer<QGeoCoordinateInterpolator> interpolator) -{ - coordinateInterpolator_ = interpolator; -} - QGeoMapController *QGeoMapDataPrivate::mapController() { if (!controller_) - controller_ = new QGeoMapController(map_, coordinateInterpolator_); + controller_ = new QGeoMapController(map_); return controller_; } @@ -268,8 +248,6 @@ void QGeoMapDataPrivate::setCameraData(const QGeoCameraData &cameraData) cameraData_.setRoll(0.0); } - cameraData_.setCoordinateInterpolator(coordinateInterpolator_.toWeakRef()); - // Do not call this expensive function if the width is 0, since it will get called // anyway when it is resized to a width > 0. // this is mainly an optimisation to the initalization of the geomap, which would otherwise diff --git a/src/location/maps/qgeomapdata_p.h b/src/location/maps/qgeomapdata_p.h index be8649f3..59316056 100644 --- a/src/location/maps/qgeomapdata_p.h +++ b/src/location/maps/qgeomapdata_p.h @@ -56,8 +56,6 @@ #include "qgeocameradata_p.h" #include "qgeomaptype_p.h" -#include "qgeocoordinateinterpolator_p.h" -#include "qgeocoordinateinterpolator_p.h" QT_BEGIN_NAMESPACE @@ -98,8 +96,6 @@ public: void setActiveMapType(const QGeoMapType mapType); const QGeoMapType activeMapType() const; - QSharedPointer<QGeoCoordinateInterpolator> coordinateInterpolator(); - virtual QGeoCoordinate screenPositionToCoordinate(const QPointF &pos, bool clipToViewport = true) const = 0; virtual QPointF coordinateToScreenPosition(const QGeoCoordinate &coordinate, bool clipToViewport = true) const = 0; @@ -109,8 +105,6 @@ public: virtual void prefetchData() {} protected: - void setCoordinateInterpolator(QSharedPointer<QGeoCoordinateInterpolator> interpolator); - virtual void mapResized(int width, int height) = 0; virtual void changeCameraData(const QGeoCameraData &oldCameraData) = 0; virtual void changeActiveMapType(const QGeoMapType mapType) = 0; diff --git a/src/location/maps/qgeomapdata_p_p.h b/src/location/maps/qgeomapdata_p_p.h index 6df9f86e..5e81d457 100644 --- a/src/location/maps/qgeomapdata_p_p.h +++ b/src/location/maps/qgeomapdata_p_p.h @@ -60,13 +60,13 @@ #include <QSizeF> #include <QMatrix4x4> #include <QString> -#include <QSharedPointer> + +#include <QtPositioning/private/qdoublevector3d_p.h> + #include "qgeocameradata_p.h" #include "qgeomaptype_p.h" -#include "qdoublevector3d_p.h" - QT_BEGIN_NAMESPACE class QGeoMappingManagerEngine; @@ -101,9 +101,6 @@ public: void setActiveMapType(const QGeoMapType &mapType); QString pluginString(); - QSharedPointer<QGeoCoordinateInterpolator> coordinateInterpolator() const; - void setCoordinateInterpolator(QSharedPointer<QGeoCoordinateInterpolator> interpolator); - private: int width_; int height_; @@ -117,8 +114,6 @@ private: QGeoCameraData cameraData_; QGeoMapType activeMapType_; - - QSharedPointer<QGeoCoordinateInterpolator> coordinateInterpolator_; }; QT_END_NAMESPACE diff --git a/src/location/maps/qgeomapscene.cpp b/src/location/maps/qgeomapscene.cpp index 444877b1..e83a2ace 100644 --- a/src/location/maps/qgeomapscene.cpp +++ b/src/location/maps/qgeomapscene.cpp @@ -41,12 +41,13 @@ #include "qgeomapscene_p.h" #include "qgeocameradata_p.h" -#include "qgeoprojection_p.h" + #include "qgeotilecache_p.h" #include "qgeotilespec_p.h" -#include "qdoublevector2d_p.h" -#include "qdoublevector3d_p.h" +#include <QtPositioning/private/qgeoprojection_p.h> +#include <QtPositioning/private/qdoublevector2d_p.h> +#include <QtPositioning/private/qdoublevector3d_p.h> #include <Qt3D/qglscenenode.h> #include <Qt3D/qglbuilder.h> diff --git a/src/location/maps/qgeotiledmapdata.cpp b/src/location/maps/qgeotiledmapdata.cpp index 2c322749..0b9d0471 100644 --- a/src/location/maps/qgeotiledmapdata.cpp +++ b/src/location/maps/qgeotiledmapdata.cpp @@ -44,14 +44,10 @@ #include "qgeotiledmappingmanagerengine_p.h" #include "qgeotilecache_p.h" #include "qgeotilespec_p.h" -#include "qgeoprojection_p.h" #include "qgeocameratiles_p.h" #include "qgeotilerequestmanager_p.h" #include "qgeomapscene_p.h" -#include "qgeocoordinateinterpolator_p.h" -#include "qgeoprojection_p.h" -#include "qdoublevector2d_p.h" #include "qgeocameracapabilities_p.h" #include <QMutex> @@ -68,74 +64,19 @@ #include <Qt3D/qglcamera.h> #include <Qt3D/qglsubsurface.h> +#include <QtPositioning/private/qgeoprojection_p.h> +#include <QtPositioning/private/qdoublevector2d_p.h> + #include <cmath> QT_BEGIN_NAMESPACE -class QGeoCoordinateInterpolator2D : public QGeoCoordinateInterpolator -{ -public: - QGeoCoordinateInterpolator2D(); - virtual ~QGeoCoordinateInterpolator2D(); - - virtual QGeoCoordinate interpolate(const QGeoCoordinate &start, const QGeoCoordinate &end, qreal progress); -}; - -QGeoCoordinateInterpolator2D::QGeoCoordinateInterpolator2D() {} - -QGeoCoordinateInterpolator2D::~QGeoCoordinateInterpolator2D() {} - -QGeoCoordinate QGeoCoordinateInterpolator2D::interpolate(const QGeoCoordinate &start, const QGeoCoordinate &end, qreal progress) -{ - if (start == end) { - if (progress < 0.5) { - return start; - } else { - return end; - } - } - - QGeoCoordinate s2 = start; - QGeoCoordinate e2 = end; - QDoubleVector2D s = QGeoProjection::coordToMercator(s2); - QDoubleVector2D e = QGeoProjection::coordToMercator(e2); - - double x = s.x(); - - if (0.5 < qAbs(e.x() - s.x())) { - // handle dateline crossing - double ex = e.x(); - double sx = s.x(); - if (ex < sx) - sx -= 1.0; - else if (sx < ex) - ex -= 1.0; - - x = (1.0 - progress) * sx + progress * ex; - - if (!qFuzzyIsNull(x) && (x < 0.0)) - x += 1.0; - - } else { - x = (1.0 - progress) * s.x() + progress * e.x(); - } - - double y = (1.0 - progress) * s.y() + progress * e.y(); - - QGeoCoordinate result = QGeoProjection::mercatorToCoord(QDoubleVector2D(x, y)); - result.setAltitude((1.0 - progress) * start.altitude() + progress * end.altitude()); - return result; -} - -//------------------------ -//------------------------ QGeoTiledMapData::QGeoTiledMapData(QGeoTiledMappingManagerEngine *engine, QObject *parent) : QGeoMapData(engine, parent) { d_ptr = new QGeoTiledMapDataPrivate(this, engine); engine->registerMap(this); - setCoordinateInterpolator(QSharedPointer<QGeoCoordinateInterpolator>(new QGeoCoordinateInterpolator2D())); } QGeoTiledMapData::~QGeoTiledMapData() diff --git a/src/location/maps/qgeotiledmapdata_p_p.h b/src/location/maps/qgeotiledmapdata_p_p.h index 16e6be0c..722a9789 100644 --- a/src/location/maps/qgeotiledmapdata_p_p.h +++ b/src/location/maps/qgeotiledmapdata_p_p.h @@ -60,14 +60,13 @@ #include <QSizeF> #include <QMatrix4x4> #include <QString> -#include <QSharedPointer> #include <QPointer> +#include <QtPositioning/private/qdoublevector3d_p.h> + #include "qgeocameradata_p.h" #include "qgeomaptype_p.h" -#include "qdoublevector3d_p.h" - QT_BEGIN_NAMESPACE class QGeoTile; diff --git a/src/plugins/geoservices/nokia/nokia.pro b/src/plugins/geoservices/nokia/nokia.pro index 9ce2a179..597f8bae 100644 --- a/src/plugins/geoservices/nokia/nokia.pro +++ b/src/plugins/geoservices/nokia/nokia.pro @@ -1,5 +1,5 @@ TARGET = qtgeoservices_nokia -QT += location-private network +QT += location-private positioning-private network contains(QT_CONFIG, location-china-support) { # China support diff --git a/src/plugins/geoservices/nokia/qgeotiledmappingmanagerengine_nokia.cpp b/src/plugins/geoservices/nokia/qgeotiledmappingmanagerengine_nokia.cpp index 1df1934b..fbffcc5e 100644 --- a/src/plugins/geoservices/nokia/qgeotiledmappingmanagerengine_nokia.cpp +++ b/src/plugins/geoservices/nokia/qgeotiledmappingmanagerengine_nokia.cpp @@ -51,10 +51,11 @@ #include "qgeotiledmapdata_nokia.h" #include "qgeotilefetcher_nokia.h" #include "qgeotilespec_p.h" -#include "qgeoprojection_p.h" -#include "qdoublevector2d_p.h" #include "qgeotilecache_p.h" +#include <QtPositioning/private/qdoublevector2d_p.h> +#include <QtPositioning/private/qgeoprojection_p.h> + #include <QDebug> #include <QDir> #include <QVariant> diff --git a/src/plugins/geoservices/osm/osm.pro b/src/plugins/geoservices/osm/osm.pro index 5767bdee..897ebbfc 100644 --- a/src/plugins/geoservices/osm/osm.pro +++ b/src/plugins/geoservices/osm/osm.pro @@ -1,5 +1,5 @@ TARGET = qtgeoservices_osm -QT += location-private network +QT += location-private positioning-private network PLUGIN_TYPE = geoservices load(qt_plugin) diff --git a/src/positioning/positioning.pro b/src/positioning/positioning.pro index 296356d0..7ad5f480 100644 --- a/src/positioning/positioning.pro +++ b/src/positioning/positioning.pro @@ -34,7 +34,10 @@ PRIVATE_HEADERS += \ qgeocoordinate_p.h \ qgeopositioninfosource_p.h \ qdeclarativegeoaddress_p.h \ - qdeclarativegeolocation_p.h + qdeclarativegeolocation_p.h \ + qdoublevector2d_p.h \ + qdoublevector3d_p.h \ + qgeoprojection_p.h SOURCES += \ qgeoaddress.cpp \ @@ -53,8 +56,12 @@ SOURCES += \ qnmeapositioninfosource.cpp \ qgeopositioninfosourcefactory.cpp \ qdeclarativegeoaddress.cpp \ - qdeclarativegeolocation.cpp + qdeclarativegeolocation.cpp \ + qdoublevector2d.cpp \ + qdoublevector3d.cpp \ + qgeoprojection.cpp HEADERS += $$PUBLIC_HEADERS $$PRIVATE_HEADERS + load(qt_module) diff --git a/src/location/maps/qdoublevector2d.cpp b/src/positioning/qdoublevector2d.cpp index 589289f7..355fbe54 100644 --- a/src/location/maps/qdoublevector2d.cpp +++ b/src/positioning/qdoublevector2d.cpp @@ -3,7 +3,7 @@ ** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). ** Contact: http://www.qt-project.org/legal ** -** This file is part of the QtGui module of the Qt Toolkit. +** This file is part of the QtPositioning module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** Commercial License Usage diff --git a/src/location/maps/qdoublevector2d_p.h b/src/positioning/qdoublevector2d_p.h index f66a95a2..b3c24af6 100644 --- a/src/location/maps/qdoublevector2d_p.h +++ b/src/positioning/qdoublevector2d_p.h @@ -3,7 +3,7 @@ ** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). ** Contact: http://www.qt-project.org/legal ** -** This file is part of the QtGui module of the Qt Toolkit. +** This file is part of the QtPositioning module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** Commercial License Usage @@ -53,23 +53,27 @@ // We mean it. // +#ifdef QT_BUILD_LOCATION_LIB #include <QVector2D> +#endif +#include "qpositioningglobal.h" #include <QtCore/qmetatype.h> QT_BEGIN_NAMESPACE class QDoubleVector3D; -class QDoubleVector2D +class Q_POSITIONING_EXPORT_PRIVATE QDoubleVector2D { public: QDoubleVector2D(); - explicit QDoubleVector2D(const QVector2D &vector); QDoubleVector2D(double xpos, double ypos); explicit QDoubleVector2D(const QDoubleVector3D &vector); - - operator QVector2D() const; +#ifdef QT_BUILD_LOCATION_LIB + explicit QDoubleVector2D(const QVector2D &vector) : xp(vector.x()), yp(vector.y()) {} + operator QVector2D() const { return QVector2D(xp, yp); } +#endif bool isNull() const; @@ -117,14 +121,10 @@ Q_DECLARE_TYPEINFO(QDoubleVector2D, Q_MOVABLE_TYPE); inline QDoubleVector2D::QDoubleVector2D() : xp(0.0), yp(0.0) {} -inline QDoubleVector2D::QDoubleVector2D(const QVector2D &vector) : xp(vector.x()), yp(vector.y()) {} + inline QDoubleVector2D::QDoubleVector2D(double xpos, double ypos) : xp(xpos), yp(ypos) {} -inline QDoubleVector2D::operator QVector2D() const -{ - return QVector2D(xp, yp); -} inline bool QDoubleVector2D::isNull() const { diff --git a/src/location/maps/qdoublevector3d.cpp b/src/positioning/qdoublevector3d.cpp index d35e4848..c4e2cf61 100644 --- a/src/location/maps/qdoublevector3d.cpp +++ b/src/positioning/qdoublevector3d.cpp @@ -3,7 +3,7 @@ ** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). ** Contact: http://www.qt-project.org/legal ** -** This file is part of the QtGui module of the Qt Toolkit. +** This file is part of the QtPositioning module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** Commercial License Usage diff --git a/src/location/maps/qdoublevector3d_p.h b/src/positioning/qdoublevector3d_p.h index e237287d..c2033d34 100644 --- a/src/location/maps/qdoublevector3d_p.h +++ b/src/positioning/qdoublevector3d_p.h @@ -3,7 +3,7 @@ ** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). ** Contact: http://www.qt-project.org/legal ** -** This file is part of the QtGui module of the Qt Toolkit. +** This file is part of the QtPositioning module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** Commercial License Usage @@ -53,24 +53,29 @@ // We mean it. // +#ifdef QT_BUILD_LOCATION_LIB #include <QVector3D> +#endif +#include "qpositioningglobal.h" #include <QtCore/qmetatype.h> QT_BEGIN_NAMESPACE class QDoubleVector2D; -class QDoubleVector3D +class Q_POSITIONING_EXPORT_PRIVATE QDoubleVector3D { public: QDoubleVector3D(); QDoubleVector3D(double xpos, double ypos, double zpos); - explicit QDoubleVector3D(const QVector3D &vector); QDoubleVector3D(const QDoubleVector2D &vector); QDoubleVector3D(const QDoubleVector2D &vector, double zpos); - operator QVector3D() const; +#ifdef QT_BUILD_LOCATION_LIB + explicit QDoubleVector3D(const QVector3D &vector) : xp(vector.x()), yp(vector.y()), zp(vector.z()) {} + operator QVector3D() const { return QVector3D(xp, yp, zp); } +#endif bool isNull() const; @@ -131,15 +136,8 @@ Q_DECLARE_TYPEINFO(QDoubleVector3D, Q_MOVABLE_TYPE); inline QDoubleVector3D::QDoubleVector3D() : xp(0.0), yp(0.0), zp(0.0) {} -inline QDoubleVector3D::QDoubleVector3D(const QVector3D &vector) : xp(vector.x()), yp(vector.y()), zp(vector.z()) {} - inline QDoubleVector3D::QDoubleVector3D(double xpos, double ypos, double zpos) : xp(xpos), yp(ypos), zp(zpos) {} -inline QDoubleVector3D::operator QVector3D() const -{ - return QVector3D(xp, yp, zp); -} - inline bool QDoubleVector3D::isNull() const { return qIsNull(xp) && qIsNull(yp) && qIsNull(zp); diff --git a/src/positioning/qgeoaddress.h b/src/positioning/qgeoaddress.h index 1aedd1a5..5d9371c5 100644 --- a/src/positioning/qgeoaddress.h +++ b/src/positioning/qgeoaddress.h @@ -44,7 +44,7 @@ #include <QtCore/QMetaType> #include <QtCore/QSharedDataPointer> -#include <QtPositioning/qpositioningglobal.h> +#include "qpositioningglobal.h" QT_BEGIN_NAMESPACE diff --git a/src/positioning/qgeocircle.cpp b/src/positioning/qgeocircle.cpp index 4a4f67aa..60dffb41 100644 --- a/src/positioning/qgeocircle.cpp +++ b/src/positioning/qgeocircle.cpp @@ -45,6 +45,8 @@ #include "qgeocoordinate.h" #include "qnumeric.h" +#include "qdoublevector2d_p.h" +#include "qdoublevector3d_p.h" QT_BEGIN_NAMESPACE /*! diff --git a/src/positioning/qgeocoordinate.h b/src/positioning/qgeocoordinate.h index 23001ad1..a4e76906 100644 --- a/src/positioning/qgeocoordinate.h +++ b/src/positioning/qgeocoordinate.h @@ -45,7 +45,7 @@ #include <QtCore/QMetaType> #include <QtCore/QString> #include <QSharedDataPointer> -#include <QtPositioning/qpositioningglobal.h> +#include "qpositioningglobal.h" QT_BEGIN_NAMESPACE diff --git a/src/positioning/qgeolocation.h b/src/positioning/qgeolocation.h index 395f83f1..5d1aa98c 100644 --- a/src/positioning/qgeolocation.h +++ b/src/positioning/qgeolocation.h @@ -44,7 +44,7 @@ #include <QtCore/QSharedDataPointer> #include <QtCore/QMetaType> -#include <QtPositioning/qpositioningglobal.h> +#include "qpositioningglobal.h" QT_BEGIN_NAMESPACE diff --git a/src/location/maps/qgeoprojection.cpp b/src/positioning/qgeoprojection.cpp index 84dc5749..d2cc9243 100644 --- a/src/location/maps/qgeoprojection.cpp +++ b/src/positioning/qgeoprojection.cpp @@ -3,7 +3,7 @@ ** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). ** Contact: http://www.qt-project.org/legal ** -** This file is part of the QtLocation module of the Qt Toolkit. +** This file is part of the QtPositioning module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** Commercial License Usage @@ -42,7 +42,6 @@ #include "qgeocoordinate.h" -#include <QMatrix4x4> #include <qnumeric.h> #include <cmath> @@ -105,4 +104,37 @@ QGeoCoordinate QGeoProjection::mercatorToCoord(const QDoubleVector2D &mercator) return QGeoCoordinate(lat, lng, 0.0); } +QGeoCoordinate QGeoProjection::coordinateInterpolation(const QGeoCoordinate &from, const QGeoCoordinate &to, qreal progress) +{ + QDoubleVector2D s = QGeoProjection::coordToMercator(from); + QDoubleVector2D e = QGeoProjection::coordToMercator(to); + + double x = s.x(); + + if (0.5 < qAbs(e.x() - s.x())) { + // handle dateline crossing + double ex = e.x(); + double sx = s.x(); + if (ex < sx) + sx -= 1.0; + else if (sx < ex) + ex -= 1.0; + + x = (1.0 - progress) * sx + progress * ex; + + if (!qFuzzyIsNull(x) && (x < 0.0)) + x += 1.0; + + } else { + x = (1.0 - progress) * s.x() + progress * e.x(); + } + + double y = (1.0 - progress) * s.y() + progress * e.y(); + + QGeoCoordinate result = QGeoProjection::mercatorToCoord(QDoubleVector2D(x, y)); + result.setAltitude((1.0 - progress) * from.altitude() + progress * to.altitude()); + + return result; +} + QT_END_NAMESPACE diff --git a/src/location/maps/qgeoprojection_p.h b/src/positioning/qgeoprojection_p.h index 4dcf8b4c..d0280030 100644 --- a/src/location/maps/qgeoprojection_p.h +++ b/src/positioning/qgeoprojection_p.h @@ -57,18 +57,19 @@ #endif #include <qglobal.h> -#include <QtLocation/qlocationglobal.h> +#include "qpositioningglobal.h" QT_BEGIN_NAMESPACE class QGeoCoordinate; class QDoubleVector2D; -class Q_LOCATION_EXPORT QGeoProjection +class Q_POSITIONING_EXPORT_PRIVATE QGeoProjection { public: static QDoubleVector2D coordToMercator(const QGeoCoordinate &coord); static QGeoCoordinate mercatorToCoord(const QDoubleVector2D &mercator); + static QGeoCoordinate coordinateInterpolation(const QGeoCoordinate &from, const QGeoCoordinate &to, qreal progress); private: static double realmod(const double a, const double b); diff --git a/src/positioning/qgeosatelliteinfo.h b/src/positioning/qgeosatelliteinfo.h index fb13157d..b6c70e4c 100644 --- a/src/positioning/qgeosatelliteinfo.h +++ b/src/positioning/qgeosatelliteinfo.h @@ -41,7 +41,7 @@ #ifndef QGEOSATELLITEINFO_H #define QGEOSATELLITEINFO_H -#include <QtPositioning/qpositioningglobal.h> +#include "qpositioningglobal.h" QT_BEGIN_NAMESPACE diff --git a/src/positioning/qpositioningglobal.h b/src/positioning/qpositioningglobal.h index e0de618b..5d1c3dea 100644 --- a/src/positioning/qpositioningglobal.h +++ b/src/positioning/qpositioningglobal.h @@ -47,14 +47,18 @@ QT_BEGIN_NAMESPACE #ifndef QT_STATIC # if defined(QT_BUILD_POSITIONING_LIB) -# define Q_POSITIONING_EXPORT Q_DECL_EXPORT +# define Q_POSITIONING_EXPORT Q_DECL_EXPORT +# define Q_POSITIONING_EXPORT_PRIVATE Q_DECL_EXPORT # else -# define Q_POSITIONING_EXPORT Q_DECL_IMPORT +# define Q_POSITIONING_EXPORT Q_DECL_IMPORT +# define Q_POSITIONING_EXPORT_PRIVATE Q_DECL_IMPORT # endif #else # define Q_POSITIONING_EXPORT +# define Q_POSITIONING_EXPORT_PRIVATE #endif + QT_END_NAMESPACE #endif // QPOSITIONINGGLOBAL_H |