[QGIS Commit] r13995 - in trunk/qgis: python/core src/core
src/core/composer
svn_qgis at osgeo.org
svn_qgis at osgeo.org
Mon Aug 2 04:44:52 EDT 2010
Author: mhugent
Date: 2010-08-02 08:44:52 +0000 (Mon, 02 Aug 2010)
New Revision: 13995
Modified:
trunk/qgis/python/core/qgscomposermap.sip
trunk/qgis/python/core/qgsmaprenderer.sip
trunk/qgis/src/core/composer/qgscomposermap.cpp
trunk/qgis/src/core/composer/qgscomposermap.h
trunk/qgis/src/core/qgsmaprenderer.cpp
trunk/qgis/src/core/qgsmaprenderer.h
Log:
Use floating point numbers for size and dpi. This is necessary to avoid distortions on devices where painter units are not pixels (e.g. graphics scene in print composer)
Modified: trunk/qgis/python/core/qgscomposermap.sip
===================================================================
--- trunk/qgis/python/core/qgscomposermap.sip 2010-08-02 07:08:31 UTC (rev 13994)
+++ trunk/qgis/python/core/qgscomposermap.sip 2010-08-02 08:44:52 UTC (rev 13995)
@@ -44,11 +44,14 @@
BoundaryDirection
};
+ /**This function is deprecated*/
+ void draw( QPainter *painter, const QgsRectangle& extent, const QSize& size, int dpi );
+
/** \brief Draw to paint device
@param extent map extent
@param size size in scene coordinates
@param dpi scene dpi*/
- void draw( QPainter *painter, const QgsRectangle& extent, const QSize& size, int dpi );
+ void draw( QPainter *painter, const QgsRectangle& extent, const QSizeF& size, double dpi );
/** \brief Reimplementation of QCanvasItem::paint - draw on canvas */
void paint( QPainter* painter, const QStyleOptionGraphicsItem* itemStyle, QWidget* pWidget );
Modified: trunk/qgis/python/core/qgsmaprenderer.sip
===================================================================
--- trunk/qgis/python/core/qgsmaprenderer.sip 2010-08-02 07:08:31 UTC (rev 13994)
+++ trunk/qgis/python/core/qgsmaprenderer.sip 2010-08-02 08:44:52 UTC (rev 13995)
@@ -90,11 +90,14 @@
void enableOverviewMode(bool isOverview = true);
void setOutputSize(QSize size, int dpi);
+ void setOutputSize( QSizeF size, double dpi );
//!accessor for output dpi
- int outputDpi();
+ double outputDpi();
+
//!accessor for output size
QSize outputSize();
+ QSizeF outputSizeF();
//! transform extent in layer's CRS to extent in output CRS
QgsRectangle layerExtentToOutputExtent(QgsMapLayer* theLayer, QgsRectangle extent);
Modified: trunk/qgis/src/core/composer/qgscomposermap.cpp
===================================================================
--- trunk/qgis/src/core/composer/qgscomposermap.cpp 2010-08-02 07:08:31 UTC (rev 13994)
+++ trunk/qgis/src/core/composer/qgscomposermap.cpp 2010-08-02 08:44:52 UTC (rev 13995)
@@ -96,9 +96,14 @@
{
}
+void QgsComposerMap::draw( QPainter *painter, const QgsRectangle& extent, const QSize& size, int dpi )
+{
+ draw( painter, extent, QSizeF( size.width(), size.height() ), dpi );
+}
+
/* This function is called by paint() and cache() to render the map. It does not override any functions
from QGraphicsItem. */
-void QgsComposerMap::draw( QPainter *painter, const QgsRectangle& extent, const QSize& size, int dpi )
+void QgsComposerMap::draw( QPainter *painter, const QgsRectangle& extent, const QSizeF& size, double dpi )
{
if ( !painter )
{
@@ -206,7 +211,7 @@
QPainter p( &mCacheImage );
- draw( &p, requestExtent, QSize( w, h ), mCacheImage.logicalDpiX() );
+ draw( &p, requestExtent, QSizeF( w, h ), mCacheImage.logicalDpiX() );
p.end();
mCacheUpdated = true;
@@ -293,7 +298,7 @@
QgsRectangle requestRectangle;
requestedExtent( requestRectangle );
- QSize theSize( requestRectangle.width() * mapUnitsToMM(), requestRectangle.height() * mapUnitsToMM() );
+ QSizeF theSize( requestRectangle.width() * mapUnitsToMM(), requestRectangle.height() * mapUnitsToMM() );
QgsPoint rotationPoint = QgsPoint(( mExtent.xMaximum() + mExtent.xMinimum() ) / 2.0, ( mExtent.yMaximum() + mExtent.yMinimum() ) / 2.0 );
//shift such that rotation point is at 0/0 point in the coordinate system
Modified: trunk/qgis/src/core/composer/qgscomposermap.h
===================================================================
--- trunk/qgis/src/core/composer/qgscomposermap.h 2010-08-02 07:08:31 UTC (rev 13994)
+++ trunk/qgis/src/core/composer/qgscomposermap.h 2010-08-02 08:44:52 UTC (rev 13995)
@@ -74,12 +74,15 @@
BoundaryDirection
};
- /** \brief Draw to paint device
- @param extent map extent
- @param size size in scene coordinates
- @param dpi scene dpi*/
+ /**This function is deprecated*/
void draw( QPainter *painter, const QgsRectangle& extent, const QSize& size, int dpi );
+ /** \brief Draw to paint device
+ @param extent map extent
+ @param size size in scene coordinates
+ @param dpi scene dpi*/
+ void draw( QPainter *painter, const QgsRectangle& extent, const QSizeF& size, double dpi );
+
/** \brief Reimplementation of QCanvasItem::paint - draw on canvas */
void paint( QPainter* painter, const QStyleOptionGraphicsItem* itemStyle, QWidget* pWidget );
Modified: trunk/qgis/src/core/qgsmaprenderer.cpp
===================================================================
--- trunk/qgis/src/core/qgsmaprenderer.cpp 2010-08-02 07:08:31 UTC (rev 13994)
+++ trunk/qgis/src/core/qgsmaprenderer.cpp 2010-08-02 08:44:52 UTC (rev 13995)
@@ -125,23 +125,37 @@
void QgsMapRenderer::setOutputSize( QSize size, int dpi )
{
+ mSize = QSizeF( size.width(), size.height() );
+ mScaleCalculator->setDpi( dpi );
+ adjustExtentToSize();
+}
+
+void QgsMapRenderer::setOutputSize( QSizeF size, double dpi )
+{
mSize = size;
mScaleCalculator->setDpi( dpi );
adjustExtentToSize();
}
-int QgsMapRenderer::outputDpi()
+
+double QgsMapRenderer::outputDpi()
{
return mScaleCalculator->dpi();
}
+
QSize QgsMapRenderer::outputSize()
{
+ return mSize.toSize();
+}
+
+QSizeF QgsMapRenderer::outputSizeF()
+{
return mSize;
}
void QgsMapRenderer::adjustExtentToSize()
{
- int myHeight = mSize.height();
- int myWidth = mSize.width();
+ double myHeight = mSize.height();
+ double myWidth = mSize.width();
QgsMapToPixel newCoordXForm;
@@ -154,10 +168,8 @@
// calculate the translation and scaling parameters
// mapUnitsPerPixel = map units per pixel
- double mapUnitsPerPixelY = static_cast<double>( mExtent.height() )
- / static_cast<double>( myHeight );
- double mapUnitsPerPixelX = static_cast<double>( mExtent.width() )
- / static_cast<double>( myWidth );
+ double mapUnitsPerPixelY = mExtent.height() / myHeight;
+ double mapUnitsPerPixelX = mExtent.width() / myWidth;
mMapUnitsPerPixel = mapUnitsPerPixelY > mapUnitsPerPixelX ? mapUnitsPerPixelY : mapUnitsPerPixelX;
// calculate the actual extent of the mapCanvas
Modified: trunk/qgis/src/core/qgsmaprenderer.h
===================================================================
--- trunk/qgis/src/core/qgsmaprenderer.h 2010-08-02 07:08:31 UTC (rev 13994)
+++ trunk/qgis/src/core/qgsmaprenderer.h 2010-08-02 08:44:52 UTC (rev 13995)
@@ -121,11 +121,13 @@
void enableOverviewMode( bool isOverview = true ) { mOverview = isOverview; }
void setOutputSize( QSize size, int dpi );
+ void setOutputSize( QSizeF size, double dpi );
//!accessor for output dpi
- int outputDpi();
+ double outputDpi();
//!accessor for output size
QSize outputSize();
+ QSizeF outputSizeF();
//! transform extent in layer's CRS to extent in output CRS
QgsRectangle layerExtentToOutputExtent( QgsMapLayer* theLayer, QgsRectangle extent );
@@ -249,7 +251,7 @@
//! indicates whether it's map image for overview
bool mOverview;
- QSize mSize;
+ QSizeF mSize;
//! detemines whether on the fly projection support is enabled
bool mProjectionsEnabled;
More information about the QGIS-commit
mailing list