18 #include <QStyleOption>    30     mParentEventFilter = 
new QgsFloatingWidgetEventFilter( parent );
    31     parent->installEventFilter( mParentEventFilter );
    32     connect( mParentEventFilter, &QgsFloatingWidgetEventFilter::anchorPointChanged, 
this, &QgsFloatingWidget::onAnchorPointChanged );
    38   if ( widget == mAnchorWidget )
    44     mAnchorWidget->removeEventFilter( mAnchorEventFilter );
    45     delete mAnchorEventFilter;
    46     mAnchorEventFilter = 
nullptr;
    49   mAnchorWidget = widget;
    52     mAnchorEventFilter = 
new QgsFloatingWidgetEventFilter( mAnchorWidget );
    53     mAnchorWidget->installEventFilter( mAnchorEventFilter );
    54     connect( mAnchorEventFilter, &QgsFloatingWidgetEventFilter::anchorPointChanged, 
this, &QgsFloatingWidget::onAnchorPointChanged );
    57   onAnchorPointChanged();
    68   if ( point == mFloatAnchorPoint )
    71   mFloatAnchorPoint = point;
    72   onAnchorPointChanged();
    78   if ( point == mAnchorWidgetAnchorPoint )
    81   mAnchorWidgetAnchorPoint = point;
    82   onAnchorPointChanged();
    88   QWidget::showEvent( e );
    89   onAnchorPointChanged();
    98   style()->drawPrimitive( QStyle::PE_Widget, &opt, &p, 
this );
   103   QWidget::resizeEvent( e );
   104   onAnchorPointChanged();
   107 void QgsFloatingWidget::onAnchorPointChanged()
   109   if ( !parentWidget() )
   114     QPoint anchorWidgetOrigin;
   116     switch ( mAnchorWidgetAnchorPoint )
   119         anchorWidgetOrigin = QPoint( 0, 0 );
   122         anchorWidgetOrigin = QPoint( mAnchorWidget->width() / 2, 0 );
   125         anchorWidgetOrigin = QPoint( mAnchorWidget->width(), 0 );
   128         anchorWidgetOrigin = QPoint( 0, mAnchorWidget->height() / 2 );
   131         anchorWidgetOrigin = QPoint( mAnchorWidget->width() / 2, mAnchorWidget->height() / 2 );
   134         anchorWidgetOrigin = QPoint( mAnchorWidget->width(), mAnchorWidget->height() / 2 );
   137         anchorWidgetOrigin = QPoint( 0, mAnchorWidget->height() );
   140         anchorWidgetOrigin = QPoint( mAnchorWidget->width() / 2, mAnchorWidget->height() );
   143         anchorWidgetOrigin = QPoint( mAnchorWidget->width(), mAnchorWidget->height() );
   147     anchorWidgetOrigin = mAnchorWidget->mapTo( parentWidget(), anchorWidgetOrigin );
   148     int anchorX = anchorWidgetOrigin.x();
   149     int anchorY = anchorWidgetOrigin.y();
   151     switch ( mFloatAnchorPoint )
   156         anchorX = anchorX - width() / 2;
   159         anchorX = anchorX - width();
   162         anchorY = anchorY - height() / 2;
   165         anchorY = anchorY - height() / 2;
   166         anchorX = anchorX - width() / 2;
   169         anchorX = anchorX - width();
   170         anchorY = anchorY - height() / 2;
   173         anchorY = anchorY - height();
   176         anchorX = anchorX - width() / 2;
   177         anchorY = anchorY - height();
   180         anchorX = anchorX - width();
   181         anchorY = anchorY - height();
   186     anchorX = qBound( 0, anchorX, parentWidget()->width() - width() );
   188     move( anchorX, anchorY );
   197 QgsFloatingWidgetEventFilter::QgsFloatingWidgetEventFilter( QWidget *parent )
   203 bool QgsFloatingWidgetEventFilter::eventFilter( QObject *
object, QEvent *event )
   206   switch ( event->type() )