33   , mAnnotation( annotation )
    35   setFlag( QGraphicsItem::ItemIsSelectable, 
true );
    41   connect( mAnnotation, &
QgsAnnotation::moved, 
this, &QgsMapCanvasAnnotationItem::setFeatureForMapPosition );
    50   connect( mAnnotation, &QgsAnnotation::destroyed, 
this, &QgsMapCanvasAnnotationItem::deleteLater );
    53   setFeatureForMapPosition();
    67       coord = t.transform( coord );
    89 void QgsMapCanvasAnnotationItem::updateBoundingRect()
    91   prepareGeometryChange();
    94   double fillSymbolBleed = mAnnotation && mAnnotation->
fillSymbol() ?
    97   const double mmToPixelScale = 
mMapCanvas->logicalDpiX() / 25.4;
   101     mBoundingRect = QRectF( - fillSymbolBleed, -fillSymbolBleed,
   102                             mmToPixelScale * mAnnotation->
frameSizeMm().width() + fillSymbolBleed * 2,
   103                             mmToPixelScale * mAnnotation->
frameSizeMm().height() + fillSymbolBleed * 2 );
   107     double halfSymbolSize = 0.0;
   110       halfSymbolSize = scaledSymbolSize() / 2.0;
   116     QSizeF frameSize = mAnnotation ? QSizeF( mAnnotation->
frameSizeMm().width() * mmToPixelScale,
   117                        mAnnotation->
frameSizeMm().height() * mmToPixelScale ) : QSizeF( 0.0, 0.0 );
   119     double xMinPos = std::min( -halfSymbolSize, offset.x() - fillSymbolBleed );
   120     double xMaxPos = std::max( halfSymbolSize, offset.x() + frameSize.width() + fillSymbolBleed );
   121     double yMinPos = std::min( -halfSymbolSize, offset.y() - fillSymbolBleed );
   122     double yMaxPos = std::max( halfSymbolSize, offset.y() + frameSize.height() + fillSymbolBleed );
   123     mBoundingRect = QRectF( xMinPos, yMinPos, xMaxPos - xMinPos, yMaxPos - yMinPos );
   127 void QgsMapCanvasAnnotationItem::onCanvasLayersChanged()
   133   else if ( !mAnnotation->
mapLayer() )
   143 void QgsMapCanvasAnnotationItem::setFeatureForMapPosition()
   159       mapPosition = ct.transform( mapPosition );
   165   QgsRectangle searchRect( mapPosition.
x() - halfIdentifyWidth, mapPosition.
y() - halfIdentifyWidth,
   166                            mapPosition.
x() + halfIdentifyWidth, mapPosition.
y() + halfIdentifyWidth );
   177 void QgsMapCanvasAnnotationItem::drawSelectionBoxes( QPainter *p )
 const   184   double handlerSize = 10;
   185   p->setPen( Qt::NoPen );
   186   p->setBrush( QColor( 200, 200, 210, 120 ) );
   187   p->drawRect( QRectF( mBoundingRect.left(), mBoundingRect.top(), handlerSize, handlerSize ) );
   188   p->drawRect( QRectF( mBoundingRect.right() - handlerSize, mBoundingRect.top(), handlerSize, handlerSize ) );
   189   p->drawRect( QRectF( mBoundingRect.right() - handlerSize, mBoundingRect.bottom() - handlerSize, handlerSize, handlerSize ) );
   190   p->drawRect( QRectF( mBoundingRect.left(), mBoundingRect.bottom() - handlerSize, handlerSize, handlerSize ) );
   195   QPointF itemPos = mapFromScene( pos );
   197   int cursorSensitivity = 7;
   200        std::fabs( itemPos.x() ) < cursorSensitivity && std::fabs( itemPos.y() ) < cursorSensitivity ) 
   205   const double mmToPixelScale = 
mMapCanvas->logicalDpiX() / 25.4;
   208   QSizeF frameSize = mAnnotation ? mAnnotation->
frameSizeMm() * mmToPixelScale : QSizeF( 0, 0 );
   210   bool left, right, up, down;
   211   left = std::fabs( itemPos.x() - offset.x() ) < cursorSensitivity;
   212   right = std::fabs( itemPos.x() - ( offset.x() + frameSize.width() ) ) < cursorSensitivity;
   213   up = std::fabs( itemPos.y() - offset.y() ) < cursorSensitivity;
   214   down = std::fabs( itemPos.y() - ( offset.y() + frameSize.height() ) ) < cursorSensitivity;
   220   else if ( right && up )
   224   else if ( left && down )
   228   else if ( right && down )
   250   if ( itemPos.x() >= offset.x() && itemPos.x() <= ( offset.x() + frameSize.width() )
   251        && itemPos.y() >= offset.y() && itemPos.y() <= ( offset.y() + frameSize.height() ) )
   260   switch ( moveAction )
   263       return Qt::ArrowCursor;
   266       return Qt::SizeAllCursor;
   269       return Qt::SizeVerCursor;
   272       return Qt::SizeHorCursor;
   275       return Qt::SizeFDiagCursor;
   278       return Qt::SizeBDiagCursor;
   280       return Qt::ArrowCursor;
   284 double QgsMapCanvasAnnotationItem::scaledSymbolSize()
 const   296   double dpmm = 
