Index: src/plugins/labeling/labelingguibase.ui
===================================================================
--- src/plugins/labeling/labelingguibase.ui (Revision 13534)
+++ src/plugins/labeling/labelingguibase.ui (Arbeitskopie)
@@ -206,7 +206,7 @@
-
- pixels
+ mm
@@ -312,7 +312,7 @@
-
- pixels
+ mm
@@ -472,9 +472,9 @@
-
-
-
- 1
+
+
+ mm
@@ -753,7 +753,6 @@
btnChangeFont
btnTextColor
chkBuffer
- spinBufferSize
btnBufferColor
sliderPriority
chkScaleBasedVisibility
Index: src/plugins/labeling/pallabeling.cpp
===================================================================
--- src/plugins/labeling/pallabeling.cpp (Revision 13534)
+++ src/plugins/labeling/pallabeling.cpp (Arbeitskopie)
@@ -105,6 +105,8 @@
bufferColor = Qt::white;
labelPerPart = false;
mergeLines = false;
+ vectorScaleFactor = 1.0;
+ rasterCompressFactor = 1.0;
}
LayerSettings::LayerSettings( const LayerSettings& s )
@@ -125,7 +127,8 @@
bufferColor = s.bufferColor;
labelPerPart = s.labelPerPart;
mergeLines = s.mergeLines;
-
+ vectorScaleFactor = s.vectorScaleFactor;
+ rasterCompressFactor = s.rasterCompressFactor;
fontMetrics = NULL;
ct = NULL;
}
@@ -212,8 +215,10 @@
//QFontMetrics fontMetrics(textFont);
QRect labelRect = /*QRect(0,0,20,20);*/ fontMetrics->boundingRect( text );
- // 2px border...
- QgsPoint ptSize = xform->toMapCoordinates( labelRect.width() + 2, labelRect.height() + 2 );
+ // 1mm border...
+ double border = vectorScaleFactor;
+ double buffer = bufferSize * vectorScaleFactor;
+ QgsPoint ptSize = xform->toMapCoordinates( labelRect.width() + 2 * ( border + buffer ) , labelRect.height() + 2 * ( border + buffer ) );
labelX = fabs( ptSize.x() - ptZero.x() );
labelY = fabs( ptSize.y() - ptZero.y() );
}
@@ -252,7 +257,7 @@
// TODO: allow layer-wide feature dist in PAL...?
if ( dist != 0 )
- feat->setDistLabel( fabs( ptOne.x() - ptZero.x() )* dist );
+ feat->setDistLabel( fabs( ptOne.x() - ptZero.x() )* dist * vectorScaleFactor );
}
@@ -358,6 +363,10 @@
double size = 0.3527 * lyr.textFont.pointSizeF() * ctx.scaleFactor(); //* ctx.rasterScaleFactor();
lyr.textFont.setPixelSize(( int )size );
+ //raster and vector scale factors
+ lyr.vectorScaleFactor = ctx.scaleFactor();
+ lyr.rasterCompressFactor = ctx.rasterScaleFactor();
+
// save the pal layer to our layer context (with some additional info)
lyr.palLayer = l;
lyr.fieldIndex = fldIndex;
@@ -579,12 +588,17 @@
painter->save();
painter->translate( QPointF( outPt.x(), outPt.y() ) );
painter->rotate( -label->getAlpha() * 180 / M_PI );
- painter->translate( QPointF( 1, -1 - lyr.fontBaseline ) );
+ painter->translate( QPointF( lyr.vectorScaleFactor *( 1 + lyr.bufferSize ), -lyr.vectorScaleFactor *( 1 + lyr.bufferSize ) - lyr.fontBaseline ) );
+ //request larger font and scale down painter (to avoid Qt font scale bug)
+ QFont labelFont = lyr.textFont;
+ labelFont.setPixelSize( labelFont.pixelSize() * lyr.rasterCompressFactor );
+ painter->scale( 1.0 / lyr.rasterCompressFactor, 1.0 / lyr.rasterCompressFactor );
+
if ( drawBuffer )
{
// we're drawing buffer
- drawLabelBuffer( painter, txt, lyr.textFont, lyr.bufferSize, lyr.bufferColor );
+ drawLabelBuffer( painter, txt, labelFont, lyr.bufferSize * lyr.vectorScaleFactor * lyr.rasterCompressFactor, lyr.bufferColor );
}
else
{
@@ -594,7 +608,7 @@
painter->drawText((0,0, txt);*/
QPainterPath path;
- path.addText( 0, 0, lyr.textFont, txt );
+ path.addText( 0, 0, labelFont, txt );
painter->setPen( Qt::NoPen );
painter->setBrush( lyr.textColor );
painter->drawPath( path );
@@ -606,7 +620,7 @@
}
-void PalLabeling::drawLabelBuffer( QPainter* p, QString text, const QFont& font, int size, QColor color )
+void PalLabeling::drawLabelBuffer( QPainter* p, QString text, const QFont& font, double size, QColor color )
{
/*
p->setFont( font );
@@ -618,7 +632,9 @@
QPainterPath path;
path.addText( 0, 0, font, text );
- p->setPen( QPen( color, size ) );
+ QPen pen( color );
+ pen.setWidthF( size );
+ p->setPen( pen );
p->setBrush( color );
p->drawPath( path );
}
Index: src/plugins/labeling/pallabeling.h
===================================================================
--- src/plugins/labeling/pallabeling.h (Revision 13534)
+++ src/plugins/labeling/pallabeling.h (Arbeitskopie)
@@ -60,9 +60,11 @@
bool enabled;
int priority; // 0 = low, 10 = high
bool obstacle; // whether it's an obstacle
- double dist; // distance from the feature (in pixels)
+ double dist; // distance from the feature (in mm)
+ double vectorScaleFactor; //scale factor painter units->pixels
+ double rasterCompressFactor; //pixel resolution scale factor
int scaleMin, scaleMax; // disabled if both are zero
- int bufferSize;
+ double bufferSize; //buffer size (in mm)
QColor bufferColor;
bool labelPerPart; // whether to label every feature's part or only the biggest one
bool mergeLines;
@@ -139,7 +141,7 @@
void drawLabelCandidateRect( pal::LabelPosition* lp, QPainter* painter, const QgsMapToPixel* xform );
void drawLabel( pal::LabelPosition* label, QPainter* painter, const QgsMapToPixel* xform, bool drawBuffer = false );
- static void drawLabelBuffer( QPainter* p, QString text, const QFont& font, int size, QColor color );
+ static void drawLabelBuffer( QPainter* p, QString text, const QFont& font, double size, QColor color );
protected:
Index: src/plugins/labeling/labelpreview.cpp
===================================================================
--- src/plugins/labeling/labelpreview.cpp (Revision 13534)
+++ src/plugins/labeling/labelpreview.cpp (Arbeitskopie)
@@ -15,9 +15,9 @@
update();
}
-void LabelPreview::setBuffer( int size, QColor color )
+void LabelPreview::setBuffer( double size, QColor color )
{
- mBufferSize = size;
+ mBufferSize = size * 88 / 25.4; //assume standard dpi for preview
mBufferColor = color;
update();
}
Index: src/plugins/labeling/labelinggui.cpp
===================================================================
--- src/plugins/labeling/labelinggui.cpp (Revision 13534)
+++ src/plugins/labeling/labelinggui.cpp (Arbeitskopie)
@@ -41,7 +41,7 @@
connect( btnChangeFont, SIGNAL( clicked() ), this, SLOT( changeTextFont() ) );
connect( chkBuffer, SIGNAL( toggled( bool ) ), this, SLOT( updatePreview() ) );
connect( btnBufferColor, SIGNAL( clicked() ), this, SLOT( changeBufferColor() ) );
- connect( spinBufferSize, SIGNAL( valueChanged( int ) ), this, SLOT( updatePreview() ) );
+ connect( spinBufferSize, SIGNAL( valueChanged( double ) ), this, SLOT( updatePreview() ) );
connect( btnEngineSettings, SIGNAL( clicked() ), this, SLOT( showEngineConfigDialog() ) );
// set placement methods page based on geometry type
Index: src/plugins/labeling/labelpreview.h
===================================================================
--- src/plugins/labeling/labelpreview.h (Revision 13534)
+++ src/plugins/labeling/labelpreview.h (Arbeitskopie)
@@ -10,7 +10,7 @@
void setTextColor( QColor color );
- void setBuffer( int size, QColor color );
+ void setBuffer( double size, QColor color );
void paintEvent( QPaintEvent* e );