[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 ¢erPosition,
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 ¢erLon, qreal ¢erLat ) 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