Skip to content

Commit fed9097

Browse files
author
wonder
committedDec 12, 2010
[FEATURE] Font marker: possibility to set X,Y offset. Contributed by Nathan Woodrow - thanks!
git-svn-id: http://svn.osgeo.org/qgis/trunk@14894 c8812cc2-4d05-0410-92ff-de0c093fc19c
1 parent 63856ce commit fed9097

File tree

4 files changed

+74
-3
lines changed

4 files changed

+74
-3
lines changed
 

‎src/core/symbology-ng/qgsmarkersymbollayerv2.cpp

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -642,6 +642,7 @@ QgsFontMarkerSymbolLayerV2::QgsFontMarkerSymbolLayerV2( QString fontFamily, QCha
642642
mColor = color;
643643
mAngle = angle;
644644
mSize = pointSize;
645+
mOffset = QPointF( 0, 0 );
645646
}
646647

647648
QgsSymbolLayerV2* QgsFontMarkerSymbolLayerV2::create( const QgsStringMap& props )
@@ -663,7 +664,10 @@ QgsSymbolLayerV2* QgsFontMarkerSymbolLayerV2::create( const QgsStringMap& props
663664
if ( props.contains( "angle" ) )
664665
angle = props["angle"].toDouble();
665666

666-
return new QgsFontMarkerSymbolLayerV2( fontFamily, chr, pointSize, color, angle );
667+
QgsFontMarkerSymbolLayerV2* m = new QgsFontMarkerSymbolLayerV2( fontFamily, chr, pointSize, color, angle );
668+
if ( props.contains( "offset" ) )
669+
m->setOffset( QgsSymbolLayerV2Utils::decodePoint( props["offset"] ) );
670+
return m;
667671
}
668672

669673
QString QgsFontMarkerSymbolLayerV2::layerType() const
@@ -693,8 +697,10 @@ void QgsFontMarkerSymbolLayerV2::renderPoint( const QPointF& point, QgsSymbolV2R
693697
p->setPen( penColor );
694698
p->setFont( mFont );
695699

700+
696701
p->save();
697-
p->translate( point );
702+
QPointF outputOffset = QPointF( context.outputLineWidth( mOffset.x() ), context.outputLineWidth( mOffset.y() ) );
703+
p->translate( point + outputOffset );
698704

699705
if ( context.renderHints() & QgsSymbolV2::DataDefinedSizeScale )
700706
{
@@ -717,10 +723,13 @@ QgsStringMap QgsFontMarkerSymbolLayerV2::properties() const
717723
props["size"] = QString::number( mSize );
718724
props["color"] = QgsSymbolLayerV2Utils::encodeColor( mColor );
719725
props["angle"] = QString::number( mAngle );
726+
props["offset"] = QgsSymbolLayerV2Utils::encodePoint( mOffset );
720727
return props;
721728
}
722729

723730
QgsSymbolLayerV2* QgsFontMarkerSymbolLayerV2::clone() const
724731
{
725-
return new QgsFontMarkerSymbolLayerV2( mFontFamily, mChr, mSize, mColor, mAngle );
732+
QgsFontMarkerSymbolLayerV2* m = new QgsFontMarkerSymbolLayerV2( mFontFamily, mChr, mSize, mColor, mAngle );
733+
m->setOffset( mOffset );
734+
return m;
726735
}

‎src/gui/symbology-ng/qgssymbollayerv2widget.cpp

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -769,9 +769,12 @@ QgsFontMarkerSymbolLayerV2Widget::QgsFontMarkerSymbolLayerV2Widget( QWidget* par
769769
connect( spinSize, SIGNAL( valueChanged( double ) ), this, SLOT( setSize( double ) ) );
770770
connect( btnColor, SIGNAL( clicked() ), this, SLOT( setColor() ) );
771771
connect( spinAngle, SIGNAL( valueChanged( double ) ), this, SLOT( setAngle( double ) ) );
772+
connect( spinOffsetX, SIGNAL( valueChanged( double ) ), this, SLOT( setOffset() ) );
773+
connect( spinOffsetY, SIGNAL( valueChanged( double ) ), this, SLOT( setOffset() ) );
772774
connect( widgetChar, SIGNAL( characterSelected( const QChar & ) ), this, SLOT( setCharacter( const QChar & ) ) );
773775
}
774776

777+
775778
void QgsFontMarkerSymbolLayerV2Widget::setSymbolLayer( QgsSymbolLayerV2* layer )
776779
{
777780
if ( layer->layerType() != "FontMarker" )
@@ -785,6 +788,15 @@ void QgsFontMarkerSymbolLayerV2Widget::setSymbolLayer( QgsSymbolLayerV2* layer )
785788
spinSize->setValue( mLayer->size() );
786789
btnColor->setColor( mLayer->color() );
787790
spinAngle->setValue( mLayer->angle() );
791+
792+
//block
793+
spinOffsetX->blockSignals( true );
794+
spinOffsetX->setValue( mLayer->offset().x() );
795+
spinOffsetX->blockSignals( false );
796+
spinOffsetY->blockSignals( true );
797+
spinOffsetY->setValue( mLayer->offset().y() );
798+
spinOffsetY->blockSignals( false );
799+
788800
}
789801

790802
QgsSymbolLayerV2* QgsFontMarkerSymbolLayerV2Widget::symbolLayer()
@@ -828,6 +840,12 @@ void QgsFontMarkerSymbolLayerV2Widget::setCharacter( const QChar& chr )
828840
emit changed();
829841
}
830842

