Index: src/core/symbology-ng/qgsmarkersymbollayerv2.cpp =================================================================== --- src/core/symbology-ng/qgsmarkersymbollayerv2.cpp (revision 14875) +++ src/core/symbology-ng/qgsmarkersymbollayerv2.cpp (working copy) @@ -642,6 +642,7 @@ mColor = color; mAngle = angle; mSize = pointSize; + mOffset = QPointF( 0, 0 ); } QgsSymbolLayerV2* QgsFontMarkerSymbolLayerV2::create( const QgsStringMap& props ) @@ -663,7 +664,10 @@ if ( props.contains( "angle" ) ) angle = props["angle"].toDouble(); - return new QgsFontMarkerSymbolLayerV2( fontFamily, chr, pointSize, color, angle ); + QgsFontMarkerSymbolLayerV2* m = new QgsFontMarkerSymbolLayerV2( fontFamily, chr, pointSize, color, angle ); + if (props.contains( "offset" ) ) + m->setOffset( QgsSymbolLayerV2Utils::decodePoint( props["offset"] )); + return m; } QString QgsFontMarkerSymbolLayerV2::layerType() const @@ -692,9 +696,11 @@ penColor.setAlphaF( context.alpha() ); p->setPen( penColor ); p->setFont( mFont ); + p->save(); - p->translate( point ); + QPointF outputOffset = QPointF( context.outputLineWidth( mOffset.x() ), context.outputLineWidth( mOffset.y() ) ); + p->translate( point + outputOffset ); if ( context.renderHints() & QgsSymbolV2::DataDefinedSizeScale ) { @@ -717,10 +723,13 @@ props["size"] = QString::number( mSize ); props["color"] = QgsSymbolLayerV2Utils::encodeColor( mColor ); props["angle"] = QString::number( mAngle ); + props["offset"] = QgsSymbolLayerV2Utils::encodePoint( mOffset ); return props; } QgsSymbolLayerV2* QgsFontMarkerSymbolLayerV2::clone() const { - return new QgsFontMarkerSymbolLayerV2( mFontFamily, mChr, mSize, mColor, mAngle ); + QgsFontMarkerSymbolLayerV2* m = new QgsFontMarkerSymbolLayerV2( mFontFamily, mChr, mSize, mColor, mAngle ); + m->setOffset( mOffset ); + return m; } Index: src/gui/symbology-ng/qgssymbollayerv2widget.cpp =================================================================== --- src/gui/symbology-ng/qgssymbollayerv2widget.cpp (revision 14875) +++ src/gui/symbology-ng/qgssymbollayerv2widget.cpp (working copy) @@ -769,9 +769,12 @@ connect( spinSize, SIGNAL( valueChanged( double ) ), this, SLOT( setSize( double ) ) ); connect( btnColor, SIGNAL( clicked() ), this, SLOT( setColor() ) ); connect( spinAngle, SIGNAL( valueChanged( double ) ), this, SLOT( setAngle( double ) ) ); + connect( spinOffsetX, SIGNAL( valueChanged( double ) ), this, SLOT ( setOffset () )); + connect( spinOffsetY, SIGNAL( valueChanged( double ) ), this, SLOT ( setOffset () )); connect( widgetChar, SIGNAL( characterSelected( const QChar & ) ), this, SLOT( setCharacter( const QChar & ) ) ); } + void QgsFontMarkerSymbolLayerV2Widget::setSymbolLayer( QgsSymbolLayerV2* layer ) { if ( layer->layerType() != "FontMarker" ) @@ -785,6 +788,15 @@ spinSize->setValue( mLayer->size() ); btnColor->setColor( mLayer->color() ); spinAngle->setValue( mLayer->angle() ); + + //block + spinOffsetX->blockSignals( true ); + spinOffsetX->setValue( mLayer->offset().x() ); + spinOffsetX->blockSignals( false ); + spinOffsetY->blockSignals( true ); + spinOffsetY->setValue( mLayer->offset().y() ); + spinOffsetY->blockSignals( false ); + } QgsSymbolLayerV2* QgsFontMarkerSymbolLayerV2Widget::symbolLayer() @@ -828,7 +840,13 @@ emit changed(); } +void QgsFontMarkerSymbolLayerV2Widget::setOffset() +{ + mLayer->setOffset( QPointF( spinOffsetX->value(), spinOffsetY->value() ) ); + emit changed(); +} + /////////////// Index: src/gui/symbology-ng/qgssymbollayerv2widget.h =================================================================== --- src/gui/symbology-ng/qgssymbollayerv2widget.h (revision 14875) +++ src/gui/symbology-ng/qgssymbollayerv2widget.h (working copy) @@ -276,6 +276,7 @@ void setSize( double size ); void setAngle( double angle ); void setCharacter( const QChar& chr ); + void setOffset(); protected: QgsFontMarkerSymbolLayerV2* mLayer; Index: src/ui/symbollayer/widget_fontmarker.ui =================================================================== --- src/ui/symbollayer/widget_fontmarker.ui (revision 14875) +++ src/ui/symbollayer/widget_fontmarker.ui (working copy) @@ -16,6 +16,18 @@ + + QLayout::SetDefaultConstraint + + + 0 + + + 0 + + + 6 + @@ -74,6 +86,37 @@ + + + + Offset X,Y + + + + + + + + + -100000.000000000000000 + + + 100000.000000000000000 + + + + + + + -100000.000000000000000 + + + 100000.000000000000000 + + + + +