See https://github.com/qgis/QGIS-Enhancement-Proposals/issues/299
Implements the API framework for setting advanced labeling engine
rules for a project, and implements 4 initial rule types:
- QgsLabelingEngineRuleMinimumDistanceLabelToFeature: prevents labels
being placed too *close* to features from a different layer
- QgsLabelingEngineRuleMaximumDistanceLabelToFeature: prevents labels
being placed too *far* from features from a different layer
- QgsLabelingEngineRuleMinimumDistanceLabelToLabel: prevents labels
being placed too close to labels from a different layer
- QgsLabelingEngineRuleAvoidLabelOverlapWithFeature: prevents labels
being placed overlapping features from a different layer
(note that the first 3 rules require a build based on GEOS >= 3.10,
they are not available for older GEOS builds)
Also implements a registry for storing available rule classes,
and serialization of rules and configuration in QGIS projects
(This setting can sometimes unwantedly occur when using the same
profile across sessions of newer to very old QGIS versions)
The option is a misleading, as it's actually setting the global
thread limit for the entire QGIS application. If we allow this
to be set to a limit of 1 thread, then deadlocks
occur from the QImage internals in unpredictable ways.
Returns the QGIS application full name.
It can be defined by the environment variable QGIS_APPLICATION_FULL_NAME or the /qgis/application_full_name
in the QGIS config file.
By default it is equal to `QgsApplication::applicationName()+' '+QgsApplication::platform()`
Instead of always defaulting to 100mb, then base the cache size
on the system memory:
- > 32gb, use 500mb
- 16-32gb, use 250mb
- else 100mb
The larger sizes can make a big difference to rendering speed for
complex projects, so let's let powerful systems utilise all that
memory!
(Only supported on linux for now)
to QgsApplication
In the long term all methods for retrieving available CRS details
should be moved here (instead of being scattered all over the place,
as they are now). But for now the logic for saving and updating
user CRS definitions has been moved here only.
The initial motivation is to create a central place where objects
can connect to in order to listen for when a user makes changes
to their custom projections.
Refs #40704