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