@@ -27,16 +27,18 @@ email : tim@linfiniti.com
27
27
#include " qgisapp.h"
28
28
#include " qgsbearingutils.h"
29
29
#include " qgscoordinatetransform.h"
30
+ #include " qgscsexception.h"
31
+ #include " qgslogger.h"
30
32
#include " qgsmaplayer.h"
31
33
#include " qgsproject.h"
32
- #include " qgslogger.h"
33
- #include " qgscsexception.h"
34
+ #include " qgssvgcache.h"
34
35
35
36
// qt includes
36
37
#include < QPainter>
37
38
#include < QMenu>
38
39
#include < QDir>
39
40
#include < QFile>
41
+ #include < QSvgRenderer>
40
42
41
43
// non qt includes
42
44
#include < cmath>
@@ -101,14 +103,17 @@ void QgsDecorationNorthArrow::render( const QgsMapSettings &mapSettings, QgsRend
101
103
// Large IF statement controlled by enable check box
102
104
if ( enabled () )
103
105
{
104
- QPixmap myQPixmap; // to store the north arrow image in
106
+ QSize size ( 64 , 64 );
107
+ QSvgRenderer svg;
105
108
106
- QString myFileNameQString = QStringLiteral ( " :/images/north_arrows/default.png" );
109
+ const QByteArray &svgContent = QgsApplication::svgCache ()->svgContent ( QStringLiteral ( " :/images/north_arrows/default.svg" ), size.width (), QColor ( " #000000" ), QColor ( " #FFFFFF" ), 0.2 , 1.0 );
110
+ svg.load ( svgContent );
107
111
108
- if ( myQPixmap. load ( myFileNameQString ) )
112
+ if ( svg. isValid ( ) )
109
113
{
110
- double centerXDouble = myQPixmap.width () / 2.0 ;
111
- double centerYDouble = myQPixmap.height () / 2.0 ;
114
+ double centerXDouble = size.width () / 2.0 ;
115
+ double centerYDouble = size.width () / 2.0 ;
116
+
112
117
// save the current canvas rotation
113
118
context.painter ()->save ();
114
119
//
@@ -161,8 +166,8 @@ void QgsDecorationNorthArrow::render( const QgsMapSettings &mapSettings, QgsRend
161
166
break ;
162
167
163
168
case QgsUnitTypes::RenderPercentage:
164
- myXOffset = ( ( myWidth - myQPixmap .width () ) / 100 . ) * mMarginHorizontal ;
165
- myYOffset = ( ( myHeight - myQPixmap. height () ) / 100 . ) * mMarginVertical ;
169
+ myXOffset = ( ( myWidth - size .width () ) / 100 . ) * mMarginHorizontal ;
170
+ myYOffset = ( ( myHeight - size. width () ) / 100 . ) * mMarginVertical ;
166
171
break ;
167
172
168
173
default : // Use default of top left
@@ -172,17 +177,17 @@ void QgsDecorationNorthArrow::render( const QgsMapSettings &mapSettings, QgsRend
172
177
switch ( mPlacement )
173
178
{
174
179
case BottomLeft:
175
- context.painter ()->translate ( myXOffset, myHeight - myYOffset - myQPixmap. height () );
180
+ context.painter ()->translate ( myXOffset, myHeight - myYOffset - size. width () );
176
181
break ;
177
182
case TopLeft:
178
183
context.painter ()->translate ( myXOffset, myYOffset );
179
184
break ;
180
185
case TopRight:
181
- context.painter ()->translate ( myWidth - myXOffset - myQPixmap .width (), myYOffset );
186
+ context.painter ()->translate ( myWidth - myXOffset - size .width (), myYOffset );
182
187
break ;
183
188
case BottomRight:
184
- context.painter ()->translate ( myWidth - myXOffset - myQPixmap .width (),
185
- myHeight - myYOffset - myQPixmap. height () );
189
+ context.painter ()->translate ( myWidth - myXOffset - size .width (),
190
+ myHeight - myYOffset - size. width () );
186
191
break ;
187
192
default :
188
193
{
@@ -193,8 +198,9 @@ void QgsDecorationNorthArrow::render( const QgsMapSettings &mapSettings, QgsRend
193
198
// rotate the canvas by the north arrow rotation amount
194
199
context.painter ()->rotate ( mRotationInt );
195
200
// Now we can actually do the drawing, and draw a smooth north arrow even when rotated
196
- context.painter ()->setRenderHint ( QPainter::SmoothPixmapTransform );
197
- context.painter ()->drawPixmap ( xShift, yShift, myQPixmap );
201
+
202
+ context.painter ()->translate ( xShift, yShift );
203
+ svg.render ( context.painter (), QRectF ( 0 , 0 , size.width (), size.height () ) );
198
204
199
205
// unrotate the canvas again
200
206
context.painter ()->restore ();
0 commit comments