mirror of
https://github.com/GoldenCheetah/GoldenCheetah.git
synced 2026-02-13 08:08:42 +00:00
58 lines
1.4 KiB
C++
58 lines
1.4 KiB
C++
#include <qpainter.h>
|
|
#include <qwt_scale_map.h>
|
|
#include <qwt_plot_curve.h>
|
|
#include "cpuplot.h"
|
|
#include "cpupiemarker.h"
|
|
|
|
CpuPieMarker::CpuPieMarker()
|
|
{
|
|
setZ(1000);
|
|
#if QT_VERSION >= 0x040000
|
|
setRenderHint(QwtPlotItem::RenderAntialiased, true);
|
|
#endif
|
|
}
|
|
|
|
int CpuPieMarker::rtti() const
|
|
{
|
|
return QwtPlotItem::Rtti_PlotUserItem;
|
|
}
|
|
|
|
void CpuPieMarker::draw(QPainter *p,
|
|
const QwtScaleMap &, const QwtScaleMap &,
|
|
const QRect &rect) const
|
|
{
|
|
const CpuPlot *cpuPlot = (CpuPlot *)plot();
|
|
|
|
const QwtScaleMap yMap = cpuPlot->canvasMap(QwtPlot::yLeft);
|
|
|
|
const int margin = 5;
|
|
|
|
QRect pieRect;
|
|
pieRect.setX(rect.x() + margin);
|
|
pieRect.setY(rect.y() + margin);
|
|
pieRect.setHeight(yMap.transform(80.0));
|
|
pieRect.setWidth(pieRect.height());
|
|
|
|
const int dataType[] = { CpuPlot::User, CpuPlot::System, CpuPlot::Idle };
|
|
|
|
int angle = (int)(5760 * 0.75);
|
|
for ( unsigned int i = 0;
|
|
i < sizeof(dataType) / sizeof(dataType[0]); i++ )
|
|
{
|
|
const QwtPlotCurve *curve = cpuPlot->cpuCurve(dataType[i]);
|
|
if ( curve->dataSize() > 0 )
|
|
{
|
|
const int value = (int)(5760 * curve->y(0) / 100.0);
|
|
|
|
p->save();
|
|
p->setBrush(QBrush(curve->pen().color(), Qt::SolidPattern));
|
|
if ( value != 0 )
|
|
p->drawPie(pieRect, -angle, -value);
|
|
p->restore();
|
|
|
|
angle += value;
|
|
}
|
|
}
|
|
}
|
|
|