[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