[Kde-bindings] [marble] src: ViewportParams: forward methods from AbstractProjection which take a ViewportParams parameter

Bernhard Beschow bbeschow at cs.tu-berlin.de
Sat Dec 10 13:57:19 UTC 2011


Git commit abf6b5986e6f565e1fc250906d45449db933e188 by Bernhard Beschow.
Committed on 09/12/2011 at 19:30.
Pushed by beschow into branch 'master'.

ViewportParams: forward methods from AbstractProjection which take a ViewportParams parameter

Simplifies calls like
  viewport->currentProjection()->foo( ..., viewport, ... )
to
  viewport->foo( ... ).

CCMAIL: kde-bindings at kde.org

M  +0    -1    src/lib/AbstractDataPluginItem.cpp
M  +15   -31   src/lib/GeoPainter.cpp
M  +2    -6    src/lib/MarbleMap.cpp
M  +1    -4    src/lib/MarblePhysics.cpp
M  +2    -4    src/lib/MarbleWidget.cpp
M  +2    -3    src/lib/MarbleWidgetInputHandler.cpp
M  +0    -1    src/lib/PositionTracking.cpp
M  +1    -1    src/lib/Projections/AbstractProjection.h
M  +1    -1    src/lib/VectorComposer.cpp
M  +70   -0    src/lib/ViewportParams.cpp
M  +90   -1    src/lib/ViewportParams.h
M  +5    -7    src/lib/graphicsview/GeoGraphicsItem_p.h
M  +1    -2    src/lib/layers/MeasureTool.cpp
M  +2    -3    src/lib/layers/PlacemarkLayout.cpp
M  +1    -2    src/plugins/declarative/MarbleDeclarativeWidget.cpp
M  +1    -2    src/plugins/render/crosshairs/CrosshairsPlugin.cpp
M  +1    -2    src/plugins/render/overviewmap/OverviewMap.cpp
M  +3    -8    src/plugins/render/positionmarker/PositionMarker.cpp

http://commits.kde.org/marble/abf6b5986e6f565e1fc250906d45449db933e188

diff --git a/src/lib/AbstractDataPluginItem.cpp b/src/lib/AbstractDataPluginItem.cpp
index f4f468a..6825817 100644
--- a/src/lib/AbstractDataPluginItem.cpp
+++ b/src/lib/AbstractDataPluginItem.cpp
@@ -12,7 +12,6 @@
 #include "AbstractDataPluginItem.h"
 
 // Marble
-#include "AbstractProjection.h"
 #include "GeoDataCoordinates.h"
 #include "ViewportParams.h"
 #include "MarbleDebug.h"
diff --git a/src/lib/GeoPainter.cpp b/src/lib/GeoPainter.cpp
index dcf1560..e6abe7b 100644
--- a/src/lib/GeoPainter.cpp
+++ b/src/lib/GeoPainter.cpp
@@ -15,7 +15,6 @@
 #include <QtGui/QPainterPath>
 #include <QtGui/QRegion>
 
-#include "AbstractProjection.h"
 #include "MarbleDebug.h"
 
 #include "GeoDataCoordinates.h"
