@@ -389,6 +389,11 @@ void PalLabeling::doLabeling(QPainter* painter, QgsRectangle extent)
389
389
std::list<LabelPosition*>::iterator it = labels->begin ();
390
390
for ( ; it != labels->end (); ++it)
391
391
{
392
+ const LayerSettings& lyr = layer ((*it)->getLayerName ());
393
+
394
+ if (lyr.bufferSize != 0 )
395
+ drawLabel ( *it, painter, xform, true );
396
+
392
397
drawLabel ( *it, painter, xform );
393
398
}
394
399
@@ -455,43 +460,57 @@ void PalLabeling::drawLabelCandidateRect( pal::LabelPosition* lp, QPainter* pain
455
460
drawLabelCandidateRect (lp->getNextPart (), painter, xform);
456
461
}
457
462
463
+ #include " qgslogger.h"
458
464
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 )
460
466
{
461
467
QgsPoint outPt = xform->transform (label->getX (), label->getY ());
462
468
463
469
// TODO: optimize access :)
464
470
const LayerSettings& lyr = layer (label->getLayerName ());
465
471
466
472
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);
467
476
468
477
// shift by one as we have 2px border
469
478
painter->save ();
470
479
painter->translate ( QPointF (outPt.x ()+1 , outPt.y ()-1 -lyr.fontBaseline ) );
471
480
painter->rotate (-label->getAlpha () * 180 / M_PI );
472
- painter->setFont ( lyr.textFont );
473
481
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
+ }
480
487
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
+ }
482
494
painter->restore ();
483
495
484
496
if (label->getNextPart ())
485
- drawLabel ( label->getNextPart (), painter, xform );
497
+ drawLabel ( label->getNextPart (), painter, xform, drawBuffer );
486
498
}
487
499
488
500
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)
490
502
{
491
- p->save ();
492
- p->setPen (color);
503
+ /*
504
+ p->setFont( font );
505
+ p->setPen( color );
493
506
for (int x = -size; x <= size; x++)
494
507
for (int y = -size; y <= size; y++)
495
508
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);
497
516
}
0 commit comments