mMapCanvas->logicalDpiX() / 25.4;
   302   if ( !mAnnotation || !mAnnotation->
isVisible() )
   309     mAnnotation->
render( rc );
   313     drawSelectionBoxes( painter );
 void paint(QPainter *painter) override
function to be implemented by derived classes 
 
Wrapper for iterator of features from vector data provider or vector layer. 
 
A rectangle specified with double values. 
 
Moving annotation map position. 
 
bool isVisible() const
Returns true if the annotation is visible and should be rendered. 
 
void appearanceChanged()
Emitted whenever the annotation's appearance changes. 
 
Use exact geometry intersection (slower) instead of bounding boxes. 
 
Use antialiasing while drawing. 
 
void mapLayerChanged()
Emitted when the map layer associated with the annotation changes. 
 
bool annotationsVisible() const
Returns true if annotations are visible within the map canvas. 
 
A class to represent a 2D point. 
 
An abstract class for items that can be placed on the map canvas. 
 
QList< QgsMapLayer * > layers() const
Gets list of layers for map rendering The layers are stored in the reverse order of how they are rend...
 
The feature class encapsulates a single feature including its id, geometry and a list of field/values...
 
QRectF boundingRect() const override
 
Moving position of frame relative to annotation. 
 
MouseMoveAction moveActionForPosition(QPointF pos) const
Returns the mouse move behavior for a given position in scene coordinates. 
 
Map canvas is a class for displaying all GIS data types on a canvas. 
 
QPointF relativePosition() const
Returns the relative position of the annotation, if it is not attached to a fixed map position...
 
QgsCoordinateReferenceSystem destinationCrs() const
returns CRS of destination coordinate reference system 
 
Abstract base class for annotation items which are drawn over a map. 
 
void updatePosition() override
called on changed extent or resize event to update position of the item 
 
QPointF frameOffsetFromReferencePointMm() const
Returns the annotation's frame's offset (in millimeters) from the mapPosition() reference point...
 
void render(QgsRenderContext &context) const
Renders the annotation to a target render context. 
 
static QgsRenderContext fromQPainter(QPainter *painter)
Creates a default render context given a pixel based QPainter destination. 
 
This class wraps a request for features to a vector layer (or directly its vector data provider)...
 
void destinationCrsChanged()
Emitted when map CRS has changed. 
 
static double estimateMaxSymbolBleed(QgsSymbol *symbol, const QgsRenderContext &context)
Returns the maximum estimated bleed for the symbol. 
 
QgsMarkerSymbol * markerSymbol() const
Returns the symbol that is drawn at the annotation's map position. 
 
QgsMapLayer * mapLayer() const
Returns the map layer associated with the annotation. 
 
void moved()
Emitted when the annotation's position has changed and items need to be moved to reflect this...
 
const QgsMapSettings & mapSettings() const
Gets access to properties used for map rendering. 
 
MouseMoveAction
Mouse actions for interacting with item. 
 
QgsCoordinateReferenceSystem mapPositionCrs() const
Returns the CRS of the map position, or an invalid CRS if the annotation does not have a fixed map po...
 
Contains information about the context of a rendering operation. 
 
QgsMapCanvasAnnotationItem(QgsAnnotation *annotation, QgsMapCanvas *mapCanvas)
Constructor for QgsMapCanvasAnnotationItem. 
 
Qt::CursorShape cursorShapeForAction(MouseMoveAction moveAction) const
Returns matching cursor shape for a mouse move action. 
 
double size() const
Returns the estimated size for the whole symbol, which is the maximum size of all marker symbol layer...
 
QgsMapCanvas * mMapCanvas
pointer to map canvas 
 
static QgsProject * instance()
Returns the QgsProject singleton instance. 
 
QSizeF frameSizeMm() const
Returns the size (in millimeters) of the annotation's frame (the main area in which the annotation's ...
 
void setFlag(Flag flag, bool on=true)
Enable or disable a particular flag (other flags are not affected) 
 
QgsFeatureIterator getFeatures(const QgsFeatureRequest &request=QgsFeatureRequest()) const FINAL
Queries the layer for features specified in request. 
 
Custom exception class for Coordinate Reference System related exceptions. 
 
bool nextFeature(QgsFeature &f)
 
QPointF toCanvasCoordinates(const QgsPointXY &point) const
transformation from map coordinates to screen coordinates 
 
QgsPointXY mapToLayerCoordinates(const QgsMapLayer *layer, QgsPointXY point) const
transform point coordinates from output CRS to layer's CRS 
 
Represents a vector layer which manages a vector based data sets. 
 
virtual void setAssociatedFeature(const QgsFeature &feature)
Sets the feature associated with the annotation. 
 
QgsFillSymbol * fillSymbol() const
Returns the symbol that is used for rendering the annotation frame. 
 
void layersChanged()
Emitted when a new set of layers has been received.