[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