@@ -57,6 +57,8 @@ QgsDecorationScaleBar::QgsDecorationScaleBar( QObject* parent )
5757 mPlacementIndex = 1 ;
5858 mStyleLabels << tr ( " Tick Down" ) << tr ( " Tick Up" )
5959 << tr ( " Bar" ) << tr ( " Box" );
60+ mMarginHorizontal = 0 ;
61+ mMarginVertical = 0 ;
6062
6163 setName ( " Scale Bar" );
6264 projectRead ();
@@ -79,6 +81,8 @@ void QgsDecorationScaleBar::projectRead()
7981 int myGreenInt = QgsProject::instance ()->readNumEntry ( mNameConfig , " /ColorGreenPart" , 0 );
8082 int myBlueInt = QgsProject::instance ()->readNumEntry ( mNameConfig , " /ColorBluePart" , 0 );
8183 mColor = QColor ( myRedInt, myGreenInt, myBlueInt );
84+ mMarginHorizontal = QgsProject::instance ()->readNumEntry ( mNameConfig , " /MarginH" , 0 );
85+ mMarginVertical = QgsProject::instance ()->readNumEntry ( mNameConfig , " /MarginV" , 0 );
8286}
8387
8488void QgsDecorationScaleBar::saveToProject ()
@@ -92,6 +96,8 @@ void QgsDecorationScaleBar::saveToProject()
9296 QgsProject::instance ()->writeEntry ( mNameConfig , " /ColorRedPart" , mColor .red () );
9397 QgsProject::instance ()->writeEntry ( mNameConfig , " /ColorGreenPart" , mColor .green () );
9498 QgsProject::instance ()->writeEntry ( mNameConfig , " /ColorBluePart" , mColor .blue () );
99+ QgsProject::instance ()->writeEntry ( mNameConfig , " /MarginH" , mMarginHorizontal );
100+ QgsProject::instance ()->writeEntry ( mNameConfig , " /MarginV" , mMarginVertical );
95101}
96102
97103
@@ -133,7 +139,6 @@ void QgsDecorationScaleBar::render( QPainter * theQPainter )
133139 // Hard coded sizes
134140 int myMajorTickSize = 8 ;
135141 int myTextOffsetX = 3 ;
136- int myMargin = 20 ;
137142
138143 QSettings settings;
139144 QGis::UnitType myPreferredUnits = QGis::fromLiteral ( settings.value ( " /qgis/measure/displayunits" , QGis::toLiteral ( QGis::Meters ) ).toString () );
@@ -252,26 +257,34 @@ void QgsDecorationScaleBar::render( QPainter * theQPainter )
252257 // Calculate total width of scale bar and label
253258 double myTotalScaleBarWidth = myScaleBarWidth + myFontWidth;
254259
255- // determine the origin of scale bar depending on placement selected
256- int myOriginX = myMargin;
257- int myOriginY = myMargin;
260+ // Calculate percentage page width for use in placing item
261+ int myMarginW = 10 ;
262+ int myMarginH = 20 ;
263+ float myMarginDoubledW = float ( myMarginW * 2 );
264+ float myMarginDoubledH = float ( myMarginH * 2 );
265+ int myOriginX = int ((( float ( myCanvasWidth - myMarginDoubledW ) - myTotalScaleBarWidth )
266+ / 100 . ) * float ( mMarginHorizontal ) );
267+ int myOriginY = int ((( float ( myCanvasHeight - myMarginDoubledH ) )
268+ / 100 . ) * float ( mMarginVertical ) );
269+
270+ // Determine the origin of scale bar depending on placement selected
258271 switch ( mPlacementIndex )
259272 {
260273 case 0 : // Bottom Left
261- myOriginX = myMargin ;
262- myOriginY = myCanvasHeight - myMargin ;
274+ myOriginX += myMarginW ;
275+ myOriginY = myCanvasHeight - myOriginY - myMarginH ;
263276 break ;
264277 case 1 : // Top Left
265- myOriginX = myMargin ;
266- myOriginY = myMargin ;
278+ myOriginX += myMarginW ;
279+ myOriginY += myMarginH ;
267280 break ;
268281 case 2 : // Top Right
269- myOriginX = myCanvasWidth - (( int ) myTotalScaleBarWidth ) - myMargin ;
270- myOriginY = myMargin ;
282+ myOriginX = myCanvasWidth - myOriginX - myMarginW - (( int ) myTotalScaleBarWidth );
283+ myOriginY += myMarginH ;
271284 break ;
272285 case 3 : // Bottom Right
273- myOriginX = myCanvasWidth - (( int ) myTotalScaleBarWidth ) - myMargin ;
274- myOriginY = myCanvasHeight - myMargin ;
286+ myOriginX = myCanvasWidth - myOriginX - myMarginW - (( int ) myTotalScaleBarWidth );
287+ myOriginY = myCanvasHeight - myOriginY - myMarginH ;
275288 break ;
276289 default :
277290 QgsDebugMsg ( " Unable to determine where to put scale bar so defaulting to top left" );
0 commit comments