120 Commits

Author SHA1 Message Date
Denis Rouzaud
90e5196996 run sipify 2017-12-19 14:55:46 -04:00
Denis Rouzaud
c604d2dda6 run sipify 2017-12-15 22:13:44 -04:00
Denis Rouzaud
f2b3ed0a9b run sipify 2017-12-15 11:12:19 -04:00
Denis Rouzaud
e48cf98edb run sipify 2017-12-06 07:19:50 -04:00
Nyall Dawson
2e6d125a6f Use =default, =delete where possible 2017-11-11 15:22:19 +10:00
Nyall Dawson
49b426d951 Make doxygen_space script convert multiline //! comments
Because:
- the /** format is much more prevalent throughout QGIS
- sipify works correctly with /**
2017-10-06 07:55:52 +10:00
Nyall Dawson
a87d352bd7 Run clang-tidy modernize-use-default-member-init to move member
initialization to headers (c++11 style)
2017-09-27 05:02:34 +10:00
Nyall Dawson
e304662a4f Use standard QgsUnitTypes::RenderUnit throughout labeling
Instead of duplicate labeling specific unit enum, reuse
the QgsUnitTypes::RenderUnit enum in labeling.

This brings several improvements, including:
- label offset/distance/repeat units now works correctly
in all available unit types (inc pixels, map unit meters,
points, inches, etc)
- less duplicate code
- labeling can use the robust QgsRenderContext methods for
converting between different units and painter coordinates

Also change comments for members to doxygen comments, so
that these get included in the API docs.
2017-07-24 11:18:30 +10:00
Matthias Kuhn
cc877c39eb No more QgsGeometry pointers in the public API
Geometries are passed as const reference and returned by value.
This make using the API easier and reduces the risk of ownership
problems.

The overhead is minimal due to implicit sharing.

Fix https://github.com/qgis/qgis3.0_api/issues/68
2017-06-11 09:13:16 +02:00
Nyall Dawson
e413463755 [needs-docs] Use standard scale widgets and terminology for labeling
Also unify API with other scale API.

Fix #16349
2017-06-09 12:46:41 +10:00
Matthias Kuhn
a9d7630a69 Rename QgsPointV2 to QgsPoint and QgsPoint to QgsPointXY
Because 3D coordinates should be the default.

References https://github.com/qgis/qgis3.0_api/issues/36
2017-06-02 19:53:37 +02:00
Nyall Dawson
21a4ac4d3a Unify label rotation with other rotation settings
Label rotation is now specified in degrees clockwise, just like
symbol rotation, map rotation, etc.

Fix #4518
2017-05-30 17:23:24 +10:00
Nyall Dawson
07b45cdcc9 Change labeling from transparency to opacity 2017-05-30 08:48:55 +10:00
Denis Rouzaud
68b990b3bb sipify batch
python/core/qgspaintenginehack.sip
python/core/qgspainting.sip
python/core/qgspallabeling.sip
python/core/qgspathresolver.sip
python/core/qgspluginlayer.sip
python/core/qgspluginlayerregistry.sip
python/core/qgspointlocator.sip
python/core/qgsproject.sip
python/core/qgsprojectbadlayerhandler.sip
python/core/qgsprojectproperty.sip
python/core/qgsprojectversion.sip
python/core/qgssnappingconfig.sip
2017-05-18 09:41:16 +02:00
Martin Dobias
f153e19168 Fix saving of "obstacle only" state + misc fixes to unit tests 2017-05-16 14:25:32 +08:00
Martin Dobias
21f03bc11c Clean up reading/writing of labeling configuration in vector layers
Historically the configuration used to be stored in layer's custom properties, but that does not scale
beyond simple rendering and so rule-based labeling introduced storage of configuration natively in XML elements.
That left us with two different ways of reading/writing labeling configurations. This work makes all configuration
to use native XML elements.

To keep compatibility of 2.x projects, reading of configuration from custom properties is preserved.

This commit also adds Python APIs for direct manipulation of labeling configuration through vector layer's
setLabeling() and labeling() calls.
2017-05-16 14:25:32 +08:00
Martin Dobias
5bdae75156 API break update + read/write context in labeling and text renderer
This enables correct loading/saving of relative paths of SVG files for background of labels
2017-05-13 18:12:04 +08:00
Denis Rouzaud
93971d5ed3 [sip] align pointer and reference in blacklisted files
this will facilitate sip diff checking
2017-05-01 17:49:43 +02:00
Martin Dobias
25ed76b86e Move labeling engine config to a new class + QgsPalLabeling cleanup
Another bit to make core library independent from QgsProject::instance().
Until now labeling engine configuration was taken from project singleton.

Removed legacy methods from QgsPalLabeling - the class now does not have
any more member variables/methods, it is just a bunch of helper functions.

(PR #4384)
2017-04-21 18:04:09 +08:00
Nyall Dawson
47683fca4f [needs-docs] Rename Outline and Border -> Stroke
This change is being driven by:

- need for consistent terminology in the api. Currently there's
a confusing mix of border/outline used
- need for consistent terminology in the gui - we have a mix
of "border"/"outline"/"pen"
- bringing QGIS into line with the standard terminology used
in other graphic editing programs
2017-02-22 19:22:45 +10:00
Nyall Dawson
54089ff710 Follow up 4a3871, fix broken data defined properties
(definitions are often accessed before a QgsSymboLayer/etc
is constructed)
2017-02-05 14:27:26 +10:00
Martin Dobias
3a92b17418 Reading/saving labeling engine uses a particular QgsProject
... rather than using QgsProject::instance() internally

These are small cleanups to dig out some instance() uses and move them one level up...

At some point we should maybe make labeling engine configuration a part of QgsMapSettings
and have default project labeling engine config accessible from QgsProject
in a way similar to e.g. snapping configuration.
2017-01-26 10:56:50 +08:00
Nyall Dawson
39b89d1bac SIP sync 2017-01-23 12:45:22 +10:00
Nyall Dawson
e06192ec3f Use consistent names for data defined property collections 2017-01-23 12:45:22 +10:00
Nyall Dawson
43bbf68943 Port labeling to properties framework 2017-01-23 12:45:21 +10:00
Denis Rouzaud
748be8de71 [spelling] replace behaviour by behavior 2017-01-11 11:35:19 +01:00
Harrissou Sant-anna
ef85cdcf83 Replace "eg" by "e.g." or "for example" 2016-12-30 00:03:22 +01:00
Harrissou Sant-anna
8dca115b1c Replace prioritise by prioritize 2016-12-29 01:46:19 +01:00
Denis Rouzaud
9c4be41441 [spelling] labelling -> labeling 2016-12-19 23:58:29 +01:00
Martin Dobias
8e5fb436b7 Remove QgsLabelingEngineInterface base class and implementation in QgsPalLabeling
It was ready to go for some time, just waiting for QgsMapRender that still used it.
2016-12-15 18:15:12 +08:00
Nyall Dawson
08143475ed [FEATURE] QgsTextRenderer class for rich text rendering
Moves all the drawing code out of labeling into a new class
which just handles rendering text. This allows other parts
of the code to utilise all the advanced formatting options
that labeling supports, eg rendering text with shadows,
buffers and backgrounds.
2016-10-24 12:02:00 +10:00
Nyall Dawson
5495f20589 Minor refactor of label drawing
Remove use of scale factors from PAL layer settings and use
render context factors directly
2016-10-24 12:02:00 +10:00
Nyall Dawson
aac2622816 Remove option to show label shadow rectangles from GUI
...and instead just make it #ifdef out
2016-10-24 12:02:00 +10:00
Nyall Dawson
4d5e7536d9 Flip QgsPalLayerSettings to use QgsTextRenderer classes 2016-10-24 12:02:00 +10:00
Matthias Kuhn
722fdefe43 referencedColumns returns QSet<QString> instead of QStringList
The order of the elements is irrelevant and duplicate elements are unwanted. It
is therefore a perfect candidate for a set instead of a list. This prevents
filtering for duplicates manually be replacing some filer codes with (more
performant) builtin methods of QSet.
2016-10-05 14:33:38 +02:00
Nyall Dawson
fe65063c2b Remove many deprecated methods 2016-09-15 18:34:15 +10:00
Nyall Dawson
46fba7ce80 [FEATURE] Substitution list support for labeling
Adds the ability to specify a list of text substitutes to make
which apply to label text. Eg abbrevating street types.

Users can export and import lists of substitutes to make
reuse and sharing easier.
2016-08-29 17:18:34 +10:00
Juergen E. Fischer
3f22a7a77f another scripts/replacev2.sh with minor manual fixes 2016-08-10 12:12:28 +02:00
Juergen E. Fischer
0688621046 scripts/replacev2.sh run 2016-08-10 12:08:52 +02:00
Nyall Dawson
37ef6b8007 Add missing sip binding 2016-08-09 16:55:10 +10:00
Nyall Dawson
4b78b1c208 Make all QgsGeometry methods return values, not pointers
Reduces likelihood of crashes and leaks
2016-08-01 22:41:55 +10:00
Nyall Dawson
bd7d913379 Refine QgsFeature geometry getters/setters
All pointer based methods have been removed.

Now we have only:

  void setGeometry( const QgsGeometry& geom )

and

  QgsGeometry geometry() const

Benefits include avoiding a whole lot of tricky pointer lifetime
issues, potential memory leaks, and finally closing #777, which
has survived for over 9 years!...

Impacts on PyQGIS code:
- no more need for the messy
  g = QgsGeometry( feature.geometry() )
  workaround, just use g = feature.geometry() instead
- IMPORTANT: you can no longer test whether a feature has geometry
 using `if f.geometry():`, since QgsFeature::geometry() will
 *always* return an object. Instead, use
 `if not f.geometry().isEmpty():`, or preferably the new method
 `if not f.hasGeometry():`

Fix #777
2016-08-01 16:25:46 +10:00
Martin Dobias
ab4a83b49b Goodbye to QgsMapRenderer (#3333)
For the time being the class is kept in the server code while it is still being used there.
2016-07-24 22:40:52 +02:00
Nyall Dawson
cd33ccf7f6 Revert "Fix label word and letter spacing cannot be decimals"
This reverts commit 48f090ca79f0d2d9ae341ae3617f20b2fe3fe14f.

Causes issues with font sizes/spacing
2016-07-20 19:44:20 +10:00
Nyall Dawson
48f090ca79 Fix label word and letter spacing cannot be decimals 2016-07-20 13:04:50 +10:00
Nyall Dawson
adafeda82a Avoid all use of QgsCoordinateTransform pointers, replace with
copies or references

Makes the code more robust, fixes leaks and avoids potential
null pointer dereferencing
2016-07-16 20:36:45 +10:00
Juergen E. Fischer
f19a35c34e dxf export: support rule based labeling (fixes #13757) 2016-04-13 14:51:55 +02:00
Juergen E. Fischer
a90be95f7b sip sync 2016-02-14 03:50:49 +01:00
Nyall Dawson
8779091225 Fix failing tests 2016-01-12 08:24:56 +11:00
Nyall Dawson
8b28c040d1 [FEATURE] Add mode to apply label distance from symbol bounds
(only works with Cartographic point label placement). When this
setting is active, the label distance applies from the bounds
of the rendered symbol for a point, instead of the point itself.
It's especially useful when the symbol size isn't fixed, eg if
it's set by a data defined size or when using different symbols
in a categorised renderer.

Sponsored by Andreas Neumann
2016-01-12 08:24:39 +11:00