843+
void QgsFontMarkerSymbolLayerV2Widget::setOffset()
844+
{
845+
mLayer->setOffset( QPointF( spinOffsetX->value(), spinOffsetY->value() ) );
846+
emit changed();
847+
}
848+
831849

832850
///////////////
833851

‎src/gui/symbology-ng/qgssymbollayerv2widget.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -276,6 +276,7 @@ class GUI_EXPORT QgsFontMarkerSymbolLayerV2Widget : public QgsSymbolLayerV2Widge
276276
void setSize( double size );
277277
void setAngle( double angle );
278278
void setCharacter( const QChar& chr );
279+
void setOffset();
279280

280281
protected:
281282
QgsFontMarkerSymbolLayerV2* mLayer;

‎src/ui/symbollayer/widget_fontmarker.ui

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,18 @@
1616
<layout class="QVBoxLayout" name="verticalLayout">
1717
<item>
1818
<layout class="QGridLayout" name="gridLayout">
19+
<property name="sizeConstraint">
20+
<enum>QLayout::SetDefaultConstraint</enum>
21+
</property>
22+
<property name="leftMargin">
23+
<number>0</number>
24+
</property>
25+
<property name="topMargin">
26+
<number>0</number>
27+
</property>
28+
<property name="horizontalSpacing">
29+
<number>6</number>
30+
</property>
1931
<item row="0" column="0">
2032
<widget class="QLabel" name="label">
2133
<property name="text">
@@ -74,6 +86,37 @@
7486
</property>
7587
</widget>
7688
</item>
89+
<item row="4" column="0">
90+
<widget class="QLabel" name="label_5">
91+
<property name="text">
92+
<string>Offset X,Y</string>
93+
</property>
94+
</widget>
95+
</item>
96+
<item row="4" column="1">
97+
<layout class="QHBoxLayout" name="horizontalLayout">
98+
<item>
99+
<widget class="QDoubleSpinBox" name="spinOffsetX">
100+
<property name="minimum">
101+
<double>-100000.000000000000000</double>
102+
</property>
103+
<property name="maximum">
104+
<double>100000.000000000000000</double>
105+
</property>
106+
</widget>
107+
</item>
108+
<item>
109+
<widget class="QDoubleSpinBox" name="spinOffsetY">
110+
<property name="minimum">
111+
<double>-100000.000000000000000</double>
112+
</property>
113+
<property name="maximum">
114+
<double>100000.000000000000000</double>
115+
</property>
116+
</widget>
117+
</item>
118+
</layout>
119+
</item>
77120
</layout>
78121
</item>
79122
<item>

0 commit comments

Comments
 (0)
Please sign in to comment.