Fix bug with simple curve. It should be hovered only if mouse pointer above a

path.

--HG--
branch : develop
This commit is contained in:
Roman Telezhynskyi 2017-07-27 17:15:53 +03:00
parent d0e2facf94
commit 185636a550
3 changed files with 26 additions and 3 deletions

View file

@ -35,14 +35,28 @@
//---------------------------------------------------------------------------------------------------------------------
VCurvePathItem::VCurvePathItem(QGraphicsItem *parent)
: QGraphicsPathItem(parent),
m_directionArrows()
m_directionArrows(),
m_points()
{
}
//---------------------------------------------------------------------------------------------------------------------
QPainterPath VCurvePathItem::shape() const
{
QPainterPath itemPath = path();
QPainterPath itemPath;
if (not m_points.isEmpty())
{
for (qint32 i = 0; i < m_points.count()-1; ++i)
{
itemPath.moveTo(m_points.at(i));
itemPath.lineTo(m_points.at(i+1));
}
}
else
{
itemPath = path();
}
const QPainterPath arrowsPath = VAbstractCurve::ShowDirection(m_directionArrows,
ScaleWidth(VAbstractCurve::lengthCurveDirectionArrow,
@ -50,8 +64,8 @@ QPainterPath VCurvePathItem::shape() const
if (arrowsPath != QPainterPath())
{
itemPath.addPath(arrowsPath);
itemPath.setFillRule(Qt::WindingFill);
}
itemPath.setFillRule(Qt::WindingFill);
// We unfortunately need this hack as QPainterPathStroker will set a width of 1.0
// if we pass a value of 0.0 to QPainterPathStroker::setWidth()
@ -111,6 +125,12 @@ void VCurvePathItem::SetDirectionArrows(const QVector<QPair<QLineF, QLineF> > &a
m_directionArrows = arrows;
}
//---------------------------------------------------------------------------------------------------------------------
void VCurvePathItem::SetPoints(const QVector<QPointF> &points)
{
m_points = points;
}
//---------------------------------------------------------------------------------------------------------------------
void VCurvePathItem::ScalePenWidth()
{

View file

@ -49,12 +49,14 @@ public:
enum { Type = UserType + static_cast<int>(Vis::CurvePathItem)};
void SetDirectionArrows(const QVector<QPair<QLineF, QLineF>> &arrows);
void SetPoints(const QVector<QPointF> &points);
protected:
virtual void ScalePenWidth();
private:
Q_DISABLE_COPY(VCurvePathItem)
QVector<QPair<QLineF, QLineF>> m_directionArrows;
QVector<QPointF> m_points;
};
#endif // VCURVEPATHITEM_H

View file

@ -66,6 +66,7 @@ void VSimpleCurve::RefreshGeometry(const QSharedPointer<VAbstractCurve> &curve)
{
m_isHovered ? SetDirectionArrows(m_curve->DirectionArrows()) : SetDirectionArrows(QVector<DirectionArrow>());
setPath(m_curve->GetPath());
SetPoints(m_curve->GetPoints());
}
else
{