Skip to content

Commit b40bc0c

Browse files
committed
Refactor scale bar rendering
Move all scalebar rendering code out of composer and ensure that all scalebar rendering is done independant of QgsComposerScaleBar This allows scalebar rendering code to be reused by plugins and by non-composer code. Also rename QgsScaleBarStyle -> QgsScaleBarRenderer, (and all subclasses too). This name better reflects what these classes do.
1 parent 13b4472 commit b40bc0c

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

43 files changed

+2189
-1226
lines changed

doc/CMakeLists.txt

100644100755
+1
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@ IF(WITH_APIDOC)
6666
${CMAKE_SOURCE_DIR}/src/core/pal
6767
${CMAKE_SOURCE_DIR}/src/core/processing
6868
${CMAKE_SOURCE_DIR}/src/core/raster
69+
${CMAKE_SOURCE_DIR}/src/core/scalebar
6970
${CMAKE_SOURCE_DIR}/src/core/symbology-ng
7071
${CMAKE_SOURCE_DIR}/src/gui
7172
${CMAKE_SOURCE_DIR}/src/gui/auth

doc/api_break.dox

+13
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,7 @@ Renamed Classes {#qgis_api_break_3_0_renamed_classes}
8585
<tr><td>QgsCurveV2<td>QgsCurve
8686
<tr><td>QgsDbFilterProxyModel<td>QgsDatabaseFilterProxyModel
8787
<tr><td>QgsDiagramRendererV2<td>QgsDiagramRenderer
88+
<tr><td>QgsDoubleBoxBarStyle<td>QgsDoubleBoxScaleBarRenderer
8889
<tr><td>QgsEditorWidgetV2<td>QgsEditorWidget
8990
<tr><td>QgsEllipseSymbolLayerV2<td>QgsEllipseSymbolLayer
9091
<tr><td>QgsEllipseSymbolLayerV2Widget<td>QgsEllipseSymbolLayerWidget
@@ -115,6 +116,7 @@ Renamed Classes {#qgis_api_break_3_0_renamed_classes}
115116
<tr><td>QgsMultiCurveV2<td>QgsMultiCurve
116117
<tr><td>QgsMultiLineStringV2<td>QgsMultiLineString
117118
<tr><td>QgsMultiSurfaceV2<td>QgsMultiSurface
119+
<tr><td>QgsNumericScaleBarStyle<td>QgsNumericScaleBarRenderer
118120
<tr><td>QgsPointSequenceV2<td>QgsPointSequence
119121
<tr><td>QgsProperty<td>QgsProjectProperty
120122
<tr><td>QgsPropertyKey<td>QgsProjectPropertyKey
@@ -140,6 +142,7 @@ Renamed Classes {#qgis_api_break_3_0_renamed_classes}
140142
<tr><td>QgsRuleBasedRendererV2Count<td>QgsRuleBasedRendererCount
141143
<tr><td>QgsRuleBasedRendererV2Model<td>QgsRuleBasedRendererModel
142144
<tr><td>QgsRuleBasedRendererV2Widget<td>QgsRuleBasedRendererWidget
145+
<tr><td>QgsScaleBarStyle<td>QgsScaleBarRenderer
143146
<tr><td>QgsShapeburstFillSymbolLayerV2<td>QgsShapeburstFillSymbolLayer
144147
<tr><td>QgsShapeburstFillSymbolLayerV2Widget<td>QgsShapeburstFillSymbolLayerWidget
145148
<tr><td>QgsSimpleFillSymbolLayerV2<td>QgsSimpleFillSymbolLayer
@@ -148,6 +151,7 @@ Renamed Classes {#qgis_api_break_3_0_renamed_classes}
148151
<tr><td>QgsSimpleLineSymbolLayerV2Widget<td>QgsSimpleLineSymbolLayerWidget
149152
<tr><td>QgsSimpleMarkerSymbolLayerV2<td>QgsSimpleMarkerSymbolLayer
150153
<tr><td>QgsSimpleMarkerSymbolLayerV2Widget<td>QgsSimpleMarkerSymbolLayerWidget
154+
<tr><td>QgsSingleBoxScaleBarStyle<td>QgsSingleBoxScaleBarRenderer
151155
<tr><td>QgsSingleSymbolRendererV2<td>QgsSingleSymbolRenderer
152156
<tr><td>QgsSingleSymbolRendererV2Widget<td>QgsSingleSymbolRendererWidget
153157
<tr><td>QgsStyleV2<td>QgsStyle
@@ -171,6 +175,7 @@ Renamed Classes {#qgis_api_break_3_0_renamed_classes}
171175
<tr><td>QgsSymbolV2RenderContext<td>QgsSymbolRenderContext
172176
<tr><td>QgsSymbolV2SelectorDialog<td>QgsSymbolSelectorDialog
173177
<tr><td>QgsSymbolV2SelectorWidget<td>QgsSymbolSelectorWidget
178+
<tr><td>QgsTicksScaleBarStyle<td>QgsTicksScaleBarRenderer
174179
<tr><td>QgsVectorColorBrewerColorRampV2<td>QgsColorBrewerColorRamp
175180
<tr><td>QgsVectorColorBrewerColorRampV2Dialog<td>QgsColorBrewerColorRampDialog
176181
<tr><td>QgsVectorColorBrewerColorRampV2DialogBase<td>QgsColorBrewerColorRampDialogBase
@@ -684,9 +689,12 @@ QgsComposerObject::setDataDefinedProperty() instead.
684689
QgsComposerScaleBar {#qgis_api_break_3_0_QgsComposerScaleBar}
685690
-------------------
686691

692+
- The Alignment and SegmentSizeMode enums were moved to QgsScaleBarSettings
693+
- The ScaleBarUnits enum was removed. Use QgsUnitTypes::DistanceUnit instead.
687694
- setBrush() was removed. Use setFillColor() instead.
688695
- setBrush2() was removed. Use setFillColor2() instead.
689696
- setPen() was removed. Use setLineColor() and setLineWidth() instead.
697+
- segmentMillimeters() and firstLabelString() were removed.
690698

691699

692700
QgsComposerTable {#qgis_api_break_3_0_QgsComposerTable}
@@ -1837,6 +1845,11 @@ QgsRuntimeProfiler {#qgis_api_break_3_0_QgsRuntimeProfiler}
18371845

18381846
- This class is no longer a singleton and instance() has been removed. Instead use QgsApplication::profiler() to access an application-wide profiler.
18391847

1848+
QgsScaleBarStyle {#qgis_api_break_3_0_QgsScaleBarStyle}
1849+
----------------
1850+
1851+
- The interface for QgsScaleBarStyle has been completely rewritten - any code using QgsScaleBarStyle or subclasses will need to update
1852+
to the new draw() and calculateBoxSize() methods.
18401853

18411854
QgsServer {#qgis_api_break_3_0_QgsServer}
18421855
----------

python/CMakeLists.txt

100644100755
+1
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,7 @@ INCLUDE_DIRECTORIES(
107107
../src/core/layertree
108108
../src/core/processing
109109
../src/core/raster
110+
../src/core/scalebar
110111
../src/core/symbology-ng
111112

112113
../src/gui/raster

python/core/composer/qgscomposerscalebar.sip

+9-50
Original file line numberDiff line numberDiff line change
@@ -10,29 +10,6 @@ class QgsComposerScaleBar: QgsComposerItem
1010

1111
public:
1212

13-
enum Alignment
14-
{
15-
Left,
16-
Middle,
17-
Right
18-
};
19-
20-
enum ScaleBarUnits
21-
{
22-
MapUnits,
23-
Meters,
24-
Feet,
25-
NauticalMiles
26-
};
27-
28-
/** Modes for setting size for scale bar segments
29-
*/
30-
enum SegmentSizeMode
31-
{
32-
SegmentSizeFixed, /*!< Scale bar segment size is fixed to a map unit*/
33-
SegmentSizeFitWidth /*!< Scale bar segment size is calculated to fit a size range*/
34-
};
35-
3613
QgsComposerScaleBar( QgsComposition* composition /TransferThis/ );
3714
~QgsComposerScaleBar();
3815

@@ -58,7 +35,7 @@ class QgsComposerScaleBar: QgsComposerItem
5835
* @see maxBarWidth
5936
* @note added in QGIS 2.9
6037
*/
61-
SegmentSizeMode segmentSizeMode() const;
38+
QgsScaleBarSettings::SegmentSizeMode segmentSizeMode() const;
6239

6340
/** Sets the size mode for scale bar segments.
6441
* @param mode size mode
@@ -67,7 +44,7 @@ class QgsComposerScaleBar: QgsComposerItem
6744
* @see setMaxBarWidth
6845
* @note added in QGIS 2.9
6946
*/
70-
void setSegmentSizeMode( SegmentSizeMode mode );
47+
void setSegmentSizeMode( QgsScaleBarSettings::SegmentSizeMode mode );
7148

7249
/** Returns the minimum size (in millimeters) for scale bar segments. This
7350
* property is only effective if the @link segmentSizeMode @endlink is set
@@ -212,25 +189,23 @@ class QgsComposerScaleBar: QgsComposerItem
212189
double height() const;
213190
void setHeight( double h );
214191

215-
void setComposerMap( const QgsComposerMap* map );
216-
const QgsComposerMap* composerMap();
192+
void setComposerMap( QgsComposerMap* map );
193+
QgsComposerMap* composerMap();
217194

218195
double labelBarSpace() const;
219196
void setLabelBarSpace( double space );
220197

221198
double boxContentSpace() const;
222199
void setBoxContentSpace( double space );
223200

224-
double segmentMillimeters() const;
225-
226201
/** Left / Middle/ Right */
227-
Alignment alignment() const;
202+
QgsScaleBarSettings::Alignment alignment() const;
228203

229-
void setAlignment( Alignment a );
204+
void setAlignment( QgsScaleBarSettings::Alignment a );
230205

231-
ScaleBarUnits units() const;
206+
QgsUnitTypes::DistanceUnit units() const;
232207

233-
void setUnits( ScaleBarUnits u );
208+
void setUnits( QgsUnitTypes::DistanceUnit u );
234209

235210
/** Returns the join style used for drawing lines in the scalebar
236211
* @returns Join style for lines
@@ -263,7 +238,7 @@ class QgsComposerScaleBar: QgsComposerItem
263238
/** Apply default settings*/
264239
void applyDefaultSettings();
265240
/** Apply default size (scale bar 1/5 of map item width) */
266-
void applyDefaultSize( ScaleBarUnits u = Meters );
241+
void applyDefaultSize( QgsUnitTypes::DistanceUnit u = QgsUnitTypes::DistanceMeters );
267242

268243
/** Sets style by name
269244
@param styleName (untranslated) style name. Possibilities are: 'Single Box', 'Double Box', 'Line Ticks Middle', 'Line Ticks Down', 'Line Ticks Up', 'Numeric'*/
@@ -272,21 +247,12 @@ class QgsComposerScaleBar: QgsComposerItem
272247
/** Returns style name*/
273248
QString style() const;
274249

275-
/** Returns the x - positions of the segment borders (in item coordinates) and the width
276-
* of the segment
277-
* @note not available in Python bindings
278-
*/
279-
// void segmentPositions( QList<QPair<double, double> >& posWidthList ) const;
280-
281250
/** Sets box size suitable to content*/
282251
void adjustBoxSize();
283252

284253
/** Adjusts box size and calls QgsComposerItem::update()*/
285254
void update();
286255

287-
/** Returns string of first label (important for drawing, labeling, size calculation*/
288-
QString firstLabelString() const;
289-
290256
/** Stores state in Dom element
291257
* @param elem is Dom element corresponding to 'Composer' tag
292258
* @param doc Dom document
@@ -311,11 +277,4 @@ class QgsComposerScaleBar: QgsComposerItem
311277
void invalidateCurrentMap();
312278
virtual void refreshDataDefinedProperty( const QgsComposerObject::DataDefinedProperty property = QgsComposerObject::AllProperties, const QgsExpressionContext* context = nullptr );
313279

314-
protected:
315-
/** Calculates with of a segment in mm and stores it in mSegmentMillimeters*/
316-
void refreshSegmentMillimeters();
317-
318-
/** Returns diagonal of composer map in selected units (map units / meters / feet / nautical miles)*/
319-
double mapWidth() const;
320-
321280
};

python/core/composer/qgsdoubleboxscalebarstyle.sip

-13
This file was deleted.

python/core/composer/qgsnumericscalebarstyle.sip

-16
This file was deleted.

python/core/composer/qgsscalebarstyle.sip

-21
This file was deleted.

python/core/composer/qgssingleboxscalebarstyle.sip

-17
This file was deleted.

python/core/composer/qgsticksscalebarstyle.sip

-26
This file was deleted.

python/core/core.sip

+8-5
Original file line numberDiff line numberDiff line change
@@ -230,13 +230,9 @@
230230
%Include composer/qgscomposertexttable.sip
231231
%Include composer/qgscomposerutils.sip
232232
%Include composer/qgscomposition.sip
233-
%Include composer/qgsdoubleboxscalebarstyle.sip
234233
%Include composer/qgslayoutmanager.sip
235-
%Include composer/qgsnumericscalebarstyle.sip
236234
%Include composer/qgspaperitem.sip
237-
%Include composer/qgsscalebarstyle.sip
238-
%Include composer/qgssingleboxscalebarstyle.sip
239-
%Include composer/qgsticksscalebarstyle.sip
235+
240236

241237
%Include diagram/qgsdiagram.sip
242238
%Include diagram/qgshistogramdiagram.sip
@@ -327,6 +323,13 @@
327323
%Include raster/qgssinglebandpseudocolorrenderer.sip
328324
%Include raster/qgshillshaderenderer.sip
329325

326+
%Include scalebar/qgsdoubleboxscalebarrenderer.sip
327+
%Include scalebar/qgsnumericscalebarrenderer.sip
328+
%Include scalebar/qgsscalebarrenderer.sip
329+
%Include scalebar/qgsscalebarsettings.sip
330+
%Include scalebar/qgssingleboxscalebarrenderer.sip
331+
%Include scalebar/qgsticksscalebarrenderer.sip
332+
330333
%Include symbology-ng/qgscolorbrewerpalette.sip
331334
%Include symbology-ng/qgscptcityarchive.sip
332335
%Include symbology-ng/qgsstyle.sip
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
/************************************************************************
2+
* This file has been generated automatically from *
3+
* *
4+
* src/core/scalebar/qgsdoubleboxscalebarrenderer.h *
5+
* *
6+
* Do not edit manually ! Edit header and run scripts/sipify.pl again *
7+
************************************************************************/
8+
9+
10+
11+
class QgsDoubleBoxScaleBarRenderer: QgsScaleBarRenderer
12+
{
13+
%Docstring
14+
Double box with alternating colors.
15+
.. versionadded:: 3.0
16+
%End
17+
18+
%TypeHeaderCode
19+
#include "qgsdoubleboxscalebarrenderer.h"
20+
%End
21+
public:
22+
QgsDoubleBoxScaleBarRenderer();
23+
24+
virtual QString name() const;
25+
26+
virtual void draw( QgsRenderContext &context,
27+
const QgsScaleBarSettings &settings,
28+
const QgsScaleBarRenderer::ScaleBarContext &scaleContext ) const;
29+
30+
};
31+
32+
/************************************************************************
33+
* This file has been generated automatically from *
34+
* *
35+
* src/core/scalebar/qgsdoubleboxscalebarrenderer.h *
36+
* *
37+
* Do not edit manually ! Edit header and run scripts/sipify.pl again *
38+
************************************************************************/
39+

0 commit comments

Comments
 (0)