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 
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
Definition: biblioteq_graphicsitempixmap.h:59