[QGIS Commit] r9557 - in trunk/qgis: python/core src/core

svn_qgis at osgeo.org svn_qgis at osgeo.org
Fri Oct 31 08:09:27 EDT 2008


Author: mhugent
Date: 2008-10-31 08:09:27 -0400 (Fri, 31 Oct 2008)
New Revision: 9557

Modified:
   trunk/qgis/python/core/qgslabel.sip
   trunk/qgis/python/core/qgsvectorlayer.sip
   trunk/qgis/src/core/qgslabel.cpp
   trunk/qgis/src/core/qgslabel.h
   trunk/qgis/src/core/qgsvectorlayer.cpp
   trunk/qgis/src/core/qgsvectorlayer.h
Log:
First try to fix font scale problem for map labels

Modified: trunk/qgis/python/core/qgslabel.sip
===================================================================
--- trunk/qgis/python/core/qgslabel.sip	2008-10-31 09:10:07 UTC (rev 9556)
+++ trunk/qgis/python/core/qgslabel.sip	2008-10-31 12:09:27 UTC (rev 9557)
@@ -47,7 +47,7 @@
     void renderLabel ( QPainter* painter, QgsRect& viewExtent, 
                        QgsCoordinateTransform* coordinateTransform,
                        QgsMapToPixel *transform,
-                       QgsFeature &feature, bool selected, QgsLabelAttributes *classAttributes=0, double sizeScale = 1);
+                       QgsFeature &feature, bool selected, QgsLabelAttributes *classAttributes=0, double sizeScale = 1, double rasterScaleFactor = 1);
 
     /** Reads the renderer configuration from an XML file
      @param rnode the Dom node to read 

Modified: trunk/qgis/python/core/qgsvectorlayer.sip
===================================================================
--- trunk/qgis/python/core/qgsvectorlayer.sip	2008-10-31 09:10:07 UTC (rev 9556)
+++ trunk/qgis/python/core/qgsvectorlayer.sip	2008-10-31 12:09:27 UTC (rev 9557)
@@ -298,11 +298,6 @@
   /** Draws the layer labels using coordinate transformation */
   void drawLabels(QgsRenderContext& rendererContext);
 
-  /** \brief Draws the layer labels using coordinate transformation
-   *  \param scale size scale, applied to all values in pixels
-   */
-  void drawLabels(QPainter * p, const QgsRect& viewExtent, const QgsMapToPixel* cXf, const QgsCoordinateTransform* ct, double scale);
-
   /** returns list of attributes */
   QList<int> pendingAllAttributesList();
 

Modified: trunk/qgis/src/core/qgslabel.cpp
===================================================================
--- trunk/qgis/src/core/qgslabel.cpp	2008-10-31 09:10:07 UTC (rev 9556)
+++ trunk/qgis/src/core/qgslabel.cpp	2008-10-31 12:09:27 UTC (rev 9557)
@@ -86,7 +86,7 @@
                             const QgsCoordinateTransform* coordinateTransform,
                             const QgsMapToPixel *transform,
                             QgsFeature &feature, bool selected, QgsLabelAttributes *classAttributes,
-                            double sizeScale )
+                            double sizeScale, double rasterScaleFactor )
 {
 
   QPen pen;
@@ -155,6 +155,11 @@
     double sizeMM = size * 0.3527;
     size = sizeMM * sizeScale;
   }
+  
+  //Request font larger (multiplied by rasterScaleFactor) as a workaround for the Qt font bug
+  //and scale the painter down by rasterScaleFactor when drawing the label
+  size *= rasterScaleFactor;
+
   if ( size > 0.0 )
   {
     font.setPixelSize( size );
@@ -349,7 +354,7 @@
   {
     renderLabel( painter, overridePoint, coordinateTransform,
                  transform, text, font, pen, dx, dy,
-                 xoffset, yoffset, ang, width, height, alignment, sizeScale );
+                 xoffset, yoffset, ang, width, height, alignment, sizeScale, rasterScaleFactor );
   }
   else
   {
@@ -359,7 +364,7 @@
     {
       renderLabel( painter, points[i], coordinateTransform,
                    transform, text, font, pen, dx, dy,
-                   xoffset, yoffset, ang, width, height, alignment, sizeScale );
+                   xoffset, yoffset, ang, width, height, alignment, sizeScale, rasterScaleFactor );
     }
   }
 }
@@ -371,7 +376,7 @@
                             int dx, int dy,
                             double xoffset, double yoffset,
                             double ang,
