Please sign in to comment.
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Rework annotation layer index handling
Because some annotation items have scale dependent bounding boxes, we can only index items which have a fixed bounding box. Other item bounds need to be dynamically determined based on a specific render context. So rework the annotation layer index handling to only index appropriate items and store other items in a non-indexed item set. This isn't ideal, because it means we need to clone ALL non-indexed items upfront whenever we render an annotation layer (it's too expensive to calculate their actual bounding box and selectively clone them, as it's a process which blocks the main thread). Hopefully we can think of an alternative approach to this down the line so that we DO have some form of spatial index for scale dependent items, unlocking better performance for annotation layers with 10,000s of items. But we'll ignore that situation for now ;)
- Loading branch information
Showing with 98 additions and 15 deletions.
- +5 −0 python/core/auto_generated/annotations/qgsannotationitem.sip.in
- +3 −2 python/core/auto_generated/annotations/qgsannotationlayer.sip.in
- +4 −0 python/core/auto_generated/annotations/qgsannotationpointtextitem.sip.in
- +5 −0 src/core/annotations/qgsannotationitem.h
- +40 −5 src/core/annotations/qgsannotationlayer.cpp
- +8 −2 src/core/annotations/qgsannotationlayer.h
- +14 −2 src/core/annotations/qgsannotationlayerrenderer.cpp
- +12 −0 src/core/annotations/qgsannotationpointtextitem.cpp
- +2 −0 src/core/annotations/qgsannotationpointtextitem.h
- +5 −4 tests/src/python/test_qgsannotationlayer.py