[QGIS Commit] r14894 - in trunk/qgis/src: core/symbology-ng gui/symbology-ng ui/symbollayer

svn_qgis at osgeo.org svn_qgis at osgeo.org
Sun Dec 12 10:20:40 EST 2010


Author: wonder
Date: 2010-12-12 07:20:40 -0800 (Sun, 12 Dec 2010)
New Revision: 14894

Modified:
   trunk/qgis/src/core/symbology-ng/qgsmarkersymbollayerv2.cpp
   trunk/qgis/src/gui/symbology-ng/qgssymbollayerv2widget.cpp
   trunk/qgis/src/gui/symbology-ng/qgssymbollayerv2widget.h
   trunk/qgis/src/ui/symbollayer/widget_fontmarker.ui
Log:
[FEATURE] Font marker: possibility to set X,Y offset. Contributed by Nathan Woodrow - thanks!


Modified: trunk/qgis/src/core/symbology-ng/qgsmarkersymbollayerv2.cpp
===================================================================
--- trunk/qgis/src/core/symbology-ng/qgsmarkersymbollayerv2.cpp	2010-12-12 07:49:34 UTC (rev 14893)
+++ trunk/qgis/src/core/symbology-ng/qgsmarkersymbollayerv2.cpp	2010-12-12 15:20:40 UTC (rev 14894)
@@ -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
@@ -693,8 +697,10 @@
   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;
 }

Modified: trunk/qgis/src/gui/symbology-ng/qgssymbollayerv2widget.cpp
===================================================================
--- trunk/qgis/src/gui/symbology-ng/qgssymbollayerv2widget.cpp	2010-12-12 07:49:34 UTC (rev 14893)
+++ trunk/qgis/src/gui/symbology-ng/qgssymbollayerv2widget.cpp	2010-12-12 15:20:40 UTC (rev 14894)
@@ -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();
+}
 
+
 ///////////////
 
 

Modified: trunk/qgis/src/gui/symbology-ng/qgssymbollayerv2widget.h
===================================================================
--- trunk/qgis/src/gui/symbology-ng/qgssymbollayerv2widget.h	2010-12-12 07:49:34 UTC (rev 14893)
+++ trunk/qgis/src/gui/symbology-ng/qgssymbollayerv2widget.h	2010-12-12 15:20:40 UTC (rev 14894)
@@ -276,6 +276,7 @@
     void setSize( double size );
     void setAngle( double angle );
     void setCharacter( const QChar& chr );
+    void setOffset();
 
   protected:
     QgsFontMarkerSymbolLayerV2* mLayer;

Modified: trunk/qgis/src/ui/symbollayer/widget_fontmarker.ui
===================================================================
--- trunk/qgis/src/ui/symbollayer/widget_fontmarker.ui	2010-12-12 07:49:34 UTC (rev 14893)
+++ trunk/qgis/src/ui/symbollayer/widget_fontmarker.ui	2010-12-12 15:20:40 UTC (rev 14894)
@@ -16,6 +16,18 @@
   <layout class="QVBoxLayout" name="verticalLayout">
    <item>
     <layout class="QGridLayout" name="gridLayout">
+     <property name="sizeConstraint">
+      <enum>QLayout::SetDefaultConstraint</enum>
+     </property>
+     <property name="leftMargin">
+      <number>0</number>
+     </property>
+     <property name="topMargin">
+      <number>0</number>
+     </property>
+     <property name="horizontalSpacing">
+      <number>6</number>
+     </property>
      <item row="0" column="0">
       <widget class="QLabel" name="label">
        <property name="text">
@@ -74,6 +86,37 @@
        </property>
       </widget>
      </item>
+     <item row="4" column="0">
+      <widget class="QLabel" name="label_5">
+       <property name="text">
+        <string>Offset X,Y</string>
+       </property>
+      </widget>
+     </item>
+     <item row="4" column="1">
+      <layout class="QHBoxLayout" name="horizontalLayout">
+       <item>
+        <widget class="QDoubleSpinBox" name="spinOffsetX">
+         <property name="minimum">
+          <double>-100000.000000000000000</double>
+         </property>
+         <property name="maximum">
+          <double>100000.000000000000000</double>
+         </property>
+        </widget>
+       </item>
+       <item>
+        <widget class="QDoubleSpinBox" name="spinOffsetY">
+         <property name="minimum">
+          <double>-100000.000000000000000</double>
+         </property>
+         <property name="maximum">
+          <double>100000.000000000000000</double>
+         </property>
+        </widget>
+       </item>
+      </layout>
+     </item>
     </layout>
    </item>
    <item>



More information about the QGIS-commit mailing list