• Craig Watson's avatar
    Removed UBGraphicsPolygonItem::shape() · 7a4e9d2e
    Craig Watson authored
    Long version:
    
    UBGraphicsPolygonItem::shape() sometimes caused OpenBoard to crash due to
    inifinite recursion. This is easily replicated by trying to use the
    highlighting tool.
    
    The reason is: shape() calls boundingRect(); this function's definition is:
    
         QRectF QGraphicsPolygonItem::boundingRect() const
         {
              Q_D(const QGraphicsPolygonItem);
              if (d->boundingRect.isNull()) {
                  qreal pw = pen().style() == Qt::NoPen ? qreal(0) : pen().widthF();
                  if (pw == 0.0)
                      d->boundingRect = d->polygon.boundingRect();
                  else
                      d->boundingRect = shape().controlPointRect();
              }
              return d->boundingRect;
          }
    
    In the case where pw != 0, the shape() function is called. However, it
    is shape() from the derived class, not the base class, which is called.
    In other words, UBGraphicsPolygonItem::shape() is called rather than
    QGraphicsPolygonItem::shape().
    
    This means that boundingRect() is called again from within shape(), and
    so on, causing the program to crash.
    
    The fix was simply to remove UBGraphicsPolygonItem::shape(), as it
    appears to provide the same (or very similar) functionality to that of
    the base class's shape() function.
    
    In case this shape() function actually is needed, another workaround
    should be implemented to prevent this infinite recursion.
    7a4e9d2e
UBGraphicsPolygonItem.h 4.36 KB