Skip to content

Commit 3d04984

Browse files
author
wonder
committed
Fixed drawing of buffers for curved labels, better(?) drawing of buffer (painter path instead of size^2 calls to drawText)
git-svn-id: http://svn.osgeo.org/qgis/branches/symbology-ng-branch@11179 c8812cc2-4d05-0410-92ff-de0c093fc19c
1 parent 6b93874 commit 3d04984

File tree

3 files changed

+38
-18
lines changed

3 files changed

+38
-18
lines changed

src/plugins/labeling/labelpreview.cpp

+3-2
Original file line numberDiff line numberDiff line change
@@ -26,12 +26,13 @@ void LabelPreview::paintEvent(QPaintEvent* e)
2626
{
2727
QPainter p(this);
2828

29+
p.setRenderHint(QPainter::Antialiasing);
2930
p.setFont(font());
30-
p.setPen(mTextColor);
3131
p.translate(10, 20); // uhm...
3232

3333
if (mBufferSize != 0)
34-
PalLabeling::drawLabelBuffer(&p, text(), mBufferSize, mBufferColor);
34+
PalLabeling::drawLabelBuffer(&p, text(), font(), mBufferSize, mBufferColor);
3535

36+
p.setPen(mTextColor);
3637
p.drawText(0,0, text());
3738
}

src/plugins/labeling/pallabeling.cpp

+33-14
Original file line numberDiff line numberDiff line change
@@ -389,6 +389,11 @@ void PalLabeling::doLabeling(QPainter* painter, QgsRectangle extent)
389389
std::list<LabelPosition*>::iterator it = labels->begin();
390390
for ( ; it != labels->end(); ++it)
391391
{
392+
const LayerSettings& lyr = layer((*it)->getLayerName());
393+
394+
if (lyr.bufferSize != 0)
395+
drawLabel( *it, painter, xform, true);
396+
392397
drawLabel( *it, painter, xform );
393398
}
394399

@@ -455,43 +460,57 @@ void PalLabeling::drawLabelCandidateRect( pal::LabelPosition* lp, QPainter* pain
455460
drawLabelCandidateRect(lp->getNextPart(), painter, xform);
456461
}
457462

463+
#include "qgslogger.h"
458464

459-
void PalLabeling::drawLabel( pal::LabelPosition* label, QPainter* painter, const QgsMapToPixel* xform)
465+
void PalLabeling::drawLabel( pal::LabelPosition* label, QPainter* painter, const QgsMapToPixel* xform, bool drawBuffer)
460466
{
461467
QgsPoint outPt = xform->transform(label->getX(), label->getY());
462468

463469
// TODO: optimize access :)
464470
const LayerSettings& lyr = layer(label->getLayerName());
465471

466472
QString text = ((MyLabel*)label->getFeature()->getUserGeometry())->text();
473+
QString txt = ( label->getPartId() == -1 ? text : QString( text[label->getPartId()] ) );
474+
475+
QgsDebugMsg("drawLabel " + QString::number(drawBuffer) + " " + txt);
467476

468477
// shift by one as we have 2px border
469478
painter->save();
470479
painter->translate( QPointF(outPt.x()+1, outPt.y()-1-lyr.fontBaseline) );
471480
painter->rotate(-label->getAlpha() * 180 / M_PI );
472-
painter->setFont( lyr.textFont );
473481

474-
if (lyr.bufferSize != 0)
475-
drawLabelBuffer(painter, text, lyr.bufferSize, lyr.bufferColor);
476-
477-
painter->setPen( lyr.textColor );
478-
if (label->getPartId() == -1)
479-
painter->drawText(0,0, text);
482+
if (drawBuffer)
483+
{
484+
// we're drawing buffer
485+
drawLabelBuffer(painter, txt, lyr.textFont, lyr.bufferSize, lyr.bufferColor);
486+
}
480487
else
481-
painter->drawText(0,0, QString( text[label->getPartId()] ) );
488+
{
489+
// we're drawing real label
490+
painter->setFont( lyr.textFont );
491+
painter->setPen( lyr.textColor );
492+
painter->drawText(0,0, txt);
493+
}
482494
painter->restore();
483495

484496
if (label->getNextPart())
485-
drawLabel( label->getNextPart(), painter, xform );
497+
drawLabel( label->getNextPart(), painter, xform, drawBuffer );
486498
}
487499

488500

489-
void PalLabeling::drawLabelBuffer(QPainter* p, QString text, int size, QColor color)
501+
void PalLabeling::drawLabelBuffer(QPainter* p, QString text, const QFont& font, int size, QColor color)
490502
{
491-
p->save();
492-
p->setPen(color);
503+
/*
504+
p->setFont( font );
505+
p->setPen( color );
493506
for (int x = -size; x <= size; x++)
494507
for (int y = -size; y <= size; y++)
495508
p->drawText(x,y, text);
496-
p->restore();
509+
*/
510+
511+
QPainterPath path;
512+
path.addText(0,0, font, text);
513+
p->setPen( QPen(color, size) );
514+
p->setBrush( color );
515+
p->drawPath(path);
497516
}

src/plugins/labeling/pallabeling.h

+2-2
Original file line numberDiff line numberDiff line change
@@ -123,8 +123,8 @@ class PalLabeling
123123

124124

125125
void drawLabelCandidateRect( pal::LabelPosition* lp, QPainter* painter, const QgsMapToPixel* xform );
126-
void drawLabel( pal::LabelPosition* label, QPainter* painter, const QgsMapToPixel* xform);
127-
static void drawLabelBuffer(QPainter* p, QString text, int size, QColor color);
126+
void drawLabel( pal::LabelPosition* label, QPainter* painter, const QgsMapToPixel* xform, bool drawBuffer = false);
127+
static void drawLabelBuffer(QPainter* p, QString text, const QFont& font, int size, QColor color);
128128

129129
protected:
130130

0 commit comments

Comments
 (0)