BiblioteQ

biblioteq_graphicsitempixmap.h
1 /*
2 ** Copyright (c) 2006 - present, Alexis Megas.
3 ** All rights reserved.
4 **
5 ** Redistribution and use in source and binary forms, with or without
6 ** modification, are permitted provided that the following conditions
7 ** are met:
8 ** 1. Redistributions of source code must retain the above copyright
9 ** notice, this list of conditions and the following disclaimer.
10 ** 2. Redistributions in binary form must reproduce the above copyright
11 ** notice, this list of conditions and the following disclaimer in the
12 ** documentation and/or other materials provided with the distribution.
13 ** 3. The name of the author may not be used to endorse or promote products
14 ** derived from BiblioteQ without specific prior written permission.
15 **
16 ** BIBLIOTEQ IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
17 ** IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
18 ** OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
19 ** IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
20 ** INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
21 ** NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
22 ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
23 ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
25 ** BIBLIOTEQ, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27
28 #ifndef _BIBLIOTEQ_GRAPHICSITEMPIXMAP_H_
29 #define _BIBLIOTEQ_GRAPHICSITEMPIXMAP_H_
30
31 static void qt_graphicsItem_highlightSelected
32 (QGraphicsItem *item,
33 QPainter *painter,
34 const QStyleOptionGraphicsItem *option)
35 {
36 if(!item || !option || !painter)
37 return;
38
39 const auto &murect = painter->transform().mapRect(QRectF(0, 0, 1, 1));
40
41 if(qFuzzyIsNull(qMax(murect.width(), murect.height())))
42 return;
43
44 const auto &mbrect = painter->transform().mapRect(item->boundingRect());
45
46 if(qMin(mbrect.width(), mbrect.height()) < qreal(1.0))
47 return;
48
49 const QColor bgcolor(70, 130, 180);
50 const qreal pad = 0.0;
51 const qreal penWidth = 2.5;
52
53 painter->setBrush(Qt::NoBrush);
54 painter->setPen(QPen(bgcolor, penWidth, Qt::SolidLine));
55 painter->drawRect(item->boundingRect().adjusted(pad, pad, -pad, -pad));
56 }
57
58 class biblioteq_graphicsitempixmap: public QGraphicsPixmapItem
59 {
60 public:
61 biblioteq_graphicsitempixmap(const QPixmap &pixmap, QGraphicsItem *parent):
62 QGraphicsPixmapItem(pixmap, parent)
63 {
64 }
65
66 ~biblioteq_graphicsitempixmap()
67 {
68 }
69
70 void paint(QPainter *painter,
71 const QStyleOptionGraphicsItem *option,
72 QWidget *widget = nullptr)
73 {
74 Q_UNUSED(widget);
75
76 if(!option || !painter)
77 return;
78
79 painter->setRenderHint(QPainter::SmoothPixmapTransform, true);
80
81 auto exposed_rect(option->exposedRect.adjusted(-1, -1, 1, 1));
82
83 exposed_rect &= QRectF(offset().x(),
84 offset().y(),
85 pixmap().width(),
86 pixmap().height());
87 painter->drawPixmap
88 (exposed_rect, pixmap(), exposed_rect.translated(-offset()));
89
90 if(option->state & (QStyle::State_Selected | QStyle::State_HasFocus))
91 qt_graphicsItem_highlightSelected(this, painter, option);
92 }
93 };
94
95 #endif
biblioteq_graphicsitempixmap
Definition: biblioteq_graphicsitempixmap.h:59