From 4fe424a18505c253a7eb99806def26d93669fd67 2012-06-01 13:24:35 From: Tero Ahola Date: 2012-06-01 13:24:35 Subject: [PATCH] Fixed isVisible implementation in XY series --- diff --git a/src/areachart/areachartitem.cpp b/src/areachart/areachartitem.cpp index 282437f..3e086bb 100644 --- a/src/areachart/areachartitem.cpp +++ b/src/areachart/areachartitem.cpp @@ -90,6 +90,7 @@ void AreaChartItem::updatePath() void AreaChartItem::handleUpdated() { + setVisible(m_series->isVisible()); m_pointsVisible = m_series->pointsVisible(); m_linePen = m_series->pen(); m_brush = m_series->brush(); @@ -120,20 +121,18 @@ void AreaChartItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *opt Q_UNUSED(widget) Q_UNUSED(option) - if (m_series->isVisible()) { - painter->save(); - painter->setPen(m_linePen); - painter->setBrush(m_brush); - painter->setClipRect(m_clipRect); - painter->drawPath(m_path); - if (m_pointsVisible) { - painter->setPen(m_pointPen); - painter->drawPoints(m_upper->geometryPoints()); - if (m_lower) - painter->drawPoints(m_lower->geometryPoints()); - } - painter->restore(); + painter->save(); + painter->setPen(m_linePen); + painter->setBrush(m_brush); + painter->setClipRect(m_clipRect); + painter->drawPath(m_path); + if (m_pointsVisible) { + painter->setPen(m_pointPen); + painter->drawPoints(m_upper->geometryPoints()); + if (m_lower) + painter->drawPoints(m_lower->geometryPoints()); } + painter->restore(); } void AreaChartItem::mousePressEvent(QGraphicsSceneMouseEvent *event) diff --git a/src/linechart/linechartitem.cpp b/src/linechart/linechartitem.cpp index 677cd25..fe9015d 100644 --- a/src/linechart/linechartitem.cpp +++ b/src/linechart/linechartitem.cpp @@ -30,10 +30,11 @@ QTCOMMERCIALCHART_BEGIN_NAMESPACE //TODO: optimize : remove points which are not visible -LineChartItem::LineChartItem(QLineSeries* series,ChartPresenter *presenter):XYChart(series,presenter), -QGraphicsItem(presenter ? presenter->rootItem() : 0), -m_series(series), -m_pointsVisible(false) +LineChartItem::LineChartItem(QLineSeries* series,ChartPresenter *presenter): + XYChart(series, presenter), + QGraphicsItem(presenter ? presenter->rootItem() : 0), + m_series(series), + m_pointsVisible(false) { setZValue(ChartPresenter::LineChartZValue); QObject::connect(series->d_func(),SIGNAL(updated()),this,SLOT(handleUpdated())); @@ -77,6 +78,7 @@ void LineChartItem::updateGeometry() void LineChartItem::handleUpdated() { + setVisible(m_series->isVisible()); m_pointsVisible = m_series->pointsVisible(); m_linePen = m_series->pen(); m_pointPen = m_series->pen(); @@ -91,17 +93,15 @@ void LineChartItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *opt Q_UNUSED(widget) Q_UNUSED(option) - if (m_series->isVisible()) { - painter->save(); - painter->setPen(m_linePen); - painter->setClipRect(clipRect()); - painter->drawPath(m_path); - if(m_pointsVisible){ - painter->setPen(m_pointPen); - painter->drawPoints(geometryPoints()); - } - painter->restore(); + painter->save(); + painter->setPen(m_linePen); + painter->setClipRect(clipRect()); + painter->drawPath(m_path); + if (m_pointsVisible){ + painter->setPen(m_pointPen); + painter->drawPoints(geometryPoints()); } + painter->restore(); } void LineChartItem::mousePressEvent(QGraphicsSceneMouseEvent *event) diff --git a/src/scatterchart/scatterchartitem.cpp b/src/scatterchart/scatterchartitem.cpp index 6dd6e96..40e2d80 100644 --- a/src/scatterchart/scatterchartitem.cpp +++ b/src/scatterchart/scatterchartitem.cpp @@ -34,6 +34,7 @@ ScatterChartItem::ScatterChartItem(QScatterSeries *series, ChartPresenter *prese QGraphicsItem(presenter ? presenter->rootItem() : 0), m_series(series), m_items(this), + m_visible(true), m_shape(QScatterSeries::MarkerShapeRectangle), m_size(15) { @@ -132,7 +133,7 @@ void ScatterChartItem::updateGeometry() const QRectF& rect = item->boundingRect(); item->setPoint(point); item->setPos(point.x()-rect.width()/2,point.y()-rect.height()/2); - if(!clipRect().contains(point)) { + if(!m_visible || !clipRect().contains(point)) { item->setVisible(false); } else { @@ -172,8 +173,11 @@ void ScatterChartItem::handleUpdated() if(count==0) return; - bool recreate = m_size != m_series->markerSize() || m_shape != m_series->markerShape(); + bool recreate = m_visible != m_series->isVisible() + || m_size != m_series->markerSize() + || m_shape != m_series->markerShape(); + m_visible = m_series->isVisible(); m_size = m_series->markerSize(); m_shape = m_series->markerShape(); diff --git a/src/scatterchart/scatterchartitem_p.h b/src/scatterchart/scatterchartitem_p.h index be6af2c..8ffa82d 100644 --- a/src/scatterchart/scatterchartitem_p.h +++ b/src/scatterchart/scatterchartitem_p.h @@ -62,6 +62,7 @@ protected: private: QScatterSeries *m_series; QGraphicsItemGroup m_items; + bool m_visible; int m_shape; int m_size; QRectF m_rect; diff --git a/src/splinechart/splinechartitem.cpp b/src/splinechart/splinechartitem.cpp index 5c95737..458c136 100644 --- a/src/splinechart/splinechartitem.cpp +++ b/src/splinechart/splinechartitem.cpp @@ -135,6 +135,7 @@ void SplineChartItem::updateGeometry() void SplineChartItem::handleUpdated() { + setVisible(m_series->isVisible()); m_pointsVisible = m_series->pointsVisible(); m_linePen = m_series->pen(); m_pointPen = m_series->pen(); @@ -148,17 +149,16 @@ void SplineChartItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *o { Q_UNUSED(widget) Q_UNUSED(option) - if (m_series->isVisible()) { - painter->save(); - painter->setClipRect(clipRect()); - painter->setPen(m_linePen); - painter->drawPath(m_path); - if (m_pointsVisible) { - painter->setPen(m_pointPen); - painter->drawPoints(geometryPoints()); - } - painter->restore(); + + painter->save(); + painter->setClipRect(clipRect()); + painter->setPen(m_linePen); + painter->drawPath(m_path); + if (m_pointsVisible) { + painter->setPen(m_pointPen); + painter->drawPoints(geometryPoints()); } + painter->restore(); } void SplineChartItem::mousePressEvent(QGraphicsSceneMouseEvent *event)