FontOffsets.patch

Patch to add offset ability to font markers - Nathan Woodrow, 2010-12-12 06:19 AM

Download (5.85 KB)

View differences:

src/core/symbology-ng/qgsmarkersymbollayerv2.cpp (working copy)
642 642
  mColor = color;
643 643
  mAngle = angle;
644 644
  mSize = pointSize;
645
  mOffset = QPointF( 0, 0 );	
645 646
}
646 647

  
647 648
QgsSymbolLayerV2* QgsFontMarkerSymbolLayerV2::create( const QgsStringMap& props )
......
663 664
  if ( props.contains( "angle" ) )
664 665
    angle = props["angle"].toDouble();
665 666

  
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;
667 671
}
668 672

  
669 673
QString QgsFontMarkerSymbolLayerV2::layerType() const
......
692 696
  penColor.setAlphaF( context.alpha() );
693 697
  p->setPen( penColor );
694 698
  p->setFont( mFont );
699
  
695 700

  
696 701
  p->save();
697
  p->translate( point );
702
  QPointF outputOffset = QPointF( context.outputLineWidth( mOffset.x() ), context.outputLineWidth( mOffset.y() ) );
703
  p->translate( point + outputOffset );
698 704

  
699 705
  if ( context.renderHints() & QgsSymbolV2::DataDefinedSizeScale )
700 706
  {
......
717 723
  props["size"] = QString::number( mSize );
718 724
  props["color"] = QgsSymbolLayerV2Utils::encodeColor( mColor );
719 725
  props["angle"] = QString::number( mAngle );
726
  props["offset"] = QgsSymbolLayerV2Utils::encodePoint( mOffset );
720 727
  return props;
721 728
}
722 729

  
723 730
QgsSymbolLayerV2* QgsFontMarkerSymbolLayerV2::clone() const
724 731
{
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;
726 735
}
src/gui/symbology-ng/qgssymbollayerv2widget.cpp (working copy)
769 769
  connect( spinSize, SIGNAL( valueChanged( double ) ), this, SLOT( setSize( double ) ) );
770 770
  connect( btnColor, SIGNAL( clicked() ), this, SLOT( setColor() ) );
771 771
  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 () ));
772 774
  connect( widgetChar, SIGNAL( characterSelected( const QChar & ) ), this, SLOT( setCharacter( const QChar & ) ) );
773 775
}
774 776

  
777

  
775 778
void QgsFontMarkerSymbolLayerV2Widget::setSymbolLayer( QgsSymbolLayerV2* layer )
776 779
{
777 780
  if ( layer->layerType() != "FontMarker" )
......
785 788
  spinSize->setValue( mLayer->size() );
786 789
  btnColor->setColor( mLayer->color() );
787 790
  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

  
788 800
}
789 801

  
790 802
QgsSymbolLayerV2* QgsFontMarkerSymbolLayerV2Widget::symbolLayer()
......
828 840
  emit changed();
829 841
}
830 842

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

  
849

  
832 850
///////////////
833 851

  
834 852

  
src/gui/symbology-ng/qgssymbollayerv2widget.h (working copy)
276 276
    void setSize( double size );
277 277
    void setAngle( double angle );
278 278
    void setCharacter( const QChar& chr );
279
	void setOffset();
279 280

  
280 281
  protected:
281 282
    QgsFontMarkerSymbolLayerV2* mLayer;
src/ui/symbollayer/widget_fontmarker.ui (working copy)
16 16
  <layout class="QVBoxLayout" name="verticalLayout">
17 17
   <item>
18 18
    <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>
19 31
     <item row="0" column="0">
20 32
      <widget class="QLabel" name="label">
21 33
       <property name="text">
......
74 86
       </property>
75 87
      </widget>
76 88
     </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>
77 120
    </layout>
78 121
   </item>
79 122
   <item>