pieslicelabel.cpp
64 lines
| 1.6 KiB
| text/x-c
|
CppLexer
Jani Honkonen
|
r174 | #include "pieslicelabel.h" | ||
#include <QPainter> | ||||
#include <qmath.h> | ||||
Jani Honkonen
|
r181 | #include <QGraphicsTextItem> | ||
Jani Honkonen
|
r174 | |||
QTCOMMERCIALCHART_BEGIN_NAMESPACE | ||||
#define PI 3.14159265 | ||||
PieSliceLabel::PieSliceLabel(QGraphicsItem* parent) | ||||
:QGraphicsItem(parent) | ||||
{ | ||||
Jani Honkonen
|
r181 | // set defaults | ||
Jani Honkonen
|
r174 | m_pen = QPen(Qt::black); | ||
} | ||||
void PieSliceLabel::paint(QPainter *painter, const QStyleOptionGraphicsItem* /*option*/, QWidget* /*widget*/) | ||||
{ | ||||
painter->setRenderHint(QPainter::Antialiasing); | ||||
Jani Honkonen
|
r181 | |||
Jani Honkonen
|
r174 | painter->setPen(m_pen); | ||
Jani Honkonen
|
r181 | painter->drawPath(m_armPath); | ||
// TODO: do we need a pen for text? | ||||
painter->setFont(m_font); | ||||
painter->drawText(m_textRect, m_text); | ||||
Jani Honkonen
|
r174 | } | ||
Jani Honkonen
|
r181 | void PieSliceLabel::updateGeometry() | ||
Jani Honkonen
|
r174 | { | ||
prepareGeometryChange(); | ||||
Jani Honkonen
|
r181 | // calculate text size | ||
QFontMetricsF fm(m_font); | ||||
QRectF textRect = fm.boundingRect(m_text); | ||||
Jani Honkonen
|
r174 | |||
Jani Honkonen
|
r181 | // calculate path for arm and text start point | ||
qreal dx = qSin(m_armAngle*(PI/180)) * m_armLength; | ||||
qreal dy = -qCos(m_armAngle*(PI/180)) * m_armLength; | ||||
QPointF parm1 = m_armStartPoint + QPointF(dx, dy); | ||||
Jani Honkonen
|
r174 | |||
Jani Honkonen
|
r181 | // calculate horizontal arm and text position | ||
QPointF parm2 = parm1; | ||||
textRect.moveBottomLeft(parm1); | ||||
if (m_armAngle < 180) { // arm swings the other way on the left side | ||||
parm2 += QPointF(m_textRect.width(), 0); | ||||
Jani Honkonen
|
r174 | } else { | ||
Jani Honkonen
|
r181 | parm2 += QPointF(-m_textRect.width(),0); | ||
textRect.moveBottomLeft(parm2); | ||||
Jani Honkonen
|
r174 | } | ||
Jani Honkonen
|
r181 | // update arm path | ||
QPainterPath path; | ||||
path.moveTo(m_armStartPoint); | ||||
path.lineTo(parm1); | ||||
path.lineTo(parm2); | ||||
// update paths & rects | ||||
m_armPath = path; | ||||
m_textRect = textRect; | ||||
m_rect = path.boundingRect().united(m_textRect); | ||||
Jani Honkonen
|
r174 | } | ||
QTCOMMERCIALCHART_END_NAMESPACE | ||||