-                            int width, int height, int alignment, double sizeScale )
+                            int width, int height, int alignment, double sizeScale, double rasterScaleFactor )
 {
   // Convert point to projected units
   if ( coordinateTransform )
@@ -397,10 +402,13 @@
 
   x = x + xoffset * cos( rad ) - yoffset * sin( rad );
   y = y - xoffset * sin( rad ) - yoffset * cos( rad );
+  
 
   painter->save();
   painter->setFont( font );
   painter->translate( x, y );
+  //correct oversampled font size back by scaling painter down
+  painter->scale(1.0 / rasterScaleFactor, 1.0 / rasterScaleFactor);
   painter->rotate( -ang );
 
   //
@@ -408,7 +416,7 @@
   //
   if ( mLabelAttributes->bufferSizeIsSet() && mLabelAttributes->bufferEnabled() )
   {
-    double myBufferSize = mLabelAttributes->bufferSize() * 0.3527 * sizeScale;
+    double myBufferSize = mLabelAttributes->bufferSize() * 0.3527 * sizeScale * rasterScaleFactor;
     QPen bufferPen;
     if ( mLabelAttributes->bufferColorIsSet() )
     {
@@ -427,7 +435,7 @@
     }
     else //draw more dense in case of logical devices
     {
-      bufferStepSize = 0.1;
+      bufferStepSize = 1 / rasterScaleFactor;
     }
 
     for ( double i = dx - myBufferSize; i <= dx + myBufferSize; i += bufferStepSize )

Modified: trunk/qgis/src/core/qgslabel.h
===================================================================
--- trunk/qgis/src/core/qgslabel.h	2008-10-31 09:10:07 UTC (rev 9556)
+++ trunk/qgis/src/core/qgslabel.h	2008-10-31 12:09:27 UTC (rev 9557)
@@ -88,7 +88,7 @@
     void renderLabel( QPainter* painter, const QgsRect& viewExtent,
                       const QgsCoordinateTransform* coordinateTransform,
                       const QgsMapToPixel *transform,
-                      QgsFeature &feature, bool selected, QgsLabelAttributes *classAttributes = 0, double sizeScale = 1. );
+                      QgsFeature &feature, bool selected, QgsLabelAttributes *classAttributes = 0, double sizeScale = 1., double rasterScaleFactor = 1.0);
 
     /** Reads the renderer configuration from an XML file
      @param rnode the Dom node to read
@@ -134,7 +134,7 @@
                       int dx, int dy,
                       double xoffset, double yoffset,
                       double ang,
-                      int width, int height, int alignment, double sizeScale = 1.0 );
+                      int width, int height, int alignment, double sizeScale = 1.0, double rasterScaleFactor = 1.0);
 
     /** Get label point for simple feature in map units */
     void labelPoint( std::vector<QgsPoint>&, QgsFeature &feature );

Modified: trunk/qgis/src/core/qgsvectorlayer.cpp
===================================================================
--- trunk/qgis/src/core/qgsvectorlayer.cpp	2008-10-31 09:10:07 UTC (rev 9556)
+++ trunk/qgis/src/core/qgsvectorlayer.cpp	2008-10-31 12:09:27 UTC (rev 9557)
@@ -279,20 +279,10 @@
   }
 }
 
-void QgsVectorLayer::drawLabels( QgsRenderContext& rendererContext )
-{
-  QPainter* thePainter = rendererContext.painter();
-  if ( !thePainter )
-  {
-    return;
-  }
-  drawLabels( thePainter, rendererContext.extent(), &( rendererContext.mapToPixel() ), rendererContext.coordinateTransform(), rendererContext.scaleFactor() );
-}
-
 // NOTE this is a temporary method added by Tim to prevent label clipping
 // which was occurring when labeller was called in the main draw loop
 // This method will probably be removed again in the near future!
-void QgsVectorLayer::drawLabels( QPainter * p, const QgsRect& viewExtent, const QgsMapToPixel* theMapToPixelTransform, const QgsCoordinateTransform* ct, double scale )
+void QgsVectorLayer::drawLabels( QgsRenderContext& rendererContext )
 {
   QgsDebugMsg( "Starting draw of labels" );
 
@@ -311,7 +301,7 @@
     {
       // select the records in the extent. The provider sets a spatial filter
       // and sets up the selection set for retrieval
-      select( attributes, viewExtent );
+      select( attributes, rendererContext.extent() );
 
       QgsFeature fet;
       while ( nextFeature( fet ) )
@@ -319,7 +309,7 @@
         if ( mRenderer->willRenderFeature( &fet ) )
         {
           bool sel = mSelectedFeatureIds.contains( fet.id() );
-          mLabel->renderLabel( p, viewExtent, ct, theMapToPixelTransform, fet, sel, 0, scale );
+          mLabel->renderLabel( rendererContext.painter(), rendererContext.extent(), rendererContext.coordinateTransform(), &(rendererContext.mapToPixel()), fet, sel, 0, rendererContext.scaleFactor(), rendererContext.rasterScaleFactor());
         }
         featureCount++;
       }

Modified: trunk/qgis/src/core/qgsvectorlayer.h
===================================================================
--- trunk/qgis/src/core/qgsvectorlayer.h	2008-10-31 09:10:07 UTC (rev 9556)
+++ trunk/qgis/src/core/qgsvectorlayer.h	2008-10-31 12:09:27 UTC (rev 9557)
@@ -357,14 +357,6 @@
     /** Draws the layer labels using coordinate transformation */
     void drawLabels( QgsRenderContext& rendererContext );
 
-    /** \brief Draws the layer labels using coordinate transformation
-     *  \param scale size scale, applied to all values in pixels
-     */
-    void drawLabels( QPainter * p, const QgsRect& viewExtent,
-                     const QgsMapToPixel* cXf,
-                     const QgsCoordinateTransform* ct,
-                     double scale );
-
     /** returns field list in the to-be-committed state */
     const QgsFieldMap &pendingFields();
 



More information about the QGIS-commit mailing list