diff options
Diffstat (limited to 'demos/callout/callout.cpp')
-rw-r--r-- | demos/callout/callout.cpp | 119 |
1 files changed, 0 insertions, 119 deletions
diff --git a/demos/callout/callout.cpp b/demos/callout/callout.cpp deleted file mode 100644 index 2491368f..00000000 --- a/demos/callout/callout.cpp +++ /dev/null @@ -1,119 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2014 Digia Plc -** All rights reserved. -** For any questions to Digia, please use contact form at http://qt.digia.com -** -** This file is part of the Qt Enterprise Charts Add-on. -** -** $QT_BEGIN_LICENSE$ -** Licensees holding valid Qt Enterprise licenses may use this file in -** accordance with the Qt Enterprise License Agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and Digia. -** -** If you have questions regarding the use of this file, please use -** contact form at http://qt.digia.com -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "callout.h" -#include <QPainter> -#include <QFontMetrics> -#include <QGraphicsSceneMouseEvent> -#include <QMouseEvent> - -Callout::Callout(QGraphicsItem * parent): - QGraphicsItem(parent) -{ -} - -QRectF Callout::boundingRect() const -{ - QPointF anchor = mapFromParent(m_anchor); - QRectF rect; - rect.setLeft(qMin(m_rect.left(), anchor.x())); - rect.setRight(qMax(m_rect.right(), anchor.x())); - rect.setTop(qMin(m_rect.top(), anchor.y())); - rect.setBottom(qMax(m_rect.bottom(), anchor.y())); - return rect; -} - -void Callout::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) -{ - Q_UNUSED(option) - Q_UNUSED(widget) - QPainterPath path; - path.addRoundedRect(m_rect, 5, 5); - - QPointF anchor = mapFromParent(m_anchor); - if (!m_rect.contains(anchor)) { - QPointF point1, point2; - - // establish the position of the anchor point in relation to m_rect - bool above = anchor.y() <= m_rect.top(); - bool aboveCenter = anchor.y() > m_rect.top() && anchor.y() <= m_rect.center().y(); - bool belowCenter = anchor.y() > m_rect.center().y() && anchor.y() <= m_rect.bottom(); - bool below = anchor.y() > m_rect.bottom(); - - bool onLeft = anchor.x() <= m_rect.left(); - bool leftOfCenter = anchor.x() > m_rect.left() && anchor.x() <= m_rect.center().x(); - bool rightOfCenter = anchor.x() > m_rect.center().x() && anchor.x() <= m_rect.right(); - bool onRight = anchor.x() > m_rect.right(); - - // get the nearest m_rect corner. - qreal x = (onRight + rightOfCenter) * m_rect.width(); - qreal y = (below + belowCenter) * m_rect.height(); - bool cornerCase = (above && onLeft) || (above && onRight) || (below && onLeft) || (below && onRight); - bool vertical = qAbs(anchor.x() - x) > qAbs(anchor.y() - y); - - qreal x1 = x + leftOfCenter * 10 - rightOfCenter * 20 + cornerCase * !vertical * (onLeft * 10 - onRight * 20); - qreal y1 = y + aboveCenter * 10 - belowCenter * 20 + cornerCase * vertical * (above * 10 - below * 20);; - point1.setX(x1); - point1.setY(y1); - - qreal x2 = x + leftOfCenter * 20 - rightOfCenter * 10 + cornerCase * !vertical * (onLeft * 20 - onRight * 10);; - qreal y2 = y + aboveCenter * 20 - belowCenter * 10 + cornerCase * vertical * (above * 20 - below * 10);; - point2.setX(x2); - point2.setY(y2); - - path.moveTo(point1); - path.lineTo(mapFromParent(m_anchor)); - path.lineTo(point2); - path = path.simplified(); - } - painter->setBrush(QColor(255, 255, 255)); - painter->drawPath(path); - painter->drawText(m_textRect, m_text); -} - -void Callout::mousePressEvent(QGraphicsSceneMouseEvent *event) -{ - event->setAccepted(true); -} - -void Callout::mouseMoveEvent(QGraphicsSceneMouseEvent *event) -{ - if (event->buttons() & Qt::LeftButton){ - setPos(mapToParent(event->pos() - event->buttonDownPos(Qt::LeftButton))); - event->setAccepted(true); - } else { - event->setAccepted(false); - } -} - -void Callout::setText(const QString &text) -{ - m_text = text; - QFontMetrics metrics(m_font); - m_textRect = metrics.boundingRect(QRect(0, 0, 150, 150), Qt::AlignLeft, m_text); - m_textRect.translate(5, 5); - prepareGeometryChange(); - m_rect = m_textRect.adjusted(-5, -5, 5, 5); -} - -void Callout::setAnchor(QPointF point) -{ - m_anchor = point; -} |