@@ -46,17 +45,13 @@ GeoPainterPrivate::~GeoPainterPrivate()
 void GeoPainterPrivate::createPolygonsFromLineString( const GeoDataLineString & lineString,
                                                       QVector<QPolygonF *> &polygons )
 {
-    const AbstractProjection *projection = m_viewport->currentProjection();
-
-    projection->screenCoordinates( lineString, m_viewport, polygons );
+    m_viewport->screenCoordinates( lineString, polygons );
 }
 
 void GeoPainterPrivate::createPolygonsFromLinearRing( const GeoDataLinearRing & linearRing,
                                                       QVector<QPolygonF *> &polygons )
 {
-    const AbstractProjection *projection = m_viewport->currentProjection();
-
-    projection->screenCoordinates( linearRing, m_viewport, polygons );
+    m_viewport->screenCoordinates( linearRing, polygons );
 }
 
 void GeoPainterPrivate::createAnnotationLayout (  qreal x, qreal y,
@@ -217,7 +212,6 @@ void GeoPainter::drawAnnotation( const GeoDataCoordinates & position,
     int pointRepeatNum;
     qreal y;
     bool globeHidesPoint;
-    const AbstractProjection *projection = d->m_viewport->currentProjection();
 
     if ( bubbleSize.height() <= 0 ) {
         QRectF rect = QRectF( QPointF( 0.0, 0.0 ), bubbleSize - QSizeF( 2 * xRnd, 0.0 ) );
@@ -225,7 +219,7 @@ void GeoPainter::drawAnnotation( const GeoDataCoordinates & position,
         bubbleSize.setHeight( 2 * yRnd + idealTextHeight );
     }
 
-    bool visible = projection->screenCoordinates( position, d->m_viewport, d->m_x, y, pointRepeatNum, globeHidesPoint );
+    bool visible = d->m_viewport->screenCoordinates( position, d->m_x, y, pointRepeatNum, globeHidesPoint );
 
     if ( visible ) {
         // Draw all the x-repeat-instances of the point on the screen
@@ -245,9 +239,8 @@ void GeoPainter::drawPoint (  const GeoDataCoordinates & position )
     int pointRepeatNum;
     qreal y;
     bool globeHidesPoint;
-    const AbstractProjection *projection = d->m_viewport->currentProjection();
 
-    bool visible = projection->screenCoordinates( position, d->m_viewport, d->m_x, y, pointRepeatNum, globeHidesPoint );
+    bool visible = d->m_viewport->screenCoordinates( position, d->m_x, y, pointRepeatNum, globeHidesPoint );
 
     if ( visible ) {
         // Draw all the x-repeat-instances of the point on the screen
@@ -284,11 +277,10 @@ void GeoPainter::drawPoints (  const GeoDataCoordinates * positions,
     int pointRepeatNum;
     qreal y;
     bool globeHidesPoint;
-    const AbstractProjection *projection = d->m_viewport->currentProjection();
 
     const GeoDataCoordinates * itPoint = positions;
     while( itPoint < positions + pointCount ) {
-        bool visible = projection->screenCoordinates( *itPoint, d->m_viewport, d->m_x, y, pointRepeatNum, globeHidesPoint );
+        bool visible = d->m_viewport->screenCoordinates( *itPoint, d->m_x, y, pointRepeatNum, globeHidesPoint );
     
         if ( visible ) {
             // Draw all the x-repeat-instances of the point on the screen
@@ -313,11 +305,10 @@ void GeoPainter::drawText ( const GeoDataCoordinates & position,
     int pointRepeatNum;
     qreal y;
     bool globeHidesPoint;
-    const AbstractProjection *projection = d->m_viewport->currentProjection();
 
     QSizeF textSize( fontMetrics().width( text ), fontMetrics().height() );  
 
-    bool visible = projection->screenCoordinates( position, d->m_viewport, d->m_x, y, pointRepeatNum, textSize, globeHidesPoint );
+    bool visible = d->m_viewport->screenCoordinates( position, d->m_x, y, pointRepeatNum, textSize, globeHidesPoint );
 
     if ( visible ) {
         // Draw all the x-repeat-instances of the point on the screen
@@ -336,9 +327,8 @@ void GeoPainter::drawEllipse ( const GeoDataCoordinates & centerPosition,
         int pointRepeatNum;
         qreal y;
         bool globeHidesPoint;
-        const AbstractProjection *projection = d->m_viewport->currentProjection();
 
-        bool visible = projection->screenCoordinates( centerPosition, d->m_viewport, d->m_x, y, pointRepeatNum, QSizeF( width, height ), globeHidesPoint );
+        bool visible = d->m_viewport->screenCoordinates( centerPosition, d->m_x, y, pointRepeatNum, QSizeF( width, height ), globeHidesPoint );
 
         if ( visible ) {
             // Draw all the x-repeat-instances of the point on the screen
@@ -410,9 +400,8 @@ QRegion GeoPainter::regionFromEllipse ( const GeoDataCoordinates & centerPositio
         int pointRepeatNum;
         qreal y;
         bool globeHidesPoint;
-        const AbstractProjection *projection = d->m_viewport->currentProjection();
 
-        bool visible = projection->screenCoordinates( centerPosition, d->m_viewport, d->m_x, y, pointRepeatNum, QSizeF( width, height ), globeHidesPoint );
+        bool visible = d->m_viewport->screenCoordinates( centerPosition, d->m_x, y, pointRepeatNum, QSizeF( width, height ), globeHidesPoint );
 
         QRegion regions;
 
@@ -489,10 +478,9 @@ void GeoPainter::drawImage ( const GeoDataCoordinates & centerPosition,
     int pointRepeatNum;
     qreal y;
     bool globeHidesPoint;
-    const AbstractProjection *projection = d->m_viewport->currentProjection();
 
 //    if ( !isGeoProjected ) {
-        bool visible = projection->screenCoordinates( centerPosition, d->m_viewport, d->m_x, y, pointRepeatNum, image.size(), globeHidesPoint );
+        bool visible = d->m_viewport->screenCoordinates( centerPosition, d->m_x, y, pointRepeatNum, image.size(), globeHidesPoint );
 
         if ( visible ) {
             // Draw all the x-repeat-instances of the point on the screen
@@ -510,11 +498,10 @@ void GeoPainter::drawPixmap ( const GeoDataCoordinates & centerPosition,
     int pointRepeatNum;
     qreal y;
     bool globeHidesPoint;
-    const AbstractProjection *projection = d->m_viewport->currentProjection();
 
 //    if ( !isGeoProjected ) {
         // FIXME: Better visibility detection that takes the circle geometry into account
-        bool visible = projection->screenCoordinates( centerPosition, d->m_viewport, d->m_x, y, pointRepeatNum, pixmap.size(), globeHidesPoint );
+        bool visible = d->m_viewport->screenCoordinates( centerPosition, d->m_x, y, pointRepeatNum, pixmap.size(), globeHidesPoint );
 
         if ( visible ) {
             // Draw all the x-repeat-instances of the point on the screen
@@ -789,10 +776,9 @@ void GeoPainter::drawRect ( const GeoDataCoordinates & centerCoordinates,
         int pointRepeatNum;
         qreal y;
         bool globeHidesPoint;
-        const AbstractProjection *projection = d->m_viewport->currentProjection();
 
-        bool visible = projection->screenCoordinates( centerCoordinates,
-                       d->m_viewport, d->m_x, y, pointRepeatNum, QSizeF( width, height ), globeHidesPoint );
+        bool visible = d->m_viewport->screenCoordinates( centerCoordinates,
+                       d->m_x, y, pointRepeatNum, QSizeF( width, height ), globeHidesPoint );
 
         if ( visible ) {
             // Draw all the x-repeat-instances of the point on the screen
@@ -817,10 +803,9 @@ QRegion GeoPainter::regionFromRect ( const GeoDataCoordinates & centerCoordinate
         int pointRepeatNum;
         qreal y;
         bool globeHidesPoint;
-        const AbstractProjection *projection = d->m_viewport->currentProjection();
 
-        bool visible = projection->screenCoordinates( centerCoordinates,
-                       d->m_viewport, d->m_x, y, pointRepeatNum, QSizeF( width, height ), globeHidesPoint );
+        bool visible = d->m_viewport->screenCoordinates( centerCoordinates,
+                       d->m_x, y, pointRepeatNum, QSizeF( width, height ), globeHidesPoint );
 
         QRegion regions;
 
@@ -851,10 +836,9 @@ void GeoPainter::drawRoundRect ( const GeoDataCoordinates &centerPosition,
         int pointRepeatNum;
         qreal y;
         bool globeHidesPoint;
-        const AbstractProjection *projection = d->m_viewport->currentProjection();
 
         // FIXME: Better visibility detection that takes the circle geometry into account
-        bool visible = projection->screenCoordinates( centerPosition, d->m_viewport, d->m_x, y, pointRepeatNum, QSizeF( width, height ), globeHidesPoint );
+        bool visible = d->m_viewport->screenCoordinates( centerPosition, d->m_x, y, pointRepeatNum, QSizeF( width, height ), globeHidesPoint );
 
         if ( visible ) {
             // Draw all the x-repeat-instances of the point on the screen
diff --git a/src/lib/MarbleMap.cpp b/src/lib/MarbleMap.cpp
index fbe2fd3..a5505ad 100644
--- a/src/lib/MarbleMap.cpp
+++ b/src/lib/MarbleMap.cpp
@@ -43,7 +43,6 @@
 #include "layers/VectorMapBaseLayer.h"
 #include "layers/VectorMapLayer.h"
 #include "AbstractFloatItem.h"
-#include "AbstractProjection.h"
 #include "GeoDataTreeModel.h"
 #include "GeoPainter.h"
 #include "GeoSceneDocument.h"
@@ -696,17 +695,14 @@ void MarbleMap::setProjection( Projection projection )
 bool MarbleMap::screenCoordinates( qreal lon, qreal lat,
                                    qreal& x, qreal& y ) const
 {
-    return d->m_viewport.currentProjection()
-        ->screenCoordinates( lon * DEG2RAD, lat * DEG2RAD,
-                             &d->m_viewport, x, y );
+    return d->m_viewport.screenCoordinates( lon * DEG2RAD, lat * DEG2RAD, x, y );
 }
 
 bool MarbleMap::geoCoordinates( int x, int y,
                                 qreal& lon, qreal& lat,
                                 GeoDataCoordinates::Unit unit ) const
 {
-    return d->m_viewport.currentProjection()
-        ->geoCoordinates( x, y, &d->m_viewport, lon, lat, unit );
+    return d->m_viewport.geoCoordinates( x, y, lon, lat, unit );
 }
 
 // Used to be paintEvent()
diff --git a/src/lib/MarblePhysics.cpp b/src/lib/MarblePhysics.cpp
index 717367b..e8c36ce 100644
--- a/src/lib/MarblePhysics.cpp
+++ b/src/lib/MarblePhysics.cpp
@@ -15,7 +15,6 @@
 #include "MarbleDebug.h"
 #include "GeoDataLineString.h"
 #include "ViewportParams.h"
-#include "AbstractProjection.h"
 
 #include <QtCore/QTimeLine>
 
@@ -131,9 +130,7 @@ void MarblePhysics::flyTo( const GeoDataLookAt &target, FlyToMode mode )
     FlyToMode effectiveMode = mode;
     qreal x(0), y(0);
     bool globeHidesPoint(false);
-    bool onScreen = viewport->currentProjection()->screenCoordinates( target.coordinates(),
-                                                                      viewport,
-                                                                      x, y,
+    bool onScreen = viewport->screenCoordinates( target.coordinates(), x, y,
                                                                       globeHidesPoint );
     bool invisible = globeHidesPoint || !onScreen;
 
diff --git a/src/lib/MarbleWidget.cpp b/src/lib/MarbleWidget.cpp
index 157edc9..ab483ef 100644
--- a/src/lib/MarbleWidget.cpp
+++ b/src/lib/MarbleWidget.cpp
@@ -27,7 +27,6 @@
 #include <QtDBus/QDBusConnection>
 #endif
 
-#include "AbstractProjection.h"
 #include "DataMigration.h"
 #include "FpsLayer.h"
 #include "FileManager.h"
@@ -774,7 +773,7 @@ qreal MarbleWidget::centerLongitude() const
 
 QRegion MarbleWidget::mapRegion() const
 {
-    return viewport()->currentProjection()->mapRegion( viewport() );
+    return viewport()->mapRegion();
 }
 
 void MarbleWidget::paintEvent( QPaintEvent *evt )
@@ -1161,8 +1160,7 @@ void MarbleWidget::setSelection( const QRect& region )
     mDebug() << "Selection region: (" << tl.x() << ", " <<  tl.y() << ") (" 
              << br.x() << ", " << br.y() << ")" << endl;
 
-    const AbstractProjection *proj = viewport()->currentProjection();
-    GeoDataLatLonAltBox box  = proj->latLonAltBox( region, viewport() );
+    GeoDataLatLonAltBox box  = viewport()->latLonAltBox( region );
 
     // NOTE: coordinates as lon1, lat1, lon2, lat2 (or West, North, East, South)
     // as left/top, right/bottom rectangle.
diff --git a/src/lib/MarbleWidgetInputHandler.cpp b/src/lib/MarbleWidgetInputHandler.cpp
index e2705b7..355efb0 100644
--- a/src/lib/MarbleWidgetInputHandler.cpp
+++ b/src/lib/MarbleWidgetInputHandler.cpp
@@ -42,7 +42,6 @@
 #include "AbstractDataPluginItem.h"
 #include "MeasureTool.h"
 #include "MarbleWidgetPopupMenu.h"
-#include "AbstractProjection.h"
 #include "Planet.h"
 
 namespace Marble {
@@ -246,7 +245,7 @@ void MarbleWidgetDefaultInputHandler::Private::ZoomAt(MarbleWidget* marbleWidget
     ViewportParams* now = marbleWidget->viewport();
 
     qreal x(0), y(0);
-    if (!now->currentProjection()->screenCoordinates(destLon, destLat, now, x, y)) {
+    if (!now->screenCoordinates(destLon, destLat, x, y)) {
         return;
     }
 
@@ -259,7 +258,7 @@ void MarbleWidgetDefaultInputHandler::Private::ZoomAt(MarbleWidget* marbleWidget
     soon.setRadius( newRadius );
 
     qreal mouseLon, mouseLat;
-    if (!soon.currentProjection()->geoCoordinates(int(x), int(y), &soon, mouseLon, mouseLat, GeoDataCoordinates::Radian )) {
+    if (!soon.geoCoordinates(int(x), int(y), mouseLon, mouseLat, GeoDataCoordinates::Radian )) {
         return;
     }
 
diff --git a/src/lib/PositionTracking.cpp b/src/lib/PositionTracking.cpp
index fad595b..feef036 100644
--- a/src/lib/PositionTracking.cpp
+++ b/src/lib/PositionTracking.cpp
@@ -19,7 +19,6 @@
 #include "GeoDataTreeModel.h"
 #include "GeoWriter.h"
 #include "KmlElementDictionary.h"
-#include "AbstractProjection.h"
 #include "FileManager.h"
 #include "MarbleMath.h"
 #include "MarbleDebug.h"
diff --git a/src/lib/Projections/AbstractProjection.h b/src/lib/Projections/AbstractProjection.h
index 8d6ece9..5980008 100644
--- a/src/lib/Projections/AbstractProjection.h
+++ b/src/lib/Projections/AbstractProjection.h
@@ -219,7 +219,7 @@ class MARBLE_EXPORT AbstractProjection
                                     int& x, int& y ) const;
 
     /* DEPRECATED */
-    bool screenCoordinates( const GeoDataCoordinates &geopoint, 
+    bool screenCoordinates( const GeoDataCoordinates &geopoint,
                                     const ViewportParams *viewport,
                                     int &x, int &y, bool &globeHidesPoint ) const;
 
diff --git a/src/lib/VectorComposer.cpp b/src/lib/VectorComposer.cpp
index 95c56e6..c907034 100644
--- a/src/lib/VectorComposer.cpp
+++ b/src/lib/VectorComposer.cpp
@@ -243,7 +243,7 @@ void VectorComposer::paintBaseVectorMap( GeoPainter *painter,
     // Paint the background of it all, i.e. the water.
     painter->setPen( m_oceanPen );
     painter->setBrush( m_oceanBrush );
-    painter->drawPath( viewport->currentProjection()->mapShape( viewport ) );
+    painter->drawPath( viewport->mapShape() );
 
     // Coastlines
     m_vectorMap->setzBoundingBoxLimit( 0.4 ); 
diff --git a/src/lib/ViewportParams.cpp b/src/lib/ViewportParams.cpp
index dc684fa..fb92e05 100644
--- a/src/lib/ViewportParams.cpp
+++ b/src/lib/ViewportParams.cpp
@@ -326,6 +326,11 @@ GeoDataLatLonAltBox ViewportParams::viewLatLonAltBox() const
     return d->m_viewLatLonAltBox;
 }
 
+GeoDataLatLonAltBox ViewportParams::latLonAltBox( const QRect &screenRect ) const
+{
+    return d->m_currentProjection->latLonAltBox( screenRect, this );
+}
+
 qreal ViewportParams::angularResolution() const
 {
     // We essentially divide the diameter by 180 deg and
@@ -360,11 +365,76 @@ bool ViewportParams::resolves ( const GeoDataCoordinates &coord1,
     return ( fabs( lon2 - lon1 ) + fabs( lat2 - lat1 ) < angularResolution() );
 }
 
+
+bool ViewportParams::screenCoordinates( const qreal lon, const qreal lat,
+                        qreal &x, qreal &y ) const
+{
+    return d->m_currentProjection->screenCoordinates( lon, lat, this, x, y );
+}
+
+bool ViewportParams::screenCoordinates( const GeoDataCoordinates &geopoint,
+                        qreal &x, qreal &y,
+                        bool &globeHidesPoint ) const
+{
+    return d->m_currentProjection->screenCoordinates( geopoint, this, x, y, globeHidesPoint );
+}
+
+bool ViewportParams::screenCoordinates( const GeoDataCoordinates &geopoint,
+                        qreal &x, qreal &y ) const
+{
+    return d->m_currentProjection->screenCoordinates( geopoint, this, x, y );
+}
+
+bool ViewportParams::screenCoordinates( const GeoDataCoordinates &geopoint,
+                        QPointF &screenpoint ) const
+{
+    return d->m_currentProjection->screenCoordinates( geopoint, this, screenpoint );
+}
+
+bool ViewportParams::screenCoordinates( const GeoDataCoordinates &coordinates,
+                        qreal *x, qreal &y, int &pointRepeatNum,
+                        bool &globeHidesPoint ) const
+{
+    return d->m_currentProjection->screenCoordinates( coordinates, this, x, y, pointRepeatNum, globeHidesPoint );
+}
+
+bool ViewportParams::screenCoordinates( const GeoDataCoordinates &coordinates,
+                        qreal *x, qreal &y, int &pointRepeatNum,
+                        const QSizeF& size,
+                        bool &globeHidesPoint ) const
+{
+    return d->m_currentProjection->screenCoordinates( coordinates, this, x, y, pointRepeatNum, size, globeHidesPoint );
+}
+
+
+bool ViewportParams::screenCoordinates( const GeoDataLineString &lineString,
+                        QVector<QPolygonF*> &polygons ) const
+{
+    return d->m_currentProjection->screenCoordinates( lineString, this, polygons );
+}
+
+bool ViewportParams::geoCoordinates( const int x, const int y,
+                     qreal &lon, qreal &lat,
+                     GeoDataCoordinates::Unit unit ) const
+{
+    return d->m_currentProjection->geoCoordinates( x, y, this, lon, lat, unit );
+}
+
 bool  ViewportParams::mapCoversViewport() const
 {
     return d->m_currentProjection->mapCoversViewport( this );
 }
 
+QPainterPath ViewportParams::mapShape() const
+{
+    return d->m_currentProjection->mapShape( this );
+}
+
+QRegion ViewportParams::mapRegion() const
+{
+    return d->m_currentProjection->mapRegion( this );
+}
+
 GeoDataCoordinates ViewportParams::focusPoint() const
 {
     if (d->m_hasFocusPoint) {
diff --git a/src/lib/ViewportParams.h b/src/lib/ViewportParams.h
index 2b9193b..f6d2f82 100644
--- a/src/lib/ViewportParams.h
+++ b/src/lib/ViewportParams.h
@@ -20,6 +20,7 @@
  */
 
 #include <QtCore/QSize>
+#include <QtGui/QPainterPath>
 
 #include "GeoDataLatLonAltBox.h"
 
@@ -27,6 +28,8 @@
 #include "global.h"
 #include "marble_export.h"
 
+class QPolygonF;
+
 namespace Marble
 {
 
@@ -53,6 +56,8 @@ class MARBLE_EXPORT ViewportParams
 
     GeoDataLatLonAltBox viewLatLonAltBox() const;
 
+    GeoDataLatLonAltBox latLonAltBox( const QRect &screenRect ) const;
+
     // Calculates an educated guess for the average angle in radians covered per pixel.
     // Given a certain resolution it doesn't make much sense
     // - to display an object that covers an angle that is smaller than that.
@@ -100,7 +105,91 @@ class MARBLE_EXPORT ViewportParams
     qreal centerLatitude() const;
     MARBLE_DEPRECATED( void centerCoordinates( qreal &centerLon, qreal &centerLat ) const );
 
-    bool  mapCoversViewport() const;
+    /**
+     * @brief Get the screen coordinates corresponding to geographical coordinates in the map.
+     * @param lon    the lon coordinate of the requested pixel position in radians
+     * @param lat    the lat coordinate of the requested pixel position in radians
+     * @param x      the x coordinate of the pixel is returned through this parameter
+     * @param y      the y coordinate of the pixel is returned through this parameter
+     * @return @c true  if the geographical coordinates are visible on the screen
+     *         @c false if the geographical coordinates are not visible on the screen
+     *
+     * @see ViewportParams
+     */
+    bool screenCoordinates( const qreal lon, const qreal lat,
+                            qreal &x, qreal &y ) const;
+
+    /**
+     * @brief Get the screen coordinates corresponding to geographical coordinates in the map.
+     *
+     * @param geopoint the point on earth, including altitude, that we want the coordinates for.
+     * @param x      the x coordinate of the pixel is returned through this parameter
+     * @param y      the y coordinate of the pixel is returned through this parameter
+     * @param globeHidesPoint  whether the point gets hidden on the far side of the earth
+     *
+     * @return @c true  if the geographical coordinates are visible on the screen
+     *         @c false if the geographical coordinates are not visible on the screen
+     *
+     * @see ViewportParams
+     */
+    bool screenCoordinates( const GeoDataCoordinates &geopoint,
+                            qreal &x, qreal &y,
+                            bool &globeHidesPoint ) const;
+
+    // Will just call the virtual version with a dummy globeHidesPoint.
+    bool screenCoordinates( const GeoDataCoordinates &geopoint,
+                            qreal &x, qreal &y ) const;
+
+    bool screenCoordinates( const GeoDataCoordinates &geopoint,
+                            QPointF &screenpoint ) const;
+
+    /**
+     * @brief Get the coordinates of screen points for geographical coordinates in the map.
+     *
+     * @param coordinates the point on earth, including altitude, that we want the coordinates for.
+     * @param x      the x coordinates of the pixels are returned through this parameter
+     * @param y      the y coordinate of the pixel is returned through this parameter
+     * @param pointRepeatNum      the amount of times that a single geographical
+                                  point gets represented on the map
+     * @param globeHidesPoint  whether the point gets hidden on the far side of the earth
+     *
+     * @return @c true  if the geographical coordinates are visible on the screen
+     *         @c false if the geographical coordinates are not visible on the screen
+     *
+     * @see ViewportParams
+     */
+    bool screenCoordinates( const GeoDataCoordinates &coordinates,
+                            qreal *x, qreal &y, int &pointRepeatNum,
+                            bool &globeHidesPoint ) const;
+
+    bool screenCoordinates( const GeoDataCoordinates &coordinates,
+                            qreal *x, qreal &y, int &pointRepeatNum,
+                            const QSizeF& size,
+                            bool &globeHidesPoint ) const;
+
+
+    bool screenCoordinates( const GeoDataLineString &lineString,
+                            QVector<QPolygonF*> &polygons ) const;
+
+    /**
+     * @brief Get the earth coordinates corresponding to a pixel in the map.
+     * @param x      the x coordinate of the pixel
+     * @param y      the y coordinate of the pixel
+     * @param lon    the longitude angle is returned through this parameter
+     * @param lat    the latitude angle is returned through this parameter
+     * @param unit   the unit of the angles for lon and lat.
+     * @return @c true  if the pixel (x, y) is within the globe
+     *         @c false if the pixel (x, y) is outside the globe, i.e. in space.
+     */
+    bool geoCoordinates( const int x, const int y,
+                         qreal &lon, qreal &lat,
+                         GeoDataCoordinates::Unit unit = GeoDataCoordinates::Degree ) const;
+
+    bool mapCoversViewport() const;
+
+    QPainterPath mapShape() const;
+
+    QRegion mapRegion() const;
 
     /**
       * @return The current point of focus, e.g. the point that is not moved
diff --git a/src/lib/graphicsview/GeoGraphicsItem_p.h b/src/lib/graphicsview/GeoGraphicsItem_p.h
index f97699a..855bdd3 100644
--- a/src/lib/graphicsview/GeoGraphicsItem_p.h
+++ b/src/lib/graphicsview/GeoGraphicsItem_p.h
@@ -56,14 +56,12 @@ class GeoGraphicsItemPrivate : public MarbleGraphicsItemPrivate
         qreal x[100], y;
         int pointRepeatNumber;
         bool globeHidesPoint;
-        const AbstractProjection *projection = viewport->currentProjection();
-
-        if( projection->screenCoordinates( m_coordinate,
-                                           viewport,
-                                           x, y,
-                                           pointRepeatNumber,
-                                           m_size,
-                                           globeHidesPoint ) )
+
+        if( viewport->screenCoordinates( m_coordinate,
+                                         x, y,
+                                         pointRepeatNumber,
+                                         m_size,
+                                         globeHidesPoint ) )
         {
             for( int i = 0; i < pointRepeatNumber; ++i ) {
                 qint32 leftX = x[i] - ( m_size.width() / 2 );
diff --git a/src/lib/layers/MeasureTool.cpp b/src/lib/layers/MeasureTool.cpp
index 7f1bab7..a08dbec 100644
--- a/src/lib/layers/MeasureTool.cpp
+++ b/src/lib/layers/MeasureTool.cpp
@@ -26,7 +26,6 @@
 #include "MarbleMath.h"
 #include "MarbleModel.h"
 #include "MarbleLocale.h"
-#include "AbstractProjection.h"
 #include "GeoPainter.h"
 #include "Planet.h"
 #include "ViewportParams.h"
@@ -119,7 +118,7 @@ void MeasureTool::drawMeasurePoints( GeoPainter *painter,
         bool globeHidesPoint = false;
         qreal * x  = new qreal[100];
 
-        bool visible = viewport->currentProjection()->screenCoordinates( GeoDataCoordinates( lon, lat ), viewport, x, y, pointRepeatNum, globeHidesPoint );
+        bool visible = viewport->screenCoordinates( GeoDataCoordinates( lon, lat ), x, y, pointRepeatNum, globeHidesPoint );
 
         if ( visible ) {
             // Draw all the x-repeat-instances of the point on the screen
diff --git a/src/lib/layers/PlacemarkLayout.cpp b/src/lib/layers/PlacemarkLayout.cpp
index fb41485..bf14a99 100644
--- a/src/lib/layers/PlacemarkLayout.cpp
+++ b/src/lib/layers/PlacemarkLayout.cpp
@@ -33,7 +33,6 @@
 #include "ViewportParams.h"
 #include "TileId.h"
 #include "TileCoordsPyramid.h"
-#include "AbstractProjection.h"
 #include "VisiblePlacemark.h"
 #include "MathHelper.h"
 
@@ -506,7 +505,7 @@ bool PlacemarkLayout::render( GeoPainter *painter,
         }
 
         if ( !latLonAltBox.contains( coordinates ) ||
-             ! viewport->currentProjection()->screenCoordinates( coordinates, viewport, x, y ))
+             ! viewport->screenCoordinates( coordinates, x, y ))
             {
                 delete m_visiblePlacemarks.take( placemark );
                 continue;
@@ -593,7 +592,7 @@ bool PlacemarkLayout::render( GeoPainter *painter,
         }
 
         if ( !latLonAltBox.contains( coordinates ) ||
-             ! viewport->currentProjection()->screenCoordinates( coordinates, viewport, x, y ))
+             ! viewport->screenCoordinates( coordinates, x, y ))
             {
                 delete m_visiblePlacemarks.take( placemark );
                 continue;
diff --git a/src/plugins/declarative/MarbleDeclarativeWidget.cpp b/src/plugins/declarative/MarbleDeclarativeWidget.cpp
index f5b4586..2a9ca77 100644
--- a/src/plugins/declarative/MarbleDeclarativeWidget.cpp
+++ b/src/plugins/declarative/MarbleDeclarativeWidget.cpp
@@ -26,7 +26,6 @@
 #include "MarbleMap.h"
 #include "ViewParams.h"
 #include "ViewportParams.h"
-#include "AbstractProjection.h"
 
 namespace Marble
 {
@@ -157,7 +156,7 @@ QPoint MarbleWidget::pixel( qreal lon, qreal lat ) const
     qreal x( 0.0 );
     qreal y( 0.0 );
     ViewportParams *viewport = m_marbleWidget->viewport();
-    viewport->currentProjection()->screenCoordinates( position, viewport, x, y );
+    viewport->screenCoordinates( position, x, y );
     return QPoint( x, y );
 }
 
diff --git a/src/plugins/render/crosshairs/CrosshairsPlugin.cpp b/src/plugins/render/crosshairs/CrosshairsPlugin.cpp
index 9363704..0248922 100644
--- a/src/plugins/render/crosshairs/CrosshairsPlugin.cpp
+++ b/src/plugins/render/crosshairs/CrosshairsPlugin.cpp
@@ -12,7 +12,6 @@
 #include "CrosshairsPlugin.h"
 #include "ui_CrosshairsConfigWidget.h"
 
-#include "AbstractProjection.h"
 #include "GeoPainter.h"
 #include "MarbleDebug.h"
 #include "MarbleDirs.h"
@@ -221,7 +220,7 @@ bool CrosshairsPlugin::render( GeoPainter *painter, ViewportParams *viewport,
         } else {
             qreal centerX = 0.0;
             qreal centerY = 0.0;
-            viewport->currentProjection()->screenCoordinates( focusPoint, viewport, centerX, centerY );
+            viewport->screenCoordinates( focusPoint, centerX, centerY );
             painter->drawPixmap( QPoint ( centerX - width / 2, centerY - height / 2 ), m_crosshairs );
         }
     }
diff --git a/src/plugins/render/overviewmap/OverviewMap.cpp b/src/plugins/render/overviewmap/OverviewMap.cpp
index 192df3a..ccdb5dd 100644
--- a/src/plugins/render/overviewmap/OverviewMap.cpp
+++ b/src/plugins/render/overviewmap/OverviewMap.cpp
@@ -20,7 +20,6 @@
 #include <QtSvg/QSvgRenderer>
 #include <QtGui/QColorDialog>
 
-#include "AbstractProjection.h"
 #include "MarbleDirs.h"
 #include "MarbleDebug.h"
 #include "MarbleModel.h"
@@ -134,7 +133,7 @@ bool OverviewMap::isInitialized () const
 
 void OverviewMap::changeViewport( ViewportParams *viewport )
 {
-    GeoDataLatLonAltBox latLonAltBox = viewport->currentProjection()->latLonAltBox( QRect( QPoint( 0, 0 ), viewport->size() ), viewport );
+    GeoDataLatLonAltBox latLonAltBox = viewport->latLonAltBox( QRect( QPoint( 0, 0 ), viewport->size() ) );
     const qreal centerLon = viewport->centerLongitude();
     const qreal centerLat = viewport->centerLatitude();
     QString target = marbleModel()->planetId();
diff --git a/src/plugins/render/positionmarker/PositionMarker.cpp b/src/plugins/render/positionmarker/PositionMarker.cpp
index ad87c49..8d6f291 100644
--- a/src/plugins/render/positionmarker/PositionMarker.cpp
+++ b/src/plugins/render/positionmarker/PositionMarker.cpp
@@ -24,7 +24,6 @@
 #include <cmath>
 
 #include "ui_PositionMarkerConfigWidget.h"
-#include "AbstractProjection.h"
 #include "MarbleModel.h"
 #include "MarbleDirs.h"
 #include "GeoPainter.h"
@@ -188,12 +187,8 @@ void PositionMarker::update( const ViewportParams *viewport )
         QPointF position;
         QPointF previousPosition;
 
-        viewport->currentProjection()->screenCoordinates( m_currentPosition,
-                                                          viewport,
-                                                          position );
-        viewport->currentProjection()->screenCoordinates( m_previousPosition,
-                                                          viewport,
-                                                          previousPosition );
+        viewport->screenCoordinates( m_currentPosition, position );
+        viewport->screenCoordinates( m_previousPosition, previousPosition );
 
         // calculate the arrow shape, oriented by the heading
         // and with constant size
@@ -269,7 +264,7 @@ bool PositionMarker::render( GeoPainter *painter,
             // we don't draw m_trail[0] which is current position
             for( int i = 1; i < m_trail.size(); ++i ) {
                 // Get screen coordinates from coordinates on the map.
-                viewport->currentProjection()->screenCoordinates( m_trail[i], viewport, trailPoint );
+                viewport->screenCoordinates( m_trail[i], trailPoint );
                 int size = ( sm_numTrailPoints - i ) * 3;
                 trailRect.setX( trailPoint.x() - size / 2.0 );
                 trailRect.setY( trailPoint.y() - size / 2.0 );



More information about the Kde-bindings mailing list