1 /***************************************************************************
2 **                                                                        **
3 **  Polyphone, a soundfont editor                                         **
4 **  Copyright (C) 2013-2020 Davy Triponney                                **
5 **                                                                        **
6 **  This program is free software: you can redistribute it and/or modify  **
7 **  it under the terms of the GNU General Public License as published by  **
8 **  the Free Software Foundation, either version 3 of the License, or     **
9 **  (at your option) any later version.                                   **
10 **                                                                        **
11 **  This program is distributed in the hope that it will be useful,       **
12 **  but WITHOUT ANY WARRANTY; without even the implied warranty of        **
13 **  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the          **
14 **  GNU General Public License for more details.                          **
15 **                                                                        **
16 **  You should have received a copy of the GNU General Public License     **
17 **  along with this program. If not, see http://www.gnu.org/licenses/.    **
18 **                                                                        **
19 ****************************************************************************
20 **           Author: Davy Triponney                                       **
21 **  Website/Contact: https://www.polyphone-soundfonts.com                 **
22 **             Date: 01.01.2013                                           **
23 ***************************************************************************/
24 
25 #ifndef GRAPHICSSIMPLETEXTITEM_H
26 #define GRAPHICSSIMPLETEXTITEM_H
27 
28 #include <QGraphicsSimpleTextItem>
29 
30 // QGraphicsSimpleTextItem with alignment and ignoring transformations
31 class GraphicsSimpleTextItem : public QGraphicsSimpleTextItem
32 {
33 public:
QGraphicsSimpleTextItem(parent)34     GraphicsSimpleTextItem(int alignment, QGraphicsItem* parent = 0) : QGraphicsSimpleTextItem(parent),
35         _alignment(alignment)
36     {
37         this->setFlag(QGraphicsItem::ItemIgnoresTransformations);
38     }
39 
boundingRect()40     QRectF boundingRect() const
41     {
42         QRectF br = QGraphicsSimpleTextItem::boundingRect();
43         return br.translated(dx(br), dy(br));
44     }
45 
46     void paint(QPainter *painter, const QStyleOptionGraphicsItem * option, QWidget * widget = 0)
47     {
48         painter->translate(dx(boundingRect()), dy(boundingRect()));
49         QGraphicsSimpleTextItem::paint(painter, option, widget);
50     }
51 
52 private:
dx(QRectF br)53     qreal dx(QRectF br) const
54     {
55         double width = br.width();
56         if (_alignment & Qt::AlignHCenter)
57             return -width / 2;
58         else if (_alignment & Qt::AlignRight)
59             return -width;
60         return 0;
61     }
62 
dy(QRectF br)63     qreal dy(QRectF br) const
64     {
65         double height = br.height() - 3;
66         if (_alignment & Qt::AlignVCenter)
67             return -height / 2;
68         else if (_alignment & Qt::AlignBottom)
69             return -height;
70         return 0;
71     }
72 
73     int _alignment;
74 };
75 
76 #endif // GRAPHICSSIMPLETEXTITEM_H
77