Skip to content

Commit ebc7e58

Browse files
author
mhugent
committed
Some fixes for font scaling
git-svn-id: http://svn.osgeo.org/qgis/trunk/qgis@9185 c8812cc2-4d05-0410-92ff-de0c093fc19c
1 parent 8e602a6 commit ebc7e58

File tree

4 files changed

+40
-16
lines changed

4 files changed

+40
-16
lines changed

src/core/qgslabel.cpp

+36-14
Original file line numberDiff line numberDiff line change
@@ -150,12 +150,15 @@ void QgsLabel::renderLabel( QPainter * painter, const QgsRect& viewExtent,
150150
{
151151
size *= scale;
152152
}
153-
else
153+
else //point units
154154
{
155-
size *= sizeScale;
155+
double sizeMM = size * 0.3527;
156+
size = sizeMM * sizeScale;
156157
}
157158
if ( size > 0.0 )
158-
font.setPointSizeF( size );
159+
{
160+
font.setPixelSize(size);
161+
}
159162

160163
value = fieldValue( Color, feature );
161164
if ( value.isEmpty() )
@@ -237,6 +240,7 @@ void QgsLabel::renderLabel( QPainter * painter, const QgsRect& viewExtent,
237240
width = fm.width( text );
238241
height = fm.height();
239242
}
243+
240244
int dx = 0;
241245
int dy = 0;
242246

@@ -313,12 +317,17 @@ void QgsLabel::renderLabel( QPainter * painter, const QgsRect& viewExtent,
313317
yoffset = value.toDouble();
314318
}
315319

316-
// recalc offset to points
320+
// recalc offset to pixels
317321
if ( mLabelAttributes->offsetType() == QgsLabelAttributes::MapUnits )
318322
{
319323
xoffset *= scale;
320324
yoffset *= scale;
321325
}
326+
else
327+
{
328+
xoffset = xoffset * 0.3527 * sizeScale;
329+
yoffset = yoffset * 0.3527 * sizeScale;
330+
}
322331

323332
// Angle
324333
double ang;
@@ -340,7 +349,7 @@ void QgsLabel::renderLabel( QPainter * painter, const QgsRect& viewExtent,
340349
{
341350
renderLabel( painter, overridePoint, coordinateTransform,
342351
transform, text, font, pen, dx, dy,
343-
xoffset, yoffset, ang, width, height, alignment );
352+
xoffset, yoffset, ang, width, height, alignment, sizeScale );
344353
}
345354
else
346355
{
@@ -350,7 +359,7 @@ void QgsLabel::renderLabel( QPainter * painter, const QgsRect& viewExtent,
350359
{
351360
renderLabel( painter, points[i], coordinateTransform,
352361
transform, text, font, pen, dx, dy,
353-
xoffset, yoffset, ang, width, height, alignment );
362+
xoffset, yoffset, ang, width, height, alignment, sizeScale );
354363
}
355364
}
356365
}
@@ -362,7 +371,7 @@ void QgsLabel::renderLabel( QPainter* painter, QgsPoint point,
362371
int dx, int dy,
363372
double xoffset, double yoffset,
364373
double ang,
365-
int width, int height, int alignment )
374+
int width, int height, int alignment, double sizeScale )
366375
{
367376
// Convert point to projected units
368377
if ( coordinateTransform )
@@ -399,23 +408,36 @@ void QgsLabel::renderLabel( QPainter* painter, QgsPoint point,
399408
//
400409
if ( mLabelAttributes->bufferSizeIsSet() && mLabelAttributes->bufferEnabled() )
401410
{
402-
int myBufferSize = static_cast<int>( mLabelAttributes->bufferSize() );
411+
int myBufferSize = static_cast<int>( mLabelAttributes->bufferSize() * 0.3527 * sizeScale);
412+
QPen bufferPen;
403413
if ( mLabelAttributes->bufferColorIsSet() )
404414
{
405-
painter->setPen( mLabelAttributes->bufferColor() );
415+
bufferPen.setColor( mLabelAttributes->bufferColor());
406416
}
407417
else //default to a white buffer
408418
{
409-
painter->setPen( Qt::white );
419+
bufferPen.setColor( Qt::white );
410420
}
411-
for ( int i = dx - myBufferSize; i <= dx + myBufferSize; i++ )
421+
painter->setPen(bufferPen);
422+
423+
double bufferStepSize; //hack to distinguish pixel devices from logical devices
424+
if((sizeScale - 1) > 1.5)
425+
{
426+
bufferStepSize = 1;
427+
}
428+
else //draw more dense in case of logical devices
429+
{
430+
bufferStepSize = 0.25;
431+
}
432+
433+
for ( double i = dx - myBufferSize; i <= dx + myBufferSize; i+= 0.25)
412434
{
413-
for ( int j = dy - myBufferSize; j <= dy + myBufferSize; j++ )
435+
for ( double j = dy - myBufferSize; j <= dy + myBufferSize; j+= 0.25 )
414436
{
415437
if ( mLabelAttributes->multilineEnabled() )
416-
painter->drawText( i , j - height, width, height, alignment, text );
438+
painter->drawText( QRectF(i , j - height, width, height), alignment, text );
417439
else
418-
painter->drawText( i , j, text );
440+
painter->drawText( QPointF(i , j), text );
419441
}
420442
}
421443
}

src/core/qgslabel.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,7 @@ class CORE_EXPORT QgsLabel
134134
int dx, int dy,
135135
double xoffset, double yoffset,
136136
double ang,
137-
int width, int height, int alignment );
137+
int width, int height, int alignment, double sizeScale=1.0 );
138138

139139
/** Get label point for simple feature in map units */
140140
void labelPoint( std::vector<QgsPoint>&, QgsFeature &feature );

src/core/qgsvectorlayer.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -286,7 +286,7 @@ void QgsVectorLayer::drawLabels( QgsRenderContext& rendererContext )
286286
{
287287
return;
288288
}
289-
drawLabels( thePainter, rendererContext.extent(), &( rendererContext.mapToPixel() ), rendererContext.coordinateTransform(), 1.0 / rendererContext.rasterScaleFactor() );
289+
drawLabels( thePainter, rendererContext.extent(), &( rendererContext.mapToPixel() ), rendererContext.coordinateTransform(), rendererContext.scaleFactor());
290290
}
291291

292292
// NOTE this is a temporary method added by Tim to prevent label clipping

src/plugins/CMakeLists.txt

+2
Original file line numberDiff line numberDiff line change
@@ -22,3 +22,5 @@ SUBDIRS (quick_print)
2222

2323

2424
SUBDIRS (coordinate_capture dxf2shp_converter)
25+
26+
SUBDIRS (ogr_converter)

0 commit comments

Comments
 (0)