##// END OF EJS Templates
Use light outline color instead of dark for bar, area and scatter
Use light outline color instead of dark for bar, area and scatter

File last commit:

r611:e622b3a8d8a0
r653:f4e416c6727f
Show More
areachartitem.cpp
121 lines | 2.9 KiB | text/x-c | CppLexer
#include "areachartitem_p.h"
#include "qareaseries.h"
#include "qlineseries.h"
#include "chartpresenter_p.h"
#include <QPainter>
#include <QGraphicsSceneMouseEvent>
QTCOMMERCIALCHART_BEGIN_NAMESPACE
//TODO: optimize : remove points which are not visible
AreaChartItem::AreaChartItem(QAreaSeries* areaSeries,QGraphicsItem *parent):ChartItem(parent),
m_series(areaSeries),
m_upper(0),
m_lower(0),
m_pointsVisible(false)
{
setZValue(ChartPresenter::LineChartZValue);
m_upper = new AreaBoundItem(this,m_series->upperSeries());
if(m_series->lowerSeries()){
m_lower = new AreaBoundItem(this,m_series->lowerSeries());
}
QObject::connect(areaSeries,SIGNAL(updated()),this,SLOT(handleUpdated()));
QObject::connect(this,SIGNAL(clicked(const QPointF&)),areaSeries,SIGNAL(clicked(const QPointF&)));
handleUpdated();
}
AreaChartItem::~AreaChartItem()
{
delete m_upper;
delete m_lower;
};
QRectF AreaChartItem::boundingRect() const
{
return m_rect;
}
QPainterPath AreaChartItem::shape() const
{
return m_path;
}
void AreaChartItem::updatePath()
{
QPainterPath path;
path.connectPath(m_upper->shape());
if(m_lower){
path.connectPath(m_lower->shape().toReversed());
}
else{
QPointF first = path.pointAtPercent(0);
QPointF last = path.pointAtPercent(1);
path.lineTo(last.x(),m_clipRect.bottom());
path.lineTo(first.x(),m_clipRect.bottom());
}
path.closeSubpath();
prepareGeometryChange();
m_path=path;
m_rect=path.boundingRect();
update();
}
void AreaChartItem::handleUpdated()
{
m_pointsVisible = m_series->pointsVisible();
m_linePen = m_series->pen();
m_brush = m_series->brush();
m_pointPen = m_series->pen();
m_pointPen.setWidthF(2*m_pointPen.width());
update();
}
void AreaChartItem::handleDomainChanged(qreal minX, qreal maxX, qreal minY, qreal maxY)
{
m_upper->handleDomainChanged(minX,maxX,minY,maxY);
if(m_lower)
m_lower->handleDomainChanged(minX,maxX,minY,maxY);
}
void AreaChartItem::handleGeometryChanged(const QRectF& rect)
{
m_clipRect=rect.translated(-rect.topLeft());
setPos(rect.topLeft());
m_upper->handleGeometryChanged(rect);
if(m_lower)
m_lower->handleGeometryChanged(rect);
}
//painter
void AreaChartItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
{
Q_UNUSED(widget)
Q_UNUSED(option)
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->points());
if(m_lower) painter->drawPoints(m_lower->points());
}
painter->restore();
}
void AreaChartItem::mousePressEvent( QGraphicsSceneMouseEvent * event )
{
emit clicked(m_upper->calculateDomainPoint(event->pos()));
}
#include "moc_areachartitem_p.cpp"
QTCOMMERCIALCHART_END_NAMESPACE